Esegui carichi di lavoro pianificati e basati su eventi su larga scala con Fargate AWS - Prontuario AWS

Le traduzioni sono generate tramite traduzione automatica. In caso di conflitto tra il contenuto di una traduzione e la versione originale in Inglese, quest'ultima prevarrà.

Esegui carichi di lavoro pianificati e basati su eventi su larga scala con Fargate AWS

Creato HARI OHM PRASATH RAJAGOPAL da (AWS)

Ambiente: PoC o pilota

Tecnologie: modernizzazione; serverless; gestione e governance

Carico di lavoro: open source

AWSservizi: Amazon EC2 Container Registry; Amazon ECS AWS CodeCommit; AWS Fargate; LambdaAWS; Amazon SNS

Riepilogo

Avviso: non AWS CodeCommit è più disponibile per i nuovi clienti. I clienti esistenti di AWS CodeCommit possono continuare a utilizzare il servizio normalmente. Ulteriori informazioni

Questo modello descrive come eseguire carichi di lavoro pianificati e basati sugli eventi su larga scala su Amazon Web Services (AWS) Cloud utilizzando Fargate. AWS

Nel caso d'uso impostato da questo pattern, ogni volta che viene inviata una pull request, il codice viene scansionato alla ricerca di informazioni AWS sensibili, come il numero di AWS account e le credenziali. La pull request avvia una funzione Lambda. La funzione Lambda richiama un'attività Fargate che si occupa della scansione del codice. Lambda viene avviata ogni volta che viene generata una nuova pull request. Se la scansione rileva informazioni sensibili, Amazon Simple Notification Service (AmazonSNS) invia i risultati della scansione in un messaggio e-mail.

Questo modello è utile nei seguenti casi d'uso aziendali:

  • Se la tua azienda deve eseguire molti carichi di lavoro pianificati e basati su eventi che non possono essere eseguiti da AWS Lambda a causa delle limitazioni relative al runtime (un limite di 15 minuti) o alla memoria

  • Se desideri gestire le istanze AWS predisposte per questi carichi di lavoro

Quando utilizzi questo modello, hai la possibilità di creare un nuovo cloud privato virtuale (). VPC Questo modello utilizza anche AWS CodeCommit.

Prerequisiti e limitazioni

Prerequisiti

  • Un AWS account attivo

  • AWS CodeCommit per ospitare la codebase e creare richieste pull

  • AWSCommand Line Interface (AWSCLI) versione 1.7 o successiva, installata e configurata su macOS, Linux o Windows

  • Carichi di lavoro in esecuzione in contenitori

  • Eseguibile Apache Maven configurato in classpath

Architettura

Processo di pull request che porta a un'attività Fargate nel contenitore e a un SNS argomento che invia e-mail.

Il flusso complessivo include i seguenti passaggi.

  1. Ogni volta che viene inviata una nuova pull request CodeCommit, viene avviata una funzione Lambda. La funzione Lambda ascolta l'evento CodeCommit Pull Request State Change tramite Amazon. EventBridge

  2. La funzione Lambda invia una nuova attività Fargate con i seguenti parametri di ambiente per il controllo del codice e la scansione.

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

    Se la scansione rileva informazioni sensibili nel codice, Fargate invia un nuovo messaggio all'argomento Amazon. SNS

  3. Un SNS abbonato legge il messaggio dall'argomento e invia un messaggio e-mail.

Tecnologia

  • AWS CodeCommit

  • Registro Amazon Elastic Container (AmazonECR)

  • Amazon Elastic Container Service (AmazonECS)

  • Amazon EventBridge

  • AWS Fargate

  • AWSLambda

  • Amazon SNS

  • Docker

Strumenti

Strumenti

  • AWSCLI— AWS Command Line Interface (CLI) è uno strumento unificato per gestire i tuoi AWS servizi.

  • AWS CodeCommit— AWS CodeCommit è un servizio di controllo del codice sorgente completamente gestito che ospita repository sicuri basati su Git. Utilizzando CodeCommit, i team possono collaborare sul codice in un ambiente sicuro e altamente scalabile.

  • Amazon ECR — Amazon Elastic Container Registry (AmazonECR) è un registro completamente gestito che gli sviluppatori possono utilizzare per archiviare, gestire e distribuire immagini di container Docker.

  • Amazon ECS — Amazon Elastic Container Service (AmazonECS) è un servizio di gestione dei container veloce e altamente scalabile. Puoi usare Amazon ECS per eseguire, arrestare e gestire i container su un cluster.

  • AWSFargate — AWS Fargate è una tecnologia che puoi usare con Amazon ECS per eseguire container senza dover gestire server o cluster di istanze Amazon. EC2

  • AWSLambda: AWS Lambda è un servizio di elaborazione che supporta l'esecuzione di codice senza effettuare il provisioning o la gestione di server. Lambda esegue il codice solo quando è necessario e si dimensiona automaticamente, da poche richieste al giorno a migliaia al secondo.

  • Amazon SNS — Amazon Simple Notification Service (AmazonSNS) è un servizio gestito che fornisce il recapito dei messaggi dagli editori agli abbonati (noti anche come produttori e consumatori). Gli editori comunicano in modo asincrono con gli abbonati creando e inviando messaggi a un argomento, che rappresenta un punto di accesso logico e un canale di comunicazione. I client che sottoscrivono l'SNSargomento ricevono messaggi pubblicati utilizzando un protocollo supportato, ad esempio Lambda, e-mail, notifiche push per dispositivi mobili e messaggi di testo mobili ()SMS.

  • Docker: Docker ti aiuta a creare, testare e distribuire applicazioni in pacchetti chiamati contenitori.

  • Client Git: riga di comando o strumento desktop per controllare gli artefatti richiesti

  • Maven — Apache Maven è uno strumento di gestione dei progetti per la gestione centralizzata della compilazione, del reporting e della documentazione di un progetto.

