Executar workloads agendadas e orientadas por eventos em grande escala com o AWS Fargate - Recomendações da AWS

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

Executar workloads agendadas e orientadas por eventos em grande escala com o AWS Fargate

Criado por HARI OHM PRASATH RAJAGOPAL (AWS)

Ambiente: PoC ou piloto

Tecnologias: modernização; tecnologia sem servidor; operações

Workload: código aberto

Serviços da AWS: Amazon EC2 Container Registry; Amazon ECS; AWS; AWS Fargate; CodeCommit AWS Lambda; Amazon SNS

Resumo

Esse padrão descreve como executar workloads agendadas e orientadas por eventos em grande escala na Nuvem da Amazon Web Services (AWS) usando o AWS Fargate.

No caso de uso configurado por esse padrão, o código é escaneado em busca de informações confidenciais da AWS, como o número da conta e as credenciais da AWS, sempre que uma solicitação pull é enviada. O solicitação pull inicia uma função do Lambda. A função do Lambda invoca uma tarefa do Fargate que cuida da verificação do código. O Lambda é inicializado sempre que uma nova solicitação pull é gerada. Se o escaneamento encontrar alguma informação confidencial, o Amazon Simple Notification Service (Amazon SNS) enviará os resultados do escaneamento em uma mensagem de e-mail.

Esse padrão é útil nos seguintes casos de uso comercial:

  • Se sua empresa precisar executar muitas workloads agendadas e orientadas por eventos que não conseguem ser executadas pelo AWS Lambda devido a limitações em relação ao runtime (um limite de 15 minutos) ou à memória

  • Se você quiser que a AWS gerencie as instâncias provisionadas para essas workloads

Ao usar esse padrão, você tem a opção de criar uma nova nuvem privada virtual (VPC).

Pré-requisitos e limitações

Pré-requisitos

  • Uma conta AWS ativa

  • AWS CodeCommit para hospedar a base de código e criar pull requests

  • AWS Command Line Interface (AWS CLI) versão 1.7 ou mais recente, instalada e configurada no macOS, Linux ou Windows

  • Workloads em execução em contêineres

  • Apache Maven executável e configurado no classpath

Arquitetura

Processo de pull request que leva a uma tarefa do Fargate no contêiner e a um tópico do SNS que envia e-mails.

Este fluxo geral inclui as seguintes etapas.

  1. Sempre que uma nova pull request é enviada CodeCommit, uma função Lambda é iniciada. A função Lambda escuta o evento por CodeCommit Pull Request State Change meio da Amazon. EventBridge

  2. A função do Lambda envia uma nova tarefa do Fargate com os seguintes parâmetros de ambiente para verificar o código e digitalizá-lo.

    RUNNER → <<TaskARN>> SNS_TOPIC → <<SNSTopicARN>> SUBNET → <<Subnet in which Fargate task gets launched>>

    Se o escaneamento encontrar informações confidenciais no código, Fargate envia uma nova mensagem para o tópico do Amazon SNS.

  3. Um assinante do SNS lê a mensagem do tópico e envia uma mensagem de e-mail.

Tecnologia

  • AWS CodeCommit

  • Amazon Elastic Container Registry (Amazon ECR)

  • Amazon Elastic Container Service (Amazon ECS)

  • Amazon EventBridge

  • AWS Fargate

  • AWS Lambda

  • Amazon SNS

  • Docker

Ferramentas

