PostgreSQL
 sql >> Base de données >  >> RDS >> PostgreSQL

Importer des données Postgres dans RDS à l'aide de S3 et aws_s3

Le problème principal ici est que vous devez 1) ajouter un rôle IAM à l'instance RDS pour accéder au compartiment S3 et 2) ajouter un point de terminaison S3 au VPC où l'instance RDS s'exécute afin de permettre les communications.

Voici la procédure que j'ai suivie pour le faire fonctionner, en utilisant les commandes AWS cli dans un shell (prenez soin de bien valoriser les variables d'environnement impliquées), j'espère que cela pourra vous aider :

  1. Créez le rôle IAM :
$ 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. Créez la stratégie IAM qui sera associée au rôle IAM :
$ 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. Joignez la politique :
$ aws iam attach-role-policy \
    --policy-arn arn:aws:iam::$AWS_ACCOUNT_ID:policy/$POLICY_NAME \
    --role-name $ROLE_NAME
  1. Ajoutez le rôle à une instance spécifique - cette étape doit être répétée pour chaque nouvelle instance :
$ 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. Créez le point de terminaison de VPC pour le service S3 :
$ aws ec2 create-vpc-endpoint \
    --vpc-id $VPC_ID \
    --service-name com.amazonaws.$REGION.s3
    --route-table-ids $ROUTE_TABLE_ID

L'ID de table de routage lié au VPC où le point de terminaison est créé peut être récupéré via la commande

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