

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

# Configure um CI/CD pipeline para cargas de trabalho híbridas no Amazon ECS Anywhere usando o AWS CDK e GitLab
<a name="set-up-a-ci-cd-pipeline-for-hybrid-workloads-on-amazon-ecs-anywhere-by-using-aws-cdk-and-gitlab"></a>

*Rafael Ortiz, Amazon Web Services*

## Resumo
<a name="set-up-a-ci-cd-pipeline-for-hybrid-workloads-on-amazon-ecs-anywhere-by-using-aws-cdk-and-gitlab-summary"></a>

O Amazon ECS Anywhere é uma extensão do Amazon Elastic Container Service (Amazon ECS). Ele fornece suporte para registrar uma *instância externa*, como um servidor on-premises ou uma máquina virtual (VM), no cluster do Amazon ECS. Esse atributo ajuda a reduzir custos e mitigar operações e orquestrações de contêineres on-premises. Você pode usar o ECS Anywhere para implantar e executar aplicativos de contêiner em ambientes on-premises e na nuvem. Isso elimina a necessidade de sua equipe aprender vários domínios e conjuntos de habilidades ou gerenciar softwares complexos por conta própria.

Esse padrão descreve uma step-by-step abordagem para provisionar um cluster do Amazon ECS com instâncias do Amazon ECS Anywhere usando pilhas do Cloud Development Kit (AWS CDK) da Amazon Web Services (AWS). Em seguida, você usa CodePipeline a AWS para configurar um pipeline de integração e implantação contínuas (CI/CD). Em seguida, você replica seu repositório de GitLab código na AWS CodeCommit e implanta seu aplicativo em contêineres no cluster Amazon ECS.

Esse padrão foi projetado para ajudar aqueles que usam a infraestrutura local para executar aplicativos de contêiner e gerenciar GitLab a base de código do aplicativo. Você pode gerenciar essas workloads usando os serviços de Nuvem AWS, sem perturbar sua infraestrutura on-premises existente.

## Pré-requisitos e limitações
<a name="set-up-a-ci-cd-pipeline-for-hybrid-workloads-on-amazon-ecs-anywhere-by-using-aws-cdk-and-gitlab-prereqs"></a>

