Führen Sie ereignisgesteuerte und geplante Workloads mit Fargate in großem Umfang aus AWS - AWS Prescriptive Guidance

Die vorliegende Übersetzung wurde maschinell erstellt. Im Falle eines Konflikts oder eines Widerspruchs zwischen dieser übersetzten Fassung und der englischen Fassung (einschließlich infolge von Verzögerungen bei der Übersetzung) ist die englische Fassung maßgeblich.

Führen Sie ereignisgesteuerte und geplante Workloads mit Fargate in großem Umfang aus AWS

Erstellt von () HARI OHM PRASATH RAJAGOPAL AWS

Umgebung: PoC oder Pilot

Technologien: Modernisierung; Serverlos; Verwaltung und Verwaltung

Arbeitslast: Open Source

AWSDienstleistungen: Amazon EC2 Container Registry; Amazon ECS AWS CodeCommit; AWS Fargate; AWS Lambda; Amazon SNS

Übersicht

Hinweis: AWS CodeCommit ist für Neukunden nicht mehr verfügbar. Bestandskunden von AWS CodeCommit können den Service weiterhin wie gewohnt nutzen. Weitere Informationen

Dieses Muster beschreibt, wie geplante und ereignisgesteuerte Workloads mithilfe von Fargate in großem Umfang in der Amazon Web Services (AWS) Cloud ausgeführt werden. AWS

In dem Anwendungsfall, den dieses Muster einrichtet, wird der Code bei jeder Übermittlung einer Pull-Anfrage auf AWS vertrauliche Informationen wie AWS Kontonummer und Anmeldeinformationen gescannt. Die Pull-Anfrage initiiert eine Lambda-Funktion. Die Lambda-Funktion ruft eine Fargate-Aufgabe auf, die sich um den Codescan kümmert. Lambda wird immer dann initiiert, wenn eine neue Pull-Anfrage gestellt wird. Wenn beim Scan vertrauliche Informationen gefunden werden, sendet Amazon Simple Notification Service (AmazonSNS) die Scanergebnisse in einer E-Mail-Nachricht.

Dieses Muster ist in den folgenden Geschäftsanwendungsfällen hilfreich:

  • Wenn Ihr Unternehmen viele geplante und ereignisgesteuerte Workloads ausführen muss, die aufgrund von Einschränkungen in Bezug auf Laufzeit (15-Minuten-Limit) oder Arbeitsspeicher nicht von AWS Lambda ausgeführt werden können

  • Wenn Sie die AWS für diese Workloads bereitgestellten Instanzen verwalten möchten

Wenn Sie dieses Muster verwenden, haben Sie die Möglichkeit, eine neue virtuelle private Cloud () VPC zu erstellen. Dieses Muster verwendet auch AWS CodeCommit.

Voraussetzungen und Einschränkungen

Voraussetzungen

  • Ein aktives AWS Konto

  • AWS CodeCommit zum Hosten der Codebasis und zum Erstellen von Pull-Requests

  • AWSCommand Line Interface (AWSCLI) Version 1.7 oder höher, installiert und konfiguriert auf macOS, Linux oder Windows

  • Workloads, die in Containern ausgeführt werden

  • Ausführbare Apache Maven-Datei, die im Klassenpfad eingerichtet ist

Architektur

Pull-Request-Prozess, der zu einer Fargate-Aufgabe im Container und einem SNS Thema führt, das E-Mails sendet.

Der gesamte Ablauf umfasst die folgenden Schritte.

  1. Immer wenn eine neue Pull-Anfrage eingereicht wird CodeCommit, wird eine Lambda-Funktion initiiert. Die Lambda-Funktion überwacht das CodeCommit Pull Request State Change Ereignis über Amazon. EventBridge

  2. Die Lambda-Funktion sendet eine neue Fargate-Aufgabe mit den folgenden Umgebungsparametern zum Auschecken und Scannen des Codes.

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

    Wenn der Scan vertrauliche Informationen im Code findet, sendet Fargate eine neue Nachricht an das SNS Amazon-Thema.

  3. Ein SNS Abonnent liest die Nachricht aus dem Thema und sendet eine E-Mail-Nachricht.

Technologie

  • AWS CodeCommit

  • Amazon Elastic Container Registry (AmazonECR)

  • Amazon Elastic Container Service (AmazonECS)

  • Amazon EventBridge

  • AWS-Fargate

  • AWSLambda

  • Amazon SNS

  • Docker

Tools

