sql >> Databasteknik >  >> RDS >> PostgreSQL

Importera Postgres-data till RDS med S3 och aws_s3

Huvudproblemet här är att du måste 1) lägga till en IAM-roll till RDS-instansen för att komma åt S3-bucket och 2) lägga till en S3-slutpunkt till VPC:n där RDS-instansen körs för att tillåta kommunikation.

Det här är proceduren jag följde för att få det att fungera, med hjälp av AWS cli-kommandon i ett skal (ta hand om värdet ordentligt de involverade miljövariablerna), hoppas det kan hjälpa:

  1. Skapa IAM-rollen:
$ 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. Skapa IAM-policyn som kommer att kopplas till IAM-rollen:
$ 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. Bifoga policyn:
$ aws iam attach-role-policy \
    --policy-arn arn:aws:iam::$AWS_ACCOUNT_ID:policy/$POLICY_NAME \
    --role-name $ROLE_NAME
  1. Lägg till rollen i en specifik instans – det här steget måste upprepas för varje ny instans:
$ 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. Skapa VPC-slutpunkten för S3-tjänsten:
$ aws ec2 create-vpc-endpoint \
    --vpc-id $VPC_ID \
    --service-name com.amazonaws.$REGION.s3
    --route-table-ids $ROUTE_TABLE_ID

Rutttabells-id som är relaterat till VPC där slutpunkten skapas kan hämtas genom kommandot

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


  1. Användardefinierad variabel som alias MySQL v8.0 fungerar inte

  2. Att punga eller inte att punga?

  3. Hur sammanfogar man strängar av ett strängfält i en PostgreSQL "gruppa efter"-fråga?

  4. MariaDB JSON_ARRAY_INSERT() Förklarad