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
Der gesamte Ablauf umfasst die folgenden Schritte.
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. EventBridgeDie 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.
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
Aufgabe | Beschreibung | Erforderliche 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 | Entwickler, AWS Systemadministrator |
Aufgabe | Beschreibung | Erforderliche 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 |
Aufgabe | Beschreibung | Erforderliche 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 |
Aufgabe | Beschreibung | Erforderliche 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 |
Aufgabe | Beschreibung | Erforderliche 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. | Entwickler, AWS Systemadministrator |
Aufgabe | Beschreibung | Erforderliche 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 den | 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 | Entwickler, AWS Systemadministrator |
Aufgabe | Beschreibung | Erforderliche 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 |
Aufgabe | Beschreibung | Erforderliche 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>>