View a markdown version of this page

Verwenden von EC2 Image Builder zum Erstellen benutzerdefinierter Amazon-AMIs ECS-optimized - Amazon Elastic Container Service

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.

Verwenden von EC2 Image Builder zum Erstellen benutzerdefinierter Amazon-AMIs ECS-optimized

AWS empfiehlt die Verwendung der ECS-optimized Amazon-AMIs, da diese mit den Anforderungen und Empfehlungen für die Ausführung Ihrer Container-Workloads vorkonfiguriert sind. Es kann vorkommen, dass Sie Ihr AMI anpassen müssen, um zusätzliche Software hinzuzufügen. Sie können EC2 Image Builder für die Erstellung, Verwaltung und Bereitstellung Ihrer Server-Images verwenden. Sie behalten das Eigentum an den benutzerdefinierten Images, die in Ihrem Konto erstellt wurden. Sie können EC2-Image-Pipelines verwenden, um Aktualisierungen und System-Patches für Ihre Images zu automatisieren, oder einen eigenständigen Befehl verwenden, um ein Image mit Ihren definierten Konfigurationsressourcen zu erstellen.

Sie erstellen ein Rezept für ein Image. Das Rezept enthält ein übergeordnetes Image und alle zusätzlichen Komponenten. Sie erstellen auch eine Pipeline, die Ihr benutzerdefiniertes AMI verteilt.

Sie erstellen ein Rezept für ein Image. Ein Image-Rezept von Image Builder ist ein Dokument, welches das Basis-Image und die auf das Basis-Image anzuwendenden Komponenten definiert, um die gewünschte Konfiguration für das Ausgabe-AMI-Image zu erzeugen. Sie erstellen auch eine Pipeline, die Ihr benutzerdefiniertes AMI verteilt. Weitere Informationen finden Sie So funktioniert EC2 Image Builder im Benutzerhandbuch für EC2 Image Builder.

Wir empfehlen, eines der folgenden ECS-optimized Amazon-AMIs als Ihr „übergeordnetes Image“ in EC2 Image Builder zu verwenden:

  • Linux

    • Amazon ECS-optimized AL2023 x86

    • Amazon ECS-optimized Amazon Linux 2023 (arm64) AMI

    • Amazon ECS-optimized Amazon Linux 2-Kernel-5-AMI

    • Amazon ECS-optimized Amazon Linux 2 x86-AMI

  • Windows

    • Amazon ECS-optimized Windows 2022 Vollversion x86

    • Amazon ECS-optimized Windows 2022 Core x86

    • Amazon ECS-optimized Windows 2019 Vollversion x86

    • Amazon ECS-optimized Windows 2019 Core x86

    • Amazon ECS-optimized Windows 2016 Vollversion x86

Wir empfehlen außerdem, dass Sie „Letzte verfügbare Betriebssystemversion verwenden“ auswählen. Die Pipeline verwendet für das übergeordnete Image eine semantische Versionsverwaltung, die hilft, die Abhängigkeitsupdates in automatisch geplanten Aufträgen zu erkennen. Weitere Informationen finden Sie unter Semantische Versionsverwaltung im Benutzerhandbuch für EC2 Image Builder.

AWS aktualisiert Amazon ECS-optimized AMI-Images regelmäßig mit Sicherheitspatches und der neuen Container-Agent-Version. Wenn Sie eine AMI-ID als übergeordnetes Image in Ihrem Image-Rezept verwenden, müssen Sie regelmäßig nach Aktualisierungen für das übergeordnete Image suchen. Wenn es Updates gibt, müssen Sie eine neue Version Ihres Rezepts mit dem aktualisierten AMI erstellen. Dadurch wird sichergestellt, dass Ihre benutzerdefinierten Images die neueste Version des übergeordneten Image enthalten. Informationen zum Erstellen eines Workflows zur automatischen Aktualisierung Ihrer EC2-Instances in Ihrem Amazon-ECS-Cluster mit den neu erstellten AMIs finden Sie unter So erstellen Sie eine AMI-Hardening-Pipeline und automatisieren Aktualisierungen für Ihre ECS-Instance-Flotte.

Sie können auch den Amazon-Ressourcennamen (ARN) eines übergeordneten Images angeben, das über eine verwaltete EC2-Image-Builder-Pipeline veröffentlicht wurde. Amazon veröffentlicht regelmäßig Amazon ECS-optimized AMI-Images über verwaltete Pipelines. Diese Images sind öffentlich zugänglich. Sie müssen über die entsprechenden Berechtigungen verfügen, um auf das Image zugreifen zu können. Wenn Sie in Ihrem Image-Builder-Rezept einen Image-ARN anstelle eines AMI verwenden, verwendet Ihre Pipeline bei jeder Ausführung automatisch die neueste Version des übergeordneten Images. Dieser Ansatz macht es überflüssig, für jede Aktualisierung manuell neue Rezeptversionen zu erstellen.

Säubern Sie das Amazon ECS-optimized AMI

