

Les traductions sont fournies par des outils de traduction automatique. En cas de conflit entre le contenu d'une traduction et celui de la version originale en anglais, la version anglaise prévaudra.

# Utilisation des objets S3 on Outposts
<a name="S3OutpostsWorkingObjects"></a>

Avec Amazon S3 on Outposts, vous pouvez créer des compartiments S3 sur vos AWS Outposts et stocker et récupérer facilement des objets sur site pour les applications qui nécessitent un accès aux données locales, un traitement local des données et une résidence des données. S3 on Outposts fournit une nouvelle classe de stockage, S3 Outposts (`OUTPOSTS`), qui utilise Amazon S3 APIs et est conçue pour stocker des données de manière durable et redondante sur plusieurs appareils et serveurs de votre entreprise. AWS Outposts Vous communiquez avec votre compartiment Outpost à l’aide d’un point d’accès et d’une connexion de point de terminaison via un cloud privé virtuel (VPC). Vous pouvez utiliser les mêmes fonctionnalités sur APIs les compartiments Outpost que sur les compartiments Amazon S3, notamment les politiques d'accès, le chiffrement et le balisage. Vous pouvez utiliser S3 sur Outposts via l'API AWS Management Console, AWS Command Line Interface (AWS CLI) ou REST. AWS SDKs 

Les objets sont les entités fondamentales stockées dans S3 sur Outposts. Chaque objet est contenu dans un compartiment. Vous devez utiliser des points d’accès pour accéder à tout objet dans un compartiment Outpost. Lorsque vous spécifiez le compartiment pour les opérations d’objet, vous utilisez l’Amazon Resource Name (ARN) du point d’accès ou l’alias de point d’accès. Pour plus d’informations sur les alias de point d’accès, consultez [Utilisation d'un alias de type compartiment pour le point d'accès de votre compartiment S3 sur Outposts](s3-outposts-access-points-alias.md).

L'exemple suivant montre le format ARN pour les points d'accès S3 sur les Outposts, qui inclut le Région AWS code de la région dans laquelle l'Outpost est hébergé, l'ID, l' Compte AWS ID de l'Outpost et le nom du point d'accès :

```
arn:aws:s3-outposts:region:account-id:outpost/outpost-id/accesspoint/accesspoint-name
```

Pour plus d'informations sur S3 on Outposts ARNs, consultez. [Ressource ARNs pour S3 sur les Outposts](S3OutpostsIAM.md#S3OutpostsARN)

L'objet ARNs utilise le format suivant, qui inclut le lieu Région AWS d'accueil de l'Outpost, son Compte AWS ID, son identifiant, le nom du bucket et la clé de l'objet :

```
arn:aws:s3-outposts:us-west-2:123456789012:​outpost/op-01ac5d28a6a232904/bucket/amzn-s3-demo-bucket1/object/myobject
```

Avec Amazon S3 sur Outposts, les données des objets sont toujours stockées sur l’Outpost. Lorsque vous AWS installez un rack Outpost, vos données restent locales dans votre Outpost afin de répondre aux exigences en matière de résidence des données. Vos objets ne quittent jamais votre Outpost et ne se trouvent pas dans un Région AWS. Comme il AWS Management Console est hébergé dans la région, vous ne pouvez pas utiliser la console pour télécharger ou gérer des objets dans votre Outpost. Cependant, vous pouvez utiliser l'API REST, AWS Command Line Interface (AWS CLI), et AWS SDKs pour télécharger et gérer vos objets via vos points d'accès.

