

# Integrar uma instância de banco de dados do Amazon RDS for SQL Server ao Amazon S3
<a name="User.SQLServer.Options.S3-integration"></a>

É possível transferir arquivos entre uma instância de banco de dados do Amazon RDS for SQL Server e um bucket do Amazon S3. Ao fazer isso, é possível usar o Amazon S3 com os recursos do SQL Server, como BULK INSERT. Por exemplo, é possível baixar .csv, .xml, .txt e outros arquivos do Amazon S3 no host da instância de banco de dados de `D:\S3\` para o banco de dados. Todos os arquivos são armazenados em `D:\S3\` na instância de banco de dados.

As limitações a seguir se aplicam a:

**nota**  
O tráfego entre o host do RDS e o S3 é roteado por meio de endpoints da VPC em VPCs internas do RDS para todos os recursos do SQL Server que usam o S3. Esse tráfego não usa a ENI do endpoint da instância do RDS. As políticas de bucket do S3 não podem restringir o tráfego do RDS com base em condições de rede.
+ Os arquivos na pasta `D:\S3` são excluídos na réplica em espera após um failover em instâncias Multi-AZ. Para obter mais informações, consulte [Limitações Multi-AZ para a integração do S3](#S3-MAZ).
+ A instância de banco de dados e o bucket do S3 devem estar na mesma região da AWS.
+ Se você executar mais de uma tarefa de integração do S3 por vez, as tarefas serão executadas sequencialmente, não em paralelo.
**nota**  
As tarefas de integração do S3 compartilham a mesma fila que as tarefas nativas de backup e restauração. É possível ter no máximo duas tarefas em andamento a qualquer momento nesta fila. Portanto, duas tarefas nativas de backup e restauração em execução bloquearão todas as tarefas de integração do S3.
+ É necessário habilitar novamente o recurso de integração do S3 em instâncias restauradas. A integração do S3 não é propagada da instância de origem para a instância restaurada. Os arquivos em `D:\S3` são excluídos em uma instância restaurada.
+ O download na instância de banco de dados é limitado a 100 arquivos. Em outras palavras, não pode haver mais de 100 arquivos em `D:\S3\`.
+ Somente arquivos sem extensões de arquivo ou com as seguintes extensões de arquivo são aceitos para download: .abf, .asdatabase, .bcp, .configsettings, .csv, .dat, .deploymentoptions, .deploymenttargets, .fmt, .info, .ispac, .lst, .tbl, .txt, .xml e .xmla.
+ O bucket do S3 deve ter o mesmo proprietário da função do AWS Identity and Access Management (IAM) relacionada. Portanto, a integração do S3 entre contas não tem suporte.
+ O bucket do S3 não pode ser aberto ao público.
+ O tamanho do arquivo para uploads do RDS para o S3 é limitado a 50 GB por arquivo.
+ O tamanho do arquivo para downloads do S3 para o RDS é limitado ao máximo aceito pelo S3.

**Topics**
+ [Pré-requisitos para integrar o RDS for SQL Server com o S3](Appendix.SQLServer.Options.S3-integration.preparing.md)
+ [Habilitação da integração do RDS for SQL Server com o S3](Appendix.SQLServer.Options.S3-integration.enabling.md)
+ [Transferência de arquivos entre o RDS for SQL Server e o Amazon S3](Appendix.SQLServer.Options.S3-integration.using.md)
+ [Listar arquivos na instância de banco de dados do RDS](Appendix.SQLServer.Options.S3-integration.using.listing-files.md)
+ [Excluir arquivos na instância de banco de dados do RDS](Appendix.SQLServer.Options.S3-integration.using.deleting-files.md)
+ [Monitorar o status de uma tarefa de transferência de arquivo](Appendix.SQLServer.Options.S3-integration.using.monitortasks.md)
+ [Cancelar uma tarefa](Appendix.SQLServer.Options.S3-integration.canceltasks.md)
+ [Limitações Multi-AZ para a integração do S3](#S3-MAZ)
+ [Desabilitação da integração do RDS for SQL Server com o S3](Appendix.SQLServer.Options.S3-integration.disabling.md)

Para obter mais informações sobre como trabalhar com arquivos no Amazon S3, consulte [Conceitos básicos do Amazon Simple Storage Service](https://docs.aws.amazon.com/AmazonS3/latest/userguide/GetStartedWithS3).

# Pré-requisitos para integrar o RDS for SQL Server com o S3
<a name="Appendix.SQLServer.Options.S3-integration.preparing"></a>

Antes de começar, encontre e crie o bucket do S3 que você deseja usar. Além disso, adicione permissões para que a instância de banco de dados do RDS possa acessar o bucket do S3. Para configurar esse acesso, crie uma política do IAM e uma função do IAM.

## Console
<a name="Appendix.SQLServer.Options.S3-integration.preparing.console"></a>

**Como criar uma política do IAM para acesso ao Amazon S3**

1. No [Console de gerenciamento do IAM](https://console.aws.amazon.com/iam/home?#home), escolha **Policies (Políticas)** no painel de navegação.

1. Crie uma nova política e use a guia **Visual editor (Editor visual)** para as etapas a seguir.

1. Para **Service (Serviço)**, insira **S3** e escolha o serviço do **S3**.

1. Para **Actions (Ações)**, escolha o seguinte para conceder o acesso que a instância de banco de dados exige:
   + `ListAllMyBuckets`: obrigatório.
   + `ListBucket`: obrigatório.
   + `GetBucketAcl`: obrigatório.
   + `GetBucketLocation`: obrigatório.
   + `GetObject`: necessário para baixar arquivos do S3 em `D:\S3\`.
   + `PutObject` – necessário para fazer upload de arquivos de `D:\S3\` no S3
   + `ListMultipartUploadParts` – necessário para fazer upload de arquivos de `D:\S3\` no S3
   + `AbortMultipartUpload` – necessário para fazer upload de arquivos de `D:\S3\` no S3

1. Para **Resources (Recursos)**, as opções exibidas dependem de quais ações são escolhidas na etapa anterior. É possível ver opções para **bucket**, **object (objeto)** ou os dois. Para cada um deles, adicione o nome de recurso da Amazon (ARN) adequado.

   Em **bucket**, adicione o ARN do bucket que você deseja usar. Por exemplo, se o bucket for chamado de *amzn-s3-demo-bucket*, defina o ARN como `arn:aws:s3:::amzn-s3-demo-bucket`.

   Em **object (objeto)**, insira o ARN do bucket e escolha uma das seguintes opções:
   + Para conceder acesso a todos os arquivos no bucket especificado, escolha **Any (Qualquer um)** para **Bucket name (Nome do bucket)** e **Object name (Nome do objeto)**.
   + Para conceder acesso a pastas ou arquivos específicos no bucket, forneça os ARNs dos objetos e buckets específicos que você deseja que o SQL Server acesse. 

1. Siga as instruções no console até terminar a criação da política.

   O conteúdo anterior é um guia resumido para configurar uma política. Para instruções mais detalhadas sobre como criar políticas do IAM, consulte [Criar políticas do IAM](https://docs.aws.amazon.com/IAM/latest/UserGuide/access_policies_create.html) no *Guia do usuário do IAM.*

**Como criar uma função do IAM que usa a política do IAM do procedimento anterior**

1. No [Console de gerenciamento do IAM](https://console.aws.amazon.com/iam/home?#home), escolha **Roles (Funções)** no painel de navegação.

1. Crie uma nova função do IAM e escolha as seguintes opções à medida que elas forem exibidas no console:
   + **AWS Serviço da**
   + **RDS**
   + **RDS – adicionar função ao banco de dados**

   Escolha **Next:Permissions (Próximo: permissões)** na parte inferior.

1. Para **Attach permissions policies (Anexar políticas de permissões)**, insira o nome da política do IAM criada anteriormente. Depois disso, escolha essa política na lista.

1. Siga as instruções no console até terminar a criação da função.

   O anterior é um guia resumido para configurar uma função. Se quiser informações mais detalhadas sobre como criar funções, consulte [Funções do IAM](https://docs.aws.amazon.com/IAM/latest/UserGuide/id_roles.html) no *Guia do usuário do IAM.*

## AWS CLI
<a name="Appendix.SQLServer.Options.S3-integration.preparing.CLI"></a>

Para conceder acesso do Amazon RDS a um bucket do Simple Storage Service (Simple Storage Service (Amazon S3)), use o seguinte processo:

1. Crie uma política do IAM que conceda ao Amazon RDS acesso a um bucket do S3.

1. Crie uma função do IAM que o Amazon RDS possa assumir em seu nome para acessar seus buckets do S3.

   Para ter mais informações, consulte [Criar um perfil para delegar permissões a um usuário do IAM](https://docs.aws.amazon.com/IAM/latest/UserGuide/id_roles_create_for-user.html) no *Guia do usuário do IAM*.

1. Anexe a política do IAM que você criou ao perfil do IAM que você criou.

**Para criar a política do IAM**

Inclua as ações adequadas para conceder o acesso que a instância de banco de dados exige:
+ `ListAllMyBuckets`: obrigatório.
+ `ListBucket`: obrigatório.
+ `GetBucketAcl`: obrigatório.
+ `GetBucketLocation`: obrigatório.
+ `GetObject`: necessário para baixar arquivos do S3 em `D:\S3\`.
+ `PutObject` – necessário para fazer upload de arquivos de `D:\S3\` no S3
+ `ListMultipartUploadParts` – necessário para fazer upload de arquivos de `D:\S3\` no S3
+ `AbortMultipartUpload` – necessário para fazer upload de arquivos de `D:\S3\` no S3

1. O comando da AWS CLI a seguir cria uma política do IAM denominada `rds-s3-integration-policy` com essas opções. Ele concede acesso a um bucket denominado *amzn-s3-demo-bucket*.  
**Example**  

   Para Linux, macOS ou Unix:

   ```
   aws iam create-policy \
   	 --policy-name rds-s3-integration-policy \
   	 --policy-document '{
   	        "Version": "2012-10-17",		 	 	 
   	        "Statement": [
   	            {
   	                "Effect": "Allow",
   	                "Action": "s3:ListAllMyBuckets",
   	                "Resource": "*"
   	            },
   	            {
   	                "Effect": "Allow",
   	                "Action": [
   	                    "s3:ListBucket",
   	                    "s3:GetBucketAcl",
   	                    "s3:GetBucketLocation"
   	                ],
   	                "Resource": "arn:aws:s3:::amzn-s3-demo-bucket"
   	            },
   	            {
   	                "Effect": "Allow",
   	                "Action": [
   	                    "s3:GetObject",
   	                    "s3:PutObject",
   	                    "s3:ListMultipartUploadParts",
   	                    "s3:AbortMultipartUpload"
   	                ],
   	                "Resource": "arn:aws:s3:::amzn-s3-demo-bucket/key_prefix/*"
   	            }
   	        ]
   	    }'
   ```

   Para Windows:

   Altere os finais de linha para os que são compatíveis com a interface (`^`, em vez de `\`). Além disso, no Windows, é necessário inserir um caractere de escape em todas as aspas duplas com um `\`. Para evitar a necessidade de inserir um caractere de escape em aspas no JSON, é possível salvá-lo em um arquivo e passá-lo como um parâmetro. 

   Primeiro, crie o arquivo `policy.json` com a seguinte política de permissão:

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

****  

   ```
   {
       "Version":"2012-10-17",		 	 	 
       "Statement": [
           {
               "Effect": "Allow",
               "Action": "s3:ListAllMyBuckets",
               "Resource": "*"
           },
           {
               "Effect": "Allow",
               "Action": [
                   "s3:ListBucket",
                   "s3:GetBucketACL",
                   "s3:GetBucketLocation"
               ],
               "Resource": "arn:aws:s3:::amzn-s3-demo-bucket"
           },
           {
               "Effect": "Allow",
               "Action": [
                   "s3:GetObject",
                   "s3:PutObject",
                   "s3:ListMultipartUploadParts",
                   "s3:AbortMultipartUpload"
               ],
               "Resource": "arn:aws:s3:::amzn-s3-demo-bucket/key_prefix/*"
           }
       ]
   }
   ```

------

   Depois disso, use o seguinte comando para criar a política:

   ```
   aws iam create-policy ^
        --policy-name rds-s3-integration-policy ^
        --policy-document file://file_path/assume_role_policy.json
   ```

1. Após a criação da política, observe o nome de recurso da Amazon (ARN) da política. O ARN é necessário para uma etapa subsequente.

**Para criar perfil do IAM**
+ O comando da AWS CLI a seguir cria a função do IAM `rds-s3-integration-role` para essa finalidade.  
**Example**  

  Para Linux, macOS ou Unix:

  ```
  aws iam create-role \
  	   --role-name rds-s3-integration-role \
  	   --assume-role-policy-document '{
  	     "Version": "2012-10-17",		 	 	 
  	     "Statement": [
  	       {
  	         "Effect": "Allow",
  	         "Principal": {
  	            "Service": "rds.amazonaws.com"
  	          },
  	         "Action": "sts:AssumeRole"
  	       }
  	     ]
  	   }'
  ```

  Para Windows:

  Altere os finais de linha para os que são compatíveis com a interface (`^`, em vez de `\`). Além disso, no Windows, é necessário inserir um caractere de escape em todas as aspas duplas com um `\`. Para evitar a necessidade de inserir um caractere de escape em aspas no JSON, é possível salvá-lo em um arquivo e passá-lo como um parâmetro. 

  Primeiro, crie o arquivo `assume_role_policy.json` com a seguinte política:

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

****  

  ```
  {
      "Version":"2012-10-17",		 	 	 
      "Statement": [
          {
              "Effect": "Allow",
              "Principal": {
                  "Service": [
                      "rds.amazonaws.com"
                  ]
              },
              "Action": "sts:AssumeRole"
          }
      ]
  }
  ```

------

  Depois disso, use o comando a seguir para criar a função do IAM:

  ```
  aws iam create-role ^
       --role-name rds-s3-integration-role ^
       --assume-role-policy-document file://file_path/assume_role_policy.json
  ```  
**Example de usar a chave de contexto de condição global para criar a função do IAM**  

  Recomendamos usar as chaves de contexto de condição global [https://docs.aws.amazon.com/IAM/latest/UserGuide/reference_policies_condition-keys.html#condition-keys-sourcearn](https://docs.aws.amazon.com/IAM/latest/UserGuide/reference_policies_condition-keys.html#condition-keys-sourcearn) e [https://docs.aws.amazon.com/IAM/latest/UserGuide/reference_policies_condition-keys.html#condition-keys-sourceaccount](https://docs.aws.amazon.com/IAM/latest/UserGuide/reference_policies_condition-keys.html#condition-keys-sourceaccount) em políticas baseadas em recursos para limitar as permissões do serviço a um recurso específico. Essa é a maneira mais eficiente de se proteger contra o [problema "confused deputy"](https://docs.aws.amazon.com/IAM/latest/UserGuide/confused-deputy.html).

  Você pode usar as duas chaves de contexto de condição global e fazer com que o valor `aws:SourceArn` contenha o ID da conta. Nesses casos, verifique se o valor `aws:SourceAccount` e a conta no valor `aws:SourceArn` usa o mesmo ID de conta quando eles são usados na mesma instrução de política.
  + Use `aws:SourceArn` se quiser acesso entre serviços para um único recurso.
  + Use `aws:SourceAccount` se você quiser permitir que qualquer recurso nessa conta seja associado ao uso entre serviços.

  Na política, certifique-se de usar a chave de contexto de condição global `aws:SourceArn` com o nome do recurso da Amazon (ARN) completo dos recursos acessando a função. Para integração do S3, certifique-se de incluir os ARNs de instância de banco de dados, conforme mostrado no exemplo a seguir.

  Para Linux, macOS ou Unix:

  ```
  aws iam create-role \
  	   --role-name rds-s3-integration-role \
  	   --assume-role-policy-document '{
  	     "Version": "2012-10-17",		 	 	 
  	     "Statement": [
  	       {
  	         "Effect": "Allow",
  	         "Principal": {
  	            "Service": "rds.amazonaws.com"
  	          },
  	         "Action": "sts:AssumeRole",
                  "Condition": {
                      "StringEquals": {
                          "aws:SourceArn":"arn:aws:rds:Region:my_account_ID:db:db_instance_identifier"
                      }
                  }
  	       }
  	     ]
  	   }'
  ```

  Para Windows:

  Adicione as chaves de contexto de condição globais à `assume_role_policy.json`.

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

****  

  ```
  {
      "Version":"2012-10-17",		 	 	 
      "Statement": [
          {
              "Effect": "Allow",
              "Principal": {
                  "Service": [
                      "rds.amazonaws.com"
                  ]
              },
              "Action": "sts:AssumeRole",
              "Condition": {
                  "StringEquals": {
                      "aws:SourceArn":"arn:aws:rds:Region:my_account_ID:db:db_instance_identifier"
                  }
              }
          }
      ]
  }
  ```

------

**Para anexar a política do IAM à função do IAM**
+ O seguinte comando da AWS CLI anexa a política à função denominada `rds-s3-integration-role`. Substitua `your-policy-arn` pelo ARN da política que você anotou em uma etapa anterior.  
**Example**  

  Para Linux, macOS ou Unix:

  ```
  aws iam attach-role-policy \
  	   --policy-arn your-policy-arn \
  	   --role-name rds-s3-integration-role
  ```

  Para Windows:

  ```
  aws iam attach-role-policy ^
  	   --policy-arn your-policy-arn ^
  	   --role-name rds-s3-integration-role
  ```

# Habilitação da integração do RDS for SQL Server com o S3
<a name="Appendix.SQLServer.Options.S3-integration.enabling"></a>

Na seção a seguir, é possível saber como habilitar a integração do Amazon S3 com o Amazon RDS for SQL Server. Para trabalhar com a integração do S3, a instância do banco de dados deve ser associada à função do IAM criada anteriormente para que você possa usar o parâmetro de nome do recurso `S3_INTEGRATION`.

**nota**  
Para adicionar uma função do IAM a uma instância de banco de dados, o status da instância de banco de dados deve ser **available (disponível)**.

## Console
<a name="Appendix.SQLServer.Options.S3-integration.enabling.console"></a>

**Para associar uma função do IAM à sua instância de banco de dados**

1. Faça login no Console de gerenciamento da AWS e abra o console do Amazon RDS em [https://console.aws.amazon.com/rds/](https://console.aws.amazon.com/rds/).

1. Escolha o nome da instância de banco de dados do RDS for SQL Server para exibir seus detalhes.

1. Na guia **Connectivity & security (Conectividade e segurança)**, na seção **Manage IAM roles (Gerenciar funções do IAM)**, escolha a função do IAM a ser adicionada para **Add IAM roles to this instance (Adicionar funções do IAM a essa instância)**.

1. Em **Feature (Recurso)**, escolha **S3\$1INTEGRATION**.  
![\[Adicionar a função S3_INTEGRATION\]](http://docs.aws.amazon.com/pt_br/AmazonRDS/latest/UserGuide/images/ora-s3-integration-role.png)

1. Escolha **Add role (adicionar função)**.

## AWS CLI
<a name="Appendix.SQLServer.Options.S3-integration.enabling.cli"></a>

**Para adicionar a função do IAM à instância de banco de dados do RDS for SQL Server**
+ O seguinte comando da AWS CLI adiciona a função do IAM a uma instância de banco de dados do RDS for SQL Server chamada `mydbinstance`.  
**Example**  

  Para Linux, macOS ou Unix:

  ```
  aws rds add-role-to-db-instance \
  	   --db-instance-identifier mydbinstance \
  	   --feature-name S3_INTEGRATION \
  	   --role-arn your-role-arn
  ```

  Para Windows:

  ```
  aws rds add-role-to-db-instance ^
  	   --db-instance-identifier mydbinstance ^
  	   --feature-name S3_INTEGRATION ^
  	   --role-arn your-role-arn
  ```

  Substitua `your-role-arn` pelo ARN da função que você anotou em uma etapa anterior. `S3_INTEGRATION` deve ser especificado para a opção `--feature-name`.

# Transferência de arquivos entre o RDS for SQL Server e o Amazon S3
<a name="Appendix.SQLServer.Options.S3-integration.using"></a>

É possível usar os procedimentos armazenados do Amazon RDS para baixar e carregar arquivos entre o Amazon S3 e a instância de banco de dados do RDS. Também é possível usar os procedimentos armazenados do Amazon RDS para listar e excluir arquivos na instância do RDS.

Os arquivos que você baixa e carrega no S3 são armazenados na pasta `D:\S3`. Essa é a única pasta que pode ser usada para acessar seus arquivos. É possível organizar seus arquivos em subpastas, que são criadas para você ao incluir a pasta de destino durante o download.

Alguns dos procedimentos armazenados exigem que você forneça um nome de recurso da Amazon (ARN) ao bucket e arquivo do S3. O formato do ARN é `arn:aws:s3:::amzn-s3-demo-bucket/file_name`. O Amazon S3 não exige um número de conta ou região da AWS nos ARNs.

As tarefas de integração do S3 são executadas sequencialmente e compartilham a mesma fila como tarefas nativas de restauração e backup nativos. É possível ter no máximo duas tarefas em andamento a qualquer momento nesta fila. Pode demorar até cinco minutos para que o processamento da tarefa comece.

## Baixar arquivos de um bucket do Amazon S3 em uma instância de banco de dados SQL Server
<a name="Appendix.SQLServer.Options.S3-integration.using.download"></a>

Para baixar arquivos de um bucket do S3 bucket em uma instância de banco de dados do RDS for SQL Server, use o procedimento armazenado do Amazon RDS `msdb.dbo.rds_download_from_s3` com os parâmetros a seguir.


| Nome do parâmetro | Tipo de dados | Padrão | Obrigatório | Descrição | 
| --- | --- | --- | --- | --- | 
|  `@s3_arn_of_file`  |  NVARCHAR  |  –  |  Obrigatório  |  O ARN do S3 do arquivo para download, por exemplo: `arn:aws:s3:::amzn-s3-demo-bucket/mydata.csv`  | 
|  `@rds_file_path`  |  NVARCHAR  |  –  |  Optional  |  O caminho do arquivo para a instância do RDS: Se não especificado, o caminho será `D:\S3\<filename in s3>`. O RDS oferece suporte a caminhos absolutos e relativos. Se você deseja criar uma subpasta, inclua-a no caminho do arquivo.  | 
|  `@overwrite_file`  |  INT  |  0  |  Optional  | Substitua o arquivo existente:  0 = não substituir 1 = substituir | 

É possível baixar arquivos sem uma extensão de arquivo e arquivos com as seguintes extensões: .bcp, .csv, .dat, .fmt, .info, .lst, .tbl, .txt e .xml.

**nota**  
Arquivos com a extensão .ispac são têm suporte para download quando o SQL Server Integration Services está habilitado. Para obter mais informações sobre como habilitar o SSIS, consulte [SQL Server Integration Services](Appendix.SQLServer.Options.SSIS.md).  
Arquivos com as seguintes extensões têm suporte para download quando o SQL Server Analysis Services está habilitado: .abf, .asdatabase, .configsettings, .deploymentoptions, .deploymenttargets e .xmla. Para obter mais informações sobre como habilitar o SSAS, consulte [SQL Server Analysis Services](Appendix.SQLServer.Options.SSAS.md).

O exemplo a seguir mostra o procedimento armazenado para baixar arquivos do S3. 

```
exec msdb.dbo.rds_download_from_s3
	    @s3_arn_of_file='arn:aws:s3:::amzn-s3-demo-bucket/bulk_data.csv',
	    @rds_file_path='D:\S3\seed_data\data.csv',
	    @overwrite_file=1;
