Amazon Simple Storage Service (S3) - AWS Mobile SDK para Unity

O AWS Mobile SDK para Unity agora está incluído na AWS SDK for .NET. Este guia faz referência à versão arquivada do Mobile SDK para Unity. Para obter mais informações, consulte O que é o AWS Mobile SDK para Unity?.

Amazon Simple Storage Service (S3)

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.

Para obter informações sobre a disponibilidade de regiões do AWS S3, consulte Disponibilidade de regiões do Serviço da AWS.

nota

Alguns exemplos deste documento supõ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

O Amazon S3 armazena os recursos nos buckets do Amazon S3, contêineres de armazenamento na nuvem que residem em uma região específica. Cada bucket do Amazon S3 deve ter um nome globalmente exclusivo. Você pode usar o console do Amazon S3 para criar um bucket.

Crie um bucket do S3

  1. Faça login no console do Amazon S3 e clique em Create Bucket (Criar bucket).

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

Definir permissões para o S3

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 e clique em Roles (Funções) no painel à esquerda.

  2. 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.

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

  4. 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).

  5. 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.

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

  2. 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.

Upload de arquivos no console

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).

  2. 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.

  3. 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

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 o 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, será preciso definir a propriedade AWSConfigsS3.UseSignatureVersion4 como "true".

Para obter mais informações sobre as versões do AWS Signature, consulte Solicitações de autenticação (AWS Signature Version 4).

Criação do cliente Amazon S3

Para usar o Amazon S3, primeiro é necessário criar uma instância AmazonS3Client que faça referência à instância CognitoAWSCredentials criada anteriormente:

AmazonS3Client S3Client = new AmazonS3Client (credentials);

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

Listagem de buckets

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"; } });

Listagem de objetos

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"; } });

Download de um objeto

Para fazer download de um objeto, crie uma GetObjectRequest, especificando o nome do bucket e a chave, e passe 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 assume uma instância da GetObjectRequest, um retorno de chamada e uma instância AsyncOptions. O retorno de chamada deve ser do tipo: AmazonServiceCallback<GetObjectRequest, GetObjectResponse>. A instância AsyncOptions é opcional. Se especificada, ela determinará se o retorno de chamada será executado no thread principal.

Upload de um objeto

Para fazer upload de um objeto, grave o objeto em um fluxo, crie uma nova chave PostObjectRequest e especifique a chave, o nome do bucket e os dados do fluxo.

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()); } }); }