

# Amazon ECS Service Connect com Namespaces compartilhados do AWS Cloud Map
<a name="service-connect-shared-namespaces"></a>

O Amazon ECS Service Connect oferece suporte ao uso de namespaces compartilhados do AWS Cloud Map entre várias Contas da AWS dentro da mesma Região da AWS. Esse recurso permite criar aplicações distribuídas nas quais serviços executados em diferentes Contas da AWS podem descobrir e se comunicar uns com os outros por meio do Service Connect. Os namespaces compartilhados são gerenciados usando o AWS Resource Access Manager (AWS RAM), que permite o compartilhamento seguro de recursos entre contas. Para obter mais informações sobre namespaces compartilhados, consulte [Compartilhamento de namespaces do AWS Cloud Map entre contas](https://docs.aws.amazon.com/cloud-map/latest/dg/sharing-namespaces.html) no *Guia do desenvolvedor do AWS Cloud Map*.

**Importante**  
Você deve usar a permissão gerenciada `AWSRAMPermissionCloudMapECSFullPermission` para compartilhar o namespace para que o Service Connect funcione corretamente com ele.

Quando você usa namespaces compartilhados do AWS Cloud Map com o Service Connect, serviços de várias Contas da AWS podem participar do mesmo namespace de serviço. Isso é útil especialmente para organizações com várias Contas da AWS que precisam manter a comunicação entre serviços além dos limites da conta, preservando a segurança e o isolamento.

**nota**  
Para se comunicar com serviços que estão em VPCs diferentes, você precisará configurar a conectividade entre VPCs. Isso pode ser feito usando uma conexão de emparelhamento da VPC. Para obter mais informações, consulte [Criar ou excluir uma conexão de emparelhamento da VPC](https://docs.aws.amazon.com/vpc/latest/peering/create-vpc-peering-connection.html) no *Guia de emparelhamento da Amazon Virtual Private Cloud (VPC)*.

# Usar namespaces compartilhados do AWS Cloud Map com o Amazon ECS Service Connect
<a name="service-connect-shared-namespaces-setup"></a>

A configuração de namespaces compartilhados do AWS Cloud Map para o Service Connect envolve as seguintes etapas: proprietário do namespace criando-o, proprietário compartilhando-o por meio do AWS Resource Access Manager (AWS RAM), consumidor aceitando o compartilhamento de recursos e consumidor configurando o Service Connect para usar o namespace compartilhado.

## Etapa 1: criar o namespace do AWS Cloud Map
<a name="service-connect-shared-namespaces-create"></a>

O proprietário do namespace cria um namespace do AWS Cloud Map que será compartilhado com outras contas.

**Para criar um namespace para compartilhamento usando o Console de gerenciamento da AWS**

1. Abra o console AWS Cloud Map do em [https://console.aws.amazon.com/cloudmap/](https://console.aws.amazon.com/cloudmap/).

1. Escolha **Create namespace (Criar namespace)**.

1. Insira um **nome de namespace**. Esse nome será usado pelos serviços em todas as contas participantes.

1. Para **Tipo de namespace**, escolha o tipo apropriado para o seu caso de uso:
   + **Chamadas de API**: namespaces HTTP para descoberta de serviços sem a funcionalidade de DNS.
   + **Chamadas de API e consultas ao DNS em VPCs**: namespaces de DNS privados para descoberta de serviços com consultas ao DNS privadas em uma VPC.
   + **Chamadas de API e consultas ao DNS públicas**: namespaces de DNS públicos para descoberta de serviços com consultas ao DNS públicas.

1.  Escolha **Create namespace (Criar namespace)**.

## Etapa 2: compartilhar o namespace usando o AWS RAM
<a name="service-connect-shared-namespaces-share"></a>

O proprietário do namespace usa o AWS RAM para compartilhar o namespace com outras Contas da AWS.

**Para compartilhar um namespace usando o console do AWS RAM**

1. Abra o console do AWS RAM em [https://console.aws.amazon.com/ram/](https://console.aws.amazon.com/ram/).

1. Escolha **Criar compartilhamento de recursos**.

1. Em **Nome**, insira um nome descritivo para o compartilhamento de recursos.

1. Na seção **Recursos**:

   1. Em **Tipo de recurso**, escolha **Namespaces do Cloud Map**.

   1. Selecione o namespace criado na etapa anterior.

1. Na seção **Permissões gerenciadas**, especifique **AWSRamPermissionCloudMapECSFullPermission**.
**Importante**  
Você deve usar a permissão gerenciada `AWSRAMPermissionCloudMapECSFullPermission` para compartilhar o namespace para que o Service Connect funcione corretamente com ele.

1. Na seção **Entidades principais**, especifique as Contas da AWS com as quais você deseja compartilhar o namespace. Você pode inserir IDs de conta ou IDs de unidades organizacionais.

1. Escolha **Criar compartilhamento de recursos**.

## Etapa 3: aceitar o compartilhamento de recursos
<a name="service-connect-shared-namespaces-accept"></a>

As contas de consumidores de namespace devem aceitar o convite de compartilhamento de recursos para usar o namespace compartilhado.

**Para aceitar um convite de compartilhamento de recursos usando o console do AWS RAM**

1. Na conta de consumidor, abra o console do AWS RAM em [https://console.aws.amazon.com/ram/](https://console.aws.amazon.com/ram/).

1. No painel de navegação, selecione **Compartilhado comigo**; em seguida, escolha **Compartilhamentos de recursos**.

1. Selecione o convite de compartilhamento de recursos e escolha **Aceitar compartilhamento de recursos**.

1. Depois de aceitar, anote o ARN do namespace compartilhado nos detalhes do recurso. Você usará esse ARN ao configurar os serviços do Service Connect.

## Etapa 4: configurar um serviço do Amazon ECS com o namespace compartilhado
<a name="service-connect-shared-namespaces-configure"></a>

Depois de aceitar o namespace compartilhado, o consumidor do namespace pode configurar os serviços do Amazon ECS para usar o namespace compartilhado. A configuração é semelhante ao uso de um namespace normal, mas você deve especificar o ARN do namespace em vez do nome. Para obter um procedimento detalhado de criação de serviço, consulte [Criação de uma implantação de atualização contínua do Amazon ECS](create-service-console-v2.md).

**Para criar um serviço com um namespace compartilhado usando o Console de gerenciamento da AWS**

1. Abra o console em [https://console.aws.amazon.com/ecs/v2](https://console.aws.amazon.com/ecs/v2).

1. Na página **Clusters**, selecione o cluster no qual deseja criar o serviço.

1. Em **Serviços**, escolha **Criar**.

1. Depois de preencher outros detalhes, dependendo da sua workload, na seção **Service Connect**, escolha **Usar Service Connect**.

1. Em **Namespace**, insira o ARN completo do namespace compartilhado.

   O formato do ARN é: `arn:aws:servicediscovery:region:account-id:namespace/namespace-id`

1. Defina as configurações restantes do Service Connect conforme necessário para seu tipo de serviço (cliente ou cliente-servidor).

1. Conclua o processo de criação de serviço.

Você também pode configurar serviços usando a AWS CLI ou os SDKs da AWS especificando o ARN do namespace compartilhado no parâmetro `namespace` do `serviceConnectConfiguration`.

```
aws ecs create-service \
    --cluster my-cluster \
    --service-name my-service \
    --task-definition my-task-def \
    --service-connect-configuration '{
        "enabled": true,
        "namespace": "arn:aws:servicediscovery:us-west-2:123456789012:namespace/ns-abcdef1234567890",
        "services": [{
            "portName": "web",
            "discoveryName": "my-service",
            "clientAliases": [{
                "port": 80,
                "dnsName": "my-service"
            }]
        }]
    }'
```

## Considerações
<a name="service-connect-shared-namespaces-considerations"></a>

Considere o seguinte ao usar namespaces compartilhados do AWS Cloud Map com o Service Connect:
+ O AWS RAM deve estar disponível na Região da AWS em que você deseja usar o namespace compartilhado.
+ O namespace compartilhado deve estar na mesma Região da AWS que os serviços e clusters do Amazon ECS.
+ Você deve usar o ARN do namespace, não o ID, ao configurar o Service Connect com um namespace compartilhado.
+ Todos os tipos de namespace são aceitos: HTTP, DNS privado e DNS público.
+ Se o acesso a um namespace compartilhado for revogado, as operações do Amazon ECS que exigirem interação com o namespace (como`CreateService`, `UpdateService` ECS `ListServicesByNamespace`) falharão. Para obter mais informações sobre como solucionar problemas de permissões com namespaces compartilhados, consulte [Solução de problemas do Amazon ECS Service Connect com namespaces compartilhados do AWS Cloud Map](service-connect-shared-namespaces-troubleshooting.md).
+ Para descoberta de serviços usando consultas ao DNS em um namespace de DNS privado compartilhado:
  + O proprietário do namespace precisará chamar `create-vpc-association-authorization` com o ID da zona hospedada privada associada ao namespace e a VPC do consumidor.

    ```
    aws route53 create-vpc-association-authorization --hosted-zone-id Z1234567890ABC --vpc VPCRegion=us-east-1,VPCId=vpc-12345678
    ```
  + O consumidor do namespace precisará chamar `associate-vpc-with-hosted-zone` com o ID da zona hospedada privada.

    ```
    aws route53 associate-vpc-with-hosted-zone --hosted-zone-id Z1234567890ABC --vpc VPCRegion=us-east-1,VPCId=vpc-12345678
    ```
+ Somente o proprietário do namespace pode gerenciar o compartilhamento de recursos.
+ Os consumidores de namespace podem criar e gerenciar serviços dentro do namespace compartilhado, mas não podem modificar o namespace em si.
+ Os nomes de descoberta devem ser exclusivos no namespace compartilhado, independentemente da conta que cria o serviço.
+ Os serviços no namespace compartilhado podem descobrir e se conectar a serviços de outras contas da AWS que tenham acesso ao namespace.
+ Ao habilitar o TLS para o Service Connect e usar um namespace compartilhado, a autoridade de certificação (CA) CA Privada da AWS tem como escopo o namespace. Quando o acesso ao namespace compartilhado é revogado, o acesso à CA é interrompido.
+ Ao trabalhar com um namespace compartilhado, proprietários e consumidores de namespace não têm acesso às métricas do Amazon CloudWatch entre contas, por padrão. As métricas de destino são publicadas somente em contas que possuem serviços de cliente. Uma conta que possui serviços de cliente não tem acesso às métricas recebidas por uma conta que possui serviços de cliente/servidor e vice-versa. Para permitir o acesso entre contas às métricas, configure a observabilidade entre contas do CloudWatch. Para obter mais informações sobre a configuração da observabilidade entre contas, consulte [Observabilidade entre contas do CloudWatch](https://docs.aws.amazon.com/AmazonCloudWatch/latest/monitoring/CloudWatch-Unified-Cross-Account.html) no *Guia do usuário do Amazon CloudWatch*. Para obter mais informações sobre as métricas do CloudWatch para o Service Connect, consulte [Métricas do CloudWatch do Amazon ECS](available-metrics.md).

# Solução de problemas do Amazon ECS Service Connect com namespaces compartilhados do AWS Cloud Map
<a name="service-connect-shared-namespaces-troubleshooting"></a>

Use as informações a seguir para solucionar problemas com namespaces compartilhados do AWS Cloud Map e com o Service Connect. Para obter mais informações sobre a localização de mensagens de erro, consulte [Solução de problemas do Amazon ECS](https://docs.aws.amazon.com/AmazonECS/latest/developerguide/troubleshooting.html).

As mensagens de erro relacionadas a problemas de permissões aparecem por causa da falta de permissões ou se o acesso ao namespace for revogado. 

**Importante**  
Você deve usar a permissão gerenciada `AWSRAMPermissionCloudMapECSFullPermission` para compartilhar o namespace para que o Service Connect funcione corretamente com ele.

A mensagem de erro aparece em um dos seguintes formatos:

Ocorreu um erro (ClientException) ao chamar a operação <OperationName>: o usuário: arn:aws:iam::<account-id>:user/<user-name> não está autorizado a executar: <ActionName> no recurso: <ResourceArn> porque nenhuma política baseada em recurso permite a ação <ActionName>

Os cenários a seguir podem resultar em uma mensagem de erro neste formato:

**Falha na criação ou atualização do cluster**  
Esses problemas ocorrem quando as operações do Amazon ECS, como `CreateCluster` ou `UpdateCluster` falham por causa da falta de permissões do AWS Cloud Map. As operações exigem permissões para as seguintes ações do AWS Cloud Map:  
+ `servicediscovery:GetNamespace`
Verifique se o convite de compartilhamento de recursos foi aceito na conta do consumidor e se o ARN do namespace correto está sendo usado na configuração do Service Connect.

**Falha na criação ou atualização do serviço**  
Esses problemas ocorrem quando as operações do Amazon ECS, como `CreateService` ou `UpdateService` falham por causa da falta de permissões do AWS Cloud Map. As operações exigem permissões para as seguintes ações do AWS Cloud Map:  
+ `servicediscovery:CreateService`
+ `servicediscovery:GetNamespace`
+ `servicediscovery:GetOperation` (para criar um novo serviço do AWS Cloud Map)
+ `servicediscovery:GetService` (para quando um serviço do AWS Cloud Map já existir)
Verifique se o convite de compartilhamento de recursos foi aceito na conta do consumidor e se o ARN do namespace correto está sendo usado na configuração do Service Connect.

**`ListServicesByNamespace` Falha na operação**  
Esse problema ocorre quando a operação `ListServicesByNamespace` do Amazon ECS falha. A operação exige permissões para as seguintes ações do AWS Cloud Map:  
+ `servicediscovery:GetNamespace`
Para resolver esse problema:  
+ Verifique se a conta do consumidor tem a permissão `servicediscovery:GetNamespace`.
+ Use o ARN do namespace ao chamar a API, não o nome.
+ Verifique se o compartilhamento de recursos está ativo e se o convite foi aceito.

O usuário: <iam-user> não está autorizado a executar: <ActionName> no recurso: <ResourceArn> com uma negação explicita em uma política baseada em identidade.

Os cenários a seguir podem resultar em uma mensagem de erro neste formato:

**A exclusão do serviço falha e fica presa no estado `DRAINING`**  
Esse problema ocorre quando as operações `DeleteService` do Amazon ECS falham em decorrência da falta de permissão `servicediscovery:DeleteService` quando o acesso ao namespace é revogado. O serviço pode parecer ter sido excluído com êxito inicialmente, mas ficará preso no estado `DRAINING`. A mensagem de erro aparece como evento de serviço do Amazon ECS.  
Para resolver esse problema, o proprietário do namespace deve compartilhar o namespace com a conta do consumidor para permitir que a exclusão do serviço seja concluída.

**Falha na execução das tarefas do serviço**  
Esse problema ocorre quando as tarefas não são iniciadas por causa da falta de permissões. A mensagem de erro aparece como erro de tarefa interrompida. Para obter mais informações, consulte [Resolver erros de tarefa interrompida do Amazon ECS](resolve-stopped-errors.md).  
As ações do AWS Cloud Map a seguir são necessárias para executar uma tarefa:  
+ `servicediscovery:GetOperation`
+ `servicediscovery:RegisterInstance`
Certifique-se de que a conta do consumidor tenha as permissões necessárias e de que o namespace compartilhado esteja acessível.

**As tarefas não param de forma limpa ou ficam presas no estado `DEACTIVATING` ou `DEPROVISIONING`**  
Esse problema ocorre quando as tarefas não conseguem cancelar o registro do serviço do AWS Cloud Map durante o encerramento por causa da falta de permissões. O erro aparece como `statusReason` no anexo da tarefa que pode ser recuperado usando a API `DescribeTasks`. Para obter mais informações, consulte [DescribeTasks](https://docs.aws.amazon.com/AmazonECS/latest/APIReference/API_DescribeTasks.html) na *Referência de APIs do Amazon Elastic Container Service*.  
As seguintes ações do AWS Cloud Map são necessárias para interromper uma tarefa:  
+ `servicediscovery:DeregisterInstance`
+ `servicediscovery:GetOperation`
Se o acesso ao namespace compartilhado for revogado, as tarefas poderão permanecer em um estado `DEACTIVATING` ou `DEPROVISIONING` até que o acesso ao namespace seja restaurado. Solicite que o proprietário do namespace restaure o acesso a ele.