```

A operação de exemplo `rds_download_from_s3` cria uma pasta chamada `seed_data` em `D:\S3\`, se a pasta não existir ainda. Depois disso, o exemplo baixa o arquivo de origem `bulk_data.csv` do S3 para um novo arquivo chamado `data.csv` na instância de banco de dados. Se o arquivo existia anteriormente, ele será substituído porque o parâmetro `@overwrite_file` está definido como `1`.

## Fazer upload de arquivos de uma instância de banco de dados SQL Server para um bucket do Amazon S3
<a name="Appendix.SQLServer.Options.S3-integration.using.upload"></a>

Para fazer upload de arquivos de uma instância de banco de dados do RDS for SQL Server para um bucket do S3, use o procedimento armazenado do Amazon RDS `msdb.dbo.rds_upload_to_s3` com os parâmetros a seguir.


| Nome do parâmetro | Tipo de dados | Padrão | Obrigatório | Descrição | 
| --- | --- | --- | --- | --- | 
|  `@s3_arn_of_file`  |  NVARCHAR  |  –  |  Obrigatório  |  O ARN do S3 do arquivo a ser criado no S3, por exemplo: `arn:aws:s3:::amzn-s3-demo-bucket/mydata.csv`  | 
|  `@rds_file_path`  |  NVARCHAR  |  –  |  Obrigatório  | O caminho de arquivo do arquivo para fazer upload no S3. Caminhos relativos e absolutos têm suporte. | 
|  `@overwrite_file`  |  INT  |  –  |  Optional  |  Substitua o arquivo existente:  0 = não substituir 1 = substituir  | 

O exemplo a seguir faz upload do arquivo chamado `data.csv` do local especificado em `D:\S3\seed_data\` para um arquivo `new_data.csv` no bucket do S3 especificado pelo ARN.

```
exec msdb.dbo.rds_upload_to_s3 
		@rds_file_path='D:\S3\seed_data\data.csv',
		@s3_arn_of_file='arn:aws:s3:::amzn-s3-demo-bucket/new_data.csv',
		@overwrite_file=1;
