Ongoing service disruptions
For the most recent update on ongoing service disruptions affecting the AWS Middle East (UAE) Region (ME-CENTRAL-1), refer to the AWS Health Dashboard. For information on AWS Service migration, see How do I migrate my services to another region?
Comment utiliser Amazon S3 Batch Operations pour copier des objets d’une taille supérieure à 5 Go ?
Je souhaite copier des objets Amazon Simple Storage Service (Amazon S3) d'une taille supérieure à 5 Go d'un compartiment à un autre.
Brève description
Pour copier des objets Amazon S3 de plus de 5 Go d'un compartiment à un autre, utilisez S3 Batch Operations avec une fonction AWS Lambda. Pour plus d'informations, consultez la section Copier des objets de plus de 5 Go avec Amazon S3 Batch Operations.
Remarque : Vous pouvez également utiliser l'API de chargement partitionné pour copier des objets Amazon S3 d'une taille supérieure à 5 Go. Pour plus d'informations, consultez la section Copie d'un objet à l'aide d'un chargement partitionné.
Résolution
Avant de commencer, assurez-vous d'avoir créé un compartiment S3 de destination vers lequel copier les objets.
Créer une fonction Lambda
Procédez comme suit :
-
Ouvrez la console Lambda.
-
Sélectionnez Create function (Créer une fonction).
-
Sélectionnez Créer à partir de zéro.
-
Pour Nom de la fonction, entrez un nom pour votre fonction, par exemple S3BatchCopy.
-
Sélectionnez la liste déroulante Exécution, puis choisissez Python 3.9.
-
Dans Architecture, choisissez x86_64, puis Créer une fonction.
-
Dans l'éditeur de code intégré, saisissez le code de votre fonction Lambda.
Exemple de code de fonction Lambda :import boto3 import os from urllib import parse from botocore.client import Config from boto3.s3.transfer import TransferConfig target_bucket = os.environ['destination_bucket'] new_prefix = os.environ['destination_bucket_prefix'] metadata_copy = os.environ['copy_metadata'] tagging_copy = os.environ['copy_tagging'] storage_class = os.environ['copy_storage_class'] # Added storage class s3Client = boto3.client('s3', config=Config(retries={'max_attempts': 3})) def lambda_handler(event, context): task = event['tasks'][0] s3Key = parse.unquote_plus(task['s3Key'], encoding='utf-8') s3VersionId = task['s3VersionId'] s3Bucket = task['s3BucketArn'].split(':')[-1] try: copy_source = {'Bucket': s3Bucket, 'Key': s3Key} if s3VersionId: copy_source['VersionId'] = s3VersionId newKey = f"{new_prefix}/{s3Key}" if new_prefix else s3Key myargs = { 'ACL': 'bucket-owner-full-control', 'StorageClass': storage_class # Added storage class to copy arguments } # Add metadata if enabled if metadata_copy == 'Enable': get_metadata = s3Client.head_object(Bucket=s3Bucket, Key=s3Key, VersionId=s3VersionId if s3VersionId else None) for key in ['CacheControl', 'ContentDisposition', 'ContentEncoding', 'ContentLanguage', 'Metadata', 'WebsiteRedirectLocation', 'Expires']: if value := get_metadata.get(key): myargs[key] = value # Add tagging if enabled if tagging_copy == 'Enable': get_obj_tag = s3Client.get_object_tagging(Bucket=s3Bucket, Key=s3Key, VersionId=s3VersionId if s3VersionId else None) if tag_set := get_obj_tag.get('TagSet'): myargs['Tagging'] = "&".join([f"{parse.quote_plus(d['Key'])}={parse.quote_plus(d['Value'])}" for d in tag_set]) response = s3Client.copy(copy_source, target_bucket, newKey, ExtraArgs=myargs) result = {'resultCode': 'Succeeded', 'resultString': str(response)} except Exception as e: result = {'resultCode': 'PermanentFailure', 'resultString': str(e)} return { 'invocationSchemaVersion': event['invocationSchemaVersion'], 'treatMissingKeysAs': 'PermanentFailure', 'invocationId': event['invocationId'], 'results': [{'taskId': task['taskId'], **result}] } -
Sélectionnez Déployer.
Créer un rôle IAM pour votre fonction Lambda
Procédez comme suit :
-
Dans le volet de navigation, sélectionnez Rôles, puis Créer un rôle.
-
Pour Type d’entité approuvée, choisissez Service AWS.
-
Choisissez la liste déroulante Cas d'utilisation, puis sélectionnez Lambda.
-
Sélectionnez Suivant.
-
Choisissez la politique AWSLambdaBasicExecutionRole, puis sélectionnez Suivant.
-
Pour Nom du rôle, entrez un nom, par exemple LambdaS3BatchRole.
-
Saisissez la politique suivante :
{ "Version": "2012-10-17", "Statement": [ { "Action": [ "s3:GetObject", "s3:GetObjectAcl", "s3:GetObjectTagging", "s3:GetObjectVersion", "s3:GetObjectVersionAcl", "s3:GetObjectVersionTagging", "s3:ListBucket*" ], "Resource": "*", "Effect": "Allow" }, { "Action": [ "s3:PutObject", "s3:PutObjectAcl", "s3:PutObjectTagging", "s3:PutObjectLegalHold", "s3:PutObjectRetention", "s3:GetBucketObjectLockConfiguration", "s3:ListBucket*", "s3:GetBucketLocation" ], "Resource": [ "arn:aws:s3:::amzn-s3-demo-destination-bucket", "arn:aws:s3:::amzn-s3-demo-destination-bucket/*" ], "Effect": "Allow" } ] } -
Sélectionnez Créer un rôle.
Remarque : Si vous utilisez une clé AWS Key Management Service (AWS KMS) gérée par le client pour chiffrer votre compartiment, le rôle IAM doit accorder des autorisations supplémentaires. Pour en savoir plus, consultez la section Mon compartiment Amazon S3 est chiffré par défaut à l’aide d’une clé AWS KMS personnalisée. Comment puis-je autoriser les utilisateurs à effectuer des téléchargements depuis et vers le compartiment ?
Créer une politique d'autorisations Batch Operations
Procédez comme suit :
-
Ouvrez la console IAM.
-
Dans le volet de navigation, sélectionnez Rôles, puis Créer un rôle.
-
Pour Type d’entité approuvée, choisissez le service AWS.
-
Choisissez la liste déroulante Cas d'utilisation, puis S3.
-
Choisissez S3 Batch Operations.
-
Sélectionnez Suivant.
-
Pour Nom du rôle, entrez un nom, par exemple S3BatchOperationsRole.
-
Saisissez la politique suivante :
{ "Version": "2012-10-17", "Statement": [ { "Action": [ "s3:GetObject", "s3:GetObjectVersion", "s3:GetBucketLocation" ], "Resource": [ "arn:aws:s3:::amzn-s3-demo-manifest-bucket", "arn:aws:s3:::amzn-s3-demo-manifest-bucket/" ], "Effect": "Allow" }, { "Action": [ "s3:PutObject", "s3:GetBucketLocation" ], "Resource": [ "arn:aws:s3:::amzn-s3-demo-completion-report-bucket", "arn:aws:s3:::amzn-s3-demo-completion-report-bucket/" ], "Effect": "Allow" }, { "Action": [ "lambda:InvokeFunction" ], "Resource": "arn_of_lambda_function_created_in_step1", "Effect": "Allow" } ] } -
Sélectionnez Créer un rôle.
Créer une tâche Batch Operations
Procédez comme suit :
- Ouvrez la console Amazon S3.
- Dans le volet de navigation, choisissez Opérations par lots, puis Créer une tâche.
- Pour Format du manifeste, sélectionnez Rapport d'inventaire S3 ou CSV.
- Pour Objet de manifeste, choisissez Parcourir S3.
- Sélectionnez le compartiment source à partir duquel copier les objets.
- Sélectionnez les objets du compartiment source, puis choisissez Choisir un chemin.
- Sélectionnez Suivant.
- Pour Choisir une opération, choisissez Copier.
- Pour Copier la destination, choisissez Parcourir S3.
- Sélectionnez le compartiment de destination vers lequel copier les objets, puis choisissez Choisir un chemin.
- Sélectionnez Je reconnais que les objets existants portant le même nom seront remplacés, puis choisissez Suivant.
- Pour Autorisations, choisissez la liste déroulante Rôle IAM, puis sélectionnez votre rôle IAM S3BatchOperationsRole.
- Choisissez Suivant, puis choisissez Créer une tâche.
Accès intercompte
Si le compartiment S3 de destination se trouve dans un autre compte AWS, vous devez y associer une politique basée sur les ressources au compartiment.
Exemple de stratégie basée sur les ressources :
{ "Version": "2012-10-17", "Id": "Policy1541018284691", "Statement": [ { "Sid": "Allow Cross Account Copy", "Effect": "Allow", "Principal": { "AWS": "arn:aws:iam::SourceAccountNumber:role/LambdaS3BatchRole" }, "Action": [ "s3:PutObject", "s3:PutObjectAcl", "s3:PutObjectTagging" ], "Resource": "arn:aws:s3:::DESTINATION_BUCKET/*" } ] }
Pour plus d’informations, consultez la section Comment puis-je copier des objets S3 depuis un autre compte AWS ?
Informations connexes
Comment résoudre les problèmes liés aux opérations par lots d'Amazon S3 ?
Comment copier tous les objets d’un compartiment Amazon S3 vers un autre compartiment ?
- Sujets
- Storage
- Langue
- Français

Contenus pertinents
- demandé il y a un an
- demandé il y a 2 ans
- demandé il y a 3 ans
- demandé il y a un an
- demandé il y a 2 ans
AWS OFFICIELA mis à jour il y a 6 mois
AWS OFFICIELA mis à jour il y a 4 ans
AWS OFFICIELA mis à jour il y a 3 ans