Ferramentas

  • AWS CLI: a interface de linha de comandos (CLI) é uma ferramenta unificada para gerenciar os serviços da AWS.

  • AWS CodeCommit — CodeCommit A AWS é um serviço de controle de origem totalmente gerenciado que hospeda repositórios seguros baseados em Git. Usando CodeCommit, as equipes podem colaborar no código em um ambiente seguro e altamente escalável.

  • Amazon ECR: o Amazon Elastic Container Registry (Amazon ECR) é um registro totalmente gerenciado que os desenvolvedores podem usar para armazenar, gerenciar e implantar imagens de contêiner do Docker.

  • Amazon ECS: o Amazon Elastic Container Service (Amazon ECS) é um serviço de gerenciamento de contêineres altamente rápido e escalável. Você pode usar o Amazon ECS para executar, interromper e gerenciar contêineres em um cluster.

  • AWS Fargate: o AWS Fargate é uma tecnologia que pode ser usada com o Amazon ECS para executar contêineres sem a necessidade de gerenciar servidores ou clusters de instâncias do Amazon EC2.

  • AWS Lambda: o AWS Lambda é um serviço de computação que permite a execução do código sem provisionar ou gerenciar servidores. O Lambda executa o código somente quando necessário e dimensiona automaticamente, desde algumas solicitações por dia até milhares por segundo.

  • Amazon SNS: o Amazon Simple Notification Service (Amazon SNS) é um serviço gerenciado que fornece entrega de mensagens de editores para assinantes (também conhecido como produtores e consumidores). Os editores se comunicam de maneira assíncrona com os assinantes produzindo e enviando mensagens para um tópico, que é um canal de comunicação e um ponto de acesso lógico. Os clientes que assinaram o tópico SNS recebem mensagens publicadas usando um protocolo compatível, como Lambda, e-mail, notificações push móveis e mensagens de texto móveis (SMS).

  • Docker: o Docker ajuda você a compilar, testar e entregar aplicativos em pacotes chamados contêineres.

  • Cliente Git: ferramenta de linha de comando ou desktop para verificar os artefatos necessários

  • Maven: o Apache Maven é uma ferramenta de gerenciamento de projetos para gerenciar centralmente a compilação, os relatórios e a documentação de um projeto.

Épicos

TarefaDescriçãoHabilidades necessárias

Baixe o código.

Na seção Anexos, baixe o arquivo .zip e extraia os arquivos.

Desenvolvedor, administrador de sistemas da AWS

Configure o repositório.

Execute mvn clean install na pasta raiz.

Desenvolvedor, administrador de sistemas da AWS
TarefaDescriçãoHabilidades necessárias

Crie um repositório do Amazon ECR e faça o login.

Abra o console do Amazon ECR. No painel de navegação, selecione Repositórios e, em seguida, Criar repositório. Para obter ajuda com esse e outros artigos, consulte a seção Recursos relacionados.

Desenvolvedor, administrador de sistemas da AWS

Envie a imagem do seu contêiner.

Abra o repositório, escolha Exibir comandos push e registre no Docker. Depois de fazer login, execute os comandos, com as substituições necessárias, que estão em Enviar a imagem do contêiner na seção Informações adicionais. Isso carrega a imagem do contêiner do Docker que é usada para realizar o escaneamento de código. Quando o upload estiver concluído, copie o URL da compilação mais recente no repositório do Amazon ECR.

Desenvolvedor, administrador de sistemas da AWS
TarefaDescriçãoHabilidades necessárias

Crie o CodeCommit repositório.

Para criar um novo CodeCommit repositório da AWS, execute o comando em Criar o CodeCommit repositório na seção Informações adicionais.

Desenvolvedor, administrador de sistemas da AWS
TarefaDescriçãoHabilidades necessárias

Crie uma VPC.

Se você quiser usar uma nova VPC em vez de uma existente, execute os comandos em Criar uma VPC na seção Informações adicionais. O script do AWS Cloud Development Kit (AWS CDK) produzirá as IDs da VPC e da sub-rede que foram criadas.

Desenvolvedor, administrador de sistemas da AWS
TarefaDescriçãoHabilidades necessárias

Crie o cluster e a tarefa.

Para criar um cluster do Amazon ECS e uma definição de tarefa do Fargate, execute os comandos em Criar o cluster e a tarefa na seção Informações adicionais. Certifique-se de que o ID da VPC e o URI do repositório Amazon ECR corretos sejam passados como um parâmetro ao executar o script de shell. O script cria uma definição de tarefa do Fargate que aponta para a imagem do Docker (responsável pela digitalização). Em seguida, o script cria um trabalho e um perfil de execução associada.

Desenvolvedor, administrador de sistemas da AWS

Verifique o cluster do Amazon ECS.

Abra o console do Amazon ECS. No painel de navegação, escolha Clusters e escolha o cluster recém-criado do Amazon ECS chamado Fargate-Job-Cluster. Depois disso, escolha Definição de tarefa no painel de navegação e confirme se há uma nova definição de tarefa com o prefixo awscdkfargateecsTaskDef.