**Topics**
+ [Chargement d’un objet dans un compartiment S3 sur Outposts](S3OutpostsUploadObjects.md)
+ [Copier un objet dans un compartiment Amazon S3 on Outposts à l'aide du AWS SDK pour Java](S3OutpostsCopyObject.md)
+ [Obtenir un objet à partir d'un compartiment Amazon S3 on Outposts](S3OutpostsGetObject.md)
+ [Liste des objets dans un compartiment Amazon S3 on Outposts](S3OutpostsListObjects.md)
+ [Suppression d'objets dans des compartiments Amazon S3 on Outposts](S3OutpostsDeleteObject.md)
+ [HeadBucket À utiliser pour déterminer si un bucket S3 on Outposts existe et si vous disposez d'autorisations d'accès](S3OutpostsHeadBucket.md)
+ [Réalisation et gestion d’un chargement partitionné avec le kit SDK for Java.](S3OutpostsMPU.md)
+ [Utilisation de Presigned URLs pour S3 sur Outposts](S3OutpostsPresignedURL.md)
+ [Amazon S3 sur Outposts avec Amazon EMR local sur Outposts](s3-outposts-emr.md)
+ [Mise en cache d’autorisation et d’authentification](s3-outposts-auth-cache.md)

# Chargement d’un objet dans un compartiment S3 sur Outposts
<a name="S3OutpostsUploadObjects"></a>

Les objets sont les entités fondamentales stockées dans S3 sur Outposts. Chaque objet est contenu dans un compartiment. Vous devez utiliser des points d’accès pour accéder à tout objet dans un compartiment Outpost. Lorsque vous spécifiez le compartiment pour les opérations d’objet, vous utilisez l’Amazon Resource Name (ARN) du point d’accès ou l’alias de point d’accès. Pour plus d’informations sur les alias de point d’accès, consultez [Utilisation d'un alias de type compartiment pour le point d'accès de votre compartiment S3 sur Outposts](s3-outposts-access-points-alias.md).

L'exemple suivant montre le format ARN pour les points d'accès S3 sur les Outposts, qui inclut le Région AWS code de la région dans laquelle l'Outpost est hébergé, l'ID, l' Compte AWS ID de l'Outpost et le nom du point d'accès :

```
arn:aws:s3-outposts:region:account-id:outpost/outpost-id/accesspoint/accesspoint-name
```

Pour plus d'informations sur S3 on Outposts ARNs, consultez. [Ressource ARNs pour S3 sur les Outposts](S3OutpostsIAM.md#S3OutpostsARN)

Avec Amazon S3 sur Outposts, les données des objets sont toujours stockées sur l’Outpost. Lorsque vous AWS installez un rack Outpost, vos données restent locales dans votre Outpost afin de répondre aux exigences en matière de résidence des données. Vos objets ne quittent jamais votre Outpost et ne se trouvent pas dans un Région AWS. Comme il AWS Management Console est hébergé dans la région, vous ne pouvez pas utiliser la console pour télécharger ou gérer des objets dans votre Outpost. Cependant, vous pouvez utiliser l'API REST, AWS Command Line Interface (AWS CLI), et AWS SDKs pour télécharger et gérer vos objets via vos points d'accès.

Les AWS SDK pour Java exemples suivants AWS CLI vous montrent comment télécharger un objet dans un compartiment S3 on Outposts à l'aide d'un point d'accès.

------
#### [ AWS CLI ]

**Example**  
L’exemple suivant place un objet nommé `sample-object.xml` dans un compartiment S3 sur Outposts (`s3-outposts:PutObject`) à l’aide de l’ AWS CLI. Pour utiliser cette commande, remplacez chaque `user input placeholder` par vos propres informations. Pour plus d’informations sur cette commande, consultez [put-object](https://awscli.amazonaws.com/v2/documentation/api/latest/reference/s3api/put-object.html) dans la *Référence de l’AWS CLI *.  

```
aws s3api put-object --bucket arn:aws:s3-outposts:Region:123456789012:outpost/op-01ac5d28a6a232904/accesspoint/example-outposts-access-point --key sample-object.xml --body sample-object.xml
```

------
#### [ SDK for Java ]

**Example**  
Pour des exemples de téléchargement d'un objet dans un bucket S3 Outposts avec le AWS SDK pour Java, consultez [PutObjectOnOutpost.java dans les exemples de code du SDK pour AWS Java](https://github.com/awsdocs/aws-doc-sdk-examples/blob/main/javav2/example_code/s3/src/main/java/com/example/s3/outposts/PutObjectOnOutpost.java) *2.x*.

------

# Copier un objet dans un compartiment Amazon S3 on Outposts à l'aide du AWS SDK pour Java
<a name="S3OutpostsCopyObject"></a>

Les objets sont les entités fondamentales stockées dans S3 on Outposts. Chaque objet est contenu dans un compartiment. Vous devez utiliser des points d’accès pour accéder à tout objet dans un compartiment Outpost. Lorsque vous spécifiez le compartiment pour les opérations d’objet, vous utilisez l’Amazon Resource Name (ARN) du point d’accès ou l’alias de point d’accès. Pour plus d’informations sur les alias de point d’accès, consultez [Utilisation d'un alias de type compartiment pour le point d'accès de votre compartiment S3 sur Outposts](s3-outposts-access-points-alias.md).

L'exemple suivant montre le format ARN pour les points d'accès S3 sur les Outposts, qui inclut le Région AWS code de la région dans laquelle l'Outpost est hébergé, l'ID, l' Compte AWS ID de l'Outpost et le nom du point d'accès :

```
arn:aws:s3-outposts:region:account-id:outpost/outpost-id/accesspoint/accesspoint-name
```

Pour plus d'informations sur S3 on Outposts ARNs, consultez. [Ressource ARNs pour S3 sur les Outposts](S3OutpostsIAM.md#S3OutpostsARN)

Avec Amazon S3 sur Outposts, les données des objets sont toujours stockées sur l’Outpost. Lorsque vous AWS installez un rack Outpost, vos données restent locales dans votre Outpost afin de répondre aux exigences en matière de résidence des données. Vos objets ne quittent jamais votre Outpost et ne se trouvent pas dans un Région AWS. Comme il AWS Management Console est hébergé dans la région, vous ne pouvez pas utiliser la console pour télécharger ou gérer des objets dans votre Outpost. Cependant, vous pouvez utiliser l'API REST, AWS Command Line Interface (AWS CLI), et AWS SDKs pour télécharger et gérer vos objets via vos points d'accès.

L'exemple suivant montre comment copier un objet dans un compartiment S3 on Outposts à l'aide du kit AWS SDK pour Java.

## Utilisation du AWS SDK pour Java
<a name="S3OutpostsCopyObjectJava"></a>

L'exemple S3 on Outposts suivant copie un objet dans un nouvel objet situé dans le même compartiment à l'aide du kit SDK for Java. Pour utiliser cet exemple, remplacez `user input placeholders` par vos propres informations.

```
import com.amazonaws.AmazonServiceException;
import com.amazonaws.SdkClientException;
import com.amazonaws.services.s3.AmazonS3;
import com.amazonaws.services.s3.AmazonS3ClientBuilder;
import com.amazonaws.services.s3.model.CopyObjectRequest;

public class CopyObject {
    public static void main(String[] args) {
        String accessPointArn = "*** access point ARN ***";
        String sourceKey = "*** Source object key ***";
        String destinationKey = "*** Destination object key ***";

        try {
            // This code expects that you have AWS credentials set up per:
            // https://docs.aws.amazon.com/sdk-for-java/v1/developer-guide/setup-credentials.html
            AmazonS3 s3Client = AmazonS3ClientBuilder.standard()
                    .enableUseArnRegion()
                    .build();

            // Copy the object into a new object in the same bucket.
            CopyObjectRequest copyObjectRequest = new CopyObjectRequest(accessPointArn, sourceKey, accessPointArn, destinationKey);
            s3Client.copyObject(copyObjectRequest);
        } catch (AmazonServiceException e) {
            // The call was transmitted successfully, but Amazon S3 couldn't process
            // it, so it returned an error response.
            e.printStackTrace();
        } catch (SdkClientException e) {
            // Amazon S3 couldn't be contacted for a response, or the client
            // couldn't parse the response from Amazon S3.
            e.printStackTrace();
        }
    }
}
```

# Obtenir un objet à partir d'un compartiment Amazon S3 on Outposts
<a name="S3OutpostsGetObject"></a>

Les objets sont les entités fondamentales stockées dans S3 sur Outposts. Chaque objet est contenu dans un compartiment. Vous devez utiliser des points d’accès pour accéder à tout objet dans un compartiment Outpost. Lorsque vous spécifiez le compartiment pour les opérations d’objet, vous utilisez l’Amazon Resource Name (ARN) du point d’accès ou l’alias de point d’accès. Pour plus d’informations sur les alias de point d’accès, consultez [Utilisation d'un alias de type compartiment pour le point d'accès de votre compartiment S3 sur Outposts](s3-outposts-access-points-alias.md).

L'exemple suivant montre le format ARN pour les points d'accès S3 sur les Outposts, qui inclut le Région AWS code de la région dans laquelle l'Outpost est hébergé, l'ID, l' Compte AWS ID de l'Outpost et le nom du point d'accès :

```
arn:aws:s3-outposts:region:account-id:outpost/outpost-id/accesspoint/accesspoint-name
```

Pour plus d'informations sur S3 on Outposts ARNs, consultez. [Ressource ARNs pour S3 sur les Outposts](S3OutpostsIAM.md#S3OutpostsARN)

Avec Amazon S3 sur Outposts, les données des objets sont toujours stockées sur l’Outpost. Lorsque vous AWS installez un rack Outpost, vos données restent locales dans votre Outpost afin de répondre aux exigences en matière de résidence des données. Vos objets ne quittent jamais votre Outpost et ne se trouvent pas dans un Région AWS. Comme il AWS Management Console est hébergé dans la région, vous ne pouvez pas utiliser la console pour télécharger ou gérer des objets dans votre Outpost. Cependant, vous pouvez utiliser l'API REST, AWS Command Line Interface (AWS CLI), et AWS SDKs pour télécharger et gérer vos objets via vos points d'accès.

Les exemples suivants vous montrent comment télécharger (obtenir) un objet à l'aide de l’ AWS Command Line Interface (AWS CLI) et de AWS SDK pour Java.

## À l'aide du AWS CLI
<a name="S3OutpostsGetObjectCLI"></a>

L'exemple suivant obtient un objet nommé `sample-object.xml` à partir d'un compartiment S3 on Outposts (`s3-outposts:GetObject`) à l'aide de l’ AWS CLI. Pour utiliser cette commande, remplacez chaque `user input placeholder` par vos propres informations. Pour de plus amples informations sur cette commande, veuillez consulter [get-object](https://awscli.amazonaws.com/v2/documentation/api/latest/reference/s3api/get-object.html) dans le document *AWS CLI Reference*.

```
aws s3api get-object --bucket arn:aws:s3-outposts:region:123456789012:outpost/op-01ac5d28a6a232904/accesspoint/example-outposts-access-point --key testkey sample-object.xml
```

## Utilisation du AWS SDK pour Java
<a name="S3OutpostsGetObjectJava"></a>

L'exemple S3 on Outposts suivant obtient un objet à l'aide du kit SDK pour Java. Pour utiliser cet exemple, remplacez chaque `user input placeholder` par vos propres informations. Pour plus d’informations, consultez [GetObject](https://docs.aws.amazon.com/AmazonS3/latest/API/API_GetObject.html) dans la *Référence d’API Amazon Simple Storage Service*.

```
import com.amazonaws.AmazonServiceException;
import com.amazonaws.SdkClientException;
import com.amazonaws.services.s3.AmazonS3;
import com.amazonaws.services.s3.AmazonS3ClientBuilder;
import com.amazonaws.services.s3.model.GetObjectRequest;
import com.amazonaws.services.s3.model.ResponseHeaderOverrides;
import com.amazonaws.services.s3.model.S3Object;

import java.io.BufferedReader;
import java.io.IOException;
import java.io.InputStream;
import java.io.InputStreamReader;

public class GetObject {
    public static void main(String[] args) throws IOException {
        String accessPointArn = "*** access point ARN ***";
        String key = "*** Object key ***";

        S3Object fullObject = null, objectPortion = null, headerOverrideObject = null;
        try {
            // This code expects that you have AWS credentials set up per:
            // https://docs.aws.amazon.com/sdk-for-java/v1/developer-guide/setup-credentials.html
            AmazonS3 s3Client = AmazonS3ClientBuilder.standard()
                    .enableUseArnRegion()
                    .build();

            // Get an object and print its contents.
            System.out.println("Downloading an object");
            fullObject = s3Client.getObject(new GetObjectRequest(accessPointArn, key));
            System.out.println("Content-Type: " + fullObject.getObjectMetadata().getContentType());
            System.out.println("Content: ");
            displayTextInputStream(fullObject.getObjectContent());

            // Get a range of bytes from an object and print the bytes.
            GetObjectRequest rangeObjectRequest = new GetObjectRequest(accessPointArn, key)
                    .withRange(0, 9);
            objectPortion = s3Client.getObject(rangeObjectRequest);
            System.out.println("Printing bytes retrieved.");
            displayTextInputStream(objectPortion.getObjectContent());

            // Get an entire object, overriding the specified response headers, and print the object's content.
            ResponseHeaderOverrides headerOverrides = new ResponseHeaderOverrides()
                    .withCacheControl("No-cache")
                    .withContentDisposition("attachment; filename=example.txt");
            GetObjectRequest getObjectRequestHeaderOverride = new GetObjectRequest(accessPointArn, key)
                    .withResponseHeaders(headerOverrides);
            headerOverrideObject = s3Client.getObject(getObjectRequestHeaderOverride);
            displayTextInputStream(headerOverrideObject.getObjectContent());
        } catch (AmazonServiceException e) {
            // The call was transmitted successfully, but Amazon S3 couldn't process
            // it, so it returned an error response.
            e.printStackTrace();
        } catch (SdkClientException e) {
            // Amazon S3 couldn't be contacted for a response, or the client
            // couldn't parse the response from Amazon S3.
            e.printStackTrace();
        } finally {
            // To ensure that the network connection doesn't remain open, close any open input streams.
            if (fullObject != null) {
                fullObject.close();
            }
            if (objectPortion != null) {
                objectPortion.close();
            }
            if (headerOverrideObject != null) {
                headerOverrideObject.close();
            }
        }
    }

    private static void displayTextInputStream(InputStream input) throws IOException {
        // Read the text input stream one line at a time and display each line.
        BufferedReader reader = new BufferedReader(new InputStreamReader(input));
        String line = null;
        while ((line = reader.readLine()) != null) {
            System.out.println(line);
        }
        System.out.println();
    }
}
```

# Liste des objets dans un compartiment Amazon S3 on Outposts
<a name="S3OutpostsListObjects"></a>

Les objets sont les entités fondamentales stockées dans S3 on Outposts. Chaque objet est contenu dans un compartiment. Vous devez utiliser des points d’accès pour accéder à tout objet dans un compartiment Outpost. Lorsque vous spécifiez le compartiment pour les opérations d’objet, vous utilisez l’Amazon Resource Name (ARN) du point d’accès ou l’alias de point d’accès. Pour plus d’informations sur les alias de point d’accès, consultez [Utilisation d'un alias de type compartiment pour le point d'accès de votre compartiment S3 sur Outposts](s3-outposts-access-points-alias.md).

L’exemple suivant montre le format ARN pour les points d’accès S3 sur Outposts, qui inclut le code Région AWS pour la région où l’Outpost est hébergé, l’ID Compte AWS, l’ID d’Outpost, le nom du point d’accès :

```
arn:aws:s3-outposts:region:account-id:outpost/outpost-id/accesspoint/accesspoint-name
```

Pour plus d’informations sur les ARN de S3 sur Outposts, consultez [Ressource ARNs pour S3 sur les Outposts](S3OutpostsIAM.md#S3OutpostsARN).

**Note**  
Avec Amazon S3 on Outposts, les données des objets sont toujours stockées sur l'Outpost. Quand AWS installe un rack Outpost, vos données restent locales à votre Outpost pour répondre aux exigences de résidence des données. Vos objets ne quittent jamais votre Outpost et ne se trouvent pas dans un Région AWS. Comme AWS Management Console est hébergé dans la région, vous ne pouvez pas l’utiliser pour charger ou gérer des objets dans votre Outpost. Toutefois, vous pouvez utiliser l'API REST, l’AWS Command Line Interface (AWS CLI) et les kits SDK AWS pour charger et gérer vos objets via vos points d'accès.

Les exemples suivants vous montrent comment répertorier les objets d'un compartiment S3 on Outposts à l'aide de l’AWS CLI et d’AWS SDK pour Java.

## Utilisation de l’AWS CLI
<a name="S3OutpostsListObjectsCLI"></a>

L'exemple suivant répertorie les objets dans un compartiment S3 on Outposts (`s3-outposts:ListObjectsV2`) à l'aide de l’AWS CLI. Pour utiliser cette commande, remplacez chaque `user input placeholder` par vos propres informations. Pour de plus amples informations sur cette commande, veuillez consulter [list-objects-v2](https://awscli.amazonaws.com/v2/documentation/api/latest/reference/s3api/list-objects-v2.html) dans le document *AWS CLI Reference*.

```
aws s3api list-objects-v2 --bucket arn:aws:s3-outposts:region:123456789012:outpost/op-01ac5d28a6a232904/accesspoint/example-outposts-access-point
```

**Note**  
Lorsque vous utilisez cette action avec Amazon S3 sur Outposts via le kit SDK AWS, vous fournissez l'ARN du point d'accès Outposts à la place du nom du compartiment, sous la forme suivante :`arn:aws:s3-outposts:region:123456789012:outpost/op-01ac5d28a6a232904/accesspoint/example-Outposts-Access-Point`. Pour plus d'informations sur les ARN de S3 on Outposts, consultez [Ressource ARNs pour S3 sur les Outposts](S3OutpostsIAM.md#S3OutpostsARN).

## Utilisation du kit AWS SDK pour Java
<a name="S3OutpostsListObjectsJava"></a>

L'exemple S3 on Outposts suivant répertorie les objets dans un compartiment à l'aide du kit SDK pour Java. Pour utiliser cet exemple, remplacez chaque `user input placeholder` par vos propres informations. 

**Important**  
Cet exemple utilise[ListObjectsV2](https://docs.aws.amazon.com/AmazonS3/latest/API/API_ListObjectsV2.html), qui est la dernière révision de l’opération d'API `ListObjects`. Nous vous recommandons d'utiliser cette opération d'API révisée pour le développement d'applications. Pour des raisons de rétrocompatibilité, Amazon S3 continue de prendre en charge la version précédente de cette opération d'API. 

```
import com.amazonaws.AmazonServiceException;
import com.amazonaws.SdkClientException;
import com.amazonaws.services.s3.AmazonS3;
import com.amazonaws.services.s3.AmazonS3ClientBuilder;
import com.amazonaws.services.s3.model.ListObjectsV2Request;
import com.amazonaws.services.s3.model.ListObjectsV2Result;
import com.amazonaws.services.s3.model.S3ObjectSummary;

public class ListObjectsV2 {

    public static void main(String[] args) {
        String accessPointArn = "*** access point ARN ***";

        try {
            // This code expects that you have AWS credentials set up per:
            // https://docs.aws.amazon.com/sdk-for-java/v1/developer-guide/setup-credentials.html
            AmazonS3 s3Client = AmazonS3ClientBuilder.standard()
                    .enableUseArnRegion()
                    .build();

            System.out.println("Listing objects");

            // maxKeys is set to 2 to demonstrate the use of
            // ListObjectsV2Result.getNextContinuationToken()
            ListObjectsV2Request req = new ListObjectsV2Request().withBucketName(accessPointArn).withMaxKeys(2);
            ListObjectsV2Result result;

            do {
                result = s3Client.listObjectsV2(req);

                for (S3ObjectSummary objectSummary : result.getObjectSummaries()) {
                    System.out.printf(" - %s (size: %d)\n", objectSummary.getKey(), objectSummary.getSize());
                }
                // If there are more than maxKeys keys in the bucket, get a continuation token
                // and list the next objects.
                String token = result.getNextContinuationToken();
                System.out.println("Next Continuation Token: " + token);
                req.setContinuationToken(token);
            } while (result.isTruncated());
        } catch (AmazonServiceException e) {
            // The call was transmitted successfully, but Amazon S3 couldn't process
            // it, so it returned an error response.
            e.printStackTrace();
        } catch (SdkClientException e) {
            // Amazon S3 couldn't be contacted for a response, or the client
            // couldn't parse the response from Amazon S3.
            e.printStackTrace();
        }
    }
}
```

# Suppression d'objets dans des compartiments Amazon S3 on Outposts
<a name="S3OutpostsDeleteObject"></a>

Les objets sont les entités fondamentales stockées dans Amazon S3 on Outposts. Chaque objet est contenu dans un compartiment. Vous devez utiliser des points d’accès pour accéder à tout objet dans un compartiment Outpost. Lorsque vous spécifiez le compartiment pour les opérations d’objet, vous utilisez l’Amazon Resource Name (ARN) du point d’accès ou l’alias de point d’accès. Pour plus d’informations sur les alias de point d’accès, consultez [Utilisation d'un alias de type compartiment pour le point d'accès de votre compartiment S3 sur Outposts](s3-outposts-access-points-alias.md).

L’exemple suivant montre le format ARN pour les points d’accès S3 sur Outposts, qui inclut le code Région AWS pour la région où l’Outpost est hébergé, l’ID Compte AWS, l’ID d’Outpost, le nom du point d’accès :

```
arn:aws:s3-outposts:region:account-id:outpost/outpost-id/accesspoint/accesspoint-name
```

Pour plus d’informations sur les ARN de S3 sur Outposts, consultez [Ressource ARNs pour S3 sur les Outposts](S3OutpostsIAM.md#S3OutpostsARN).

Avec Amazon S3 on Outposts, les données des objets sont toujours stockées sur l'Outpost. Quand AWS installe un rack Outpost, vos données restent locales à votre Outpost pour répondre aux exigences de résidence des données. Vos objets ne quittent jamais votre Outpost et ne se trouvent pas dans un Région AWS. Comme AWS Management Console est hébergé dans la région, vous ne pouvez pas l’utiliser pour charger ou gérer des objets dans votre Outpost. Toutefois, vous pouvez utiliser l'API REST, AWS Command Line Interface (AWS CLI) et les kits SDK AWS pour charger et gérer vos objets via vos points d'accès.

Les exemples suivants vous montrent comment supprimer un objet unique ou plusieurs objets dans un compartiment S3 on Outposts à l'aide de l’AWS Command Line Interface (AWS CLI) et de AWS SDK pour Java.

## Utilisation de l’AWS CLI
<a name="S3OutpostsDeleteObjectsCLI"></a>

Les exemples suivants vous montrent comment supprimer un objet unique ou plusieurs objets d'un compartiment S3 on Outposts.







------
#### [ delete-object ]

L'exemple suivant supprime un objet nommé `sample-object.xml` d’un compartiment S3 on Outposts (`s3-outposts:DeleteObject`) à l'aide de l’AWS CLI. Pour utiliser cette commande, remplacez chaque `user input placeholder` par vos propres informations. Pour de plus amples informations sur cette commande, veuillez consulter [delete-object](https://awscli.amazonaws.com/v2/documentation/api/latest/reference/s3api/delete-object.html) dans le document *AWS CLI Reference*.

```
aws s3api delete-object --bucket arn:aws:s3-outposts:region:123456789012:outpost/op-01ac5d28a6a232904/accesspoint/example-outposts-access-point --key sample-object.xml
```

------
#### [ delete-objects ]

L'exemple suivant supprime deux objets nommés `sample-object.xml` et `test1.text` d’un compartiment S3 on Outposts (`s3-outposts:DeleteObject`) à l'aide de l’AWS CLI. Pour utiliser cette commande, remplacez chaque `user input placeholder` par vos propres informations. Pour plus d'informations sur cette commande, veuillez consulter [delete-objects](https://awscli.amazonaws.com/v2/documentation/api/latest/reference/s3api/delete-objects.html) dans le document *AWS CLI Reference*.

```
aws s3api delete-objects --bucket arn:aws:s3-outposts:region:123456789012:outpost/op-01ac5d28a6a232904/accesspoint/example-outposts-access-point --delete file://delete.json

delete.json
{
  "Objects": [
    {
      "Key": "test1.txt"
    },
    {
      "Key": "sample-object.xml"
    }
  ],
  "Quiet": false
}
```

------

## Utilisation du kit AWS SDK pour Java
<a name="S3OutpostsDeleteObjectsJava"></a>

Les exemples suivants vous montrent comment supprimer un objet unique ou plusieurs objets d'un compartiment S3 on Outposts.

------
#### [ DeleteObject ]

L'exemple S3 on Outposts suivant supprime un objet dans un compartiment à l'aide du kit SDK pour Java. Pour utiliser cet exemple, spécifiez l'ARN du point d'accès pour l'Outpost et le nom de clé de l'objet que vous souhaitez supprimer. Pour plus d'informations, veuillez consulter [DeleteObject](https://docs.aws.amazon.com/AmazonS3/latest/API/API_DeleteObject.html) dans la *Référence d'API Amazon Simple Storage Service*.

```
import com.amazonaws.AmazonServiceException;
import com.amazonaws.SdkClientException;
import com.amazonaws.services.s3.AmazonS3;
import com.amazonaws.services.s3.AmazonS3ClientBuilder;
import com.amazonaws.services.s3.model.DeleteObjectRequest;

public class DeleteObject {
    public static void main(String[] args) {
        String accessPointArn = "*** access point ARN ***";
        String keyName = "*** key name ****";

        try {
            // This code expects that you have AWS credentials set up per:
            // https://docs.aws.amazon.com/sdk-for-java/v1/developer-guide/setup-credentials.html
            AmazonS3 s3Client = AmazonS3ClientBuilder.standard()
                    .enableUseArnRegion()
                    .build();

            s3Client.deleteObject(new DeleteObjectRequest(accessPointArn, keyName));
        } catch (AmazonServiceException e) {
            // The call was transmitted successfully, but Amazon S3 couldn't process
            // it, so it returned an error response.
            e.printStackTrace();
        } catch (SdkClientException e) {
            // Amazon S3 couldn't be contacted for a response, or the client
            // couldn't parse the response from Amazon S3.
            e.printStackTrace();
        }
    }
}
```

------
#### [ DeleteObjects ]

L'exemple S3 on Outposts suivant télécharge puis supprime des objets dans un compartiment à l'aide du kit SDK pour Java. Pour utiliser cet exemple, spécifiez l'ARN du point d'accès pour l'Outpost. Pour de plus amples informations, veuillez consulter [DeleteObject](https://docs.aws.amazon.com/AmazonS3/latest/API/API_DeleteObjects.html) dans le document *Amazon Simple Storage Service API Reference*.

```
import com.amazonaws.AmazonServiceException;
import com.amazonaws.SdkClientException;
import com.amazonaws.services.s3.AmazonS3;
import com.amazonaws.services.s3.AmazonS3ClientBuilder;
import com.amazonaws.services.s3.model.DeleteObjectsRequest;
import com.amazonaws.services.s3.model.DeleteObjectsRequest.KeyVersion;
import com.amazonaws.services.s3.model.DeleteObjectsResult;

import java.util.ArrayList;

public class DeleteObjects {

    public static void main(String[] args) {
       String accessPointArn = "arn:aws:s3-outposts:region:123456789012:outpost/op-01ac5d28a6a232904/accesspoint/example-outposts-access-point";
        

        try {
            // This code expects that you have AWS credentials set up per:
            // https://docs.aws.amazon.com/sdk-for-java/v1/developer-guide/setup-credentials.html
            AmazonS3 s3Client = AmazonS3ClientBuilder.standard()
                    .enableUseArnRegion()
                    .build();

            // Upload three sample objects.
            ArrayList<KeyVersion> keys = new ArrayList<KeyVersion>();
            for (int i = 0; i < 3; i++) {
                String keyName = "delete object example " + i;
                s3Client.putObject(accessPointArn, keyName, "Object number " + i + " to be deleted.");
                keys.add(new KeyVersion(keyName));
            }
            System.out.println(keys.size() + " objects successfully created.");

            // Delete the sample objects.
            DeleteObjectsRequest multiObjectDeleteRequest = new DeleteObjectsRequest(accessPointArn)
                    .withKeys(keys)
                    .withQuiet(false);

            // Verify that the objects were deleted successfully.
            DeleteObjectsResult delObjRes = s3Client.deleteObjects(multiObjectDeleteRequest);
            int successfulDeletes = delObjRes.getDeletedObjects().size();
            System.out.println(successfulDeletes + " objects successfully deleted.");
        } catch (AmazonServiceException e) {
            // The call was transmitted successfully, but Amazon S3 couldn't process
            // it, so it returned an error response.
            e.printStackTrace();
        } catch (SdkClientException e) {
            // Amazon S3 couldn't be contacted for a response, or the client
            // couldn't parse the response from Amazon S3.
            e.printStackTrace();
        }
    }
}
```

------

# HeadBucket À utiliser pour déterminer si un bucket S3 on Outposts existe et si vous disposez d'autorisations d'accès
<a name="S3OutpostsHeadBucket"></a>

Les objets sont les entités fondamentales stockées dans Amazon S3 on Outposts. Chaque objet est contenu dans un compartiment. Vous devez utiliser des points d’accès pour accéder à tout objet dans un compartiment Outpost. Lorsque vous spécifiez le compartiment pour les opérations d’objet, vous utilisez l’Amazon Resource Name (ARN) du point d’accès ou l’alias de point d’accès. Pour plus d’informations sur les alias de point d’accès, consultez [Utilisation d'un alias de type compartiment pour le point d'accès de votre compartiment S3 sur Outposts](s3-outposts-access-points-alias.md).

L'exemple suivant montre le format ARN pour les points d'accès S3 sur les Outposts, qui inclut le Région AWS code de la région dans laquelle l'Outpost est hébergé, l'ID, l' Compte AWS ID de l'Outpost et le nom du point d'accès :

```
arn:aws:s3-outposts:region:account-id:outpost/outpost-id/accesspoint/accesspoint-name
```

Pour plus d'informations sur S3 on Outposts ARNs, consultez. [Ressource ARNs pour S3 sur les Outposts](S3OutpostsIAM.md#S3OutpostsARN)

**Note**  
Avec Amazon S3 sur Outposts, les données des objets sont toujours stockées sur l’Outpost. Lorsque vous AWS installez un rack Outpost, vos données restent locales dans votre Outpost afin de répondre aux exigences de résidence des données. Vos objets ne quittent jamais votre Outpost et ne se trouvent pas dans un Région AWS. Comme il AWS Management Console est hébergé dans la région, vous ne pouvez pas utiliser la console pour télécharger ou gérer des objets dans votre Outpost. Cependant, vous pouvez utiliser l'API REST, AWS Command Line Interface (AWS CLI), et AWS SDKs pour télécharger et gérer vos objets via vos points d'accès.

Les AWS SDK pour Java exemples suivants AWS Command Line Interface (AWS CLI) vous montrent comment utiliser l'opération d' HeadBucketAPI pour déterminer si un bucket Amazon S3 on Outposts existe et si vous êtes autorisé à y accéder. Pour plus d’informations, consultez [HeadBucket](https://docs.aws.amazon.com/AmazonS3/latest/API/API_HeadBucket.html) dans la *Référence d’API Amazon Simple Storage Service*.

## En utilisant le AWS CLI
<a name="S3OutpostsHeadBucketCLI"></a>

L' AWS CLI exemple suivant de S3 on Outposts utilise la `head-bucket` commande pour déterminer si un bucket existe et si vous êtes autorisé à y accéder. Pour utiliser cette commande, remplacez chaque `user input placeholder` par vos propres informations. Pour de plus amples informations sur cette commande, veuillez consulter [head-bucket](https://awscli.amazonaws.com/v2/documentation/api/latest/reference/s3api/head-bucket.html) dans le document *AWS CLI Reference*.

```
aws s3api head-bucket --bucket arn:aws:s3-outposts:region:123456789012:outpost/op-01ac5d28a6a232904/accesspoint/example-outposts-access-point
```

## Utilisation du AWS SDK pour Java
<a name="S3OutpostsHeadBucketJava"></a>

L'exemple suivant de S3 on Outposts montre comment déterminer si un compartiment existe et si vous avez l'autorisation d'y accéder. Pour utiliser cet exemple, spécifiez l'ARN du point d'accès pour l'Outpost. Pour plus d’informations, consultez [HeadBucket](https://docs.aws.amazon.com/AmazonS3/latest/API/API_HeadBucket.html) dans la *Référence d’API Amazon Simple Storage Service*.

```
import com.amazonaws.AmazonServiceException;
import com.amazonaws.SdkClientException;
import com.amazonaws.services.s3.AmazonS3;
import com.amazonaws.services.s3.AmazonS3ClientBuilder;
import com.amazonaws.services.s3.model.HeadBucketRequest;

public class HeadBucket {
    public static void main(String[] args) {
        String accessPointArn = "*** access point ARN ***";

        try {
            // This code expects that you have AWS credentials set up per:
            // https://docs.aws.amazon.com/sdk-for-java/v1/developer-guide/setup-credentials.html
            AmazonS3 s3Client = AmazonS3ClientBuilder.standard()
                    .enableUseArnRegion()
                    .build();

            s3Client.headBucket(new HeadBucketRequest(accessPointArn));
        } catch (AmazonServiceException e) {
            // The call was transmitted successfully, but Amazon S3 couldn't process
            // it, so it returned an error response.
            e.printStackTrace();
        } catch (SdkClientException e) {
            // Amazon S3 couldn't be contacted for a response, or the client
            // couldn't parse the response from Amazon S3.
            e.printStackTrace();
        }
    }
}
```

# Réalisation et gestion d’un chargement partitionné avec le kit SDK for Java.
<a name="S3OutpostsMPU"></a>

Avec Amazon S3 on Outposts, vous pouvez créer des compartiments S3 sur vos AWS Outposts ressources et stocker et récupérer des objets sur site pour les applications qui nécessitent un accès aux données locales, un traitement local des données et une résidence des données. Vous pouvez utiliser S3 sur Outposts via l'API AWS Management Console, AWS Command Line Interface (AWS CLI) ou REST. AWS SDKs Pour de plus amples informations, consultez [Qu’est-ce que Amazon S3 sur Outposts ?](S3onOutposts.md). 

Les exemples suivants montrent comment vous pouvez utiliser S3 sur Outposts AWS SDK pour Java pour effectuer et gérer un téléchargement partitionné.

**Topics**
+ [Effectuer le chargement partitionné d’un objet dans un compartiment S3 sur Outposts](#S3OutpostsInitiateMultipartUploadJava)
+ [Copie d’un objet de grande taille dans un compartiment S3 sur Outposts à l’aide du chargement partitionné](#S3OutpostsCopyPartJava)
+ [Générer une liste des parties d’un objet dans un compartiment S3 sur Outposts](#S3OutpostsListPartsJava)
+ [Récupérer une liste de chargements partitionnés en cours dans un compartiment S3 sur Outposts](#S3OutpostsListMultipartUploadsJava)

## Effectuer le chargement partitionné d’un objet dans un compartiment S3 sur Outposts
<a name="S3OutpostsInitiateMultipartUploadJava"></a>

L’exemple S3 sur Outposts suivant lance, télécharge et achève le chargement partitionné d’un objet dans un compartiment à l’aide du kit SDK pour Java. Pour utiliser cet exemple, remplacez chaque `user input placeholder` par vos propres informations. Pour plus d’informations, consultez [Chargement d’un objet à l’aide du chargement partitionné](https://docs.aws.amazon.com/AmazonS3/latest/userguide/mpu-upload-object.html) dans le *Guide de l’utilisateur Amazon Simple Storage Service*.

```
import com.amazonaws.AmazonServiceException;
import com.amazonaws.SdkClientException;
import com.amazonaws.services.s3.AmazonS3;
import com.amazonaws.services.s3.AmazonS3ClientBuilder;
import com.amazonaws.services.s3.model.*;

import java.util.ArrayList;
import java.util.List;

public class MultipartUploadCopy {
    public static void main(String[] args) {
        String accessPointArn = "*** Source access point ARN ***";
        String sourceObjectKey = "*** Source object key ***";
        String destObjectKey = "*** Target object key ***";

        try {
            // This code expects that you have AWS credentials set up per:
            // https://docs.aws.amazon.com/sdk-for-java/v1/developer-guide/setup-credentials.html
            AmazonS3 s3Client = AmazonS3ClientBuilder.standard()
                    .enableUseArnRegion()
                    .build();

            // Initiate the multipart upload.
            InitiateMultipartUploadRequest initRequest = new InitiateMultipartUploadRequest(accessPointArn, destObjectKey);
            InitiateMultipartUploadResult initResult = s3Client.initiateMultipartUpload(initRequest);

            // Get the object size to track the end of the copy operation.
            GetObjectMetadataRequest metadataRequest = new GetObjectMetadataRequest(accessPointArn, sourceObjectKey);
            ObjectMetadata metadataResult = s3Client.getObjectMetadata(metadataRequest);
            long objectSize = metadataResult.getContentLength();

            // Copy the object using 5 MB parts.
            long partSize = 5 * 1024 * 1024;
            long bytePosition = 0;
            int partNum = 1;
            List<CopyPartResult> copyResponses = new ArrayList<CopyPartResult>();
            while (bytePosition < objectSize) {
                // The last part might be smaller than partSize, so check to make sure
                // that lastByte isn't beyond the end of the object.
                long lastByte = Math.min(bytePosition + partSize - 1, objectSize - 1);

                // Copy this part.
                CopyPartRequest copyRequest = new CopyPartRequest()
                        .withSourceBucketName(accessPointArn)
                        .withSourceKey(sourceObjectKey)
                        .withDestinationBucketName(accessPointArn)
                        .withDestinationKey(destObjectKey)
                        .withUploadId(initResult.getUploadId())
                        .withFirstByte(bytePosition)
                        .withLastByte(lastByte)
                        .withPartNumber(partNum++);
                copyResponses.add(s3Client.copyPart(copyRequest));
                bytePosition += partSize;
            }

            // Complete the upload request to concatenate all uploaded parts and make the copied object available.
            CompleteMultipartUploadRequest completeRequest = new CompleteMultipartUploadRequest(
                    accessPointArn,
                    destObjectKey,
                    initResult.getUploadId(),
                    getETags(copyResponses));
            s3Client.completeMultipartUpload(completeRequest);
            System.out.println("Multipart copy complete.");
        } catch (AmazonServiceException e) {
            // The call was transmitted successfully, but Amazon S3 couldn't process 
            // it, so it returned an error response.
            e.printStackTrace();
        } catch (SdkClientException e) {
            // Amazon S3 couldn't be contacted for a response, or the client  
            // couldn't parse the response from Amazon S3.
            e.printStackTrace();
        }
    }

    // This is a helper function to construct a list of ETags.
    private static List<PartETag> getETags(List<CopyPartResult> responses) {
        List<PartETag> etags = new ArrayList<PartETag>();
        for (CopyPartResult response : responses) {
            etags.add(new PartETag(response.getPartNumber(), response.getETag()));
        }
        return etags;
    }
```

## Copie d’un objet de grande taille dans un compartiment S3 sur Outposts à l’aide du chargement partitionné
<a name="S3OutpostsCopyPartJava"></a>

L’exemple S3 sur Outposts suivant copie un objet dans un compartiment à l’aide du kit SDK pour Java. Pour utiliser cet exemple, remplacez chaque `user input placeholder` par vos propres informations. 

```
import com.amazonaws.AmazonServiceException;
import com.amazonaws.SdkClientException;
import com.amazonaws.services.s3.AmazonS3;
import com.amazonaws.services.s3.AmazonS3ClientBuilder;
import com.amazonaws.services.s3.model.*;

import java.util.ArrayList;
import java.util.List;

public class MultipartUploadCopy {
    public static void main(String[] args) {
        String accessPointArn = "*** Source access point ARN ***";
        String sourceObjectKey = "*** Source object key ***";
        String destObjectKey = "*** Target object key ***";

        try {
            // This code expects that you have AWS credentials set up per:
            // https://docs.aws.amazon.com/sdk-for-java/v1/developer-guide/setup-credentials.html
            AmazonS3 s3Client = AmazonS3ClientBuilder.standard()
                    .enableUseArnRegion()
                    .build();

            // Initiate the multipart upload.
            InitiateMultipartUploadRequest initRequest = new InitiateMultipartUploadRequest(accessPointArn, destObjectKey);
            InitiateMultipartUploadResult initResult = s3Client.initiateMultipartUpload(initRequest);

            // Get the object size to track the end of the copy operation.
            GetObjectMetadataRequest metadataRequest = new GetObjectMetadataRequest(accessPointArn, sourceObjectKey);
            ObjectMetadata metadataResult = s3Client.getObjectMetadata(metadataRequest);
            long objectSize = metadataResult.getContentLength();

            // Copy the object using 5 MB parts.
            long partSize = 5 * 1024 * 1024;
            long bytePosition = 0;
            int partNum = 1;
            List<CopyPartResult> copyResponses = new ArrayList<CopyPartResult>();
            while (bytePosition < objectSize) {
                // The last part might be smaller than partSize, so check to make sure
                // that lastByte isn't beyond the end of the object.
                long lastByte = Math.min(bytePosition + partSize - 1, objectSize - 1);

                // Copy this part.
                CopyPartRequest copyRequest = new CopyPartRequest()
                        .withSourceBucketName(accessPointArn)
                        .withSourceKey(sourceObjectKey)
                        .withDestinationBucketName(accessPointArn)
                        .withDestinationKey(destObjectKey)
                        .withUploadId(initResult.getUploadId())
                        .withFirstByte(bytePosition)
                        .withLastByte(lastByte)
                        .withPartNumber(partNum++);
                copyResponses.add(s3Client.copyPart(copyRequest));
                bytePosition += partSize;
            }

            // Complete the upload request to concatenate all uploaded parts and make the copied object available.
            CompleteMultipartUploadRequest completeRequest = new CompleteMultipartUploadRequest(
                    accessPointArn,
                    destObjectKey,
                    initResult.getUploadId(),
                    getETags(copyResponses));
            s3Client.completeMultipartUpload(completeRequest);
            System.out.println("Multipart copy complete.");
        } catch (AmazonServiceException e) {
            // The call was transmitted successfully, but Amazon S3 couldn't process 
            // it, so it returned an error response.
            e.printStackTrace();
        } catch (SdkClientException e) {
            // Amazon S3 couldn't be contacted for a response, or the client  
            // couldn't parse the response from Amazon S3.
            e.printStackTrace();
        }
    }

    // This is a helper function to construct a list of ETags.
    private static List<PartETag> getETags(List<CopyPartResult> responses) {
        List<PartETag> etags = new ArrayList<PartETag>();
        for (CopyPartResult response : responses) {
            etags.add(new PartETag(response.getPartNumber(), response.getETag()));
        }
        return etags;
    }
}
```

## Générer une liste des parties d’un objet dans un compartiment S3 sur Outposts
<a name="S3OutpostsListPartsJava"></a>

L’exemple S3 sur Outposts suivant répertorie les parties d’un objet dans un compartiment à l’aide du kit SDK pour Java. Pour utiliser cet exemple, remplacez chaque `user input placeholder` par vos propres informations. 

```
import com.amazonaws.AmazonServiceException;
import com.amazonaws.SdkClientException;
import com.amazonaws.services.s3.AmazonS3;
import com.amazonaws.services.s3.AmazonS3ClientBuilder;
import com.amazonaws.services.s3.model.*;

import java.util.List;

public class ListParts {
    public static void main(String[] args) {
        String accessPointArn = "*** access point ARN ***";
        String keyName = "*** Key name ***";
        String uploadId = "*** Upload ID ***";

        try {
            // This code expects that you have AWS credentials set up per:
            // https://docs.aws.amazon.com/sdk-for-java/v1/developer-guide/setup-credentials.html
            AmazonS3 s3Client = AmazonS3ClientBuilder.standard()
                    .enableUseArnRegion()
                    .build();

            ListPartsRequest listPartsRequest = new ListPartsRequest(accessPointArn, keyName, uploadId);
            PartListing partListing = s3Client.listParts(listPartsRequest);
            List<PartSummary> partSummaries = partListing.getParts();

            System.out.println(partSummaries.size() + " multipart upload parts");
            for (PartSummary p : partSummaries) {
                System.out.println("Upload part: Part number = \"" + p.getPartNumber() + "\", ETag = " + p.getETag());
            }

        } catch (AmazonServiceException e) {
            // The call was transmitted successfully, but Amazon S3 couldn't process
            // it, so it returned an error response.
            e.printStackTrace();
        } catch (SdkClientException e) {
            // Amazon S3 couldn't be contacted for a response, or the client
            // couldn't parse the response from Amazon S3.
            e.printStackTrace();
        }
    }
}
```

## Récupérer une liste de chargements partitionnés en cours dans un compartiment S3 sur Outposts
<a name="S3OutpostsListMultipartUploadsJava"></a>

L’exemple S3 sur Outposts suivant montre comment récupérer une liste de chargements partitionnés en cours à partir d’un compartiment Outposts à l’aide du kit SDK pour Java. Pour utiliser cet exemple, remplacez chaque `user input placeholder` par vos propres informations.

```
import com.amazonaws.AmazonServiceException;
import com.amazonaws.SdkClientException;
import com.amazonaws.services.s3.AmazonS3;
import com.amazonaws.services.s3.AmazonS3ClientBuilder;
import com.amazonaws.services.s3.model.ListMultipartUploadsRequest;
import com.amazonaws.services.s3.model.MultipartUpload;
import com.amazonaws.services.s3.model.MultipartUploadListing;

import java.util.List;

public class ListMultipartUploads {
    public static void main(String[] args) {
                String accessPointArn = "*** access point ARN ***";

        try {
            // This code expects that you have AWS credentials set up per:
            // https://docs.aws.amazon.com/sdk-for-java/v1/developer-guide/setup-credentials.html
            AmazonS3 s3Client = AmazonS3ClientBuilder.standard()
                    .enableUseArnRegion()
                    .build();

            // Retrieve a list of all in-progress multipart uploads.
            ListMultipartUploadsRequest allMultipartUploadsRequest = new ListMultipartUploadsRequest(accessPointArn);
            MultipartUploadListing multipartUploadListing = s3Client.listMultipartUploads(allMultipartUploadsRequest);
            List<MultipartUpload> uploads = multipartUploadListing.getMultipartUploads();

            // Display information about all in-progress multipart uploads.
            System.out.println(uploads.size() + " multipart upload(s) in progress.");
            for (MultipartUpload u : uploads) {
                System.out.println("Upload in progress: Key = \"" + u.getKey() + "\", id = " + u.getUploadId());
            }
        } catch (AmazonServiceException e) {
            // The call was transmitted successfully, but Amazon S3 couldn't process
            // it, so it returned an error response.
            e.printStackTrace();
        } catch (SdkClientException e) {
            // Amazon S3 couldn't be contacted for a response, or the client
            // couldn't parse the response from Amazon S3.
            e.printStackTrace();
        }
    }
}
```

# Utilisation de Presigned URLs pour S3 sur Outposts
<a name="S3OutpostsPresignedURL"></a>

Pour accorder un accès limité dans le temps aux objets stockés localement dans un Outpost sans mettre à jour votre stratégie de compartiment, vous pouvez utiliser une URL présignée. Avec Presigned URLs, en tant que propriétaire du bucket, vous pouvez partager des objets avec des personnes dans votre cloud privé virtuel (VPC) ou leur donner la possibilité de télécharger ou de supprimer des objets. 

Lorsque vous créez une URL présignée à l'aide du AWS SDKs ou du AWS Command Line Interface (AWS CLI), vous associez l'URL à une action spécifique. Vous accordez également un accès limité dans le temps à l'URL présignée en choisissant un délai d'expiration personnalisé qui peut aller de 1 seconde à 7 jours. Lorsque vous partagez l'URL présignée, la personne dans le VPC peut effectuer l'action intégrée dans l'URL comme s'il s'agissait de l'utilisateur connecté d'origine. Lorsque l'URL atteint son délai d'expiration, elle expire et ne fonctionne plus.

## Limitation des capacités des URL présignées
<a name="S3OutpostsPresignedUrlUploadObjectLimitCapabilities"></a>

Les capacités d’une URL présignée sont limitées par les autorisations de l’utilisateur qui l’a créée. Essentiellement, les jetons présignés URLs sont des jetons porteurs qui donnent accès à ceux qui les possèdent. À ce titre, nous vous recommandons de les protéger de manière appropriée. 

**AWS Version 4 de la signature (SigV4)**  
Pour appliquer un comportement spécifique lorsque les demandes d'URL présignées sont authentifiées à l'aide de AWS Signature Version 4 (SigV4), vous pouvez utiliser des clés de condition dans les politiques de compartiment et les politiques de point d'accès. Par exemple, vous pouvez créer une stratégie de compartiment qui utilise la condition `s3-outposts:signatureAge` pour refuser toute demande d'URL présignée Amazon S3 on Outposts sur les objets du compartiment `example-outpost-bucket` si la signature date de plus de 10 minutes. Pour utiliser cet exemple, remplacez les *`user input placeholders`* par vos propres informations.

------
#### [ JSON ]

****  

```
{
    "Version":"2012-10-17",		 	 	 
    "Statement": [
        {
            "Sid": "Deny a presigned URL request if the signature is more than 10 minutes old",
            "Effect": "Deny",
            "Principal": {"AWS":"444455556666"},
            "Action": "s3-outposts:*",
            "Resource": "arn:aws:s3-outposts:us-east-1:111122223333:outpost/op-01ac5d28a6a232904/bucket/example-outpost-bucket/object/*",
            "Condition": {
                "NumericGreaterThan": {"s3-outposts:signatureAge": 600000},
                "StringEquals": {"s3-outposts:authType": "REST-QUERY-STRING"}
            }
        }
    ]
}
```

------

Pour obtenir la liste des clés de condition et des exemples de stratégies supplémentaires que vous pouvez utiliser pour imposer un comportement spécifique lorsque des requêtes d'URL présignées sont authentifiées à l'aide de Signature Version 4, consultez [AWS Clés de politique spécifiques à l'authentification Signature Version 4 (SigV4)](s3-outposts-bucket-policy-s3-sigv4-conditions.md).

**Restriction de chemin réseau**  
Si vous souhaitez restreindre l'utilisation de l'accès présigné URLs et de tous les accès S3 on Outposts à des chemins réseau particuliers, vous pouvez écrire des politiques qui nécessitent un chemin réseau particulier. Pour définir la restriction sur le principal IAM qui effectue l'appel, vous pouvez utiliser des politiques basées sur l'identité Gestion des identités et des accès AWS (IAM) (par exemple, des politiques d'utilisateur, de groupe ou de rôle). Pour définir la restriction de la ressource S3 on Outposts, vous pouvez utiliser des stratégies basées sur les ressources (par exemple, des stratégies de compartiment et de point d'accès). 

Une restriction de chemin réseau sur le principal IAM exige que l'utilisateur de ces informations d'identification effectue des requêtes à partir du réseau spécifié. Une restriction sur le compartiment ou le point d’accès nécessite que toutes les requêtes adressées à cette ressource proviennent du réseau spécifié. Ces restrictions s'appliquent également hors du scénario des URL présignées.

La condition globale IAM que vous utilisez dépend du type de point de terminaison. Si vous utilisez le point de terminaison public pour S3 on Outposts, utilisez `aws:SourceIp`. Si vous utilisez le point de terminaison d'un VPC pour S3 sur Outposts, utilisez `aws:SourceVpc` ou `aws:SourceVpce`.

La déclaration de politique IAM suivante exige que le principal AWS n'accède qu'à partir de la plage réseau spécifiée. Avec cette déclaration de stratégie, tous les accès doivent provenir de cette plage, même lorsqu'une personne utilise une URL présignée pour S3 on Outposts. Pour utiliser cet exemple, remplacez les *`user input placeholders`* par vos propres informations.

```
{
    "Sid": "NetworkRestrictionForIAMPrincipal",
    "Effect": "Deny",
    "Action": "*",
    "Resource": "*",
    "Condition": {
        "NotIpAddressIfExists": {"aws:SourceIp": "IP-address-range"},
        "BoolIfExists": {"aws:ViaAWSService": "false"}
    }
}
```

Pour un exemple de politique de compartiment qui utilise la clé de condition `aws:SourceIP` AWS globale pour restreindre l'accès à un compartiment S3 on Outposts à une plage réseau spécifique, consultez. [Configuration d’IAM avec S3 sur Outposts](S3OutpostsIAM.md)

## Utilisateurs habilités à créer une URL présignée
<a name="S3Outpostswho-presigned-url"></a>

Toute personne qui possède des autorisations de sécurité valides peut créer une URL présignée. Mais pour qu'un utilisateur dans le VPC puisse accéder correctement à un objet, l'URL présignée doit être créée par une personne qui possède l'autorisation d'effectuer l'opération sur laquelle l'URL présignée est basée.

Vous pouvez utiliser les informations d'identification suivantes pour créer une URL présignée  :
+ **Profil d'instance IAM** : valide pendant 6 heures.
+ **AWS Security Token Service** : valide pendant 36 heures lorsque signé avec des autorisations permanentes, telles que les autorisations de l'utilisateur root du Compte AWS ou d'un utilisateur IAM.
+ **Utilisateur IAM** — Valable jusqu'à 7 jours lorsque vous utilisez AWS Signature version 4.

  Afin de créer une URL présignée valide pendant 7 jours, commencez par déléguer des autorisations d'utilisateur IAM (clé d'accès et clé secrète) pour le kit SDK que vous utilisez. Générez ensuite une URL présignée à l'aide de la version 4 de la AWS signature.

**Note**  
Si vous avez créé une URL présignée à l'aide d'un jeton temporaire, l'URL expire lorsque le jeton expire, même si vous avez créé l'URL avec une heure d'expiration postérieure.
Dans la mesure où URLs les buckets S3 on Outposts sont autorisés à accéder à ceux qui possèdent l'URL, nous vous recommandons de les protéger de manière appropriée. Pour plus d'informations sur la protection des documents présignés URLs, consultez[Limitation des capacités des URL présignées](#S3OutpostsPresignedUrlUploadObjectLimitCapabilities).

## Quand S3 on Outposts vérifie-t-il la date et l'heure d'expiration dans une URL présignée ?
<a name="S3Outpostspresigned-url-when-checked"></a>

S3 on Outposts vérifie la date et l'heure d'expiration d'une URL signée au moment de la requête HTTP. Par exemple, si un client commence à télécharger un fichier volumineux immédiatement avant la date d'expiration, le téléchargement continue même si la date d'expiration intervient pendant le téléchargement. Cependant, si la connexion est perdue et que le client essaie de redémarrer le téléchargement une fois la date d'expiration passée, le téléchargement échoue.

Pour plus d'informations sur l'utilisation d'une URL présignée pour partager ou charger des objets, consultez les rubriques suivantes.

**Topics**
+ [Limitation des capacités des URL présignées](#S3OutpostsPresignedUrlUploadObjectLimitCapabilities)
+ [Utilisateurs habilités à créer une URL présignée](#S3Outpostswho-presigned-url)
+ [Quand S3 on Outposts vérifie-t-il la date et l'heure d'expiration dans une URL présignée ?](#S3Outpostspresigned-url-when-checked)
+ [Partage d'objets à l'aide d'une signature préalable URLs](S3OutpostsShareObjectPresignedURL.md)
+ [Génération d'une URL présignée pour charger un objet sur un compartiment S3 on Outposts](S3OutpostsPresignedUrlUploadObject.md)

# Partage d'objets à l'aide d'une signature préalable URLs
<a name="S3OutpostsShareObjectPresignedURL"></a>

Pour accorder un accès limité dans le temps aux objets stockés localement dans un Outpost sans mettre à jour votre stratégie de compartiment, vous pouvez utiliser une URL présignée. Avec Presigned URLs, en tant que propriétaire du bucket, vous pouvez partager des objets avec des personnes dans votre cloud privé virtuel (VPC) ou leur donner la possibilité de télécharger ou de supprimer des objets. 

Lorsque vous créez une URL présignée à l'aide du AWS SDKs ou du AWS Command Line Interface (AWS CLI), vous associez l'URL à une action spécifique. Vous accordez également un accès limité dans le temps à l'URL présignée en choisissant un délai d'expiration personnalisé qui peut aller de 1 seconde à 7 jours. Lorsque vous partagez l'URL présignée, la personne dans le VPC peut effectuer l'action intégrée dans l'URL comme s'il s'agissait de l'utilisateur connecté d'origine. Lorsque l'URL atteint son délai d'expiration, elle expire et ne fonctionne plus.



Lorsque vous créez une URL présignée, vous devez fournir vos informations d'identification de sécurité, puis spécifier les éléments suivants : 
+ Un point d'accès pour Amazon Resource Name (ARN) du compartiment S3 on Outposts
+ Une clé d'objet
+ Une méthode HTTP (`GET` pour télécharger des objets)
+ Une date et une heure d'expiration

Une URL présignée est uniquement valide pendant la durée spécifiée. Autrement dit, vous devez commencer l'action autorisée par l'URL avant la date et l'heure d'expiration. Vous pouvez utiliser une URL présignée plusieurs fois, jusqu'à la date et l'heure d'expiration. Si vous avez créé une URL présignée à l'aide d'un jeton temporaire, alors l'URL expire lorsque le jeton expire, même si vous avez créé l'URL avec une heure d'expiration postérieure.

Les utilisateurs du cloud privé virtuel (VPC) qui ont accès à l'URL présignée peuvent accéder à l'objet. Par exemple, si votre compartiment contient une vidéo et que ce compartiment et l'objet sont confidentiels, vous pouvez partager la vidéo avec d'autres en générant une URL présignée. Dans la mesure où URLs les buckets S3 on Outposts sont autorisés à accéder à ceux qui possèdent l'URL, nous vous recommandons de les protéger de manière appropriée. URLs Pour plus de détails sur la protection des documents présignés URLs, consultez[Limitation des capacités des URL présignées](S3OutpostsPresignedURL.md#S3OutpostsPresignedUrlUploadObjectLimitCapabilities). 

Toute personne qui possède des autorisations de sécurité valides peut créer une URL présignée. Cependant, l'URL présignée doit être créée par une personne disposant des autorisations nécessaires pour effectuer l'opération sur laquelle l'URL présignée est basée. Pour de plus amples informations, veuillez consulter [Utilisateurs habilités à créer une URL présignée](S3OutpostsPresignedURL.md#S3Outpostswho-presigned-url).

Vous pouvez générer une URL présignée pour partager un objet dans un compartiment S3 on Outposts en utilisant AWS SDKs le et le. AWS CLI Pour plus d’informations, consultez les exemples suivants. 

## En utilisant le AWS SDKs
<a name="S3OutpostsShareObjectPreSignedURLSDK"></a>

Vous pouvez utiliser le AWS SDKs pour générer une URL présignée que vous pouvez communiquer à d'autres personnes afin qu'elles puissent récupérer un objet. 

**Note**  
Lorsque vous utilisez le AWS SDKs pour générer une URL présignée, le délai d'expiration maximal d'une URL présignée est de 7 jours à compter de sa création. 

------
#### [ Java ]

**Example**  
L’exemple suivant génère une URL présignée que vous pouvez communiquer à d’autres afin qu’ils puissent récupérer un objet depuis un compartiment S3 sur Outposts. Pour de plus amples informations, veuillez consulter [Utilisation de Presigned URLs pour S3 sur Outposts](S3OutpostsPresignedURL.md). Pour utiliser cet exemple, remplacez les *`user input placeholders`* par vos propres informations.  

```
import com.amazonaws.AmazonServiceException;
import com.amazonaws.HttpMethod;
import com.amazonaws.SdkClientException;
import com.amazonaws.auth.profile.ProfileCredentialsProvider;
import com.amazonaws.regions.Regions;
import com.amazonaws.services.s3.AmazonS3;
import com.amazonaws.services.s3.AmazonS3ClientBuilder;
import com.amazonaws.services.s3.model.GeneratePresignedUrlRequest;

import java.io.IOException;
import java.net.URL;
import java.time.Instant;

public class GeneratePresignedURL {

    public static void main(String[] args) throws IOException {
        Regions clientRegion = Regions.DEFAULT_REGION;
        String accessPointArn = "*** access point ARN ***";
        String objectKey = "*** object key ***";

        try {
            AmazonS3 s3Client = AmazonS3ClientBuilder.standard()
                    .withRegion(clientRegion)
                    .withCredentials(new ProfileCredentialsProvider())
                    .build();

            // Set the presigned URL to expire after one hour.
            java.util.Date expiration = new java.util.Date();
            long expTimeMillis = Instant.now().toEpochMilli();
            expTimeMillis += 1000 * 60 * 60;
            expiration.setTime(expTimeMillis);

            // Generate the presigned URL.
            System.out.println("Generating pre-signed URL.");
            GeneratePresignedUrlRequest generatePresignedUrlRequest =
                    new GeneratePresignedUrlRequest(accessPointArn, objectKey)
                            .withMethod(HttpMethod.GET)
                            .withExpiration(expiration);
            URL url = s3Client.generatePresignedUrl(generatePresignedUrlRequest);

            System.out.println("Pre-Signed URL: " + url.toString());
        } catch (AmazonServiceException e) {
            // The call was transmitted successfully, but Amazon S3 couldn't process 
            // it, so it returned an error response.
            e.printStackTrace();
        } catch (SdkClientException e) {
            // Amazon S3 couldn't be contacted for a response, or the client
            // couldn't parse the response from Amazon S3.
            e.printStackTrace();
        }
    }
}
```

------
#### [ .NET ]

**Example**  
L’exemple suivant génère une URL présignée que vous pouvez communiquer à d’autres afin qu’ils puissent récupérer un objet depuis un compartiment S3 sur Outposts. Pour de plus amples informations, veuillez consulter [Utilisation de Presigned URLs pour S3 sur Outposts](S3OutpostsPresignedURL.md). Pour utiliser cet exemple, remplacez les *`user input placeholders`* par vos propres informations.   

```
using Amazon;
using Amazon.S3;
using Amazon.S3.Model;
using System;

namespace Amazon.DocSamples.S3
{
    class GenPresignedURLTest
    {
        private const string accessPointArn = "*** access point ARN ***"; 
        private const string objectKey = "*** object key ***";
        // Specify how long the presigned URL lasts, in hours.
        private const double timeoutDuration = 12;
        // Specify your bucket Region (an example Region is shown).
        private static readonly RegionEndpoint bucketRegion = RegionEndpoint.USWest2;
        private static IAmazonS3 s3Client;

        public static void Main()
        {
            s3Client = new AmazonS3Client(bucketRegion);
            string urlString = GeneratePreSignedURL(timeoutDuration);
        }
        static string GeneratePreSignedURL(double duration)
        {
            string urlString = "";
            try
            {
                GetPreSignedUrlRequest request1 = new GetPreSignedUrlRequest
                {
                    BucketName = accessPointArn,
                    Key = objectKey,
                    Expires = DateTime.UtcNow.AddHours(duration)
                };
                urlString = s3Client.GetPreSignedURL(request1);
            }
            catch (AmazonS3Exception e)
            {
                Console.WriteLine("Error encountered on server. Message:'{0}' when writing an object", e.Message);
            }
            catch (Exception e)
            {
                Console.WriteLine("Unknown encountered on server. Message:'{0}' when writing an object", e.Message);
            }
            return urlString;
        }
    }
}
```

------
#### [ Python ]

L'exemple suivant génère une URL présignée pour partager un objet à l'aide du SDK pour Python (Boto3). Par exemple, utilisez un client Boto3 et la fonction `generate_presigned_url` pour générer une URL présignée qui vous permet d'accéder à un objet `GET`.

```
import boto3
    url = boto3.client('s3').generate_presigned_url(
    ClientMethod='get_object', 
    Params={'Bucket': 'ACCESS_POINT_ARN', 'Key': 'OBJECT_KEY'},
    ExpiresIn=3600)
```

Pour plus d'informations sur l'utilisation du kit SDK pour Python (Boto3) pour générer une URL présignée, consultez la section [Python](https://boto3.amazonaws.com/v1/documentation/api/latest/reference/services/s3.html#S3.Client.generate_presigned_url) dans la *Référence d'API AWS SDK pour Python (Boto) *.

------

## En utilisant le AWS CLI
<a name="S3OutpostsShareObjectPresignedCLI"></a>

L'exemple de AWS CLI commande suivant génère une URL présignée pour un compartiment S3 on Outposts. Pour utiliser cet exemple, remplacez les *`user input placeholders`* par vos propres informations.

**Note**  
Lorsque vous utilisez le AWS CLI pour générer une URL présignée, le délai d'expiration maximal d'une URL présignée est de 7 jours à compter de sa création. 

```
aws s3 presign s3://arn:aws:s3-outposts:us-east-1:111122223333:outpost/op-01ac5d28a6a232904/accesspoint/example-outpost-access-point/mydoc.txt --expires-in 604800
```

Pour de plus amples informations, veuillez consulter [presign](https://awscli.amazonaws.com/v2/documentation/api/latest/reference/s3/presign.html) (présigner) dans la *Référence des commandes AWS CLI *.

# Génération d'une URL présignée pour charger un objet sur un compartiment S3 on Outposts
<a name="S3OutpostsPresignedUrlUploadObject"></a>

Pour accorder un accès limité dans le temps aux objets stockés localement dans un Outpost sans mettre à jour votre stratégie de compartiment, vous pouvez utiliser une URL présignée. Avec Presigned URLs, en tant que propriétaire du bucket, vous pouvez partager des objets avec des personnes dans votre cloud privé virtuel (VPC) ou leur donner la possibilité de télécharger ou de supprimer des objets. 

Lorsque vous créez une URL présignée à l'aide du AWS SDKs ou du AWS Command Line Interface (AWS CLI), vous associez l'URL à une action spécifique. Vous accordez également un accès limité dans le temps à l'URL présignée en choisissant un délai d'expiration personnalisé qui peut aller de 1 seconde à 7 jours. Lorsque vous partagez l'URL présignée, la personne dans le VPC peut effectuer l'action intégrée dans l'URL comme s'il s'agissait de l'utilisateur connecté d'origine. Lorsque l'URL atteint son délai d'expiration, elle expire et ne fonctionne plus.

Lorsque vous créez une URL présignée, vous devez fournir vos informations d'identification de sécurité, puis spécifier les éléments suivants : 
+ Un point d'accès pour Amazon Resource Name (ARN) du compartiment S3 on Outposts
+ Une clé d'objet
+ Une méthode HTTP (`PUT` pour le chargement d'objets)
+ Une date et une heure d'expiration

Une URL présignée est uniquement valide pendant la durée spécifiée. Autrement dit, vous devez commencer l'action autorisée par l'URL avant la date et l'heure d'expiration. Vous pouvez utiliser une URL présignée plusieurs fois, jusqu'à la date et l'heure d'expiration. Si vous avez créé une URL présignée à l'aide d'un jeton temporaire, alors l'URL expire lorsque le jeton expire, même si vous avez créé l'URL avec une heure d'expiration postérieure. 

Si l'action autorisée par l'URL présignée est composée de plusieurs étapes, comme un chargement partitionné, vous devez démarrer l'ensemble des étapes avant l'expiration. Si S3 on Outposts tente de démarrer une étape avec une URL expirée, vous recevrez une erreur.

Les utilisateurs du cloud privé virtuel (VPC) qui ont accès à l'URL présignée peuvent charger des objets. Par exemple, un utilisateur du VPC qui a accès à l'URL présignée peut charger un objet dans votre compartiment. Étant donné que la version présignée URLs accorde l'accès à votre bucket S3 on Outposts à tout utilisateur du VPC ayant accès à l'URL présignée, nous vous recommandons de protéger ces URL de manière appropriée. URLs Pour plus de détails sur la protection des documents présignés URLs, consultez[Limitation des capacités des URL présignées](S3OutpostsPresignedURL.md#S3OutpostsPresignedUrlUploadObjectLimitCapabilities). 

Toute personne qui possède des autorisations de sécurité valides peut créer une URL présignée. Cependant, l'URL présignée doit être créée par une personne disposant des autorisations nécessaires pour effectuer l'opération sur laquelle l'URL présignée est basée. Pour de plus amples informations, veuillez consulter [Utilisateurs habilités à créer une URL présignée](S3OutpostsPresignedURL.md#S3Outpostswho-presigned-url).

## Utilisation du AWS SDKs pour générer une URL présignée pour une opération d'objet S3 on Outposts
<a name="s3-outposts-presigned-urls-upload-examples"></a>

------
#### [ Java ]

**SDK pour Java 2.x**  
Cet exemple montre comment générer une URL présignée que vous pouvez utiliser pour charger un objet dans un compartiment S3 on Outposts pour une durée limitée. Pour de plus amples informations, veuillez consulter [Utilisation de Presigned URLs pour S3 sur Outposts](S3OutpostsPresignedURL.md).   

```
    public static void signBucket(S3Presigner presigner, String outpostAccessPointArn, String keyName) {

        try {
            PutObjectRequest objectRequest = PutObjectRequest.builder()
                    .bucket(accessPointArn)
                    .key(keyName)
                    .contentType("text/plain")
                    .build();

            PutObjectPresignRequest presignRequest = PutObjectPresignRequest.builder()
                    .signatureDuration(Duration.ofMinutes(10))
                    .putObjectRequest(objectRequest)
                    .build();

            PresignedPutObjectRequest presignedRequest = presigner.presignPutObject(presignRequest);


            String myURL = presignedRequest.url().toString();
            System.out.println("Presigned URL to upload a file to: " +myURL);
            System.out.println("Which HTTP method must be used when uploading a file: " +
                    presignedRequest.httpRequest().method());

            // Upload content to the S3 on Outposts bucket by using this URL.
            URL url = presignedRequest.url();

            // Create the connection and use it to upload the new object by using the presigned URL.
            HttpURLConnection connection = (HttpURLConnection) url.openConnection();
            connection.setDoOutput(true);
            connection.setRequestProperty("Content-Type","text/plain");
            connection.setRequestMethod("PUT");
            OutputStreamWriter out = new OutputStreamWriter(connection.getOutputStream());
            out.write("This text was uploaded as an object by using a presigned URL.");
            out.close();

            connection.getResponseCode();
            System.out.println("HTTP response code is " + connection.getResponseCode());

        } catch (S3Exception e) {
            e.getStackTrace();
        } catch (IOException e) {
            e.getStackTrace();
        }
    }
```

------
#### [ Python ]

**Kit SDK for Python (Boto3)**  
Cet exemple montre comment générer une URL présignée qui peut exécuter une action S3 on Outposts pour une durée limitée. Pour de plus amples informations, veuillez consulter [Utilisation de Presigned URLs pour S3 sur Outposts](S3OutpostsPresignedURL.md). Pour effectuer une requête avec l'URL, utilisez le package `Requests`.  

```
import argparse
import logging
import boto3
from botocore.exceptions import ClientError
import requests

logger = logging.getLogger(__name__)


def generate_presigned_url(s3_client, client_method, method_parameters, expires_in):
    """
    Generate a presigned S3 on Outposts URL that can be used to perform an action.

    :param s3_client: A Boto3 Amazon S3 client.
    :param client_method: The name of the client method that the URL performs.
    :param method_parameters: The parameters of the specified client method.
    :param expires_in: The number of seconds that the presigned URL is valid for.
    :return: The presigned URL.
    """
    try:
        url = s3_client.generate_presigned_url(
            ClientMethod=client_method,
            Params=method_parameters,
            ExpiresIn=expires_in
        )
        logger.info("Got presigned URL: %s", url)
    except ClientError:
        logger.exception(
            "Couldn't get a presigned URL for client method '%s'.", client_method)
        raise
    return url


def usage_demo():
    logging.basicConfig(level=logging.INFO, format='%(levelname)s: %(message)s')

    print('-'*88)
    print("Welcome to the Amazon S3 on Outposts presigned URL demo.")
    print('-'*88)

    parser = argparse.ArgumentParser()
    parser.add_argument('accessPointArn', help="The name of the S3 on Outposts access point ARN.")
    parser.add_argument(
        'key', help="For a GET operation, the key of the object in S3 on Outposts. For a "
                    "PUT operation, the name of a file to upload.")
    parser.add_argument(
        'action', choices=('get', 'put'), help="The action to perform.")
    args = parser.parse_args()

    s3_client = boto3.client('s3')
    client_action = 'get_object' if args.action == 'get' else 'put_object'
    url = generate_presigned_url(
        s3_client, client_action, {'Bucket': args.accessPointArn, 'Key': args.key}, 1000)

    print("Using the Requests package to send a request to the URL.")
    response = None
    if args.action == 'get':
        response = requests.get(url)
    elif args.action == 'put':
        print("Putting data to the URL.")
        try:
            with open(args.key, 'r') as object_file:
                object_text = object_file.read()
            response = requests.put(url, data=object_text)
        except FileNotFoundError:
            print(f"Couldn't find {args.key}. For a PUT operation, the key must be the "
                  f"name of a file that exists on your computer.")

    if response is not None:
        print("Got response:")
        print(f"Status: {response.status_code}")
        print(response.text)

    print('-'*88)


if __name__ == '__main__':
    usage_demo()
```

------

# Amazon S3 sur Outposts avec Amazon EMR local sur Outposts
<a name="s3-outposts-emr"></a>

Amazon EMR est une plate-forme de cluster gérée qui simplifie l'exécution de structures de mégadonnées, telles que le traitement Apache Hadoop et Apache Spark AWS l'analyse de grandes quantités de données. Grâce à ces infrastructures et des projets open source connexes, vous pouvez traiter des données à des fins d’analytique et pour des charges de travail d’informatique décisionnelle. Amazon EMR vous aide également à transformer et à déplacer de grandes quantités de données vers et depuis d'autres banques de données et bases de AWS données, et prend en charge Amazon S3 on Outposts. Pour plus d’informations sur Amazon EMR, consultez [Amazon EMR sur Outposts](https://docs.aws.amazon.com/emr/latest/ManagementGuide/emr-plan-outposts.html) dans le *Guide de gestion Amazon EMR*. 

Pour Amazon S3 sur Outposts, Amazon EMR a commencé à prendre en charge le connecteur Apache Hadoop S3A dans sa version 7.0.0. Les versions antérieures d’Amazon EMR ne prennent pas en charge le service S3 local sur Outposts, et le système de fichiers EMR (EMRFS) n’est pas pris en charge.

**Applications prises en charge**  
Amazon EMR avec Amazon S3 sur Outposts prend en charge les applications suivantes : 
+ Hadoop
+ Spark
+ Hue
+ Hive
+ Sqoop
+ Pig
+ Hudi
+ Flink

Pour plus d’informations, consultez le [Guide de version Amazon EMR](https://docs.aws.amazon.com/emr/latest/ReleaseGuide/emr-release-components.html).

## Création et configuration d’un compartiment Amazon S3 sur Outposts
<a name="create-outposts-bucket"></a>

Amazon EMR utilise Amazon S3 on Outposts pour stocker les données d'entrée et de sortie. AWS SDK pour Java Vos fichiers journaux Amazon EMR sont stockés dans un emplacement Amazon S3 régional que vous sélectionnez et ne sont pas stockés localement sur l’Outpost. Pour plus d’informations, consultez [Journaux Amazon EMR](https://docs.aws.amazon.com/emr/latest/ManagementGuide/emr-manage-view-web-log-files.html) dans le *Guide de gestion Amazon EMR*. 

Pour se conformer aux exigences Amazon S3 et DNS, les compartiments S3 sur Outposts sont soumis à des restrictions et des limitations. Pour de plus amples informations, veuillez consulter [Création d’un compartiment S3 sur Outposts](S3OutpostsCreateBucket.md).

À partir d’Amazon EMR version 7.0.0, vous pouvez utiliser Amazon EMR avec S3 sur Outposts et le système de fichiers S3A.

**Prérequis**  
**Autorisations S3 on Outposts** — Lorsque vous créez votre profil d'instance Amazon EMR, votre rôle doit contenir l'espace de noms Gestion des identités et des accès AWS (IAM) de S3 on Outposts. S3 sur Outposts possède son propre espace de noms, `s3-outposts*`. Pour obtenir un exemple de politique utilisant cet espace de noms, consultez [Configuration d’IAM avec S3 sur Outposts](S3OutpostsIAM.md).

**Connecteur S3A** : pour configurer votre cluster EMR pour accéder aux données d’un compartiment Amazon S3 sur Outposts, vous devez utiliser le connecteur Apache Hadoop S3A. Pour utiliser le connecteur, assurez-vous que tous vos S3 URIs utilisent le `s3a` schéma. Si ce n'est pas le cas, vous pouvez configurer l'implémentation du système de fichiers que vous utilisez pour votre cluster EMR afin que votre S3 URIs fonctionne avec le connecteur S3A.

Pour configurer l'implémentation du système de fichiers afin qu'elle fonctionne avec le connecteur S3A, vous utilisez les propriétés de `fs.AbstractFileSystem.file_scheme.impl` configuration `fs.file_scheme.impl` et de votre cluster EMR, `file_scheme` qui correspondent au type de URIs S3 dont vous disposez. Pour utiliser l’exemple suivant, remplacez les *`user input placeholders`* par vos propres informations. Par exemple, pour modifier l'implémentation du système de fichiers pour S3 URIs qui utilise le `s3` schéma, spécifiez les propriétés de configuration de cluster suivantes :

```
1. [
2.   {
3. "Classification": "core-site",
4.     "Properties": {
5.     "fs.s3.impl": "org.apache.hadoop.fs.s3a.S3AFileSystem",
6.     "fs.AbstractFileSystem.s3.impl": "org.apache.hadoop.fs.s3a.S3A"
7.     }
8.   }
9. ]
```

Pour utiliser S3A, définissez la propriété de configuration `fs.file_scheme.impl` sur `org.apache.hadoop.fs.s3a.S3AFileSystem` et définissez la propriété `fs.AbstractFileSystem.file_scheme.impl` sur `org.apache.hadoop.fs.s3a.S3A`.

Par exemple, si vous accédez au chemin `s3a://bucket/...`, définissez la propriété `fs.s3a.impl` sur `org.apache.hadoop.fs.s3a.S3AFileSystem` et définissez la propriété `fs.AbstractFileSystem.s3a.impl` sur `org.apache.hadoop.fs.s3a.S3A`.

## Premiers pas avec Amazon EMR et Amazon S3 sur Outposts
<a name="getting-started-outposts"></a>

Les rubriques suivantes expliquent comment commencer à utiliser Amazon EMR avec Amazon S3 sur Outposts.

**Topics**
+ [Création d’une stratégie d’autorisations](#create-permission-policy)
+ [Création et configuration de votre cluster](#configure-cluster)
+ [Présentation des configurations](#configurations-overview)
+ [Considérations](#considerations)

### Création d’une stratégie d’autorisations
<a name="create-permission-policy"></a>

Avant de créer un cluster EMR utilisant Amazon S3 sur Outposts, vous devez créer une politique IAM à attacher au profil d’instance Amazon EC2 pour le cluster. Cette politique doit disposer d’autorisations pour accéder à l’Amazon Resource Name (ARN) du point d’accès S3 sur Outposts. Pour plus d’informations sur la création de politiques IAM pour S3 sur Outposts, consultez [Configuration d’IAM avec S3 sur Outposts](S3OutpostsIAM.md). 

L’exemple de politique suivant montre comment accorder les autorisations requises. Après avoir créé la politique, associez-la au rôle de profil d’instance que vous utilisez pour créer votre cluster EMR, comme décrit dans la section [Création et configuration de votre cluster](#configure-cluster). Pour utiliser cet exemple, remplacez les *`user input placeholders`* par vos propres informations.

```
 1. {
 2. "Version":"2012-10-17",		 	 	  
 3.   "Statement": [
 4.         {
 5.   "Effect": "Allow",
 6.             "Resource": "arn:aws:s3-outposts:us-west-2:111122223333:outpost/op-01ac5d28a6a232904/accesspoint/access-point-name,
 7.             "Action": [
 8.                 "s3-outposts:*"
 9.             ]
10.         }
11.     ]
12.     
13.  }
```

### Création et configuration de votre cluster
<a name="configure-cluster"></a>

Pour créer un cluster qui exécute Spark avec S3 sur Outposts, procédez comme suit dans la console.

**Pour créer un cluster qui exécute Spark avec S3 sur Outposts**

1. Ouvrez la console Amazon EMR à l'adresse [https://console.aws.amazon.com/elasticmapreduce/](https://console.aws.amazon.com/elasticmapreduce/).

1. Dans le volet de navigation de gauche, choisissez **Clusters**.

1. Choisissez **Créer un cluster**.

   

1. Pour **Version Amazon EMR**, choisissez **emr-7.0.0** ou une version ultérieure.

1. Pour Offre d’applications, choisissez **Spark interactive**. Sélectionnez ensuite les autres applications prises en charge que vous souhaitez inclure dans votre cluster.

1. Pour activer Amazon S3 sur Outposts, entrez vos paramètres de configuration.

**Exemples de paramètres de configuration**  
Pour utiliser les exemples de paramètres de configuration suivants, remplacez les `user input placeholders` par vos propres informations.

   ```
    1. [
    2.  {
    3.    "Classification": "core-site",
    4.    "Properties": {
    5.      "fs.s3a.bucket.DOC-EXAMPLE-BUCKET.accesspoint.arn": "arn:aws:s3-outposts:us-west-2:111122223333:outpost/op-01ac5d28a6a232904/accesspoint/access-point-name"
    6.      "fs.s3a.committer.name": "magic", 
    7.      "fs.s3a.select.enabled": "false"
    8.     }
    9.   },
   10.   {
   11.     "Classification": "hadoop-env",
   12.     "Configurations": [
   13.       {
   14.         "Classification": "export",
   15.         "Properties": {
   16.           "JAVA_HOME": "/usr/lib/jvm/java-11-amazon-corretto.x86_64" 
   17.           }
   18.        }
   19.      ],
   20.      "Properties": {}
   21.    },
   22.    {
   23.      "Classification": "spark-env",
   24.      "Configurations": [
   25.        {
   26.          "Classification": "export",
   27.          "Properties": {
   28.            "JAVA_HOME": "/usr/lib/jvm/java-11-amazon-corretto.x86_64"
   29.          }
   30.        }
   31.       ],
   32.       "Properties": {}
   33.      },
   34.      {
   35.       "Classification": "spark-defaults",
   36.       "Properties": {
   37.         "spark.executorEnv.JAVA_HOME": "/usr/lib/jvm/java-11-amazon-corretto.x86_64",
   38.         "spark.sql.sources.fastS3PartitionDiscovery.enabled": "false"
   39.       }
   40.      }
   41.   ]
   ```

1. Dans la section **Mise en réseau**, choisissez un cloud privé virtuel (VPC) et un sous-réseau situés sur votre rack. AWS Outposts Pour plus d’informations sur Amazon EMR sur Outposts, consultez [Clusters EMR sur AWS Outposts](https://docs.aws.amazon.com/emr/latest/ManagementGuide/emr-plan-outposts.html) dans le *Guide de gestion Amazon EMR*.

1. Dans la section **Profil d’instance EC2 pour Amazon EMR**, choisissez le rôle IAM auquel est jointe la [politique d’autorisation que vous avez créée précédemment](#create-permission-policy).

1. Configurez les paramètres de cluster restants, puis choisissez **Créer un cluster**.

### Présentation des configurations
<a name="configurations-overview"></a>

Le tableau suivant décrit les configurations S3A et les valeurs à spécifier pour leurs paramètres lorsque vous configurez un cluster qui utilise S3 sur Outposts avec Amazon EMR.


| Paramètre | Valeur par défaut | Valeur requise pour S3 sur Outposts | Explication | 
| --- | --- | --- | --- | 
|  `fs.s3a.aws.credentials.provider`  |  Si la valeur n’est pas spécifiée, S3A recherchera S3 dans le compartiment de la région avec le nom de compartiment Outposts.  |  ARN du point d’accès du compartiment S3 sur Outposts  |  Amazon S3 sur Outposts prend en charge les points d’accès Virtual Private Cloud (VPC) uniquement comme seul moyen d’accéder à vos compartiments Outposts.  | 
|  `fs.s3a.committer.name`  | file |  `magic`  |  Le validateur magique est le seul validateur pris en charge pour S3 sur Outposts.   | 
|  `fs.s3a.select.enabled`  |  `TRUE`  |  `FALSE`  | S3 Select n’est pas pris en charge sur Outposts. | 
|  `JAVA_HOME`  |  `/usr/lib/jvm/java-8`  |  `/usr/lib/jvm/java-11-amazon-corretto.x86_64`  |  S3 sur Outposts sur S3A nécessite Java version 11.  | 

Le tableau suivant décrit les configurations Spark et les valeurs à spécifier pour leurs paramètres lorsque vous configurez un cluster qui utilise S3 sur Outposts avec Amazon EMR.


| Paramètre | Valeur par défaut | Valeur requise pour S3 sur Outposts | Explication | 
| --- | --- | --- | --- | 
|  `spark.sql.sources.fastS3PartitionDiscovery.enabled`  |  `TRUE`  |  `FALSE`  |  S3 sur Outposts ne prend pas en charge la partition rapide.  | 
|  `spark.executorEnv.JAVA_HOME`  |  `/usr/lib/jvm/java-8`  |  `/usr/lib/jvm/java-11-amazon-corretto.x86_64`  |  S3 sur Outposts sur S3A nécessite Java version 11.  | 

### Considérations
<a name="considerations"></a>

Tenez compte des points suivants lorsque vous intégrez Amazon EMR avec les compartiments S3 sur Outposts :
+ Amazon S3 sur Outposts est pris en charge avec Amazon EMR version 7.0.0 et ultérieure.
+ Le connecteur S3A est nécessaire pour utiliser S3 sur Outposts avec Amazon EMR. Seul S3A dispose des fonctionnalités requises pour interagir avec les compartiments S3 sur Outposts. Pour obtenir des informations sur la configuration du connecteur S3A, consultez [Conditions préalables](#s3a-outposts-prerequisites). 
+ Amazon S3 sur Outposts prend en charge uniquement le chiffrement côté serveur avec les clés gérées par Amazon S3 (SSE-S3) avec Amazon EMR. Pour de plus amples informations, veuillez consulter [Chiffrement des données dans S3 sur Outposts](s3-outposts-data-encryption.md).
+ Amazon S3 on Outposts ne prend pas en charge les écritures avec le S3A. FileOutputCommitter Les écritures effectuées avec le S3A FileOutputCommitter sur les compartiments S3 on Outposts entraînent l'erreur suivante InvalidStorageClass: La classe de stockage que vous avez spécifiée n'est pas valide.
+ Amazon S3 sur Outposts n’est pas pris en charge avec Amazon EMR sans serveur ni Amazon EMR sur EKS.
+ Les journaux Amazon EMR sont stockés dans un emplacement Amazon S3 régional que vous sélectionnez et ne sont pas stockés localement dans le compartiment S3 sur Outposts.

# Mise en cache d’autorisation et d’authentification
<a name="s3-outposts-auth-cache"></a>

S3 sur Outposts met en cache de manière sécurisée les données d’authentification et d’autorisation localement sur les racks Outposts. Le cache supprime les allers-retours vers le parent Région AWS pour chaque demande. Cela élimine la variabilité introduite par les allers-retours réseau. Avec le cache d’authentification et d’autorisation dans S3 sur Outposts, vous obtenez des latences constantes indépendantes de la latence de la connexion entre les Outposts et la Région AWS. 

Lorsque vous effectuez une demande d’API S3 sur Outposts, les données d’authentification et d’autorisation sont mises en cache de manière sécurisée. Les données mises en cache sont ensuite utilisées pour authentifier les demandes d’API d’objet S3 suivantes. S3 sur Outposts met en cache uniquement les données d’authentification et d’autorisation lorsque la demande est signée à l’aide de Signature Version 4A (SigV4A). Le cache est stocké localement sur les Outposts au sein du service S3 sur Outposts. Il est actualisé de manière asynchrone lorsque vous effectuez une demande d’API S3. Le cache est chiffré et aucune clé cryptographique en texte brut n’est stockée sur Outposts. 

Le cache est valide pendant un maximum de 10 minutes lorsque l’Outpost est connecté à la Région AWS. Il est actualisé de manière asynchrone lorsque vous effectuez une demande d’API S3 sur Outposts, afin de garantir l’utilisation des politiques les plus récentes. Si l'Outpost est déconnecté du Région AWS, le cache sera valide pendant 12 heures au maximum. 

## Configuration du cache d’autorisation et d’authentification
<a name="config-auth-cache"></a>

S3 sur Outposts met automatiquement en cache les données d’authentification et d’autorisation pour les demandes signées avec l’algorithme SigV4A. Pour plus d'informations, consultez [la section Signature des demandes d' AWS API](https://docs.aws.amazon.com/IAM/latest/UserGuide/reference_aws-signing.html) dans le *guide de Gestion des identités et des accès AWS l'utilisateur*. L'algorithme SigV4A est disponible dans les dernières versions du. AWS SDKs Vous pouvez l’obtenir via une dépendance aux [bibliothèques AWS CRT (Common Runtime)](https://docs.aws.amazon.com/sdkref/latest/guide/common-runtime.html). 

Vous devez utiliser la dernière version du AWS SDK et installer la dernière version du CRT. Par exemple, vous pouvez exécuter `pip install awscrt` pour obtenir la version la plus récente du CRT avec Boto3.

S3 sur Outposts ne met pas en cache les données d’authentification et d’autorisation pour les demandes signées avec l’algorithme SigV4.

## Validation de la signature SigV4A
<a name="validate-SigV4A"></a>

Vous pouvez l'utiliser AWS CloudTrail pour valider que les demandes ont été signées avec SIGv4a. Pour plus d'informations sur la configuration CloudTrail de S3 sur Outposts, consultez. [Surveillance de S3 sur les Outposts avec des logs AWS CloudTrail](S3OutpostsCloudtrail.md) 

Après avoir configuré CloudTrail, vous pouvez vérifier comment une demande a été signée dans le `SignatureVersion` champ des CloudTrail journaux. Les demandes signées avec SigV4A ont un paramètre `SignatureVersion` défini sur `AWS 4-ECDSA-P256-SHA256`. Les demandes signées avec SigV4 ont un paramètre `SignatureVersion` défini sur `AWS 4-HMAC-SHA256`.