

O AWS Mobile SDK for Unity agora está incluído no AWS SDK para .NET. Este guia faz referência à versão arquivada do Mobile SDK para Unity. Para obter mais informações, consulte [O que é o SDK AWS móvel para Unity?](what-is-unity-plugin.md).

As traduções são geradas por tradução automática. Em caso de conflito entre o conteúdo da tradução e da versão original em inglês, a versão em inglês prevalecerá.

# Amazon Simple Storage Service (S3)
<a name="s3"></a>

O Amazon Simple Storage Service (Amazon S3) fornece aos desenvolvedores e às equipes de TI um armazenamento de objetos seguro, duradouro e altamente escalável e econômico. Os desenvolvedores do Unity podem tirar proveito do S3 para carregar dinamicamente os ativos usados por seus jogos. Inicialmente, isso pode fazer com que o download dos jogos nas lojas de aplicativos seja mais rápido.

Para obter mais informações sobre o S3, consulte [Amazon S3](https://aws.amazon.com/s3/).

Para obter informações sobre a disponibilidade de regiões do AWS S3, consulte [Disponibilidade de regiões do Serviço da AWS](https://aws.amazon.com/about-aws/global-infrastructure/regional-product-services/).

**nota**  
Alguns dos exemplos neste documento pressupõem o uso de uma variável de caixa de texto chamada ResultText para exibir a saída de rastreamento.

## Criação e configuração de um bucket do S3
<a name="create-and-configure-an-s3-bucket"></a>

O Amazon S3 armazena os recursos nos buckets do Amazon S3, contêineres de armazenamento na nuvem que residem em uma [região](https://docs.aws.amazon.com/general/latest/gr/rande.html) específica. Cada bucket do Amazon S3 deve ter um nome globalmente exclusivo. Você pode usar o [console do Amazon S3](https://console.aws.amazon.com/s3/) para criar um bucket.

### Criar um bucket do S3
<a name="create-an-s3-bucket"></a>

1. Faça login no [console do Amazon S3](https://console.aws.amazon.com/s3/) e clique em **Create Bucket (Criar bucket)**.

1. Insira um nome de bucket, selecione uma região e clique em **Create (Criar)**.

### Definir permissões para o S3
<a name="set-permissions-for-s3"></a>

A política padrão da função do IAM concede ao aplicativo acesso ao Amazon Mobile Analytics e ao Amazon Cognito Sync. Para que o grupo de identidades do Cognito acesse o Amazon S3, você deve modificar as funções do grupo de identidades.

1. Acesse o [console do Identity and Access Management](https://console.aws.amazon.com/iam/home) e clique em **Roles (Funções)** no painel à esquerda.

1. Digite o nome do grupo de identidades na caixa de pesquisa. Duas funções serão listadas: uma para os usuários autenticados e outra para os usuários não autenticados.

1. Clique na função para usuários não autenticados (ela terá "unauth" anexado ao nome do grupo de identidades).

1. Clique em **Create Role Policy (Criar política de função)**, selecione **Policy Generator (Gerador de políticas)** e, em seguida, clique em **Select (Selecionar)**.

1. Na página **Edit Permissions (Editar permissões)**, insira as configurações mostradas na imagem a seguir, substituindo o Nome de recurso da Amazon (ARN) pelo seu nome. O ARN do bucket do S3 é semelhante ao `arn:aws:s3:::examplebucket/*` e composto pela região na qual o bucket está localizado e pelo nome do bucket. As configurações mostradas abaixo concederão ao grupo de identidades acesso total a todas as ações do bucket especificado.  
![\[Edit Permissions interface for AWS policy creation, showing options for Amazon S3 access control.\]](http://docs.aws.amazon.com/pt_br/mobile/sdkforunity/developerguide/images/edit-permissions.png)

1. Clique no botão **Add Statement (Adicionar instrução)** e em **Next Step (Próxima etapa)**.

1. O assistente mostrará a você a configuração gerada. Clique em **Apply Policy (Aplicar política)**.

Para obter mais informações sobre como conceder acesso ao S3, consulte [Conceder acesso a um bucket do Amazon S3](http://blogs.aws.amazon.com/security/post/Tx3VRSWZ6B3SHAV/Writing-IAM-Policies-How-to-grant-access-to-an-Amazon-S3-bucket).

### Upload de arquivos no console
<a name="upload-files-from-the-console"></a>

Para fazer upload de um arquivo de teste para o bucket:

1. No console do S3, na visualização do bucket, clique em **Upload (Fazer upload)**.

1. Clique em **Add Files (Adicionar arquivos)** e selecione um arquivo de teste para fazer o upload. Neste tutorial, vamos supor que você esteja fazendo o upload de uma imagem chamada `myImage.jpg`.

1. Com a imagem de teste selecionada, clique em **Start Upload (Iniciar upload)**.

### (opcional) Configuração da versão de assinatura para solicitações do S3
<a name="optional-configure-the-signature-version-for-s3-requests"></a>

Cada interação com o Amazon S3 é autenticada ou anônima. A AWS usa os algoritmos do Signature versão 4 ou Signature versão 2 para autenticar chamadas para o serviço.

Todas as novas regiões da AWS criadas após janeiro de 2014 são compatíveis apenas com o Signature versão 4. No entanto, muitas regiões mais antigas ainda oferecem suporte às solicitações do Signature versão 4 e do Signature versão 2.

Se seu bucket estiver em uma das regiões que não oferecem suporte às solicitações do Signature versão 2, conforme listado [nesta página](https://docs.aws.amazon.com/general/latest/gr/signature-version-2.html), você deverá definir o AWSConfigs S3. UseSignatureVersion4 propriedades para “verdadeiro”.

Para obter mais informações sobre as versões do AWS Signature, consulte [Solicitações de autenticação (AWS Signature Version 4)](https://docs.aws.amazon.com/AmazonS3/latest/API/sig-v4-authenticating-requests.html).

## Criação do cliente Amazon S3
<a name="create-the-amazon-s3-client"></a>

Para usar o Amazon S3, primeiro precisamos criar uma instância do AmazonS3Client que faça referência à instância do Cognito que você criou anteriormente: AWSCredentials 

```
AmazonS3Client S3Client = new AmazonS3Client (credentials);
```

A classe `AmazonS3Client` é o ponto de entrada para a API de alto nível do S3.

## Listar buckets
<a name="list-buckets"></a>

Para listar os buckets em uma conta da AWS, chame o método `AmazonS3Client.ListBucketsAsync` conforme mostrado no código de exemplo a seguir:

```
// ResultText is a label used for displaying status information
ResultText.text = "Fetching all the Buckets";
 Client.ListBucketsAsync(new ListBucketsRequest(), (responseObject) =>
 {
     ResultText.text += "\n";
     if (responseObject.Exception == null)
     {
         ResultText.text += "Got Response \nPrinting now \n";
         responseObject.Response.Buckets.ForEach((s3b) =>
         {
             ResultText.text += string.Format("bucket = {0}, created date = {1} \n",
             s3b.BucketName, s3b.CreationDate);
         });
     }
     else
     {
         ResultText.text += "Got Exception \n";
     }
 });
```

## Listar objetos
<a name="list-objects"></a>

Para listar todos os objetos em um buckets, chame o método `AmazonS3Client.ListObjectsAsync` conforme mostrado no código de exemplo a seguir:

```
// ResultText is a label used for displaying status information
ResultText.text = "Fetching all the Objects from " + S3BucketName;

var request = new ListObjectsRequest()
{
    BucketName = S3BucketName
};

Client.ListObjectsAsync(request, (responseObject) =>
{
    ResultText.text += "\n";
    if (responseObject.Exception == null)
    {
        ResultText.text += "Got Response \nPrinting now \n";
        responseObject.Response.S3Objects.ForEach((o) =>
        {
            ResultText.text += string.Format("{0}\n", o.Key);
        });
    }
    else
    {
        ResultText.text += "Got Exception \n";
    }
});
```

## Fazer download de um objeto
<a name="download-an-object"></a>

Para baixar um objeto, crie um GetObjectRequest, especificando o nome e a chave do bucket e transmita o objeto para uma chamada para Client. GetObjectAsync:

```
private void GetObject()
{
    ResultText.text = string.Format("fetching {0} from bucket {1}",
    SampleFileName, S3BucketName);
    Client.GetObjectAsync(S3BucketName, SampleFileName, (responseObj) =>
    {
       string data = null;
       var response = responseObj.Response;
       if (response.ResponseStream != null)
       {
          using (StreamReader reader = new StreamReader(response.ResponseStream))
          {
             data = reader.ReadToEnd();
          }

          ResultText.text += "\n";
          ResultText.text += data;
       }
  });
}
```

GetObjectAsync usa uma instância do GetObjectRequest, um retorno de chamada e uma AsyncOptions instância. O retorno de chamada deve ser do tipo: `AmazonServiceCallback<GetObjectRequest, GetObjectResponse>`. A AsyncOptions instância é opcional. Se especificada, ela determinará se o retorno de chamada será executado no thread principal.

## Fazer upload de um objeto
<a name="upload-an-object"></a>

Para fazer o upload de um objeto, grave seu objeto em um stream, crie um novo PostObjectRequest e especifique a chave, o nome do bucket e os dados do stream.

O AWS SDK para Unity usa o cliente WWW HTTP, que não é compatível com a operação HTTP PUT. Para fazer upload de um objeto para o bucket do S3, você precisará usar a publicação de navegador do S3, como mostrado abaixo.

```
public void PostObject(string fileName)
{
    ResultText.text = "Retrieving the file";

    var stream = new FileStream(Application.persistentDataPath +
    Path.DirectorySeparatorChar + fileName,
    FileMode.Open, FileAccess.Read, FileShare.Read);

    ResultText.text += "\nCreating request object";
    var request = new PostObjectRequest()
    {
        Bucket = S3BucketName,
        Key = fileName,
        InputStream = stream,
        CannedACL = S3CannedACL.Private
    };

    ResultText.text += "\nMaking HTTP post call";

    Client.PostObjectAsync(request, (responseObj) =>
    {
        if (responseObj.Exception == null)
        {
            ResultText.text += string.Format("\nobject {0} posted to bucket {1}",
            responseObj.Request.Key, responseObj.Request.Bucket);
        }
        else
        {
            ResultText.text += "\nException while posting the result object";
            ResultText.text += string.Format("\n receieved error {0}",
            responseObj.Response.HttpStatusCode.ToString());
        }
    });
}
```