View a markdown version of this page

Utilizzo di EC2 Image Builder per creare AMI Amazon personalizzate ECS-optimized - Amazon Elastic Container Service

Le traduzioni sono generate tramite traduzione automatica. In caso di conflitto tra il contenuto di una traduzione e la versione originale in Inglese, quest'ultima prevarrà.

Utilizzo di EC2 Image Builder per creare AMI Amazon personalizzate ECS-optimized

AWS consiglia di utilizzare le ECS-optimized AMI Amazon perché sono preconfigurate con i requisiti e i consigli per eseguire i carichi di lavoro dei container. In alcuni casi, potrebbe essere necessario personalizzare l'AMI per integrare software aggiuntivi. È possibile utilizzare EC2 Image Builder per la creazione, la gestione e l'implementazione delle immagini server. La proprietà delle immagini personalizzate create nell'account viene mantenuta. È possibile utilizzare le pipeline di EC2 Image Builder per automatizzare gli aggiornamenti e l'applicazione di patch di sistema per le immagini oppure utilizzare un comando autonomo per creare un'immagine con le risorse di configurazione definite.

Viene creata una ricetta per l'immagine. La ricetta include un'immagine principale ed eventuali componenti aggiuntivi. Inoltre, viene creata una pipeline che distribuisce l'AMI personalizzata.

Viene creata una ricetta per l'immagine. Una ricetta di immagine di Image Builder è un documento che definisce l'immagine di base e i componenti applicati all'immagine di base per produrre la configurazione desiderata per l'immagine AMI di output. Inoltre, viene creata una pipeline che distribuisce l'AMI personalizzata. Per ulteriori informazioni, consultare la pagina How EC2 Image Builder works nella Guida per l'utente di EC2 Image Builder.

Ti consigliamo di utilizzare una delle seguenti ECS-optimized AMI Amazon come «immagine principale» in EC2 Image Builder:

  • Linux

    • Amazon ECS-optimized AL2023 x86

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

    • AMI ECS-optimized Amazon Amazon Linux 2 kernel 5

    • AMI ECS-optimized Amazon Amazon Linux 2 x86

  • Windows

    • Amazon ECS-optimized Windows 2022 completo x86

    • Amazon ECS-optimized Windows 2022 Core x86

    • Amazon ECS-optimized Windows 2019 completo x86

    • Amazon ECS-optimized Windows 2019 Core x86

    • Amazon ECS-optimized Windows 2016 completo x86

Consigliamo anche di selezionare l'opzione “Usa la versione del sistema operativo più recente”. Per l'immagine parent, la pipeline utilizzerà il controllo delle versioni semantico, che aiuta a rilevare gli aggiornamenti delle dipendenze nei processi con pianificazione automatica. Per ulteriori informazioni, consultare Semantic versioning nella Guida per l'utente di EC2 Image Builder.

AWS aggiorna regolarmente le immagini di Amazon ECS-optimized AMI con patch di sicurezza e la nuova versione di Container Agent. Quando si utilizza un ID AMI come immagine principale nella ricetta di immagine, è necessario controllare regolarmente gli aggiornamenti dell'immagine principale. Se sono disponibili aggiornamenti, è necessario creare una nuova versione della ricetta con l'AMI aggiornata. Ciò garantisce che le immagini personalizzate incorporino la versione più recente dell'immagine principale. Per informazioni su come creare un flusso di lavoro per aggiornare automaticamente le istanze EC2 nel cluster Amazon ECS con le AMI appena create, consultare la pagina How to create an AMI hardening pipeline and automate updates to your ECS instance fleet.

È anche possibile specificare il nome della risorsa Amazon (ARN) di un'immagine parent pubblicata tramite una pipeline EC2 Image Builder gestita. Amazon pubblica regolarmente immagini Amazon ECS-optimized AMI tramite pipeline gestite. Queste immagini sono accessibili pubblicamente. Sono necessarie le autorizzazioni corrette per accedere all'immagine. Quando si utilizza l'ARN di un'immagine anziché un'AMI nella ricetta Image Builder, la pipeline utilizza automaticamente la versione più recente dell'immagine parent ogni volta che viene eseguita. Questo approccio elimina la necessità di creare manualmente nuove versioni della ricetta per ogni aggiornamento.

Pulisci l' ECS-optimized AMI Amazon

Quando usi un' ECS-optimized AMI Amazon come immagine principale, devi ripulire l'immagine per evitare problemi transitori. L' ECS-optimized AMI Amazon è preconfigurata per l'avvio automatico dell'agente Amazon ECS e la registrazione come istanza di container con Amazon ECS. Utilizzarla come immagine di base senza una pulizia adeguata può causare problemi nell'AMI personalizzata.

Per ripulire l'immagine per utilizzi futuri, creare un componente che esegua i seguenti comandi per arrestare il pacchetto ecs-init e i processi Docker:

sudo systemctl stop ecs sudo systemctl stop docker

Rimuovere tutti i file di log dall'istanza attuale per evitare che vengano preservati con il salvataggio dell'immagine. Utilizzare lo script di esempio presente alla pagina Security best practices for EC2 Image Builder per eliminare i vari file dall'istanza.

Per eliminare i dati specifici di Amazon ECS, eseguire i seguenti comandi:

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

Per ulteriori informazioni sulla creazione di AMI ECS-optimized Amazon personalizzate, consulta Come si crea un'AMI personalizzata da un' ECS-optimized AMI Amazon? nel AWS Knowledge Center.

