Les traductions sont fournies par des outils de traduction automatique. En cas de conflit entre le contenu d'une traduction et celui de la version originale en anglais, la version anglaise prévaudra.
Utilisation d' EC2 Image Builder pour créer une solution personnalisée optimisée pour Amazon ECS AMIs
AWS vous recommande d'utiliser les solutions optimisées pour Amazon ECS, AMIs car elles sont préconfigurées avec les exigences et les recommandations nécessaires pour exécuter vos charges de travail de conteneurs. Il peut arriver que vous deviez personnaliser votre AMI pour ajouter des logiciels supplémentaires. Vous pouvez utiliser EC2 Image Builder pour créer, gérer et déployer les images de votre serveur. Vous restez propriétaire des images personnalisées créées dans votre compte. Vous pouvez utiliser les pipelines EC2 Image Builder pour automatiser les mises à jour et les correctifs système pour vos images, ou utiliser une commande autonome pour créer une image avec les ressources de configuration que vous avez définies.
Vous créez une recette pour votre image. La recette inclut une image parent et tous les composants supplémentaires. Vous créez également un pipeline qui distribue votre AMI personnalisée.
Vous créez une recette pour votre image. Une recette Image Builder est un document qui définit l’image de base et les composants à appliquer à l’image de base pour produire la configuration souhaitée pour l’image AMI en sortie. Vous créez également un pipeline qui distribue votre AMI personnalisée. Pour plus d'informations, consultez la section Fonctionnement EC2 d'Image Builder dans le guide de l'utilisateur d'EC2 Image Builder.
Nous vous recommandons d'utiliser l'une des images optimisées pour Amazon ECS suivantes AMIs comme « image parent » dans EC2 Image Builder :
Linux
-
023 x86 optimisé pour Amazon ECS AL2
-
AMI Amazon Linux 2023 (arm64) optimisée pour Amazon ECS
-
AMI Amazon Linux 2 noyau 5 optimisée pour Amazon ECS
-
AMI Amazon Linux 2 x86 optimisée pour Amazon ECS
-
Windows
-
Windows Server 2022 Full x86 optimisée pour Amazon ECS
-
Windows Server 2022 Core x86 optimisée pour Amazon ECS
-
Windows Server 2019 Full x86 optimisée pour Amazon ECS
-
Windows Server 2019 Core x86 optimisée pour Amazon ECS
-
Windows Server 2016 Full x86 optimisée pour Amazon ECS
-
Nous vous recommandons également de sélectionner « Utiliser la dernière version disponible du système d’exploitation ». Le pipeline utilisera la gestion des versions sémantique pour l’image parent, ce qui permet de détecter les mises à jour des dépendances dans les tâches planifiées automatiquement. Pour plus d'informations, consultez la section Gestion des versions sémantique dans le guide de l'utilisateur EC2 d'Image Builder.
AWS met régulièrement à jour les images d'AMI optimisées pour Amazon ECS avec des correctifs de sécurité et la nouvelle version de l'agent de conteneur. Lorsque vous utilisez un ID AMI comme image parent dans votre recette d’image, vous devez vérifier régulièrement les mises à jour de l’image parent. S’il y a des mises à jour, vous devez créer une nouvelle version de votre recette avec l’AMI mise à jour. Cela garantit que vos images personnalisées incorporent la dernière version de l’image parent. Pour plus d'informations sur la création d'un flux de travail permettant de mettre automatiquement à jour vos EC2 instances dans votre cluster Amazon ECS avec les instances nouvellement créées AMIs, consultez Comment créer un pipeline de renforcement des AMI et automatiser les mises à jour de votre parc d'instances ECS
Vous pouvez également spécifier le Amazon Resource Name (ARN) d'une image parent publiée via un pipeline EC2 Image Builder géré. Amazon publie régulièrement des images AMI optimisées pour Amazon ECS via des pipelines gérés. Ces images sont publiquement accessibles. Vous devez disposer des autorisations nécessaires pour accéder à l’image. Lorsque vous utilisez un ARN d’image au lieu d’une AMI dans votre recette Image Builder, votre pipeline utilise automatiquement la version la plus récente de l’image parent à chaque exécution. Cette approche élimine le besoin de créer manuellement de nouvelles versions de recettes pour chaque mise à jour.
Nettoyage de l’AMI optimisée pour Amazon ECS
Lorsque vous utilisez une AMI optimisée pour Amazon ECS comme image parent, vous devez nettoyer l’image pour éviter les problèmes transitoires. L’AMI optimisée pour Amazon ECS est préconfigurée pour que l’agent Amazon ECS démarre automatiquement et s’enregistre en tant qu’instance de conteneur auprès d’Amazon ECS. Son utilisation comme image de base sans nettoyage approprié peut entraîner des problèmes dans votre AMI personnalisée.
Pour nettoyer l’image en vue d’une utilisation future, créez un composant qui exécute les commandes suivantes pour arrêter le package ecs-init et les processus Docker :
sudo systemctl stop ecs sudo systemctl stop docker
Supprimez tous les fichiers journaux de l’instance actuelle pour éviter de les conserver lors de l’enregistrement de l’image. Utilisez l'exemple de script de la section Meilleures pratiques de sécurité pour EC2 Image Builder pour nettoyer les différents fichiers de l'instance.
Pour nettoyer les données spécifiques d’Amazon ECS, exécutez les commandes suivantes :
sudo rm -rf /var/log/ecs/* sudo rm /var/lib/ecs/data/agent.db
Pour plus d'informations sur la création d'une AMI personnalisée optimisée pour Amazon ECS AMIs, consultez Comment créer une AMI personnalisée à partir d'une AMI optimisée pour Amazon ECS
Utilisation de l’ARN d’image avec l’infrastructure en tant que code (IaC)
Vous pouvez configurer la recette à l'aide de la console EC2 Image Builder, de l'infrastructure sous forme de code (par exemple CloudFormation) ou du AWS SDK. Lorsque vous spécifiez une image parent dans votre recette, vous pouvez spécifier un ID EC2 AMI, un ARN d'image Image Builder, un identifiant de AWS Marketplace produit ou une image de conteneur. AWS publie publiquement l'image AMI IDs et Image Builder ARNs d'Amazon ECS optimisée pour Amazon ECS AMIs . Le format de l’ARN d’image est le suivant :
arn:${Partition}:imagebuilder:${Region}:${Account}:image/${ImageName}/${ImageVersion}
L’ImageVersion a le format suivant. Remplacezmajor, minor et patch par les dernières valeurs.
<major>.<minor>.<patch>
Vous pouvez remplacer major minor et patch remplacer des valeurs spécifiques ou utiliser l'ARN sans version d'une image, afin que votre pipeline conserve up-to-date la dernière version de l'image parent. Un ARN sans version utilise le format générique « x.x.x » pour représenter la version de l’image. Cette approche permet au service Image Builder de résoudre automatiquement la version la plus récente de l’image. L’utilisation d’un ARN sans version garantit que votre référence pointe toujours vers la dernière image disponible, ce qui rationalise le processus de mise à jour des images dans votre déploiement. Lorsque vous créez une recette avec la console, EC2 Image Builder identifie automatiquement l'ARN de votre image parent. Lorsque vous utilisez l’IaC pour créer la recette, vous devez identifier l’ARN et sélectionner la version d’image souhaitée ou utiliser un ARN sans version pour indiquer la dernière image disponible. Nous vous recommandons de créer un script automatique pour filtrer et n’afficher que les images correspondant à vos critères. Le script Python suivant montre comment récupérer une liste d'Amazon ECS AMIs optimisés.
Le script accepte deux arguments facultatifs : owner et platform, avec les valeurs par défaut « Amazon » et « Windows » respectivement. Les valeurs valides pour l’argument du propriétaire sont : Self, Shared, Amazon et ThirdParty. Les valeurs valides pour l’argument de plateforme sont Windows et Linux. Par exemple, si vous exécutez le script avec les arguments owner définis sur Amazon et platform définis sur Linux, le script génère une liste d’images publiées par Amazon, y compris des images optimisées pour Amazon ECS.
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()
Utilisation de l'ARN de l'image avec CloudFormation
Une recette d’image Image Builder est un plan qui spécifie l’image parent et les composants nécessaires pour obtenir la configuration prévue de l’image de sortie. Vous utilisez la ressource AWS::ImageBuilder::ImageRecipe. Définissez la valeur ParentImage sur l’ARN d’image. Utilisez l’ARN sans version de l’image souhaitée pour vous assurer que votre pipeline utilise toujours la version la plus récente de l’image. Par exemple, arn:aws:imagebuilder:us-east-1:aws:image/amazon-linux-2023-ecs-optimized-x86/x.x.x. La définition de AWS::ImageBuilder::ImageRecipe ressource suivante utilise un ARN d’image géré par 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"
Pour plus d’informations sur la ressource AWS::ImageBuilder::ImageRecipe, consultez le Guide de l’utilisateur AWS CloudFormation .
Vous pouvez automatiser la création de nouvelles images dans votre pipeline en définissant la propriété Schedule de la ressource AWS::ImageBuilder::ImagePipeline. Le calendrier inclut une condition de départ et une expression cron. Pour plus d’informations, consultez AWS::ImageBuilder::ImagePipeline dans le Guide de l’utilisateur AWS CloudFormation .
Dans l’exemple AWS::ImageBuilder::ImagePipeline suivant, le pipeline exécute une construction à 10 h 00, heure universelle coordonnée (UTC) tous les jours. Définissez les valeurs Schedule suivantes :
Définissez
PipelineExecutionStartConditionsurEXPRESSION_MATCH_AND_DEPENDENCY_UPDATES_AVAILABLE. Le build ne démarre que si des ressources dépendantes telles que l’image parent ou les composants, qui utilisent le caractère générique « x » dans leurs versions sémantiques, sont mises à jour. Cela garantit que la version intègre les dernières mises à jour de ces ressources.-
ScheduleExpression Défini sur l'expression
(0 10 * * ? *)cron.
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 * * ? *)'
Utilisation de l’ARN d’image avec Terraform
L’approche pour spécifier l’image parent et le calendrier de votre pipeline dans Terraform s’aligne sur celle de AWS CloudFormation. Vous utilisez la ressource aws_imagebuilder_image_recipe. Définissez la valeur parent_image sur l’ARN d’image. Utilisez l’ARN sans version de l’image souhaitée pour vous assurer que votre pipeline utilise toujours la version la plus récente de l’image. Pour plus d’informations, consultez la section aws_imagebuilder_image_recipe
Dans le bloc de configuration du calendrier de la aws_imagebuilder_image_pipeline
resource, définissez la valeur de l’argument schedule_expression sur une expression cron de votre choix pour spécifier la fréquence d’exécution du pipeline, puis définissez la valeur de pipeline_execution_start_condition sur EXPRESSION_MATCH_AND_DEPENDENCY_UPDATES_AVAILABLE. Pour plus d’informations, consultez la section aws_imagebuilder_image_pipeline