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.
Création d'une nouvelle version d'une recette de conteneur
Cette section explique comment créer une recette contenant ou une nouvelle version d'une recette existante. Une recette de conteneur définit trois éléments clés : l'image de base, les composants de construction et le référentiel cible. Utilisez cette recette pour produire des images de Docker conteneur qu'Image Builder stocke dans Amazon ECR.
Table des matières
Créez une nouvelle version de recette de conteneur avec la console
La création d'une nouvelle version d'une recette contenant est pratiquement identique à la création d'une nouvelle recette. La différence est que certains détails sont présélectionnés pour correspondre à la recette de base, dans la plupart des cas. La liste suivante décrit les différences entre la création d'une nouvelle recette et la création d'une nouvelle version d'une recette existante.
Détails de la recette
-
Nom : non modifiable.
-
Version — Obligatoire. Ce détail n'est pas prérempli avec la version actuelle ni avec aucun type de séquence. Entrez le numéro de version que vous souhaitez créer au format major.minor.patch. Si la version existe déjà, Image Builder renvoie une erreur.
Image de base
-
Sélectionnez l'option image — Pre-selected, mais modifiable. Si vous modifiez votre choix de source pour votre image de base, vous risquez de perdre d'autres détails qui dépendent de l'option d'origine que vous avez choisie.
Pour les images de Docker conteneur, vous pouvez choisir entre des images publiques hébergées surDockerHub, des images de conteneur existantes dans Amazon ECR ou des images de Amazon-managed conteneur. Pour voir les détails associés à votre sélection d'images de base, choisissez l'onglet correspondant à votre sélection.
Configuration de l'instance
-
Source de l'AMI (obligatoire) — Identifiez une AMI personnalisée à utiliser comme image de base pour votre instance de création et de test de conteneur. Il peut s'agir d'un ID d'AMI ou d'un paramètre de magasin de paramètres AWS Systems Manager (SSM) contenant un ID d'AMI.
-
ID AMI — Ce paramètre n'est pas prérempli avec votre entrée d'origine. Entrez l'ID AMI de votre image de base. Exemple:
.ami-1234567890abcdef1 -
Paramètre SSM : entrez le nom ou l'ARN du paramètre SSM Parameter Store qui contient l'ID AMI de votre image de base. Exemple :
ou/ib/test/paramarn:aws:ssm:.us-east-1:111122223333:parameter/ib/test/param
-
-
Stockage (volumes)
Volume 1 d'EBS (racine AMI) — Pre-filled. Vous ne pouvez pas modifier le nom du périphérique du volume racine, le snapshot ou les sélections d'IOPS. Cependant, vous pouvez modifier tous les autres paramètres, tels que la taille. Vous pouvez également ajouter de nouveaux volumes.
Note
Si vous avez spécifié une AMI de base qui a été partagée avec vous depuis un autre compte, les instantanés de tous les volumes secondaires spécifiés doivent également être partagés avec votre compte.
Répertoire de travail
-
Chemin du répertoire de travail — Pre-filled, mais modifiable.
Éléments
Composants : les composants déjà inclus dans la recette sont affichés dans la section Composants sélectionnés à la fin de chacune des listes de composants (construction et test). Vous pouvez supprimer ou réorganiser les composants sélectionnés en fonction de vos besoins.
Les composants de durcissement CIS ne suivent pas les règles de classement des composants standard des recettes Image Builder. Les composants de renforcement CIS sont toujours exécutés en dernier pour garantir que les tests de référence s'exécutent par rapport à votre image de sortie.
Note
Les listes de composants de génération et de test affichent les composants disponibles en fonction du type de propriétaire du composant. Pour ajouter un composant, choisissez Ajouter des composants de construction, puis sélectionnez le filtre de propriété qui s'applique. Par exemple, pour ajouter un composant de construction associé à un AWS Marketplace produit, sélectionnez
AWS Marketplace. Cela ouvre un panneau de sélection sur le côté droit de l'interface de la console qui répertorie les AWS Marketplace composants.Pour le composant CIS, sélectionnez
Third party managed.Vous pouvez configurer les paramètres suivants pour le composant sélectionné :
-
Options de gestion des versions — Pre-selected, mais vous pouvez les modifier. Nous vous recommandons de choisir l'option Utiliser la dernière version de composant disponible pour vous assurer que vos compilations d'images reprennent toujours la dernière version du composant. Si vous devez utiliser une version de composant spécifique dans votre recette, vous pouvez choisir Spécifier la version du composant et saisir la version dans la zone Version du composant qui apparaît.
-
Paramètres d'entrée : affiche les paramètres d'entrée acceptés par le composant. La valeur est préremplie avec la valeur de la version précédente de la recette. Si vous utilisez ce composant pour la première fois dans cette recette et qu'une valeur par défaut a été définie pour le paramètre d'entrée, la valeur par défaut apparaît dans la zone Valeur avec du texte grisé. Si aucune autre valeur n'est saisie, Image Builder utilise la valeur par défaut.
Si un paramètre d'entrée est obligatoire, mais qu'aucune valeur par défaut n'est définie dans le composant, vous devez fournir une valeur. Image Builder ne créera pas la version de la recette s'il manque des paramètres requis et si aucune valeur par défaut n'est définie.
Important
Les paramètres des composants sont des valeurs en texte brut et sont connectés AWS CloudTrail. Nous vous recommandons d'utiliser AWS Secrets Manager le AWS Systems Manager Parameter Store pour stocker vos secrets. Pour plus d'informations sur Secrets Manager, voir Qu'est-ce que Secrets Manager ? dans le guide de AWS Secrets Manager l'utilisateur. Pour plus d'informations sur AWS Systems Manager Parameter Store, voir AWS Systems Manager Parameter Store dans le guide de AWS Systems Manager l'utilisateur.
Pour développer les paramètres des options de version ou des paramètres d'entrée, vous pouvez cliquer sur la flèche à côté du nom du paramètre. Pour étendre tous les paramètres de tous les composants sélectionnés, vous pouvez activer ou désactiver le bouton Tout étendre.
-
Modèle Dockerfile
-
Modèle Dockerfile — Pre-filled, mais modifiable. Vous pouvez spécifier n'importe laquelle des variables contextuelles suivantes, qu'Image Builder remplace par des informations de build lors de l'exécution.
- ParentImage (obligatoire)
-
Au moment de la création, cette variable devient l'image de base de votre recette.
Exemple :
FROM {{{ imagebuilder:parentImage }}} - environnements (obligatoire si des composants sont spécifiés)
-
Au moment de la création, cette variable correspond aux directives Dockerfile qui placent vos composants dans le contexte de construction. Ces directives copient les scripts des composants dans l'image et définissent les variables d'environnement utilisées par ces scripts. Il prépare l'environnement mais n'exécute pas les composants que vous spécifiez. Placez cette variable avant la
componentsvariable.Exemple :
{{{ imagebuilder:environments }}} - composants (facultatif)
-
Au moment de la génération, cette variable est convertie en commande qui exécute les scripts des composants de génération et de test pour les composants inclus dans la recette du conteneur, puis supprime ces scripts de l'image. Il s'agit de la variable qui exécute vos composants. Placez-le après la
environmentsvariable.Exemple :
{{{ imagebuilder:components }}}
Référentiel cible
-
Nom du référentiel cible : le référentiel Amazon ECR dans lequel votre image de sortie est stockée si aucun autre référentiel n'est spécifié dans la configuration de distribution de votre pipeline pour la région où le pipeline s'exécute (région 1).
Pour créer une nouvelle version de recette de conteneur :
-
Sur la page des détails de la recette du conteneur, choisissez Créer une nouvelle version en haut de la page. La console ouvre la page Créer une recette pour les recettes de conteneurs.
-
Pour créer la nouvelle version, apportez vos modifications, puis choisissez Créer une recette.
Pour plus d'informations sur la création d'une recette de conteneur lorsque vous créez un pipeline d'images, consultez la section Mise Étape 2 : Choisissez la recette en route de ce guide.
Créez une recette en pot avec le AWS CLI
Pour créer une recette de conteneur Image Builder à l'aide de la imagebuilder
create-container-recipe commande AWS CLI, procédez comme suit :
Conditions préalables
Avant d'exécuter les commandes Image Builder de cette section pour créer une recette de conteneur avec le AWS CLI, vous devez créer les composants que la recette utilisera. L'exemple de recette de conteneur présenté à l'étape suivante fait référence à des exemples de composants créés dans la Créez un composant personnalisé à partir du AWS CLI section de ce guide.
Après avoir créé vos composants, ou si vous utilisez des composants existants, notez les ARN que vous souhaitez inclure dans la recette.
-
Créer un fichier JSON d'entrée CLI
Vous pouvez fournir toutes les entrées de la create-container-recipe commande avec des paramètres de commande intégrés. Cependant, la commande qui en résulte peut être assez longue. Pour rationaliser la commande, vous pouvez plutôt fournir un fichier JSON contenant tous les paramètres des recettes du conteneur
Note
La convention de dénomination des valeurs de données dans le fichier JSON suit le modèle spécifié pour les paramètres de demande d'opération de l'API Image Builder. Pour consulter les paramètres de demande d'opération d'API, consultez la CreateContainerRecipecommande dans le manuel de référence de l'API EC2 Image Builder.
Pour fournir les valeurs de données sous forme de paramètres de ligne de commande, reportez-vous aux noms de paramètres spécifiés dans la référence des AWS CLI commandes.
Voici un résumé des paramètres de cet exemple :
-
composants (tableau d'objets, facultatif) — Contient un tableau d'
ComponentConfigurationobjets. Les composants sont facultatifs pour les recettes en contenant. Vous pouvez personnaliser l'image de sortie avec des composants BUILD, avec des instructions dans votre modèle Dockerfile (par exemple,RUNouCOPYdes instructions), ou les deux. Les composants TEST valident l'image mais ne la modifient pas.Note
Image Builder installe les composants dans l'ordre dans lequel vous les avez spécifiés dans la recette. Cependant, les composants de renforcement CIS s'exécutent toujours en dernier pour garantir que les tests de référence s'exécutent par rapport à votre image de sortie.
-
componentArn (string, obligatoire) — L'ARN du composant.
Astuce
Pour utiliser cet exemple afin de créer votre propre recette de conteneur, remplacez les ARN d'exemple par les ARN des composants que vous utilisez pour votre recette,. Il s'agit Région AWS notamment du nom et du numéro de version de chacun.
paramètres (tableau d'objets) — Contient un tableau d'
ComponentParameterobjets. Si un paramètre d'entrée est obligatoire, mais qu'aucune valeur par défaut n'est définie dans le composant, vous devez fournir une valeur. Image Builder ne créera pas la version de la recette s'il manque des paramètres requis et si aucune valeur par défaut n'est définie.Important
Les paramètres des composants sont des valeurs en texte brut et sont connectés AWS CloudTrail. Nous vous recommandons d'utiliser AWS Secrets Manager le AWS Systems Manager Parameter Store pour stocker vos secrets. Pour plus d'informations sur Secrets Manager, voir Qu'est-ce que Secrets Manager ? dans le guide de AWS Secrets Manager l'utilisateur. Pour plus d'informations sur AWS Systems Manager Parameter Store, voir AWS Systems Manager Parameter Store dans le guide de AWS Systems Manager l'utilisateur.
-
name (chaîne, obligatoire) — Nom du paramètre du composant à définir.
-
valeur (tableau de chaînes, obligatoire) — Contient un tableau de chaînes pour définir la valeur du paramètre de composant nommé. Si une valeur par défaut est définie pour le composant et qu'aucune autre valeur n'est fournie, AWSTOE utilise la valeur par défaut.
-
-
-
containerType (chaîne, obligatoire) — Type de conteneur à créer. Les valeurs valides incluent
DOCKER. -
dockerfile TemplateData (string) — Le modèle Dockerfile intégré pour créer votre image. Les données en ligne sont limitées à 16 000 caractères. Vous devez spécifier
dockerfileTemplateDataoudockerfileTemplateUri, mais pas les deux.Votre modèle Dockerfile peut inclure des variables contextuelles (espaces réservés qu'Image Builder remplace par des informations de build lors de l'exécution). Incluez au moins la
parentImagevariable. Si votre recette inclut des composants, incluez également laenvironmentsvariable et lacomponentsvariable.- ParentImage (obligatoire)
-
Au moment de la création, cette variable devient l'image de base de votre recette.
Exemple :
FROM {{{ imagebuilder:parentImage }}} - environnements (obligatoire si des composants sont spécifiés)
-
Au moment de la création, cette variable correspond aux directives Dockerfile qui placent vos composants dans le contexte de construction. Ces directives copient les scripts des composants dans l'image et définissent les variables d'environnement utilisées par ces scripts. Il prépare l'environnement mais n'exécute pas les composants que vous spécifiez. Placez cette variable avant la
componentsvariable.Exemple :
{{{ imagebuilder:environments }}} - composants (facultatif)
-
Au moment de la génération, cette variable est convertie en commande qui exécute les scripts des composants de génération et de test pour les composants inclus dans la recette du conteneur, puis supprime ces scripts de l'image. Il s'agit de la variable qui exécute vos composants. Placez-le après la
environmentsvariable.Exemple :
{{{ imagebuilder:components }}}
Pour stocker le modèle dans Amazon S3 à la place, utilisez le TemplateUri paramètre dockerfile avec un URI Amazon S3 valide (par exemple,
s3://).my-bucket/templates/Dockerfile -
name (chaîne, obligatoire) — Le nom de la recette du conteneur.
-
description (chaîne) — Description de la recette du conteneur.
-
parentImage (chaîne, obligatoire) — L'image du Docker conteneur à utiliser dans la recette du conteneur comme référence pour votre image personnalisée.
-
Images publiques hébergées sur DockerHub
-
Images de conteneurs existantes dans Amazon ECR
-
Amazon-managed images de conteneurs
-
-
PlatforMoverride (chaîne) — Spécifie la plate-forme du système d'exploitation lorsque vous utilisez une image de base personnalisée. Nous vous recommandons de définir cette valeur lorsque vous utilisez une image Docker Hub ou une image Amazon ECR. Si vous l'omettez, Image Builder tente de détecter la plate-forme à partir du manifeste du conteneur, qui n'est peut-être pas toujours disponible. Vous ne pouvez pas spécifier
platformOverridequand votre image parent est un ARN d'image Image Builder. Les valeurs valides sontLinuxetWindows. Les recettes de conteneurs ne sont pas compatibles avec la plateforme macOS. -
SemanticVersion <major>(chaîne, obligatoire) — La version sémantique de la recette de conteneur spécifiée au format suivant, avec des valeurs numériques à chaque position pour indiquer une version spécifique :. <minor>. <patch>. Un exemple serait
1.0.0. Pour en savoir plus sur le versionnement sémantique des ressources Image Builder, consultez. Versionnage sémantique dans Image Builder -
tags (string map) — Tags attachés à la recette du conteneur.
-
InstanceConfiguration (object) — Groupe d'options qui peuvent être utilisées pour configurer une instance afin de créer et de tester des images de conteneurs.
-
image (string) — L'image de base pour une instance de construction et de test de conteneur. Il peut contenir un ID AMI ou spécifier un paramètre de magasin de paramètres AWS Systems Manager (SSM), préfixé par
ssm:, suivi du nom du paramètre ou de l'ARN. Si vous utilisez un paramètre SSM, la valeur du paramètre doit contenir un ID d'AMI. Si vous ne spécifiez pas d'image de base, Image Builder utilise l'AMI optimisée Amazon ECS appropriée comme image de base. -
block DeviceMappings (tableau d'objets) : définit les périphériques de type bloc à associer pour créer une instance à partir de l'AMI Image Builder spécifiée dans le image paramètre.
-
DeviceName (chaîne) — Le périphérique auquel ces mappages s'appliquent.
-
ebs (object) — Utilisé pour gérer la configuration spécifique d'Amazon EBS pour ce mappage.
-
delete OnTermination (booléen) — Utilisé pour configurer la suppression à la fin de l'appareil associé.
-
crypté (booléen) — Utilisé pour configurer le chiffrement de l'appareil.
-
VolumeSize (entier) — Utilisé pour remplacer la taille du volume de l'appareil.
-
VolumeType (string) — Utilisé pour remplacer le type de volume du périphérique.
-
-
-
-
TargetRepository (objet, obligatoire) — Le référentiel de destination pour l'image du conteneur si aucun autre référentiel n'est spécifié dans la configuration de distribution de votre pipeline pour la région où le pipeline s'exécute (région 1).
-
RepositoryName (chaîne, obligatoire) — Nom du référentiel de conteneurs dans lequel l'image de conteneur de sortie est stockée. Ce nom est doté du préfixe de l'emplacement du référentiel.
-
service (chaîne, obligatoire) — Spécifie le service de référentiel qui stocke l'image de sortie. La valeur valide est
ECR. Le référentiel cible doit déjà exister.
-
-
WorkingDirectory (string) — Le répertoire de travail à utiliser lors des workflows de génération et de test.
L'exemple suivant montre un fichier d'entrée de recette de conteneur complet qui définit un Docker conteneur Linux avec des composants de build. Enregistrez-le sous
create-container-recipe.jsonet utilisez-le dans la create-container-recipe commande.{ "components": [ { "componentArn": "arn:aws:imagebuilder:us-west-2:111122223333:component/helloworldal2/x.x.x" } ], "containerType": "DOCKER", "description": "My Linux Docker container image", "dockerfileTemplateData": "FROM {{{ imagebuilder:parentImage }}}\n{{{ imagebuilder:environments }}}\n{{{ imagebuilder:components }}}", "name": "amazonlinux-container-recipe", "parentImage": "amazonlinux:latest", "platformOverride": "Linux", "semanticVersion": "1.0.2", "tags": { "sometag" : "Tag detail" }, "instanceConfiguration": { "image": "ami-1234567890abcdef1", "blockDeviceMappings": [ { "deviceName": "/dev/xvda", "ebs": { "deleteOnTermination": true, "encrypted": false, "volumeSize": 8, "volumeType": "gp2" } } ] }, "targetRepository": { "repositoryName": "myrepo", "service": "ECR" }, "workingDirectory": "/tmp" } -
-
Créez la recette
Utilisez la commande suivante pour créer la recette. Indiquez le nom du fichier JSON que vous avez créé à l'étape précédente dans le
--cli-input-jsonparamètre :aws imagebuilder create-container-recipe --cli-input-json file://create-container-recipe.jsonNote
-
Vous devez inclure l'option
file://au début du chemin du fichier JSON. -
Le chemin d'accès du fichier JSON doit suivre la convention appropriée pour le système d'exploitation de base sur lequel vous exécutez la commande. Par exemple, Windows utilise la barre oblique inverse (\) pour faire référence au chemin du répertoire, tandis que Linux et macOS utilisent la barre oblique (/).
L'exemple de sortie suivant montre l'ARN de la recette de conteneur nouvellement créée, ainsi que l'ID de demande et le jeton client pour la demande.
{ "requestId": "a1b2c3d4-5678-90ab-cdef-EXAMPLE11111", "clientToken": "a1b2c3d4-5678-90ab-cdef-EXAMPLE22222", "containerRecipeArn": "arn:aws:imagebuilder:us-west-2:123456789012:container-recipe/my-container-recipe/1.0.2" } -
Contraintes liées aux recettes des contenants
Passez en revue les contraintes suivantes avant de créer une recette de conteneur :
-
Vous devez spécifier un référentiel Amazon ECR cible qui existe déjà.
-
AWS Marketplace les composants ne sont pas pris en charge dans les recettes de conteneurs.
-
Les composants sont facultatifs. Vous pouvez personnaliser l'image de sortie avec des composants BUILD, avec des instructions dans votre modèle Dockerfile (par exemple,
RUNouCOPYdes instructions), ou les deux. Les composants TEST valident l'image mais ne la modifient pas. -
Les recettes de conteneurs ne sont pas compatibles avec la plateforme macOS.
-
Pour le modèle Dockerfile, fournissez soit des données intégrées (jusqu'à 16 000 caractères), soit un URI Amazon S3. Vous ne pouvez pas spécifier les deux.
-
La taille cumulée de la recette ne peut pas dépasser 25 Ko. Si vous recevez une erreur de taille, réduisez le nombre de paramètres du composant ou raccourcissez les valeurs des paramètres. Cette limite est distincte des limites de taille des modèles Dockerfile.
-
Lorsque vous définissez
platformOverridesurWindows, vous devez également spécifierimageOsVersionOverride. Cela s'applique à toute image parent n'appartenant pas à Image Builder, telle qu'une image Amazon ECR ou une Docker Hub image.
Erreurs courantes et résolution des problèmes
Le tableau suivant répertorie les erreurs courantes que vous pouvez rencontrer lors de la création d'une recette de conteneur, ainsi que la manière de les résoudre.
| Erreur | Cause | Résolution |
|---|---|---|
| « Les recettes en contenant ne doivent pas contenir de composants du marché » | AWS Marketplace Composant d'une recette contenant. | N'utilisez que des AWS Marketplace composants non constitutifs. |
| « Les recettes de conteneurs ne sont actuellement pas compatibles avec la plateforme macOS » | platformOverrideest réglé sur macOS. |
Utiliser Linux ou Windows. |
| « Vous devez spécifier soit un dockerfile, TemplateData soit un dockerfile » TemplateUri | Vous avez indiqué les deux ou aucun des deux. | Fournissez-en exactement un. |
| « URI S3 non valide » | Un chemin Amazon S3 mal formé dans. dockerfileTemplateUri |
Utilisez le format s3://. |
| « Vous ne pouvez pas spécifier un remplacement de plateforme lorsque vous utilisez une image Image Builder comme parent » | platformOverrideavec un ARN d'image Image Builder. |
Supprimez platformOverride. Image Builder détecte la plateforme à partir des métadonnées de l'image parent. |
| « Vous devez spécifier un remplacement d'image lorsque OsVersion vous utilisez les référentiels ECR comme image parent pour Windows Platform » | Une version Windows platformOverride sans système d'exploitation. |
Ajoutez le imageOsVersionOverride champ. |