**Pré-requisitos **
+ Uma conta AWS ativa
+ Um aplicativo de contêiner executado na infraestrutura on-premises.
+ Um GitLab repositório onde você gerencia a base de código do seu aplicativo. Para obter mais informações, consulte [Repositório](https://docs.gitlab.com/ee/user/project/repository/) (GitLab).
+ AWS Command Line Interface (AWS CLI), instalada e configurada. Para obter mais informações, consulte [Instalar ou atualizar a versão mais recente da AWS CLI](https://docs.aws.amazon.com/cli/latest/userguide/getting-started-install.html) (Documentação da AWS CLI).
+ AWS CDK Toolkit, instalado e configurado globalmente. Para obter mais informações, consulte [Instalar o AWS CDK](https://docs.aws.amazon.com/cdk/v2/guide/getting_started.html#getting_started_install) na documentação do AWS CDK Workshop.
+ npm, instalado e configurado para o AWS CDK em. TypeScript Para obter mais informações, consulte [Como baixar e instalar o Node.js e o npm](https://docs.npmjs.com/downloading-and-installing-node-js-and-npm) (documentação do npm).

**Limitações**
+ Para limitações e considerações, consulte [Instâncias externas (Amazon ECS Anywhere)](https://docs.aws.amazon.com/AmazonECS/latest/developerguide/ecs-anywhere.html#ecs-anywhere-considerations) na documentação do Amazon ECS.

**Versões do produto**
+ AWS CDK Toolkit versão 2.27.0 ou superior
+ npm versão 7.20.3 ou superior
+ Node.js versão 16.6.1 ou superior

## Arquitetura
<a name="set-up-a-ci-cd-pipeline-for-hybrid-workloads-on-amazon-ecs-anywhere-by-using-aws-cdk-and-gitlab-architecture"></a>

**Pilha de tecnologias de destino**
+ AWS CDK
+ AWS CloudFormation
+ AWS CodeBuild
+ AWS CodeCommit
+ AWS CodePipeline
+ Amazon ECS Anywhere
+ Amazon Elastic Container Registry (Amazon ECR)
+ AWS Identity and Access Management (IAM)
+ AWS Systems Manager
+ GitLab repositório

**Arquitetura de destino**

![\[Diagrama de arquitetura da configuração do cluster e do CI/CD pipeline do Amazon ECS.\]](http://docs.aws.amazon.com/pt_br/prescriptive-guidance/latest/patterns/images/pattern-img/b0f35986-a839-4b01-8eb0-4748182ddafc/images/85b8d4d9-3591-4d69-a54b-64aa543498f1.png)


Esse diagrama representa dois fluxos de trabalho principais descritos nesse padrão, provisionando o cluster do Amazon ECS e configurando o CI/CD pipeline que configura e implanta o pipeline, da CI/CD seguinte forma:

1. **Provisionar o cluster do Amazon ECS**

   1. Quando você implanta a primeira pilha de CDK da AWS, ela cria uma CloudFormation pilha na AWS.

   1. Essa CloudFormation pilha provisiona um cluster do Amazon ECS e recursos relacionados da AWS.

   1. Para registrar uma instância externa com um cluster do Amazon ECS, você deve instalar o AWS Systems Manager Agent (SSM Agent) na sua VM e registrar a VM como uma instância gerenciada do AWS Systems Manager. 

   1. Você deve instalar o agente de contêiner do Amazon ECS e o Docker na sua VM para registrá-la como instância externa com o cluster do Amazon ECS.

   1. Quando a instância externa é registrada e configurada com o cluster Amazon ECS, ela pode executar vários contêineres na sua VM, que é registrada como uma instância externa.

   1. O cluster do Amazon ECS está ativo e pode executar as cargas de trabalho do aplicativo por meio de contêineres. A instância de contêiner Amazon ECS Anywhere é executada em um ambiente on-premises, mas está associada ao cluster do Amazon ECS na nuvem.

1. **Configurando e implantando o pipeline CI/CD **

   1. Quando você implanta a segunda pilha de CDK da AWS, ela cria outra CloudFormation pilha na AWS.

   1. Essa CloudFormation pilha provisiona um pipeline CodePipeline e recursos relacionados da AWS.

   1. Você envia e mescla as alterações do código do aplicativo em um repositório local GitLab . 

   1. O GitLab repositório é automaticamente replicado para o CodeCommit repositório.

   1. As atualizações do CodeCommit repositório são CodePipeline iniciadas automaticamente. 

   1. CodePipeline copia o código CodeCommit e cria o aplicativo implantável integrado. CodeBuild

   1. CodePipeline cria uma imagem Docker do ambiente de CodeBuild construção e a envia para o repositório Amazon ECR.

   1. CodePipeline inicia CodeDeploy ações que extraem a imagem do contêiner do repositório Amazon ECR.

   1. CodePipeline implanta a imagem do contêiner no cluster Amazon ECS.

**Automação e escala**

Esse padrão usa o AWS CDK como uma ferramenta de infraestrutura como código (IaC) para configurar e implantar essa arquitetura. O AWS CDK ajuda você a orquestrar os recursos da AWS e configurar o Amazon ECS Anywhere e o pipeline. CI/CD 

## Ferramentas
<a name="set-up-a-ci-cd-pipeline-for-hybrid-workloads-on-amazon-ecs-anywhere-by-using-aws-cdk-and-gitlab-tools"></a>

**Serviços da AWS**
+ O [AWS Cloud Development Kit (AWS CDK)](https://docs.aws.amazon.com/cdk/latest/guide/home.html) é uma estrutura de desenvolvimento de software que ajuda você a definir e provisionar a infraestrutura da Nuvem AWS em código.
+  CodeCommitA [AWS](https://docs.aws.amazon.com/codecommit/latest/userguide/welcome.html) é um serviço de controle de versão que ajuda você a armazenar e gerenciar repositórios Git de forma privada, sem precisar gerenciar seu próprio sistema de controle de origem.
+  CodePipelineA [AWS](https://docs.aws.amazon.com/codepipeline/latest/userguide/welcome.html) ajuda você a modelar e configurar rapidamente os diferentes estágios de uma versão de software e automatizar as etapas necessárias para liberar alterações de software continuamente.
+ A [AWS Command Line Interface (AWS CLI)](https://docs.aws.amazon.com/cli/latest/userguide/cli-chap-welcome.html) é uma ferramenta de código aberto que permite que você interaja com serviços da AWS usando comandos no shell da linha de comando.
+ O [Amazon Elastic Container Registry (Amazon ECR)](https://docs.aws.amazon.com/AmazonECR/latest/userguide/what-is-ecr.html) é um serviço gerenciado de registro de imagens de contêineres seguro, escalável e confiável.
+ O [Amazon Elastic Container Service (Amazon ECS)](https://docs.aws.amazon.com/AmazonECS/latest/developerguide/Welcome.html) é um serviço de gerenciamento de contêineres escalável e rápido que facilita a execução, a interrupção e o gerenciamento de contêineres em um cluster. Esse padrão também usa o [Amazon ECS Anywhere](https://docs.aws.amazon.com/AmazonECS/latest/developerguide/ecs-anywhere.html), que fornece suporte para registrar um servidor on-premises ou uma VM no cluster do Amazon ECS.

**Outras ferramentas**
+ [O Node.js](https://nodejs.org/en/docs/) é um ambiente de tempo de JavaScript execução orientado a eventos projetado para criar aplicativos de rede escaláveis.
+ O [npm](https://docs.npmjs.com/about-npm) é um registro de software executado em um ambiente Node.js e usado para compartilhar ou emprestar pacotes e gerenciar a implantação de pacotes privados.
+ O [Vagrant](https://developer.hashicorp.com/vagrant/docs) é um utilitário de código aberto para criar e manter ambientes portáteis de desenvolvimento de software virtual. Para fins de demonstração, esse padrão usa o Vagrant para criar uma VM on-premises.

**Repositório de código**

O código desse padrão está disponível no [pipeline de GitHub CI/CD do Amazon ECS Anywhere usando o repositório AWS](https://github.com/aws-samples/amazon-ecs-anywhere-cicd-pipeline-cdk-sample) CDK.

## Práticas recomendadas
<a name="set-up-a-ci-cd-pipeline-for-hybrid-workloads-on-amazon-ecs-anywhere-by-using-aws-cdk-and-gitlab-best-practices"></a>

Considere as seguintes práticas recomendadas ao implantar esse padrão:
+ [Melhores práticas para desenvolver e implantar infraestrutura em nuvem com o AWS CDK](https://docs.aws.amazon.com/cdk/v2/guide/best-practices.html)
+ [Melhores práticas para desenvolver aplicativos em nuvem com o AWS CDK](https://aws.amazon.com/blogs/devops/best-practices-for-developing-cloud-applications-with-aws-cdk/) (publicação no blog da AWS)

## Épicos
<a name="set-up-a-ci-cd-pipeline-for-hybrid-workloads-on-amazon-ecs-anywhere-by-using-aws-cdk-and-gitlab-epics"></a>

### Verifique a configuração do AWS CDK
<a name="verify-the-aws-cdk-configuration"></a>


| Tarefa | Description | Habilidades necessárias | 
| --- | --- | --- | 
| Verifique a versão do AWS CDK. | Verifique a versão do AWS CDK Toolkit inserindo o comando a seguir.<pre>cdk --version</pre>Este padrão requer a versão 2.27.0 ou superior. Se você tiver uma versão anterior, siga as instruções na [documentação do AWS CDK](https://docs.aws.amazon.com/cdk/latest/guide/cli.html) para atualizá-la. | DevOps engenheiro | 
| Verificar a versão do npm. | Verifique a versão do npm inserindo o comando a seguir.<pre>npm --version</pre>Este padrão requer a versão 7.20.3 ou superior. Se você tiver uma versão anterior, siga as instruções na [documentação do npm](https://docs.npmjs.com/try-the-latest-stable-version-of-npm) para atualizá-la. | DevOps engenheiro | 
| Configurar credenciais da AWS. | Configure as credenciais da AWS inserindo o comando `aws configure` e seguindo as instruções.<pre>$aws configure<br />AWS Access Key ID [None]: <your-access-key-ID><br />AWS Secret Access Key [None]: <your-secret-access-key><br />Default region name [None]: <your-Region-name><br />Default output format [None]:</pre> | DevOps engenheiro | 

### Faça o bootstrap do ambiente do AWS CDK
<a name="bootstrap-the-aws-cdk-environment"></a>


| Tarefa | Description | Habilidades necessárias | 
| --- | --- | --- | 
| Clone o repositório de códigos do AWS CDK. | [\[See the AWS documentation website for more details\]](http://docs.aws.amazon.com/pt_br/prescriptive-guidance/latest/patterns/set-up-a-ci-cd-pipeline-for-hybrid-workloads-on-amazon-ecs-anywhere-by-using-aws-cdk-and-gitlab.html) | DevOps engenheiro | 
| Inicialize o ambiente do . | Implante o CloudFormation modelo na conta e na região da AWS que você deseja usar inserindo o seguinte comando.<pre>cdk bootstrap <account-number>/<Region></pre>Para obter mais informações, consulte [Inicialização](https://docs.aws.amazon.com/cdk/latest/guide/bootstrapping.html) na documentação do AWS CDK. | DevOps engenheiro | 

### Crie e implante a infraestrutura do Amazon ECS Anywhere
<a name="build-and-deploy-the-infrastructure-for-amazon-ecs-anywhere"></a>


| Tarefa | Description | Habilidades necessárias | 
| --- | --- | --- | 
| Instale as dependências do pacote e compile os TypeScript arquivos. | Instale as dependências do pacote e compile os TypeScript arquivos digitando os seguintes comandos.<pre>$cd EcsAnywhereCdk<br />$npm install<br />$npm fund </pre>Esses comandos instalam todos os pacotes do repositório de exemplo. Para obter mais informações, consulte [npm ci](https://docs.npmjs.com/cli/v7/commands/npm-ci) e [npm install](https://docs.npmjs.com/cli/v7/commands/npm-install) na documentação do npm. Se você receber algum erro sobre pacotes ausentes ao inserir esses comandos, consulte a seção [Solução](#set-up-a-ci-cd-pipeline-for-hybrid-workloads-on-amazon-ecs-anywhere-by-using-aws-cdk-and-gitlab-troubleshooting) de problemas desse padrão. | DevOps engenheiro | 
| Crie o projeto. | Para compilar o código do projeto, digite o comando a seguir.<pre>npm run build</pre>Para obter mais informações sobre como criar e implantar o projeto, consulte [Seu primeiro aplicativo da AWS CDK](https://docs.aws.amazon.com/cdk/latest/guide/hello_world.html#:~:text=the%20third%20parameter.-,Synthesize%20an%20AWS%20CloudFormation%20template,-Synthesize%20an%20AWS) na documentação da AWS CDK. | DevOps engenheiro | 
| Implante a pilha de infraestrutura do Amazon ECS Anywhere. | [\[See the AWS documentation website for more details\]](http://docs.aws.amazon.com/pt_br/prescriptive-guidance/latest/patterns/set-up-a-ci-cd-pipeline-for-hybrid-workloads-on-amazon-ecs-anywhere-by-using-aws-cdk-and-gitlab.html) | DevOps engenheiro | 
| Verifique a criação e a saída da pilha. | [\[See the AWS documentation website for more details\]](http://docs.aws.amazon.com/pt_br/prescriptive-guidance/latest/patterns/set-up-a-ci-cd-pipeline-for-hybrid-workloads-on-amazon-ecs-anywhere-by-using-aws-cdk-and-gitlab.html) | DevOps engenheiro | 

### Configurar uma VM on-premises
<a name="set-up-an-on-premises-vm"></a>


| Tarefa | Description | Habilidades necessárias | 
| --- | --- | --- | 
| Configurar a VM. | Crie uma VM Vagrant inserindo o comando `vagrant up` do diretório raiz onde o Vagrantfile está localizado. Para obter mais informações, consulte a [documentação do Vagrant](https://developer.hashicorp.com/vagrant/docs/cli/up). | DevOps engenheiro | 
| Registre sua VM como uma instância externa. | [\[See the AWS documentation website for more details\]](http://docs.aws.amazon.com/pt_br/prescriptive-guidance/latest/patterns/set-up-a-ci-cd-pipeline-for-hybrid-workloads-on-amazon-ecs-anywhere-by-using-aws-cdk-and-gitlab.html)[\[See the AWS documentation website for more details\]](http://docs.aws.amazon.com/pt_br/prescriptive-guidance/latest/patterns/set-up-a-ci-cd-pipeline-for-hybrid-workloads-on-amazon-ecs-anywhere-by-using-aws-cdk-and-gitlab.html)Isso configura sua VM como uma instância externa do Amazon ECS Anywhere e registra a instância no cluster do Amazon ECS. Para obter mais informações, consulte [Registro de uma instância externa em um cluster](https://docs.amazonaws.cn/en_us/AmazonECS/latest/developerguide/ecs-anywhere-registration.html) na documentação do Amazon ECS. Se você tiver algum problema, consulte a seção [Solução de problemas](#set-up-a-ci-cd-pipeline-for-hybrid-workloads-on-amazon-ecs-anywhere-by-using-aws-cdk-and-gitlab-troubleshooting). | DevOps engenheiro | 
| Verifique o status do Amazon ECS Anywhere e da VM externa. | Para verificar se sua VM está conectada ao ambiente de gerenciamento do Amazon ECS e em execução, use os seguintes comandos.<pre>$aws ssm describe-instance-information<br />$aws ecs list-container-instances --cluster $CLUSTER_NAME</pre> | DevOps engenheiro | 

### Implante o CI/CD pipeline
<a name="deploy-the-ci-cd-pipeline"></a>


| Tarefa | Description | Habilidades necessárias | 
| --- | --- | --- | 
| Crie uma ramificação no CodeCommit repositório. | Crie uma ramificação nomeada `main` no CodeCommit repositório criando o primeiro commit para o repositório. Você pode seguir a documentação da AWS para [criar um commit in CodeCommit](https://docs.aws.amazon.com/codecommit/latest/userguide/how-to-create-commit.html#create-first-commit). O comando a seguir é um exemplo.<pre>aws codecommit put-file \<br />  --repository-name EcsAnywhereRepo \<br />  --branch-name main \<br />  --file-path README.md \<br />  --file-content "Test" \<br />  --name "Dev Ops" \<br />  --email "devops@example.com" \<br />  --commit-message "Adding README."</pre> | DevOps engenheiro | 
| Configure o espelhamento do repositório. | Você pode espelhar um GitLab repositório de e para fontes externas. Você pode selecionar qual repositório serve como fonte. Ramificações, tags e commits são sincronizados automaticamente. Configure um push mirror entre o GitLab repositório que hospeda seu aplicativo e o CodeCommit repositório. Para obter instruções, consulte [Configurar um espelho de pressão de GitLab para CodeCommit](https://docs.gitlab.com/ee/user/project/repository/mirror/push.html#set-up-a-push-mirror-from-gitlab-to-aws-codecommit) (GitLab documentação).Por padrão, o espelhamento sincroniza automaticamente o repositório. Se você quiser atualizar manualmente os repositórios, consulte [Atualizar um espelho](https://docs.gitlab.com/ee/user/project/repository/mirror/#update-a-mirror) (GitLab documentação). | DevOps engenheiro | 
| Implante a pilha de CI/CD tubulações. | Implemente a pilha do `EcsAnywherePipelineStack` inserindo os comandos abaixo.<pre>$cdk  deploy EcsAnywherePipelineStack</pre> | DevOps engenheiro | 
| Teste o CI/CD pipeline. | [\[See the AWS documentation website for more details\]](http://docs.aws.amazon.com/pt_br/prescriptive-guidance/latest/patterns/set-up-a-ci-cd-pipeline-for-hybrid-workloads-on-amazon-ecs-anywhere-by-using-aws-cdk-and-gitlab.html) | DevOps engenheiro | 

### Limpeza
<a name="clean-up"></a>


| Tarefa | Description | Habilidades necessárias | 
| --- | --- | --- | 
| Limpe e exclua os recursos. | Depois de percorrer esse padrão, você deve remover os proof-of-concept recursos que criou. Para limpar, insira os comandos a seguir.<pre>$cdk destroy EcsAnywherePipelineStack<br />$cdk destroy EcsAnywhereInfraStack</pre> | DevOps engenheiro | 

## Solução de problemas
<a name="set-up-a-ci-cd-pipeline-for-hybrid-workloads-on-amazon-ecs-anywhere-by-using-aws-cdk-and-gitlab-troubleshooting"></a>


| Problema | Solução | 
| --- | --- | 
| Erros sobre pacotes ausentes ao instalar dependências de pacotes. | Insira um dos comandos a seguir para resolver pacotes ausentes.<pre>$npm ci</pre>or<pre>$npm install -g @aws-cdk/<package_name></pre> | 
| Ao executar o comando `aws ssm create-activation` na VM, você receberá o seguinte erro.`An error occurred (ValidationException) when calling the CreateActivation operation: Nonexistent role or missing ssm service principal in trust policy: arn:aws:iam::000000000000:role/EcsAnywhereInstanceRole` | A pilha do `EcsAnywhereInfraStack` não está totalmente implantada e o perfil do IAM necessário para executar esse comando ainda não foi criado. Verifique o status da pilha no CloudFormation console. Use o comando novamente depois que o status muar para `CREATE_COMPLETE`. | 
| Uma verificação de integridade do Amazon ECS retorna `UNHEALTHY` e você vê o seguinte erro na seção **Serviços** do cluster no console do Amazon ECS.`service EcsAnywhereService was unable to place a task because no container instance met all of its requirements. Reason: No Container Instances were found in your cluster.` | Reinicie o agente do Amazon ECS na VM do Vagrant inserindo os comandos a seguir.<pre>$vagrant ssh<br />$sudo systemctl restart ecs<br />$sudo systemctl status ecs</pre> | 

## Recursos relacionados
<a name="set-up-a-ci-cd-pipeline-for-hybrid-workloads-on-amazon-ecs-anywhere-by-using-aws-cdk-and-gitlab-resources"></a>
+ [Página de marketing do Amazon ECS Anywhere](https://aws.amazon.com/ecs/anywhere/)
+ [Documentação do Amazon ECS Anywhere](https://docs.aws.amazon.com/AmazonECS/latest/developerguide/ecs-anywhere.html#ecs-anywhere-considerations)
+ [Demonstração do Amazon ECS Anywhere](https://www.youtube.com/watch?v=-eud6yUXsJM) (vídeo)
+ GitHubAmostras de [workshops do Amazon ECS Anywhere](https://github.com/aws-samples/aws-ecs-anywhere-workshop-samples) ()
+ [Espelhamento do repositório (documentação](https://docs.gitlab.com/ee/user/project/repository/mirror/)) GitLab 