PostgreSQL
 sql >> Datenbank >  >> RDS >> PostgreSQL

Importieren Sie Postgres-Daten mit S3 und aws_s3 in RDS

Das Hauptproblem hierbei ist, dass Sie 1) der RDS-Instanz eine IAM-Rolle hinzufügen müssen, um auf den S3-Bucket zuzugreifen, und 2) der VPC, in der die RDS-Instanz ausgeführt wird, einen S3-Endpunkt hinzufügen müssen, um die Kommunikation zu ermöglichen.

Dies ist das Verfahren, das ich befolgt habe, damit es funktioniert, indem ich AWS-CLI-Befehle in einer Shell verwende (achten Sie auf den Wert der beteiligten Umgebungsvariablen richtig), ich hoffe, es kann helfen:

  1. Erstellen Sie die IAM-Rolle:
$ aws iam create-role \
    --role-name $ROLE_NAME \
    --assume-role-policy-document '{"Version": "2012-10-17", "Statement": [{"Effect": "Allow", "Principal": {"Service": "rds.amazonaws.com"}, "Action": "sts:AssumeRole"}]}'
  1. Erstellen Sie die IAM-Richtlinie, die an die IAM-Rolle angehängt wird:
$ aws iam create-policy \
    --policy-name $POLICY_NAME \
    --policy-document '{"Version": "2012-10-17", "Statement": [{"Sid": "s3import", "Action": ["s3:GetObject", "s3:ListBucket"], "Effect": "Allow", "Resource": ["arn:aws:s3:::${BUCKET_NAME}", "arn:aws:s3:::${BUCKET_NAME}/*"]}]}'
  1. Richtlinie anhängen:
$ aws iam attach-role-policy \
    --policy-arn arn:aws:iam::$AWS_ACCOUNT_ID:policy/$POLICY_NAME \
    --role-name $ROLE_NAME
  1. Fügen Sie die Rolle zu einer bestimmten Instanz hinzu – dieser Schritt muss für jede neue Instanz wiederholt werden:
$ aws rds add-role-to-db-instance \
    --db-instance-identifier $RDS_INSTANCE_NAME \
    --feature-name s3Import \
    --role-arn arn:aws:iam::$AWS_ACCOUNT_ID:role/$ROLE_NAME \
    --region $REGION
  1. Erstellen Sie den VPC-Endpunkt für den S3-Dienst:
$ aws ec2 create-vpc-endpoint \
    --vpc-id $VPC_ID \
    --service-name com.amazonaws.$REGION.s3
    --route-table-ids $ROUTE_TABLE_ID

Die Routing-Tabellen-ID in Bezug auf die VPC, in der der Endpunkt erstellt wird, kann über den Befehl

abgerufen werden
$ aws ec2 describe-route-tables | jq -r '.RouteTables[] | "\(.VpcId) \(.RouteTableId)"'