Utilizzo dell'ARN dell'immagine con infrastructure as code (IaC)

Puoi configurare la ricetta utilizzando la console EC2 Image Builder o l'infrastruttura come codice ( CloudFormation ad esempio, AWS ) o l'SDK. Quando specifichi un'immagine principale nella tua ricetta, puoi specificare un ID AMI EC2, un ARN Marketplace AWS dell'immagine Image Builder, un ID prodotto o un'immagine del contenitore. AWS pubblica pubblicamente sia gli ID AMI che gli ARN di immagini Image Builder delle AMI ECS-Optimized Amazon. Il formato ARN dell'immagine è il seguente:

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

Il formato di ImageVersion è il seguente. Sostituisci minor e patch con major i valori più recenti.

<major>.<minor>.<patch>

È possibile sostituire major, minor e patch con valori specifici oppure utilizzare l'ARN senza versione di un'immagine, in modo che la pipeline rimanga aggiornata con la versione più recente dell'immagine parent. Un ARN senza versione utilizza il formato wildcard “x.x.x” per rappresentare la versione dell'immagine. Questo approccio consente al servizio Image Builder di risolversi automaticamente nella versione più recente dell'immagine. L'utilizzo di un ARN senza versione garantisce che il riferimento punti sempre all'immagine più recente disponibile, semplificando il processo di mantenimento delle immagini aggiornate nell'implementazione. Quando viene creata una ricetta con la console, EC2 Image Builder identifica automaticamente l'ARN dell'immagine parent. Quando si utilizza IaC per creare la ricetta, è necessario identificare l'ARN e selezionare la versione dell'immagine desiderata o utilizzare l'arn senza versione per indicare l'immagine più recente disponibile. Consigliamo di creare uno script automatico per filtrare e visualizzare solo le immagini in linea con i criteri desiderati. Il seguente script Python mostra come recuperare un elenco di AMI Amazon. ECS-optimized

Lo script accetta due argomenti facoltativi: owner e platform, i cui valori predefiniti sono rispettivamente “Amazon” e “Windows”. I valori validi per l'argomento owner sono Self, Shared, Amazon e ThirdParty. I valori validi per l'argomento platform sono Windows e Linux. Ad esempio, se esegui lo script con l'ownerargomento impostato su Amazon e platform impostato suLinux, lo script genera un elenco di immagini pubblicate da Amazon, comprese ECS-Optimized le immagini Amazon.

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

Utilizzo dell'immagine ARN con CloudFormation

Una ricetta di immagine Image Builder è un blueprint che specifica l'immagine principale e i componenti necessari per ottenere la configurazione prevista dell'immagine di output. Viene utilizzata la risorsa AWS::ImageBuilder::ImageRecipe. Impostare il valore ParentImage sull'ARN dell'immagine. Utilizzare l'ARN senza versione dell'immagine desiderata per assicurare che la pipeline usi sempre la versione più recente dell'immagine. Ad esempio, arn:aws:imagebuilder:us-east-1:aws:image/amazon-linux-2023-ecs-optimized-x86/x.x.x. La seguente definizione della risorsa AWS::ImageBuilder::ImageRecipe utilizza l'ARN di un'immagine gestita da Amazon:

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"

Per ulteriori informazioni sulla risorsa AWS::ImageBuilder::ImageRecipe, consultare la Guida per l'utente di AWS CloudFormation .

È possibile automatizzare la creazione di nuove immagini nella pipeline impostando la proprietà Schedule della risorsa AWS::ImageBuilder::ImagePipeline. La proprietà di pianificazione schedule include una condizione di avvio e un'espressione Cron. Per ulteriori informazioni, consulta AWS::ImageBuilder::ImagePipeline nella Guida per l'utente di AWS CloudFormation .

L'esempio seguente di AWS::ImageBuilder::ImagePipeline fa in modo che la pipeline esegua una build ogni giorno alle 10:00 UTC (Coordinated Universal Time). Impostare i seguenti valori di Schedule:

  • Imposta PipelineExecutionStartCondition su EXPRESSION_MATCH_AND_DEPENDENCY_UPDATES_AVAILABLE. La build viene avviata solo se vengono aggiornate risorse dipendenti come l'immagine principale o i componenti, che utilizzano il carattere jolly “x” nelle proprie versioni semantiche. In questo modo si garantisce che la build incorpori gli aggiornamenti più recenti di tali risorse.

  • Imposta ScheduleExpression sull'espressione cron. (0 10 * * ? *)

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 * * ? *)'

Utilizzo dell'ARN dell'immagine con Terraform

L'approccio per specificare l'immagine principale e la pianificazione della pipeline in Terraform è in linea con quello in AWS CloudFormation. Viene utilizzata la risorsa aws_imagebuilder_image_recipe. Impostare il valore parent_image sull'ARN dell'immagine. Utilizzare l'ARN senza versione dell'immagine desiderata per assicurare che la pipeline usi sempre la versione più recente dell'immagine. Per ulteriori informazioni, consultare aws_imagebuilder_image_recipe nella documentazione di Terraform.

Nel blocco di configurazione della programmazione di aws_imagebuilder_image_pipeline resource, impostare il valore dell'argomento schedule_expression su un'espressione Cron a scelta per specificare la frequenza di esecuzione della pipeline e impostare pipeline_execution_start_condition su EXPRESSION_MATCH_AND_DEPENDENCY_UPDATES_AVAILABLE. Per ulteriori informazioni, consultare aws_imagebuilder_image_pipeline nella documentazione di Terraform.