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".
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.
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.
- 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)
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
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
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"
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)
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 \
Por fim, mas não menos importante, todas as variáveis utilizadas estão armazenadas na aba "Variable".
Top comments (0)