Wenn Sie ein Amazon ECS-optimized AMI als übergeordnetes Image verwenden, müssen Sie das Image bereinigen, um vorübergehende Probleme zu vermeiden. Das Amazon ECS-optimized AMI ist so vorkonfiguriert, dass der Amazon ECS-Agent automatisch startet und sich als Container-Instance bei Amazon ECS registriert. Wenn Sie es als Basis-Image ohne ordnungsgemäße Bereinigung verwenden, kann dies zu Problemen in Ihrem benutzerdefinierten AMI führen.

Um das Image für die zukünftige Verwendung zu bereinigen, erstellen Sie eine Komponente, die die folgenden Befehle ausführt, um das ecs-init-Paket und die Docker-Prozesse anzuhalten:

sudo systemctl stop ecs sudo systemctl stop docker

Entfernen Sie alle Protokolldateien aus der aktuellen Instance, um zu verhindern, dass sie beim Speichern des Images erhalten bleiben. Verwenden Sie das Beispielskript unter Bewährte Sicherheitsmethoden für EC2 Image Builder, um die verschiedenen Dateien aus der Instance zu bereinigen.

Führen Sie die folgenden Befehle aus, um die Amazon-ECS-spezifischen Daten zu bereinigen:

sudo rm -rf /var/log/ecs/* sudo rm /var/lib/ecs/data/agent.db

Weitere Informationen zum Erstellen benutzerdefinierter ECS-optimized Amazon-AMIs finden Sie unter Wie erstelle ich ein benutzerdefiniertes AMI aus einem ECS-optimized Amazon-AMI? im AWS Knowledge Center.

Verwenden des Image-ARN mit Infrastructure as Code (IaC)

Sie können das Rezept mit der EC2 Image Builder Builder-Konsole, Infrastructure as Code (z. B. CloudFormation) oder dem AWS SDK konfigurieren. Wenn Sie in Ihrem Rezept ein übergeordnetes Image angeben, können Sie eine EC2-AMI-ID, einen Image Builder Builder-Image-ARN, eine AWS Marketplace Produkt-ID oder ein Container-Image angeben. AWS veröffentlicht sowohl AMI-IDs als auch Image Builder Builder-Image-ARNs von ECS-Optimized Amazon-AMIs öffentlich. Der ARN für das Image hat folgendes Format:

arn:${Partition}:imagebuilder:${Region}:${Account}:image/${ImageName}/${ImageVersion}

Die ImageVersion hat das folgende Format. Ersetzenmajor, minor und patch durch die neuesten Werte.

<major>.<minor>.<patch>

Sie können major, minor und patch durch bestimmte Werte ersetzen oder Sie können den versionslosen ARN eines Images verwenden, sodass Ihre Pipeline mit der neuesten Version des übergeordneten Images auf dem neuesten Stand bleibt. Ein versionsloser ARN verwendet das Platzhalterformat „x.x.x“, um die Image-Version darzustellen. Dieser Ansatz ermöglicht es dem Image-Builder-Service, automatisch auf die neueste Version des Images aufzulösen. Durch die Verwendung des versionsfreien ARN wird sichergestellt, dass Ihre Referenz immer auf das neueste verfügbare Image verweist, wodurch der Prozess der Aktualisierung von Images in Ihrer Bereitstellung rationalisiert wird. Wenn Sie mit der Konsole ein Rezept erstellen, identifiziert EC2 Image Builder automatisch den ARN für Ihr übergeordnetes Image. Wenn Sie IaC verwenden, um das Rezept zu erstellen, müssen Sie den ARN identifizieren und die gewünschte Image-Version auswählen oder den versionslosen ARN verwenden, um das neueste verfügbare Image anzugeben. Wir empfehlen Ihnen, ein automatisiertes Skript zu erstellen, um nur Images zu filtern und anzuzeigen, die Ihren Kriterien entsprechen. Das folgende Python-Skript zeigt, wie Sie eine Liste von ECS-optimized Amazon-AMIs abrufen.

Das Skript akzeptiert zwei optionale Argumente: owner und platform, mit den Standardwerten „Amazon“ bzw. „Windows“. Die gültigen Werte für das Argument owner sind: Self, Shared, Amazon und ThirdParty. Die gültigen Werte für das Argument platform sind Windows und Linux. Wenn Sie das Skript beispielsweise mit den owner Argumenten set to Amazon und set to ausführenLinux, generiert das platform Skript eine Liste von Bildern, die von Amazon veröffentlicht wurden, einschließlich ECS-Optimized Amazon-Bildern.

import boto3 import argparse def list_images(owner, platform): # Create a Boto3 session session = boto3.Session() # Create an EC2 Image Builder client client = session.client('imagebuilder') # Define the initial request parameters request_params = { 'owner': owner, 'filters': [ { 'name': 'platform', 'values': [platform] } ] } # Initialize the results list all_images = [] # Get the initial response with the first page of results response = client.list_images(**request_params) # Extract images from the response all_images.extend(response['imageVersionList']) # While 'nextToken' is present, continue paginating while 'nextToken' in response and response['nextToken']: # Update the token for the next request request_params['nextToken'] = response['nextToken'] # Get the next page of results response = client.list_images(**request_params) # Extract images from the response all_images.extend(response['imageVersionList']) return all_images def main(): # Initialize the parser parser = argparse.ArgumentParser(description="List AWS images based on owner and platform") # Add the parameters/arguments parser.add_argument("--owner", default="Amazon", help="The owner of the images. Default is 'Amazon'.") parser.add_argument("--platform", default="Windows", help="The platform type of the images. Default is 'Windows'.") # Parse the arguments args = parser.parse_args() # Retrieve all images based on the provided owner and platform images = list_images(args.owner, args.platform) # Print the details of the images for image in images: print(f"Name: {image['name']}, Version: {image['version']}, ARN: {image['arn']}") if __name__ == "__main__": main()

Verwenden des Bild-ARN mit CloudFormation

Ein Image-Builder-Image-Rezept ist eine Vorlage, die das übergeordnete Image und die Komponenten spezifiziert, die für die beabsichtigte Konfiguration des Ausgabe-Images erforderlich sind. Sie verwenden die AWS::ImageBuilder::ImageRecipe-Ressource. Stellen Sie den ParentImage-Wert auf den Image-ARN ein. Verwenden Sie den versionslosen ARN Ihres gewünschten Images, um sicherzustellen, dass Ihre Pipeline immer die neueste Version des Images verwendet. Beispiel, arn:aws:imagebuilder:us-east-1:aws:image/amazon-linux-2023-ecs-optimized-x86/x.x.x. Die folgende AWS::ImageBuilder::ImageRecipe-Ressourcendefinition verwendet einen von Amazon verwalteten Image ARN:

ECSRecipe: Type: AWS::ImageBuilder::ImageRecipe Properties: Name: MyRecipe Version: '1.0.0' Components: - ComponentArn: [<The component arns of the image recipe>] ParentImage: "arn:aws:imagebuilder:us-east-1:aws:image/amazon-linux-2023-ecs-optimized-x86/x.x.x"

Weitere Informationen über die AWS::ImageBuilder::ImageRecipe-Ressource finden Sie im Benutzerhandbuch für AWS CloudFormation .

Sie können die Erstellung neuer Images in Ihrer Pipeline automatisieren, indem Sie die Schedule-Eigenschaft der AWS::ImageBuilder::ImagePipeline-Ressource festlegen. Der Zeitplan enthält eine Startbedingung und einen Cron-Ausdruck. Weitere Informationen finden Sie unter AWS::ImageBuilder::ImagePipeline im AWS CloudFormation -Benutzerhandbuch.

Im folgenden Beispiel einer AWS::ImageBuilder::ImagePipeline wird für die Pipeline täglich um 10:00 Uhr (UTC) ein Build ausgeführt. Legen Sie die folgenden Schedule-Werte fest:

  • Setzen Sie PipelineExecutionStartCondition auf EXPRESSION_MATCH_AND_DEPENDENCY_UPDATES_AVAILABLE. Der Build wird nur gestartet, wenn abhängige Ressourcen wie das übergeordnete Image oder Komponenten, die in ihren semantischen Versionen den Platzhalter „x“ verwenden, aktualisiert werden. Dadurch wird sichergestellt, dass der Build die neuesten Aktualisierungen dieser Ressourcen enthält.

  • Auf ScheduleExpression den Cron-Ausdruck (0 10 * * ? *) gesetzt.

ECSPipeline: Type: AWS::ImageBuilder::ImagePipeline Properties: Name: my-pipeline ImageRecipeArn: <arn of the recipe you created in previous step> InfrastructureConfigurationArn: <ARN of the infrastructure configuration associated with this image pipeline> Schedule: PipelineExecutionStartCondition: EXPRESSION_MATCH_AND_DEPENDENCY_UPDATES_AVAILABLE ScheduleExpression: 'cron(0 10 * * ? *)'

Verwenden des Image-ARN mit Terraform

Der Ansatz zur Angabe des übergeordneten Images und des Zeitplans Ihrer Pipeline in Terraform entspricht dem in AWS CloudFormation. Sie verwenden die aws_imagebuilder_image_recipe-Ressource. Stellen Sie den parent_image-Wert auf den Image-ARN ein. Verwenden Sie den versionslosen ARN Ihres gewünschten Images, um sicherzustellen, dass Ihre Pipeline immer die neueste Version des Images verwendet. Weitere Informationen finden Sie unter aws_imagebuilder_image_recipe in der Terraform-Dokumentation.

Setzen Sie im Zeitplan-Konfigurationsblock der aws_imagebuilder_image_pipeline resource den schedule_expression-Argumentwert auf einen Cron-Ausdruck Ihrer Wahl, um anzugeben, wie oft die Pipeline ausgeführt wird, und setzen Sie pipeline_execution_start_condition auf EXPRESSION_MATCH_AND_DEPENDENCY_UPDATES_AVAILABLE. Weitere Informationen finden Sie unter aws_imagebuilder_image_pipeline in der Terraform-Dokumentation.