DEV Community

Lucas Cândido Araújo
Lucas Cândido Araújo

Posted on

Azure DevOps Pipelines e Release - Build And Push to ECR With Deploy to ECS Fargate PT-2

Deploy no AWS ECS usando Azure DevOps

Com a nossa imagem Docker já armazenada no AWS ECR, estamos prontos para avançar para a etapa de Deploy.

Pré-requisitos:

  • Um Cluster ECS configurado
  • Definição de Tarefa (Task Definition)
  • Serviço de Tarefa (Service Task)

Para este processo de Deploy, optarei pelo modo clássico do Azure DevOps, pois acredito que isso facilita a visualização no dia a dia.

Na aba lateral esquerda, selecione a opção "Releases" e clique em "New" e "New release pipeline".

Release Step

Para todas as etapas, utilizei apenas o Recurso Bash da Pipeline, permitindo sua utilização em outros serviços de pipeline, como GitHub Actions, GitLab, entre outros.

Release Bash

Os 6 passos são bem simples, foram separados para detalhar cada um deles. Obs: Nos passos seguintes, onde estiver $(NOME_VARIAVEL), você irá armazenar em variáveis.

  1. Auth: Autenticação com a AWS para realizar os processos seguintes.
aws configure set aws_access_key_id $(AWS_ACCESS_KEY_ID)
aws configure set aws_secret_access_key $(AWS_SECRET_ACCESS_KEY)
aws configure set region $(AWS_REGION)
Enter fullscreen mode Exit fullscreen mode

2.ECS Describe: Faz o download do JSON da Task Definition para criar uma nova versão.

aws ecs describe-task-definition --task-definition $(TASK_DEFINITION_NAME) --query taskDefinition | jq 'del(.taskDefinitionArn, .revision, .status, .requiresAttributes, .compatibilities, .registeredAt, .registeredBy)' > temp-task-definition.json

Enter fullscreen mode Exit fullscreen mode

3.Replace Version: Altera a versão da imagem do container para a versão recém-criada na Parte 1.

jq '.containerDefinitions[0].image = "$(AWS_ECR):$(Build.BuildNumber)"' temp-task-definition.json > task-definition.json 
Enter fullscreen mode Exit fullscreen mode

Esse comando gera como output o número da versão da Task Definition, que será armazenado para ser usado no próximo passo.
4.Register Task Definition: Após atualizar a versão, registra a nova versão da Task Definition.

task_version=$(aws ecs register-task-definition --cli-input-json file://task-definition.json | jq --raw-output '.taskDefinition.revision')

echo "##vso[task.setvariable variable=task_version;]$task_version"
Enter fullscreen mode Exit fullscreen mode

5.Update Service Cluster: Este passo realiza a efetiva publicação da nossa nova versão.

aws ecs update-service \
    --cluster $CLUSTER_NAME \
    --service $SERVICE_NAME \
    --task-definition $TASK_DEFINITION_NAME:$(task_version)
Enter fullscreen mode Exit fullscreen mode

6.Wait Service Stability: Aguarda a validação do serviço para finalizar a publicação.

aws ecs wait services-stable \
    --cluster $CLUSTER_NAME \
    --service $SERVICE_NAME \
Enter fullscreen mode Exit fullscreen mode

Por fim, mas não menos importante, todas as variáveis utilizadas estão armazenadas na aba "Variable".

Variáveis

Top comments (0)