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.
Erstellt von HARI OHM PRASATH RAJAGOPAL (AWS)
Ü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 AWS Fargate in großem Umfang in der Amazon Web Services (AWS) -Cloud ausgeführt werden.
In dem Anwendungsfall, den dieses Muster einrichtet, wird der Code immer dann nach sensiblen AWS-Informationen wie der AWS-Kontonummer und den Anmeldeinformationen durchsucht, wenn eine Pull-Anfrage eingereicht wird. 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 (Amazon SNS) 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 möchten, dass AWS die für diese Workloads bereitgestellten Instances verwaltet
Wenn Sie dieses Muster verwenden, haben Sie die Möglichkeit, eine neue Virtual Private Cloud (VPC) zu erstellen. Dieses Muster verwendet AWS CodeCommit auch.
Voraussetzungen und Einschränkungen
Voraussetzungen
Ein aktives AWS-Konto
AWS CodeCommit für das Hosten der Codebasis und das Erstellen von Pull-Requests
AWS-Befehlszeilenschnittstelle (AWS CLI) 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>>
Findet der Scan vertrauliche Informationen im Code, leitet Fargate eine neue Nachricht an das Amazon SNS SNS-Thema weiter.
Ein SNS-Abonnent liest die Nachricht aus dem Thema und sendet eine E-Mail-Nachricht.
Technologie
AWS CodeCommit
Amazon Elastic Container Registry (Amazon ECR)
Amazon Elastic Container Service (Amazon ECS)
Amazon EventBridge
AWS Fargate
AWS Lambda
Amazon SNS
Docker
Tools
Tools
AWS CLI — Die AWS-Befehlszeilenschnittstelle (CLI) ist ein einheitliches Tool zur Verwaltung Ihrer AWS-Services.
AWS CodeCommit — AWS
CodeCommit ist ein vollständig verwalteter Quellcodeverwaltungsservice, der sichere Git-basierte Repositorys hostet. Auf diese CodeCommit Weise können Teams in einer sicheren und hochgradig skalierbaren Umgebung gemeinsam an Code arbeiten. Amazon ECR — Amazon Elastic Container Registry (Amazon ECR) 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 (Amazon ECS) ist ein hoch skalierbarer, schneller Container-Management-Service. Sie können Amazon ECS verwenden, um Container in einem Cluster auszuführen, zu stoppen und zu verwalten.
AWS Fargate — AWS Fargate ist eine Technologie, die Sie mit Amazon ECS verwenden können, um Container auszuführen, ohne Server oder Cluster von EC2 Amazon-Instances verwalten zu müssen.
AWS Lambda — AWS Lambda ist ein Rechenservice, 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 (Amazon SNS) 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 Amazon ECR-Repository und melden Sie sich an. | Öffnen Sie die Amazon ECR-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 die URL des neuesten Builds in das Amazon ECR-Repository. | Entwickler, AWS-Systemadministrator |
Aufgabe | Beschreibung | Erforderliche Fähigkeiten |
---|---|---|
Erstellen Sie das CodeCommit Repository. | Um ein neues CodeCommit AWS-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 |
---|---|---|
Erstellen Sie eine VPC. | Wenn Sie eine neue VPC anstelle einer vorhandenen verwenden möchten, führen Sie die Befehle unter VPC erstellen im Abschnitt Zusätzliche Informationen aus. Das AWS Cloud Development Kit (AWS CDK) -Skript gibt die Daten IDs der erstellten VPC und des Subnetzes aus. | Entwickler, AWS-Systemadministrator |
Aufgabe | Beschreibung | Erforderliche Fähigkeiten |
---|---|---|
Erstellen Sie den Cluster und die Aufgabe. | Um einen Amazon ECS-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 die richtige VPC-ID und der Amazon ECR-Repo-URI 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 Amazon ECS-Cluster. | Öffnen Sie die Amazon-ECS-Konsole. Wählen Sie im Navigationsbereich Clusters und dann den neu erstellten Amazon ECS-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 |
---|---|---|
Erstellen Sie ein SNS-Thema. | Um ein SNS-Thema zu erstellen, führen Sie den Befehl unter SNS-Thema 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 SNS-Abonnent erstellen im Abschnitt Zusätzliche Informationen aus. Stellen Sie sicher, dass Sie den Befehl 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, AWS-Systemadministrator |
Aufgabe | Beschreibung | Erforderliche Fähigkeiten |
---|---|---|
Testen Sie die Anwendung. | Wenn Sie vertrauliche AWS-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, AWS-Systemadministrator |
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 einer 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>>