```

Se o arquivo existia antes no S3, ele será substituído porque o parâmetro @overwrite\$1file está definido como `1`.

# Listar arquivos na instância de banco de dados do RDS
<a name="Appendix.SQLServer.Options.S3-integration.using.listing-files"></a>

Para listar os arquivos disponíveis na instância de banco de dados, use a função e o procedimento armazenado. Primeiro, execute o seguinte procedimento armazenado para coletar detalhes de arquivo dos arquivos em `D:\S3\`. 

```
exec msdb.dbo.rds_gather_file_details;
```

O procedimento armazenado retorna o ID da tarefa. Assim como outras tarefas, esse procedimento armazenado é executado de forma assíncrona. Assim que o status da tarefa for `SUCCESS`, é possível usar o ID da tarefa na função `rds_fn_list_file_details` para listar os diretórios e arquivos existentes em D:\$1S3\$1, conforme mostrado a seguir.

```
SELECT * FROM msdb.dbo.rds_fn_list_file_details(TASK_ID);
```

A função `rds_fn_list_file_details` exibe uma tabela com as colunas a seguir.


| Parâmetro de saída | Descrição | 
| --- | --- | 
| filepath | Caminho absoluto do arquivo (por exemplo, D:\$1S3\$1mydata.csv) | 
| size\$1in\$1bytes | Tamanho do arquivo (em bytes) | 
| last\$1modified\$1utc | A data e a hora da última modificação em formato UTC | 
| is\$1directory | Opção que indica se o item é um diretório (true/false) | 

# Excluir arquivos na instância de banco de dados do RDS
<a name="Appendix.SQLServer.Options.S3-integration.using.deleting-files"></a>

Para excluir os arquivos disponíveis na instância de banco de dados, use o procedimento armazenado do Amazon RDS `msdb.dbo.rds_delete_from_filesystem` com os seguintes parâmetros. 


| Nome do parâmetro | Tipo de dados | Padrão | Obrigatório | Descrição | 
| --- | --- | --- | --- | --- | 
|  `@rds_file_path`  |  NVARCHAR  |  –  |  Obrigatório  | O caminho de arquivo do arquivo a ser excluído. Caminhos relativos e absolutos têm suporte.  | 
|  `@force_delete`  |  INT  | 0 |  Optional  |  Para excluir um diretório, este sinalizador deve ser incluído e definido como `1`. `1` = excluir um diretório Este parâmetro será ignorado se você estiver excluindo um arquivo.  | 

Para excluir um diretório, o `@rds_file_path` deve terminar com uma barra invertida (`\`), e `@force_delete` deve ser definido como `1`.

O exemplo a seguir exclui o arquivo `D:\S3\delete_me.txt`.

```
exec msdb.dbo.rds_delete_from_filesystem
    @rds_file_path='D:\S3\delete_me.txt';