Desenvolvedor, administrador de sistemas da AWS
TarefaDescriçãoHabilidades necessárias

Criar um tópico do SNS.

Para criar um tópico do SNS, execute o comando em Criar o tópico do SNS na seção Informações adicionais. Depois que a criação for bem-sucedida, observe o SNS ARN, que será usado na próxima etapa.

Desenvolvedor, administrador de sistemas da AWS

Crie o assinante do SNS.

Para criar um assinante de e-mail para o tópico do SNS, execute o comando em Criar o tópico do SNS na seção Informações adicionais. Certifique-se de substituir TopicARN e Email address usados no comando CLI. Para receber notificações por e-mail, confirme o endereço de e-mail usado como assinante.

Desenvolvedor, administrador de sistemas da AWS
TarefaDescriçãoHabilidades necessárias

Crie a função e o trigger.

Para criar uma função Lambda com um CodeCommit gatilho, execute o comando em Função Lambda e CodeCommit acione na seção Informações adicionais. Certifique-se de substituir os parâmetros pelos valores correspondentes antes de executar o comando. O script cria a função do Lambda e a configura para ser invocada quando uma nova solicitação pull é feita.

Desenvolvedor, administrador de sistemas da AWS
TarefaDescriçãoHabilidades necessárias

Testar o aplicativo.

Se você inserir qualquer informação confidencial da AWS no CodeCommit repositório, a função Lambda deverá ser iniciada. A função do Lambda inicia a tarefa Fargate, que escaneia o código e envia os resultados da verificação em uma notificação por e-mail.

Desenvolvedor, administrador de sistemas da AWS

Recursos relacionados

Mais informações

Empurre a imagem do contêiner

> cd 1-ecr-image-push > ./run.sh <<ecr-repository>>

Crie o CodeCommit repositório

aws codecommit create-repository --repository-name test-repo --repository-description "My Test repository"

Criar uma VPC

> cd 2-create-vpc > ./run.sh

Saída

aws-batch-cdk-vpc-efs-launch-template.privatesubnet = subnet-<<id>> aws-batch-cdk-vpc-efs-launch-template.publicsubnet = subnet-<<id>> aws-batch-cdk-vpc-efs-launch-template.vpcid = vpc-<<id>>

Crie o cluster e a tarefa

> export CDK_DEFAULT_ACCOUNT = <<aws_account_id>> > export CDK_DEFAULT_REGION = <<aws_region>> > cd 3-create-ecs-task > ./run.sh <<vpc-id>> <<ecr-repo-uri>>

Saída

aws-cdk-fargate-ecs.CLUSTERNAME = Fargate-Job-Cluster aws-cdk-fargate-ecs.ClusterARN = <<cluster_arn>> aws-cdk-fargate-ecs.ContainerARN = Fargate-Container aws-cdk-fargate-ecs.TaskARN = <<task_arn>> aws-cdk-fargate-ecs.TaskExecutionRole = <<execution_role_arn>> aws-cdk-fargate-ecs.TaskRole = <<task_role_arn>>

Criar o tópico do SNS

aws sns create-topic --name code-commit-topic

Crie o assinante do SNS

aws sns subscribe \ --topic-arn <<topic_arn>> \ --protocol email \ --notification-endpoint <<email_address>>

Função e gatilho Lambda CodeCommit

> export CDK_DEFAULT_ACCOUNT = <<aws_account_id>> > export CDK_DEFAULT_REGION = <<aws_region>> > cd 5-Lambda-CodeCommit-Trigger > ./run.sh <<taskarn>> <<snstopicarn>> subnet-<<id>> <<codecommitarn>>

Saída

aws-cdk-fargate-lambda-event.Cloudwatchrule = <<cloudwatchrule>> aws-cdk-fargate-lambda-event.CodeCommitLambda = AWS-Code-Scanner-Function aws-cdk-fargate-lambda-event.LambdaRole = <<lambdaiamrole>>

Anexos

Para acessar o conteúdo adicional associado a este documento, descompacte o seguinte arquivo: attachment.zip