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 contenant
Cette section explique comment créer une recette en 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 à l'aide de la console
La création d'une nouvelle version d'une recette en contenant est pratiquement la même chose que 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 ou aucune sorte 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 d'image — Pre-selected, mais modifiable. Si vous modifiez le choix de la source de 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 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 AMI ou d'un paramètre de magasin de paramètres AWS Systems Manager (SSM) contenant un ID AMI.
-
ID AMI — Ce paramètre n'est pas prérempli avec votre saisie 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)
EBS volume 1 (racine AMI) — Pre-filled. Vous ne pouvez pas modifier le nom de l'appareil, l'instantané ou les sélections IOPS du volume racine. Vous pouvez toutefois modifier tous les paramètres restants, 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 renforcement CIS ne suivent pas les règles d'ordre standard des composants dans les recettes d'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 création 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 que vous avez 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 disponible du composant pour vous assurer que les builds de votre image utilisent 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 ou 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 le stockage des AWS Systems Manager paramètres, consultez la section 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 choisir 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 et désactiver le bouton Tout étendre.
-
Modèle Dockerfile
-
Modèle Dockerfile — Pre-filled, mais modifiable. Vous pouvez spécifier l'une des variables contextuelles suivantes qu'Image Builder remplace par les informations de génération lors de l'exécution.
- Image du parent (obligatoire)
-
Au moment de la création, cette variable correspond à l'image de base de votre recette.
Exemple :
FROM {{{ imagebuilder:parentImage }}} - environnements (obligatoire si des composants sont spécifiés)
-
Au moment de la génération, cette variable est résolue en fonction des directives Dockerfile qui placent vos composants dans le contexte de génération. Ces directives copient les scripts des composants dans l'image et définissent les variables d'environnement que ces scripts utilisent. 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 (en option)
-
Au moment de la génération, cette variable correspond à la commande qui exécute les scripts de génération et de test des composants 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 : référentiel Amazon ECR dans lequel est stockée votre image de sortie 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 contenant, choisissez Créer une nouvelle version en haut de la page. La console ouvre la page Créer une recette pour les recettes en conteneur.
-
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 Étape 2 : Choisissez la recette la section Démarrage de ce guide.
Créez une recette de contenant à l'aide du AWS CLI
Pour créer une recette de conteneur Image Builder à l'aide de la imagebuilder
create-container-recipe commande contenue dans le 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 contenant 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 en ligne. 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 de recette du conteneur
Note
La convention de dénomination des valeurs de données du fichier JSON suit le modèle spécifié pour les paramètres de demande d'opération de l'API Image Builder. Pour passer en revue les paramètres de demande de fonctionnement de l'API, consultez la CreateContainerRecipe commande dans le document 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 :
-
components (tableau d'objets, facultatif) — Contient un tableau d'
ComponentConfigurationobjets. Les composants sont facultatifs pour les recettes de contenants. Vous pouvez personnaliser l'image de sortie avec les 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 que vous avez indiqué dans la recette. Cependant, 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.
-
componentArn (chaîne, obligatoire) — L'ARN du composant.
Astuce
Pour utiliser l'exemple afin de créer votre propre recette de contenant, remplacez les exemples d'ARN 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 ou 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 le stockage des AWS Systems Manager paramètres, consultez la section AWS Systems Manager Parameter Store dans le Guide de AWS Systems Manager l'utilisateur.
-
name (chaîne, obligatoire) — Nom du paramètre de 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 en ligne 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 génération lors de l'exécution). Incluez au moins la
parentImagevariable. Si votre recette comprend des composants, incluez également laenvironmentsvariable et lacomponentsvariable.- Image du parent (obligatoire)
-
Au moment de la création, cette variable correspond à l'image de base de votre recette.
Exemple :
FROM {{{ imagebuilder:parentImage }}} - environnements (obligatoire si des composants sont spécifiés)
-
Au moment de la génération, cette variable est résolue en fonction des directives Dockerfile qui placent vos composants dans le contexte de génération. Ces directives copient les scripts des composants dans l'image et définissent les variables d'environnement que ces scripts utilisent. 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 (en option)
-
Au moment de la génération, cette variable correspond à la commande qui exécute les scripts de génération et de test des composants 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, utilisez plutôt 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 contenant.
-
description (chaîne) — Description de la recette du contenant.
-
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 parente est un ARN d'image Image Builder. Les valeurs valides sontLinuxetWindows. Les recettes de conteneurs ne sont pas compatibles avec la plate-forme macOS. -
<major>SemanticVersion (chaîne, obligatoire) — La version sémantique de la recette de conteneur spécifiée dans le 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 la gestion sémantique des versions pour les ressources Image Builder, consultez. Versionnage sémantique dans Image Builder -
tags (string map) — Tags attachés à la recette du contenant.
-
InstanceConfiguration (objet) : 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 d'une instance de création et de test de conteneur. Il peut contenir un ID AMI ou spécifier un paramètre AWS Systems Manager (SSM) Parameter Store, 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 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) — L'appareil 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 lors de la fermeture de l'appareil associé.
-
chiffré (booléen) — Utilisé pour configurer le chiffrement de l'appareil.
-
VolumeSize (entier) — Utilisé pour modifier la taille du volume de l'appareil.
-
VolumeType (chaîne) — Utilisé pour remplacer le type de volume de l'appareil.
-
-
-
-
TargetRepository (object, obligatoire) — Le référentiel de destination pour l'image du conteneur s'il n'y a aucun autre référentiel 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 en 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 (chaîne) — Le répertoire de travail à utiliser lors des flux de travail 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 construction. 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. Entrez 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 relatives aux recettes des contenants
Passez en revue les contraintes suivantes avant de créer une recette de contenant :
-
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 les 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 plate-forme macOS.
-
Pour le modèle Dockerfile, fournissez soit des données en ligne (16 000 caractères maximum), 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 des composants ou réduisez les valeurs des paramètres. Cette limite est distincte des limites de taille du modèle Dockerfile.
-
Lorsque vous définissez
platformOverridesurWindows, vous devez également spécifierimageOsVersionOverride. Cela s'applique à toute image parent autre qu'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 contenant, ainsi que la manière de les résoudre.
| Erreur | Cause | Résolution |
|---|---|---|
| « Les recettes de contenants ne doivent pas contenir de composants du marché » | Un AWS Marketplace composant d'une recette en 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 spécifié 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 de remplacement de plate-forme 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 parente. |
| « Vous devez spécifier un remplacement d'image OsVersion lorsque vous utilisez les référentiels ECR comme image parente pour la plate-forme Windows » | Une version Windows platformOverride sans système d'exploitation. |
Ajoutez le imageOsVersionOverride champ. |