Tools

  • AWSCLI— Die AWS Befehlszeilenschnittstelle (CLI) ist ein einheitliches Tool zur Verwaltung Ihrer AWS Dienste.

  • AWS CodeCommit— AWS CodeCommit ist ein vollständig verwalteter Quellcodeverwaltungsdienst, der sichere Git-basierte Repositorys hostet. Damit CodeCommit können Teams in einer sicheren und hochgradig skalierbaren Umgebung gemeinsam an Code arbeiten.

  • Amazon ECR — Amazon Elastic Container Registry (AmazonECR) ist eine vollständig verwaltete Registry, die Entwickler zum Speichern, Verwalten und Bereitstellen von Docker-Container-Images verwenden können.

  • Amazon ECS — Amazon Elastic Container Service (AmazonECS) ist ein hoch skalierbarer, schneller Container-Management-Service. Sie können Amazon verwenden, ECS um Container in einem Cluster auszuführen, zu stoppen und zu verwalten.

  • AWSFargate — AWS Fargate ist eine Technologie, die Sie mit Amazon verwenden können, ECS um Container auszuführen, ohne Server oder Cluster von EC2 Amazon-Instances verwalten zu müssen.

  • AWSLambda — AWS Lambda ist ein Rechendienst, der die Ausführung von Code unterstützt, ohne Server bereitzustellen oder zu verwalten. Lambda führt Ihren Code nur bei Bedarf aus und skaliert automatisch – von einigen Anforderungen pro Tag bis zu Tausenden pro Sekunde.

  • Amazon SNS — Amazon Simple Notification Service (AmazonSNS) ist ein verwalteter Service, der die Nachrichtenzustellung von Verlagen an Abonnenten (auch bekannt als Produzenten und Verbraucher) ermöglicht. Herausgeber kommunizieren asynchron mit Abonnenten, indem sie eine Nachricht erstellen und an ein Thema senden, bei dem es sich um einen logischen Zugriffspunkt und Kommunikationskanal handelt. Kunden, die das SNS Thema abonnieren, erhalten veröffentlichte Nachrichten über ein unterstütztes Protokoll wie Lambda, E-Mail, mobile Push-Benachrichtigungen und mobile Textnachrichten (SMS).

  • Docker — Docker unterstützt Sie beim Erstellen, Testen und Bereitstellen von Anwendungen in Paketen, die als Container bezeichnet werden.

  • Git-Client — Befehlszeilen- oder Desktop-Tool zum Auschecken der benötigten Artefakte

  • Maven — Apache Maven ist ein Projektmanagement-Tool zur zentralen Verwaltung des Builds, der Berichterstattung und der Dokumentation eines Projekts.

Epen

AufgabeBeschreibungErforderliche Fähigkeiten

Laden Sie den Code herunter.

Laden Sie im Bereich Anlagen die ZIP-Datei herunter und extrahieren Sie die Dateien.

Entwickler, AWS Systemadministrator

Richten Sie das Repo ein.

Führen Sie es mvn clean install im Stammordner aus.

Entwickler, AWS Systemadministrator
AufgabeBeschreibungErforderliche Fähigkeiten

Erstellen Sie ein ECR Amazon-Repository und melden Sie sich an.

Öffnen Sie die ECR Amazon-Konsole. Wählen Sie im Navigationsbereich Repositories und dann Create repository aus. Hilfe zu dieser und anderen Geschichten finden Sie im Abschnitt Verwandte Ressourcen.

Entwickler, AWS Systemadministrator

Pushen Sie Ihr Container-Image.

Öffnen Sie das Repository, wählen Sie Push-Befehle anzeigen und melden Sie sich bei Docker an. Nachdem Sie angemeldet sind, führen Sie die Befehle mit den erforderlichen Ersetzungen aus, die sich unter Push the container image im Abschnitt Zusätzliche Informationen befinden. Dadurch wird das Docker-Container-Image hochgeladen, das zum Scannen von Code verwendet wird. Nachdem der Upload abgeschlossen ist, kopieren Sie URL den neuesten Build in das ECR Amazon-Repository.

Entwickler, AWS Systemadministrator
AufgabeBeschreibungErforderliche Fähigkeiten

Erstellen Sie das CodeCommit Repository.

Um ein neues AWS CodeCommit Repository zu erstellen, führen Sie den Befehl unter CodeCommit Repository erstellen im Abschnitt Zusätzliche Informationen aus.

Entwickler, AWS Systemadministrator
AufgabeBeschreibungErforderliche Fähigkeiten

