DevOps /

Deploy Sem Sobressaltos: Dominando os Novos Lifecycle Hooks do Amazon ECS

Controle absoluto sobre o ciclo de vida dos seus contêineres. Veja como pausar, validar e reverter deploys automaticamente no ECS.

Deploy Sem Sobressaltos: Dominando os Novos Lifecycle Hooks do Amazon ECS

Garantir deploys seguros em arquiteturas de microsserviços exige pipelines de integração e entrega contínua (CI/CD) extremamente controlados. O Amazon Elastic Container Service (ECS) trouxe uma evolução significativa para estratégias de deploy do tipo Canary e Blue/Green através dos Deployment Lifecycle Hooks.

Esses ganchos permitem que engenheiros de plataforma interceptem o deploy em etapas cruciais, executando testes de fumaça (smoke tests) ou validações de segurança antes de rotear tráfego real de produção para a nova versão das tarefas.

A Anatomia dos Lifecycle Hooks no ECS

Ao realizar um deploy Blue/Green usando o AWS CodeDeploy integrado ao Amazon ECS, o processo passa por etapas sequenciais rígidas. Os novos hooks possibilitam pausar o processo nestes pontos estratégicos.

graph LR
    Start([Início do Deploy]) --> BeforeInstall[BeforeInstall Hook]
    BeforeInstall --> InstallTask[Instalar Nova Task]
    InstallTask --> AfterInstall[AfterInstall Hook]
    AfterInstall --> RouteTraffic[Roteamento de Tráfego]
    RouteTraffic --> BeforeAllowTraffic[BeforeAllowTraffic Hook]
    BeforeAllowTraffic --> PublicAccess[Produção Ativa]

Arquivo AppSpec Exemplo

O arquivo appspec.yaml é o responsável por definir quais funções AWS Lambda serão executadas em cada fase de ciclo de vida para realizar as validações de integridade.

{
  "version": 0.0,
  "Resources": [
    {
      "TargetService": {
        "Type": "AWS::ECS::Service",
        "Properties": {
          "TaskDefinition": "arn:aws:ecs:us-east-1:123456789012:task-definition/my-app:2",
          "LoadBalancerInfo": {
            "ContainerName": "web",
            "ContainerPort": 80
          }
        }
      }
    }
  ],
  "Hooks": [
    {
      "BeforeAllowTraffic": "arn:aws:lambda:us-east-1:123456789012:function:validate-ecs-deployment"
    }
  ]
}

Lógica Interna de Validação do Hook

A função Lambda vinculada ao hook BeforeAllowTraffic deve retornar obrigatoriamente um sinal de sucesso ou falha para o CodeDeploy. Caso ocorra uma falha ou timeout, a reversão (rollback) para a versão anterior (Blue) é acionada de forma imediata e transparente, minimizando o raio de impacto de bugs.

# Trecho simplificado de uma função Lambda de validação (Python)
import boto3

def lambda_handler(event, context):
    codedeploy = boto3.client('codedeploy')
    deployment_id = event['DeploymentId']
    lifecycle_event_hook_execution_id = event['LifecycleEventHookExecutionId']
    
    # Realiza teste de conexão local ou validação de integridade no endpoint de teste
    success = executar_teste_de_fumaca()
    
    status = 'Succeeded' if success else 'Failed'
    
    codedeploy.put_lifecycle_event_hook_execution_status(
        deploymentId=deployment_id,
        lifecycleEventHookExecutionId=lifecycle_event_hook_execution_id,
        status=status
    )
    return status

Esta funcionalidade reduz significativamente a incidência de incidentes em produção, pois remove a necessidade de validação externa manual ou scripts de verificação pós-deploy que rodam de fora da nuvem.


Saiba Mais