Epiche

AttivitàDescrizioneCompetenze richieste

Scarica il codice

Nella sezione Allegati, scarica il file.zip ed estrai i file.

Sviluppatore, AWS amministratore di sistema

Configura il repository.

Esegui mvn clean install sulla cartella principale.

Sviluppatore, amministratore AWS di sistema
AttivitàDescrizioneCompetenze richieste

Crea un ECR repository Amazon e accedi.

Apri la ECR console Amazon. Nel riquadro di navigazione, scegli Repository, quindi scegli Crea repository. Per informazioni su questa e altre storie, consulta la sezione Risorse correlate.

Sviluppatore, amministratore AWS di sistema

Invia l'immagine del conteiner.

Apri il repository, scegli Visualizza comandi push e accedi a Docker. Dopo aver effettuato l'accesso, esegui i comandi, con le sostituzioni richieste, che si trovano in Invia l'immagine del contenitore nella sezione Informazioni aggiuntive. Questo carica l'immagine del contenitore Docker che viene utilizzata per eseguire la scansione del codice. Una volta completato il caricamento, copia URL la build più recente nell'ECRarchivio Amazon.

Sviluppatore, amministratore AWS di sistema
AttivitàDescrizioneCompetenze richieste

Crea il CodeCommit repository.

Per creare un nuovo AWS CodeCommit repository, esegui il comando sotto Crea il CodeCommit repository nella sezione Informazioni aggiuntive.

Sviluppatore, AWS amministratore di sistema
AttivitàDescrizioneCompetenze richieste

Crea unVPC.

Se desideri utilizzarne uno nuovo VPC anziché uno esistente, esegui i comandi in Crea a VPC nella sezione Informazioni aggiuntive. Lo script AWS Cloud Development Kit (AWSCDK) genererà IDs la sottorete VPC and che è stata creata.

Sviluppatore, amministratore AWS di sistema
AttivitàDescrizioneCompetenze richieste

Crea il cluster e l'attività.

Per creare un ECS cluster Amazon e una definizione di attività Fargate, esegui i comandi in Crea cluster e attività nella sezione Informazioni aggiuntive. Assicurati che l'VPCID e il ECR repository Amazon corretti URI vengano passati come parametro durante l'esecuzione dello script di shell. Lo script crea una definizione di attività Fargate che punta all'immagine Docker (responsabile della scansione). Lo script crea quindi un lavoro e un ruolo di esecuzione associato.

Sviluppatore, amministratore AWS di sistema

Verifica il ECS cluster Amazon.

Apri la ECS console Amazon. Nel riquadro di navigazione, scegli Clusters e scegli il cluster Amazon appena creato denominato ECS Fargate-Job-Cluster. Dopodiché, scegli Definizione dell'attività nel riquadro di navigazione e conferma che sia presente una nuova definizione di attività con il prefisso. awscdkfargateecsTaskDef

Sviluppatore, amministratore AWS di sistema
AttivitàDescrizioneCompetenze richieste

Creazione di un argomento SNS.

Per creare un SNS argomento, esegui il comando sotto Crea l'SNSargomento nella sezione Informazioni aggiuntive. Una volta completata la creazione, nota ilSNS ARN, che viene utilizzato nel passaggio successivo.

Sviluppatore, amministratore AWS di sistema

Crea il SNS sottoscrittore.

Per creare un abbonato e-mail per l'SNSargomento, esegui il comando in Crea il SNS sottoscrittore nella sezione Informazioni aggiuntive. Assicurati di sostituirlo TopicARN e Email address utilizzarlo nel CLI comando. Per ricevere notifiche e-mail, assicurati di confermare l'indirizzo e-mail utilizzato come abbonato.

Sviluppatore, amministratore AWS di sistema
AttivitàDescrizioneCompetenze richieste

Crea la funzione e il trigger.

Per creare una funzione Lambda con un CodeCommit trigger, esegui il comando in Funzione Lambda e CodeCommit trigger nella sezione Informazioni aggiuntive. Assicurati di sostituire i parametri con i valori corrispondenti prima di eseguire il comando. Lo script crea la funzione Lambda e la configura per essere invocata quando viene effettuata una nuova richiesta pull.

Sviluppatore, amministratore di sistema AWS
AttivitàDescrizioneCompetenze richieste

Testare l'applicazione.

Se si archiviano informazioni AWS sensibili nel CodeCommit repository, è necessario avviare la funzione Lambda. La funzione Lambda avvia l'attività Fargate, che esegue la scansione del codice e invia i risultati della scansione in una notifica e-mail.

Sviluppatore, amministratore di sistema AWS

Risorse correlate

Informazioni aggiuntive

Invia l'immagine del contenitore

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

Crea il CodeCommit repository

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

Crea un VPC

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

Output

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

Crea il cluster e l'attività

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

Output

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

Crea l'SNSargomento

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

Crea l'SNSabbonato

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

Funzione Lambda e grilletto 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>>

Output

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

Allegati

Per accedere al contenuto aggiuntivo associato a questo documento, decomprimi il seguente file: attachment.zip