Erstelle eineVPC.

Wenn Sie ein neues VPC statt eines vorhandenen verwenden möchten, führen Sie die Befehle unter Erstellen eines VPC im Abschnitt Zusätzliche Informationen aus. Das AWS Cloud Development Kit (AWSCDK) -Skript gibt das IDs erstellte Subnetz VPC und das Subnetz aus.

Entwickler, AWS Systemadministrator
AufgabeBeschreibungErforderliche Fähigkeiten

Erstellen Sie den Cluster und die Aufgabe.

Um einen ECS Amazon-Cluster und eine Fargate-Aufgabendefinition zu erstellen, führen Sie die Befehle unter Cluster und Aufgabe erstellen im Abschnitt Zusätzliche Informationen aus. Stellen Sie sicher, dass bei der Ausführung des Shell-Skripts URI die richtige VPC ID und das richtige ECR Amazon-Repo als Parameter übergeben werden. Das Skript erstellt eine Fargate-Aufgabendefinition, die auf das Docker-Image (verantwortlich für das Scannen) verweist. Das Skript erstellt dann einen Job und eine zugehörige Ausführungsrolle.

Entwickler, AWS Systemadministrator

Überprüfen Sie den ECS Amazon-Cluster.

Öffnen Sie die ECS Amazon-Konsole. Wählen Sie im Navigationsbereich Clusters und dann den neu erstellten ECSAmazon-Cluster mit dem Namen Fargate-Job-Cluster aus. Wählen Sie anschließend im Navigationsbereich Aufgabendefinition aus und vergewissern Sie sich, dass es eine neue Aufgabendefinition mit dem Präfix gibt. awscdkfargateecsTaskDef

Entwickler, AWS Systemadministrator
AufgabeBeschreibungErforderliche Fähigkeiten

Ein SNS-Thema erstellen.

Um ein SNS Thema zu erstellen, führen Sie den Befehl unter SNSThema erstellen im Abschnitt Zusätzliche Informationen aus. Notieren Sie sich nach erfolgreicher Erstellung denSNS ARN, der im nächsten Schritt verwendet wird.

Entwickler, AWS Systemadministrator

Erstellen Sie den SNS Abonnenten.

Um einen E-Mail-Abonnenten für das SNS Thema zu erstellen, führen Sie den Befehl unter SNSAbonnent erstellen im Abschnitt Zusätzliche Informationen aus. Achten Sie darauf, den Befehl zu ersetzen TopicARN und Email address im CLI Befehl zu verwenden. Um E-Mail-Benachrichtigungen zu erhalten, stellen Sie sicher, dass Sie die E-Mail-Adresse bestätigen, die als Abonnent verwendet wird.

Entwickler, AWS Systemadministrator
AufgabeBeschreibungErforderliche Fähigkeiten

Erstellen Sie die Funktion und den Auslöser.

Um eine Lambda-Funktion mit einem CodeCommit Trigger zu erstellen, führen Sie den Befehl unter Lambda-Funktion und CodeCommit Trigger im Abschnitt Zusätzliche Informationen aus. Stellen Sie sicher, dass Sie die Parameter durch die entsprechenden Werte ersetzen, bevor Sie den Befehl ausführen. Das Skript erstellt die Lambda-Funktion und konfiguriert sie so, dass sie aufgerufen wird, wenn eine neue Pull-Anfrage gestellt wird.

Entwickler, Systemadministrator AWS
AufgabeBeschreibungErforderliche Fähigkeiten

Testen Sie die Anwendung.

Wenn Sie AWS vertrauliche Informationen in das CodeCommit Repo einchecken, sollte die Lambda-Funktion initiiert werden. Die Lambda-Funktion initiiert die Fargate-Aufgabe, die den Code scannt und die Scanergebnisse in einer E-Mail-Benachrichtigung sendet.

Entwickler, Systemadministrator AWS

Zugehörige Ressourcen

Zusätzliche Informationen

Übertragen Sie das Container-Image

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

Erstellen Sie das CodeCommit Repository

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

Erstellen Sie ein VPC

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

Ausgabe

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

Erstellen Sie den Cluster und die Aufgabe

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

Ausgabe

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

Erstellen Sie das SNS Thema

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

Erstellen Sie den SNS Abonnenten

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

Lambda-Funktion und Trigger 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>>

Ausgabe

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

Anlagen

Um auf zusätzliche Inhalte zuzugreifen, die mit diesem Dokument verknüpft sind, entpacken Sie die folgende Datei: attachment.zip