

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

# Criando uma concessão de dados ao AWS Data Exchange conter APIs
<a name="creating-a-data-grant-api"></a>

Os tópicos a seguir descrevem o processo de criar um conjunto de dados da API REST e adicioná-lo a uma concessão de dados que contém APIs on AWS Data Exchange. Você pode concluir o processo usando o console do AWS Data Exchange ou o AWS Command Line Interface.

Depois de configurar a API REST do Amazon API Gateway, você poderá criar um novo conjunto de dados de API no AWS Data Exchange. Você pode criar uma revisão e adicionar ativos de API.

A criação de uma concessão de dados com um ativo de API permite que o destinatário solicite que um AWS Data Exchange endpoint faça proxy até sua API do API Gateway.

O processo tem as seguintes etapas:

**Topics**
+ [Pré-requisitos](#creating-a-data-grant-api-prereq)
+ [Etapa 1: atualizar a política de recursos da API](#data-grant-update-API-resource-policy)
+ [Etapa 2: criar um conjunto de dados de API](#data-grant-create-api-data-set)
+ [Etapa 3: criar uma revisão](#data-grant-create-api-revision)
+ [Etapa 4: adicionar ativos da API a uma revisão](#data-grant-add-api-asset)
+ [Etapa 5: criar uma nova concessão de dados contendo APIs](#data-grant-publish-api-data-product)

## Pré-requisitos
<a name="creating-a-data-grant-api-prereq"></a>

Antes de publicar um produto contendo APIs, você deve atender aos seguintes pré-requisitos:
+ Antes de usar qualquer um AWS service (Serviço da AWS), inclusive AWS Data Exchange, você deve se inscrever AWS e criar um usuário administrativo. Para obter mais informações, consulte [Conceitos básicos](https://docs.aws.amazon.com//singlesignon/latest/userguide/getting-started.html) no *Guia do usuário do Centro de Identidade do AWS IAM *.
+ A API REST deve estar no Amazon API Gateway com uma integração que use um modelo apropriado de solicitação e resposta para acessar os dados, como Amazon DynamoDB ou AWS Lambda. Para obter mais informações, consulte [Desenvolvimento de uma API REST no API Gateway](https://docs.aws.amazon.com/apigateway/latest/developerguide/rest-api-develop.html) e [Trabalho com REST APIs](https://docs.aws.amazon.com/apigateway/latest/developerguide/apigateway-rest-api.html) no *Guia do desenvolvedor do Amazon API Gateway*.
**nota**  
Somente o API Gateway público APIs é compatível.
+ A API REST do API Gateway deve ser capaz de autenticar e autorizar chamadas da entidade principal de serviço do AWS Data Exchange . Cada solicitação de AWS Data Exchange sua API usa o protocolo Signature Version 4 (SigV4) assinado com AWS Data Exchange credenciais. AWS Data Exchange funciona com domínios personalizados e mapeamentos de chaves de domínio.
**nota**  
AWS Data Exchange não é compatível com Amazon Cognito, No-Auth e autorizadores. AWS Lambda 
+ Se sua API REST do API Gateway usa um sistema de identidade personalizado para autenticação e autorização, configure-a para usar a autenticação do IAM e importe um esquema OpenAPI descrevendo sua API. AWS Data Exchange invocará sua API REST do API Gateway com suas próprias credenciais de serviço e incluirá informações do assinante, como ID da conta.
+ Sua API REST do API Gateway é responsável pela integração com o back-end. Para isso, execute um dos seguintes procedimentos: 
  + Anexe um token de autenticação de longa duração a cada solicitação que chega por meio da API REST do API Gateway que o back-end pode verificar.
  + Use o API Gateway para invocar uma função do Lambda que pode gerar credenciais e invocar a API.

Sua API é invocada de acordo com a [especificação da solicitação de integração da API](publish-API-product.md#api-request-spec).

Para saber mais, consulte os seguintes tópicos:

**Topics**
+ [Segurança do conjunto de dados da API](#data-grant-api-data-set-security)
+ [Especificação de solicitação de integração de API](#data-grant-api-request-spec)
+ [Encaminhamento de cabeçalho](#data-grant-header-forwarding)

### Segurança do conjunto de dados da API
<a name="data-grant-api-data-set-security"></a>

AWS Data Exchange criptografa o tráfego de ponta a ponta usando o Transport Layer Security (TLS) 1.2. Todos os metadados são criptografados em repouso. AWS Data Exchange não armazenará as solicitações dos assinantes ou as respostas do seu back-end.

### Especificação de solicitação de integração de API
<a name="data-grant-api-request-spec"></a>

Uma API on AWS Data Exchange passa por todos os cabeçalhos (exceto os cabeçalhos listados em[Encaminhamento de cabeçalho](publish-API-product.md#header-forwarding)), corpo, método http, caminho e cadeias de caracteres de consulta no estado em que se encontram a partir da solicitação do cliente e anexa os cabeçalhos a seguir.

```
// These headers help prevent Confused Deputy attacks.  They enable the SourceAccount
// and SourceArn variables in IAM policies.
'x-amz-source-account': ACCOUNT_ID,
'x-amz-source-arn': `arn:aws:dataexchange:${REGION}:${OWNER_ACCOUNT_ID}:data-sets/${DATA_SET_ID}/revisions/${REVISION_ID}/assets/${ASSET_ID}`,
  
// These headers identify the API Asset in Data Exchange.  
'x-amzn-dataexchange-asset-id': ASSET_ID,
'x-amzn-dataexchange-data-set-id': DATA_SET_ID,
'x-amzn-dataexchange-revision-id': REVISION_ID,

// This header identifies the Data Exchange Product.
'x-amzn-dataexchange-product-id': PRODUCT_ID,
  
// This header identifies the caller of Data Exchange.  It will contain subscriber
// information.
'x-amzn-dataexchange-requester-account-id': REQUESTER_ACCOUNT_ID,

// Providers can attach custom metadata in the form of key/value pairs
// to a particular subscription. We will send these key/value pairs as stringified
// JSON.
'x-amz-dataexchange-subscription-metadata': STRINGIFIED_METADATA,
```

### Encaminhamento de cabeçalho
<a name="data-grant-header-forwarding"></a>

AWS Data Exchange remove todos os cabeçalhos relacionados à autenticação ou namespaces para a Amazon antes de encaminhá-los para o back-end do proprietário dos dados. Especificamente, AWS Data Exchange remove:
+ `Authentication`Cabeçalho 
+ Qualquer cabeçalho que comece com `x-amz`

O cabeçalho `host` será substituído como consequência do proxy.

## Etapa 1: atualizar a política de recursos da API
<a name="data-grant-update-API-resource-policy"></a>

Se você tiver uma API REST do Amazon API Gateway que atenda aos [pré-requisitos](publish-API-product.md#publish-api-prereq), você deve atualizar sua política de recursos de API para conceder AWS Data Exchange a capacidade de invocar sua API quando um assinante fizer uma solicitação para obter o esquema da sua API.

**Para atualizar sua política de recursos de API**

1. Adicione a seguinte política à política de recursos da sua API:

   ```
   {
   "Effect": "Allow",
   "Principal": {"Service": "dataexchange.amazonaws.com"},
   "Action": "execute-api:Invoke",
   "Resource": "*",
   "Condition": {"StringEquals": {"aws:SourceAccount": "<account-id>"}}
   }
   ```

1. Substitua o `account-id` pela conta que criará o conjunto de dados da API. 

   A conta com o recurso API Gateway não precisa estar na mesma conta que está criando o conjunto de dados.

Essa política restringe essas permissões às chamadas feitas pelo responsável pelo AWS Data Exchange serviço e exige que somente sua conta possa autorizar AWS Data Exchange a integração com sua API.

**nota**  
Se você tiver uma política de recursos que negue AWS Data Exchange explicitamente essa invocação, você deverá remover ou limitar essa negação.

Agora, você está pronto para [criar um conjunto de dados da API](publish-API-product.md#create-api-data-set).

## Etapa 2: criar um conjunto de dados de API
<a name="data-grant-create-api-data-set"></a>

Os conjuntos de dados AWS Data Exchange são dinâmicos e são versionados usando revisões, com cada revisão contendo pelo menos um ativo. Para obter mais informações, consulte [Dados em AWS Data Exchange](data-sets.md).

Você usa o AWS Data Exchange console ou o AWS Command Line Interface para criar um conjunto de dados de API:
+ [Criar um conjunto de dados de API (console)](publish-API-product.md#create-api-ds-console)
+ [Criação de um conjunto de dados de API (AWS CLI)](publish-API-product.md#create-api-ds-cli)

### Criar um conjunto de dados de API (console)
<a name="data-grant-create-api-ds-console"></a>

**Para criar um conjunto de dados de API (console)**

1. Abra o navegador e faça login no [console do AWS Data Exchange](https://console.aws.amazon.com/dataexchange).

1. No painel de navegação esquerdo, em **Meus dados**, selecione **Conjuntos de dados de propriedade**.

1. Em **Conjuntos de dados de propriedade**, selecione **Criar conjunto de dados** para abrir o assistente de **Etapas de criação do conjunto de dados**.

1. Em **Selecionar tipo de conjunto de dados**, selecione **API do Amazon API Gateway**.

1. Em **Definir conjunto de dados**, insira um **Nome** e uma **Descrição** para o conjunto de dados. Para obter mais informações, consulte [Melhores práticas de conjunto de dados](data-sets.md#data-set-best-practices). 

1. (Opcional) Em **Adicionar tags — opcional**, adicione tags.

1. Escolha **Criar**. 

Agora você está pronto para criar uma revisão. 

### Criação de um conjunto de dados de API (AWS CLI)
<a name="data-grant-create-api-ds-cli"></a>

**Para criar um conjunto de dados de API (CLI)**

1. Use o comando `create-data-set` para criar um conjunto de dados de API:

   ```
   $ AWS dataexchange create-data-set \
   -\\-asset-type API_GATEWAY_API \
   -\\-description 'Data Set Description' \
   -\\-name 'Data Set Name'
   
   {
   "Arn": "arn:aws:dataexchange:us-east-1:123456789012:data-sets/$DATA_SET_ID",
   "AssetType": "API_GATEWAY_API",
   "CreatedAt": "2021-09-11T00:16:46.349000+00:00",
   "Description": "Data Set Description",
   "Id": "$DATA_SET_ID",
   "Name": "Data Set Name",
   "Origin": "OWNED",
   "UpdatedAt": "2021-09-11T00:16:46.349000+00:00"
   }
   ```

1. Observe o novo tipo de ativo de `API_GATEWAY_API`.

Agora você está pronto para criar uma revisão.

## Etapa 3: criar uma revisão
<a name="data-grant-create-api-revision"></a>

No procedimento a seguir, você cria uma revisão depois de criar um conjunto de dados. Para obter mais informações, consulte [Revisões](data-sets.md#revisions).

Você usa o AWS Data Exchange console ou o AWS Command Line Interface para criar uma revisão:
+ [Criação de revisão (console)](publish-API-product.md#create-api-revision-console)
+ [Criação de revisão (AWS CLI)](publish-API-product.md#create-api-revision-cli)

### Criação de revisão (console)
<a name="data-grant-create-api-revision-console"></a>

**Para criar uma revisão (console)**

1. Na seção **Visão geral do conjunto de dados** da página de detalhes do conjunto de dados:

   1. (Opcional) Selecione **Editar nome** para editar informações sobre seu conjunto de dados.

   1. (Opcional) Selecione **Excluir** para excluir o conjunto de dados.

1. Na seção **Revisões**, selecione **Criar revisão**.

1. Em **Definir revisão**, forneça um comentário opcional para sua revisão que descreva a finalidade da revisão. 

1. (Opcional) Em **Adicionar tags — opcional**, adicione tags associadas ao recurso.

1. Escolha **Criar revisão**.

1. Revise, edite ou exclua as alterações da etapa anterior. 

Agora você pode [adicionar ativos de API à revisão](publish-API-product.md#add-api-asset).

### Criação de revisão (AWS CLI)
<a name="data-grant-create-api-revision-cli"></a>

**Para criar uma revisão (AWS CLI)**

1. Use o comando `create-revision` para criar uma revisão:

   ```
   $ AWS dataexchange create-revision \
   -\\-data-set-id $DATA_SET_ID \
   -\\-comment 'First Atlas Revision'
   {
   "Arn": "arn:aws:dataexchange:us-east-1:123456789012:data-sets/$DATA_SET_ID/revisions/$REVISION_ID",
   "Comment": "First Atlas Revision",
   "CreatedAt": "2021-09-11T00:18:49.160000+00:00",
   "DataSetId": "$DATA_SET_ID",
   "Finalized": false,
   "Id": "$REVISION_ID",
   "UpdatedAt": "2021-09-11T00:18:49.160000+00:00"
   }
   ```

1. [Adicione os ativos da API à revisão](publish-API-product.md#add-api-asset).
**nota**  
Você precisará saber o ID da API REST do API Gateway que deseja importar, bem como o estágio.

## Etapa 4: adicionar ativos da API a uma revisão
<a name="data-grant-add-api-asset"></a>

Os ativos de API contêm as informações de que os assinantes precisam para fazer chamadas para sua API. Para obter mais informações, consulte [Ativos](data-sets.md#assets). 

No procedimento a seguir, você importa ativos de dados e finaliza a revisão. 

Você usa o AWS Data Exchange console ou o AWS CLI para adicionar ativos a uma revisão:
+ [Adicionar ativos de API a uma revisão (console)](publish-API-product.md#add-api-assets)
+ [Adicionar ativos de API a uma revisão (AWS CLI)](publish-API-product.md#add-api-assets-cli)

### Adicionar ativos de API a uma revisão (console)
<a name="data-grant-add-api-assets"></a>

**Para adicionar ativos à revisão (console)**

1. Na seção **Ativos da API** da página de detalhes do conjunto de dados, selecione **Adicionar estágio da API**.

1. Em **Selecionar estágio da API**, para a **API do Amazon API Gateway**, insira uma API na caixa de entrada ou escolha uma das seguintes opções na lista suspensa:
   + **API em outra Conta da AWS** — essa é uma API de várias contas que você recebeu permissão para acessar.
   + **Neste Conta da AWS** — esta é uma API em seu Conta da AWS.

   1. Se você escolheu **API em outra Conta da AWS**, insira o ID da API e o **nome do estágio** da API nas caixas de entrada.

   1. Se você escolher **Neste Conta da AWS**, escolha o **nome do estágio** da API na lista suspensa
**nota**  
Você pode criar um novo estágio de API escolhendo **Criar novo** e seguindo as etapas no modal **Criar nova API no Amazon API Gateway**. Depois que o novo estágio for criado, repita a Etapa 2.

1. Em **Configuração avançada — opcional**, você pode escolher **Conectar o plano de uso existente do Amazon API Gateway** para usar o controle de utilização e cota, conforme definido no plano de uso existente, e inserir a **chave da API**.

1. Em **API de documento para assinantes**, forneça detalhes sobre a API que os destinatários verão depois de aceitarem a concessão de dados.

   1. Em **Nome da API**, insira um nome que os destinatários possam usar para identificar o ativo da API.
**nota**  
Se uma **Nesta Conta da AWS** for selecionada, o **Nome da API** será preenchido automaticamente, e você poderá modificar se necessário.  
Se uma **API em outra Conta da AWS** for selecionada, o **Nome da API** será preenchido com um nome padrão, que você deverá modificar para que o destinatário possa entender facilmente do que se trata.

   1. Para a **especificação OpenAPI 3.0**: 

      1. Insira ou copie e cole o arquivo de especificação OpenAPI 3.0.

      1. Selecione **Importar do arquivo.JSON** e selecione o arquivo.json do seu computador local para importar.

         A especificação importada aparece na caixa.

      1. Selecione **Importar do Amazon API Gateway** e selecione uma especificação para importar.

         A especificação importada aparece na caixa.

   1. Em **Documentação adicional — opcional**, insira qualquer informação adicional que seja útil para o assinante saber sobre a API. O Markdown é compatível.
**nota**  
Você não poderá editar a especificação OpenAPI e a documentação adicional depois de adicionar esse ativo a uma revisão.   
Se desejar atualizar essas informações e a revisão não for finalizada, você poderá substituir o ativo.   
Se quiser atualizar essas informações e a revisão estiver finalizada, você poderá fazer uma nova revisão com o ativo atualizado.

1. Selecione **Adicionar estágio de API**.

   Um trabalho é iniciado para importar o ativo (neste caso, a API) para o conjunto de dados.
**nota**  
Se não tiver uma API no Amazon API Gateway, você será solicitado a criar uma. 

1. Depois que o trabalho for concluído, o campo **Estado** na seção **Trabalhos** será atualizado para **Concluído**.

1. Se você tiver mais APIs a acrescentar, repita a Etapa 2.

1. Em **Visão geral da revisão**, analise a revisão e os ativos. 

1. Selecione **Finalizar**.

Você finalizou com êxito uma revisão de um conjunto de dados. 

É possível [editar uma revisão](publish-API-product.md#edit-api-revision) ou [excluir uma revisão](publish-API-product.md#delete-api-revision) antes de adicioná-la a um produto. 

Agora você está pronto para [criar uma nova concessão de dados contendo APIs](publish-API-product.md#publish-api-data-product).

### Adicionar ativos de API a uma revisão (AWS CLI)
<a name="data-grant-add-api-assets-cli"></a>

Você pode adicionar ativos de API executando um trabalho `IMPORT_ASSET_FROM_API_GATEWAY_API`.

**Para adicionar ativos de API a uma revisão (AWS CLI):**

1. Use o comando `create-job` para adicionar ativos de API à revisão:

   ```
   $ AWS dataexchange create-job \
     -\\-type IMPORT_ASSET_FROM_API_GATEWAY_API \
     -\\-details '{"ImportAssetFromApiGatewayApi":{"DataSetId":"$DATA_SET_ID","RevisionId":"$REVISION_ID","ApiId":"$API_ID","Stage":"$API_STAGE","ProtocolType":"REST"}}'
   {
       "Arn": "arn:aws:dataexchange:us-east-1:123456789012:jobs/$JOB_ID",
       "CreatedAt": "2021-09-11T00:38:19.875000+00:00",
       "Details": {
           "ImportAssetFromApiGatewayApi": {
               "ApiId": "$API_ID",
               "DataSetId": "$DATA_SET_ID",
               "ProtocolType": "REST",
               "RevisionId": "$REVISION_ID",
               "Stage": "$API_STAGE"
           }
       },
       "Id": "$JOB_ID",
       "State": "WAITING",
       "Type": "IMPORT_ASSET_FROM_API_GATEWAY_API",
       "UpdatedAt": "2021-09-11T00:38:19.875000+00:00"
   }
   
   $ AWS dataexchange start-job -\\-job-id $JOB_ID
   $ AWS dataexchange get-job -\\-job-id $JOB_ID
   {
       "Arn": "arn:aws:dataexchange:us-east-1:0123456789012:jobs/$JOB_ID",
       "CreatedAt": "2021-09-11T00:38:19.875000+00:00",
       "Details": {
           "ImportAssetFromApiGatewayApi": {
               "ApiId": "$API_ID",
               "DataSetId": "$DATA_SET_ID",
               "ProtocolType": "REST",
               "RevisionId": "$REVISION_ID",
               "Stage": "$API_STAGE"
               "ApiEndpoint": "string",
               "ApiKey": "string",
               "ApiName": "string",            
               "ApiDescription": "string",
               "ApiSpecificationDownloadUrl": "string",
               "ApiSpecificationDownloadUrlExpiresAt": "string"
           }
       },
       "Id": "$JOB_ID",
       "State": "COMPLETED",
       "Type": "IMPORT_ASSET_FROM_API_GATEWAY_API",
       "UpdatedAt": "2021-09-11T00:38:52.538000+00:00"
   }
   ```

1. Use o comando `list-revision-assets` para confirmar se o novo ativo foi criado corretamente: 

   ```
   $ AWS dataexchange list-revision-assets \
     -\\-data-set-id $DATA_SET_ID \
     -\\-revision-id $REVISION_ID
   {
       "Assets": [
       {
           "Arn": "arn:aws:dataexchange:us-east-1:123456789012:data-sets/$DATA_SET_ID/revisions/$REVISION_ID/assets/$ASSET_ID",
           "AssetDetails": {
               "ApiGatewayApiAsset": {
                   "ApiEndpoint": "https://$API_ID.execute-api.us-east-1.amazonaws.com/$API_STAGE",
                   "ApiId": "$API_ID",
                   "ProtocolType": "REST",
                   "Stage": "$API_STAGE"
               }
           },
           "AssetType": "API_GATEWAY_API",
           "CreatedAt": "2021-09-11T00:38:52.457000+00:00",
           "DataSetId": "$DATA_SET_ID",
           "Id": "$ASSET_ID",
           "Name": "$ASSET_ID/$API_STAGE",
           "RevisionId": "$REVISION_ID",
           "UpdatedAt": "2021-09-11T00:38:52.457000+00:00"
       }
       ]
   }
   ```

Agora você está pronto para criar uma nova concessão de dados contendo APIs.

### Editar revisão
<a name="data-grant-edit-api-revision"></a>

**Para editar a revisão depois de finalizá-la**

1. Na **Visão geral da revisão**, selecione **Desfinalizar**.

   Você verá uma mensagem informando que a revisão não está mais no estado finalizado.

1. Para editar a revisão, em **Visão geral da revisão**, selecione **Ações** > **Editar**.

1. Faça as alterações e selecione **Atualizar**.

1. Analise as alterações e selecione **Finalizar**.

### Excluir revisão
<a name="data-grant-delete-api-revision"></a>

**Para excluir a revisão depois de finalizá-la**

1. Na **Visão geral da revisão**, selecione **Excluir**.

1. Digite **Delete** na caixa de diálogo **Excluir revisão** e selecione **Excluir**.

**Atenção**  
Isso exclui a revisão e todos os ativos. Esta ação não pode ser desfeita.

## Etapa 5: criar uma nova concessão de dados contendo APIs
<a name="data-grant-publish-api-data-product"></a>

Depois de criar pelo menos um conjunto de dados e finalizar uma revisão com ativos, estará tudo pronto para publicar esse conjunto como parte de uma concessão de dados.

**Como criar uma concessão de dados**

1. No painel de navegação esquerdo do AWS Data Exchange console, em Concessões de **dados trocadas, escolha Concessões** de **dados enviadas**.

1. Em **Concessões de dados enviadas**, selecione **Criar concessão de dados** para abrir o assistente **Definir concessão de dados**.

1. Na seção **Selecionar conjunto de dados de propriedade**, marque a caixa de seleção ao lado do conjunto de dados a ser adicionado.
**nota**  
O conjunto de dados escolhido deve ter uma revisão finalizada. Conjuntos de dados sem revisões finalizadas não podem ser adicionados às concessões de dados.  
Diferentemente dos conjuntos de dados incluídos nos produtos de dados que são compartilhados AWS Marketplace, os conjuntos de dados adicionados às concessões de dados não têm regras de acesso de revisão, o que significa que um destinatário de uma concessão de dados, depois que a concessão de dados for aprovada, terá acesso a todas as revisões finalizadas de um determinado conjunto de dados (incluindo revisões históricas finalizadas antes da criação da concessão de dados).

1. Na seção **Visão geral da concessão**, insira as informações que o destinatário verá sobre a concessão de dados, incluindo o **Nome da concessão de dados** e a **Descrição da concessão de dados**.

1. **Escolha Avançar**.

1. Na seção **Informações de acesso do destinatário**, em **Conta da AWS ID**, insira o Conta da AWS ID da conta do destinatário que deve receber a concessão de dados.

1. Além disso, na seção **Informações de acesso do destinatário**, em **Data final do acesso**, escolha se a concessão de dados deve ser executada de modo permanente, selecionando **Sem data de término**, ou se deve ter uma data de término, selecionando **Data de término específica** e escolhendo a data de término desejada.

1. Escolha **Próximo**.

1. Na seção **Revisar e enviar**, revise as informações da concessão de dados.

1. Se tiver certeza de que deseja criar a concessão de dados e enviá-la ao destinatário escolhido, selecione **Criar e enviar concessão de dados**.

Você concluiu a parte manual da criação de uma concessão de dados. A concessão de dados aparece na guia **Concessões de dados enviados** na página **Concessões de dados enviados**, com o status de **Aceitação pendente** até que a conta do destinatário a aceite.