Verwenden von EC2 Image Builder zur Erstellung maßgeschneiderter Amazon ECS-optimierter AMIs - 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 zur Erstellung maßgeschneiderter Amazon ECS-optimierter AMIs

AWS empfiehlt, dass Sie Amazon ECS-Optimized verwenden, 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 Builder Builder-Pipelines verwenden, um Updates 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 unter So funktioniert EC2 Image Builder im EC2 Image Builder Builder-Benutzerhandbuch.

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

  • Linux

    • Amazon ECS-optimiert 023 x86 AL2

    • Amazon-ECS-optimiertes AMI für Amazon Linux 2023 (arm64)

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

    • Amazon-ECS-optimiertes AMI für Amazon Linux 2 x86

  • Windows

    • Amazon-ECS-optimiertes Windows 2022 Full x86

    • Amazon-ECS-optimiertes Windows 2022 Core x86

    • Amazon-ECS-optimiertes Windows 2019 Full x86

    • Amazon-ECS-optimiertes Windows 2019 Core x86

    • Amazon-ECS-optimiertes Windows 2016 Full 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 Versionierung im EC2 Image Builder Builder-Benutzerhandbuch.

AWS aktualisiert regelmäßig Amazon ECS-optimierte AMI-Images 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 Instances finden Sie unter So erstellen Sie eine AMI-Hardening-Pipeline und automatisieren Updates 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 Builder-Pipeline veröffentlicht wurde. Amazon veröffentlicht routinemäßig Amazon-ECS-optimierte 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.

Das Amazon-ECS-optimierte AMI bereinigen

Wenn Sie ein Amazon-ECS-optimiertes AMI als übergeordnetes Image verwenden, müssen Sie das Image bereinigen, um vorübergehende Probleme zu vermeiden. Das Amazon-ECS-optimierte 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 Instanz 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 zur Erstellung eines benutzerdefinierten Amazon ECS-optimierten AMIs AMI finden Sie unter Wie erstelle ich ein benutzerdefiniertes AMI aus einem Amazon ECS-optimierten AMI? im Knowledge Center. AWS

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 das AMI IDs - als auch Image Builder Builder-Image ARNs von Amazon ECS-Optimized öffentlich AMIs . 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 mit den neuesten Werten.

<major>.<minor>.<patch>

Sie können minor und patch durch bestimmte Werte ersetzen major oder Sie können den versionslosen ARN eines Images verwenden, sodass Ihre Pipeline up-to-date bei der neuesten Version des übergeordneten Images 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 Amazon AMIs ECS-optimierten Dateien 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 dem Argument owner auf Amazon gestellt und platform auf Linux gestellt ausführen, generiert das Skript eine Liste von Images, die von Amazon veröffentlicht wurden, einschließlich Amazon-ECS-optimierter Images.

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.