```

O exemplo a seguir exclui o diretório `D:\S3\example_folder\`.

```
exec msdb.dbo.rds_delete_from_filesystem
    @rds_file_path='D:\S3\example_folder\',
    @force_delete=1;
```

# Monitorar o status de uma tarefa de transferência de arquivo
<a name="Appendix.SQLServer.Options.S3-integration.using.monitortasks"></a>

Para rastrear o status da tarefa de integração do S3, chame a função `rds_fn_task_status`. Ela leva dois parâmetros. O primeiro parâmetro sempre deve ser `NULL` porque não se aplica à integração do S3. O segundo parâmetro aceita um ID de tarefa.

Para ver uma lista de todas as tarefas, defina o primeiro parâmetro como `NULL` e o segundo parâmetro como `0`, conforme mostrado no seguinte exemplo.

```
SELECT * FROM msdb.dbo.rds_fn_task_status(NULL,0);
```

Para obter uma tarefa específica, defina o primeiro parâmetro como `NULL` e o segundo parâmetro como o ID da tarefa, conforme mostrado no exemplo a seguir.

```
SELECT * FROM msdb.dbo.rds_fn_task_status(NULL,42);
```

A função `rds_fn_task_status` retorna as informações a seguir.


|  Parâmetro de saída  |  Descrição  | 
| --- | --- | 
|  `task_id`  |  O ID da tarefa.  | 
|  `task_type`  |  Para a integração do S3, as tarefas podem ter os seguintes tipos de tarefa: [\[See the AWS documentation website for more details\]](http://docs.aws.amazon.com/pt_br/AmazonRDS/latest/UserGuide/Appendix.SQLServer.Options.S3-integration.using.monitortasks.html)  | 
|  `database_name`  | Não aplicável a tarefas de integração do S3. | 
|  `% complete`  |  O progresso da tarefa em porcentagem.  | 
|  `duration(mins)`  |  A quantidade de tempo gasta na tarefa, em minutos.  | 
|  `lifecycle`  |  O status da tarefa. Os possíveis status são os seguintes: [\[See the AWS documentation website for more details\]](http://docs.aws.amazon.com/pt_br/AmazonRDS/latest/UserGuide/Appendix.SQLServer.Options.S3-integration.using.monitortasks.html)  | 
|  `task_info`  |  Informações adicionais sobre a tarefa. Se um erro ocorrer durante o processamento, essa coluna conterá informações sobre o erro.   | 
|  `last_updated`  |  A data e hora em que o status da tarefa foi atualizado pela última vez.   | 
|  `created_at`  |  A data e hora em que a tarefa foi criada.  | 
|  `S3_object_arn`  |  O ARN do objeto do S3 baixado ou carregado.  | 
|  `overwrite_S3_backup_file`  |  Não aplicável a tarefas de integração do S3.  | 
|  `KMS_master_key_arn`  |  Não aplicável a tarefas de integração do S3.  | 
|  `filepath`  |  O caminho de arquivo na instância de banco de dados do RDS  | 
|  `overwrite_file`  |  Uma opção que indica se um arquivo existente foi substituído.  | 
|  `task_metadata`  |  Não aplicável a tarefas de integração do S3.  | 

# Cancelar uma tarefa
<a name="Appendix.SQLServer.Options.S3-integration.canceltasks"></a>

Para cancelar tarefas de integração do S3, use o procedimento armazenado `msdb.dbo.rds_cancel_task` com o parâmetro `task_id`. Tarefas de listagem e exclusão que estão em progresso não podem ser canceladas. O exemplo a seguir mostra uma solicitação para cancelar uma tarefa. 

```
exec msdb.dbo.rds_cancel_task @task_id = 1234;
```

Para obter uma visão geral de todas as tarefas e seus IDs de tarefa, use a função `rds_fn_task_status` conforme descrito em [Monitorar o status de uma tarefa de transferência de arquivo](Appendix.SQLServer.Options.S3-integration.using.monitortasks.md).

## Limitações Multi-AZ para a integração do S3
<a name="S3-MAZ"></a>

Em instâncias Multi-AZ, os arquivos na pasta `D:\S3` são excluídos na réplica em espera após um failover. Um failover pode ser planejado, por exemplo, durante modificações de instâncias de banco de dados, como alterar a classe de instância ou atualizar a versão do mecanismo. Ou um failover pode ser não planejado, durante uma interrupção do principal.

**nota**  
Não recomendamos usar a pasta `D:\S3` para armazenamento de arquivos. A prática recomendada é carregar arquivos criados no Amazon S3 para torná-los duráveis e baixar arquivos quando precisar importar dados.

Para determinar o último tempo de failover, é possível usar o procedimento `msdb.dbo.rds_failover_time` armazenado. Para obter mais informações, consulte [Determinar o horário do último failover do Amazon RDS para SQL Server](Appendix.SQLServer.CommonDBATasks.LastFailover.md).

**Example de nenhum failover recente**  
Este exemplo mostra a saída quando não há nenhum failover recente nos logs de erros. Nenhum failover aconteceu desde 29-04-2020 23:59:00.01.  
Portanto, todos os arquivos baixados após esse horário que não foram excluídos usando o procedimento `rds_delete_from_filesystem` armazenado ainda estão acessíveis no host atual. Arquivos baixados antes desse horário também podem estar disponíveis.  


| errorlog\$1available\$1from | recent\$1failover\$1time | 
| --- | --- | 
|  29-04-2020 23:59:00.0100000  |  nulo  | 

**Example de failover recente**  
Este exemplo mostra a saída quando há um failover nos logs de erros. O failover mais recente foi em 05-05-2020 18:57:51.89.  
Todos os arquivos baixados após esse horário que não foram excluídos usando o procedimento `rds_delete_from_filesystem` armazenado ainda estão acessíveis no host atual.  


| errorlog\$1available\$1from | recent\$1failover\$1time | 
| --- | --- | 
|  29-04-2020 23:59:00.0100000  |  05-05-2020 18:57:51.8900000  | 

# Desabilitação da integração do RDS for SQL Server com o S3
<a name="Appendix.SQLServer.Options.S3-integration.disabling"></a>

A seguir, é possível saber como desabilitar a integração do Amazon S3 com o Amazon RDS for SQL Server. Os arquivos em `D:\S3\` não são excluídos ao desabilitar a integração do S3.

**nota**  
Para remover uma função do IAM de uma instância de banco de dados, o status da instância de banco de dados deve ser `available`.

## Console
<a name="Appendix.SQLServer.Options.S3-integration.disabling.console"></a>

**Como desassociar uma função do IAM da instância de banco de dados**

1. Faça login no Console de gerenciamento da AWS e abra o console do Amazon RDS em [https://console.aws.amazon.com/rds/](https://console.aws.amazon.com/rds/).

1. Escolha o nome da instância de banco de dados do RDS for SQL Server para exibir seus detalhes.

1. Na guia **Connectivity & security (Conectividade e segurança)**, na seção **Manage IAM roles (Gerenciar funções do IAM)**, escolha a função do IAM a ser removida.

1. Escolha **Excluir**.

## AWS CLI
<a name="Appendix.SQLServer.Options.S3-integration.disabling.cli"></a>

**Para remover a função do IAM da instância de banco de dados do RDS for SQL Server**
+ O seguinte comando da AWS CLI remove a função do IAM de uma instância de banco de dados do RDS for SQL Server chamada `mydbinstance`.  
**Example**  

  Para Linux, macOS ou Unix:

  ```
  aws rds remove-role-from-db-instance \
  	   --db-instance-identifier mydbinstance \
  	   --feature-name S3_INTEGRATION \
  	   --role-arn your-role-arn
  ```

  Para Windows:

  ```
  aws rds remove-role-from-db-instance ^
  	   --db-instance-identifier mydbinstance ^
  	   --feature-name S3_INTEGRATION ^
  	   --role-arn your-role-arn
  ```

  Substitua `your-role-arn` pelo ARN adequado da função do IAM para a opção `--feature-name`.