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.
Utiliser le cadre de documentation des AWSTOE composants pour les composants personnalisés
Pour créer un composant à l'aide de la structure de composants AWS Task Orchestrator and Executor (AWSTOE), vous devez fournir un document YAML basé qui représente les phases et les étapes applicables au composant que vous créez. Services AWS utilisent votre composant lorsqu'ils créent une nouvelle image de machine Amazon (AMI) ou une nouvelle image de conteneur.
Rubriques
- Flux de travail documentaire sur les composants
- Journalisation des composants
- Chainage des entrées et des sorties
- Schéma du document et définitions
- Exemples de schémas de documents
- Utiliser des variables dans votre document de composant personnalisé
- Utiliser des constructions conditionnelles dans AWSTOE
- Utiliser des opérateurs de comparaison dans les documents relatifs aux AWSTOE composants
- Utiliser des opérateurs logiques dans les documents relatifs aux AWSTOE composants
- Utiliser des constructions en boucle dans AWSTOE
Flux de travail documentaire sur les composants
Le document du AWSTOE composant utilise des phases et des étapes pour regrouper les tâches associées et organiser ces tâches dans un flux de travail logique pour le composant.
Astuce
Le service qui utilise votre composant pour créer une image peut implémenter des règles concernant les phases à utiliser pour son processus de génération et le moment où ces phases sont autorisées à s'exécuter. Il est important d'en tenir compte lors de la conception de votre composant.
Phases
Les phases représentent la progression de votre flux de travail tout au long du processus de création de l'image. Par exemple, le service Image Builder utilise build
et met en validate
phase les images qu'il produit au cours de sa phase de création. Il utilise les container-host-test
phases test
et au cours de sa phase de test pour s'assurer que l'instantané d'image ou l'image du conteneur produit les résultats attendus avant de créer l'image finale AMI ou de distribuer l'image du conteneur.
Lorsque le composant s'exécute, les commandes associées à chaque phase sont appliquées dans l'ordre dans lequel elles apparaissent dans le document du composant.
Règles pour les phases
-
Chaque nom de phase doit être unique dans un document.
-
Vous pouvez définir de nombreuses phases dans votre document.
-
Vous devez inclure au moins l'une des phases suivantes dans votre document :
-
build — pour Image Builder, cette phase est généralement utilisée pendant la phase de construction.
-
valider — pour Image Builder, cette phase est généralement utilisée pendant la phase de construction.
-
test — pour Image Builder, cette phase est généralement utilisée pendant la phase de test.
-
-
Les phases s'exécutent toujours dans l'ordre dans lequel elles sont définies dans le document. L'ordre dans lequel elles sont spécifiées pour AWSTOE les commandes du n' AWS CLI a aucun effet.
Étapes
Les étapes sont des unités de travail individuelles qui définissent le flux de travail au sein de chaque phase. Les étapes sont exécutées par ordre séquentiel. Cependant, l'entrée ou la sortie d'une étape peuvent également alimenter une étape suivante en tant qu'entrée. C'est ce qu'on appelle le « chaînage ».
Règles relatives aux étapes
-
Le nom de l'étape doit être unique pour la phase.
-
L'étape doit utiliser une action prise en charge (module d'action) qui renvoie un code de sortie.
Pour obtenir la liste complète des modules d'action pris en charge, leur fonctionnement, les valeurs d'entrée/sortie et des exemples, voir. Modules d'action pris en charge par le gestionnaire de AWSTOE composants
Journalisation des composants
AWSTOE crée un nouveau dossier journal sur les EC2 instances utilisées pour créer et tester une nouvelle image, chaque fois que votre composant s'exécute. Pour les images de conteneur, le dossier journal est stocké dans le conteneur.
Pour faciliter le dépannage en cas de problème lors du processus de création de l'image, le document d'entrée et tous les fichiers de sortie AWSTOE créés lors de l'exécution du composant sont stockés dans le dossier journal.
Le nom du dossier journal comprend les éléments suivants :
-
Répertoire des journaux : lorsqu'un service exécute un AWSTOE composant, il est transmis dans le répertoire des journaux, ainsi que les autres paramètres de la commande. Dans les exemples suivants, nous montrons le format de fichier journal utilisé par Image Builder.
-
Linux :
/var/lib/amazon/toe/
-
Windows :
$env:ProgramFiles\Amazon\TaskOrchestratorAndExecutor\
-
-
Préfixe de fichier — Il s'agit d'un préfixe standard utilisé pour tous les composants : « »
TOE_
. -
Durée d'exécution — Il s'agit d'un horodatage au format YYYY-MM-DD UTC _HH-MM-SS_ -0.
-
ID d'exécution : il s'agit de celui GUID qui est attribué lors de l' AWSTOE exécution d'un ou de plusieurs composants.
Exemple : /var/lib/amazon/toe/
TOE_2021-07-01_12-34-56_UTC-0
_a1bcd2e3-45f6-789a-bcde-0fa1b2c3def4
AWSTOE stocke les fichiers principaux suivants dans le dossier journal :
Fichiers d'entrée
-
document.yaml — Document utilisé comme entrée pour la commande. Une fois le composant exécuté, ce fichier est stocké sous forme d'artefact.
Fichiers de sortie
-
application.log — Le journal de l'application contient des informations horodatées AWSTOE sur le niveau de débogage indiquant ce qui se passe pendant l'exécution du composant.
-
detailedoutput.json — Ce JSON fichier contient des informations détaillées sur l'état d'exécution, les entrées, les sorties et les échecs pour tous les documents, phases et étapes applicables au composant lors de son exécution.
-
console.log — Le journal de la console contient toutes les informations de sortie standard (stdout) et d'erreur standard (stderr) écrites sur la console pendant l'exécution du composant. AWSTOE
-
chaining.json — Ce JSON fichier représente les optimisations AWSTOE appliquées pour résoudre les expressions de chaînage.
Note
Le dossier journal peut également contenir d'autres fichiers temporaires qui ne sont pas abordés ici.
Chainage des entrées et des sorties
L'application AWSTOE de gestion de configuration fournit une fonctionnalité permettant de chaîner les entrées et les sorties en écrivant des références dans les formats suivants :
{{ phase_name.step_name.inputs/outputs.variable
}}
or
{{ phase_name.step_name.inputs/outputs[index].variable
}}
La fonction de chaînage vous permet de recycler le code et d'améliorer la maintenabilité du document.
Règles pour le chaînage
-
Les expressions de chaînage ne peuvent être utilisées que dans la section des entrées de chaque étape.
-
Les instructions contenant des expressions de chaînage doivent être placées entre guillemets. Par exemple :
-
Expression non valide :
echo {{ phase.step.inputs.variable }}
-
Expression valide :
"echo {{ phase.step.inputs.variable }}"
-
Expression valide :
'echo {{ phase.step.inputs.variable }}'
-
-
Les expressions de chaînage peuvent faire référence à des variables issues d'autres étapes et phases du même document. Cependant, le service d'appel peut avoir des règles qui exigent que le chaînage des expressions ne fonctionne que dans le contexte d'une seule étape. Par exemple, Image Builder ne prend pas en charge le chaînage entre la phase de création et la phase de test, car il exécute chaque étape indépendamment.
-
Les index des expressions de chaînage suivent une indexation basée sur zéro. L'indice commence par zéro (0) pour référencer le premier élément.
Exemples
Pour faire référence à la variable source dans la deuxième entrée de l'étape d'exemple suivante, le modèle de chaînage est{{
build.
.SampleS3Download
.inputs[1].source
}}
phases: - name: 'build' steps: - name:
SampleS3Download
action: S3Download timeoutSeconds: 60 onFailure: Abort maxAttempts: 3 inputs: - source: 's3://sample-bucket
/sample1
.ps1' destination: 'C:\sample1
.ps1' - source: 's3://sample-bucket
/sample2
.ps1' destination: 'C:\sample2
.ps1'
Pour faire référence à la variable de sortie (égale à « Hello ») de l'étape d'exemple suivante, le modèle de chaînage est{{
build.
.SamplePowerShellStep
.outputs.stdout
}}
phases: - name: 'build' steps: - name:
SamplePowerShellStep
action: ExecutePowerShell timeoutSeconds: 120 onFailure: Abort maxAttempts: 3 inputs: commands: - 'Write-Host "Hello"'
Schéma du document et définitions
Le YAML schéma d'un document est le suivant.
name: (optional) description: (optional) schemaVersion: "string" phases: - name: "string" steps: - name: "string" action: "string" timeoutSeconds: integer onFailure: "Abort|Continue|Ignore" maxAttempts: integer inputs:
Les définitions de schéma d'un document sont les suivantes.
Champ | Description | Type | Obligatoire |
---|---|---|---|
name | Nom du document. | Chaîne | Non |
description | Description du document | Chaîne |
Non |
schemaVersion | Version du schéma du document, actuellement 1.0. | Chaîne |
Oui |
phases | Une liste des phases avec leurs étapes. |
Liste |
Oui |
Les définitions du schéma d'une phase sont les suivantes.
Champ | Description | Type | Obligatoire |
---|---|---|---|
name | Nom de la phase. | Chaîne | Oui |
steps | Liste des étapes de la phase. | Liste |
Oui |
Les définitions du schéma d'une étape sont les suivantes.
Champ | Description | Type | Obligatoire | Valeur par défaut |
---|---|---|---|---|
name | Nom défini par l'utilisateur pour l'étape. | Chaîne | ||
action | Mot-clé relatif au module qui exécute l'étape. | Chaîne | ||
timeoutSeconds |
Nombre de secondes pendant lesquelles l'étape s'exécute avant d'échouer ou de réessayer. Supporte également la valeur -1, ce qui indique un délai d'expiration infini. 0 et les autres valeurs négatives ne sont pas autorisées. |
Entier |
Non |
7 200 secondes (120 minutes) |
onFailure |
Spécifie ce que l'étape doit faire en cas d'échec. Les valeurs valides sont les suivantes :
|
Chaîne |
Non |
Interruption |
maxAttempts | Nombre maximum de tentatives autorisées avant d'échouer à l'étape. | Entier |
Non |
1 |
inputs | Contient les paramètres requis par le module d'action pour exécuter l'étape. | Dict |
Oui |
Exemples de schémas de documents
Voici un exemple de schéma de document pour installer toutes les mises à jour Windows disponibles, exécuter un script de configuration, valider les AMI modifications avant leur création et tester les modifications après AMI leur création.
name: RunConfig_UpdateWindows description: 'This document will install all available Windows updates and run a config script. It will then validate the changes before an AMI is created. Then after AMI creation, it will test all the changes.' schemaVersion: 1.0 phases: - name: build steps: - name: DownloadConfigScript action: S3Download timeoutSeconds: 60 onFailure: Abort maxAttempts: 3 inputs: - source: 's3://customer-bucket/config.ps1' destination: 'C:\config.ps1' - name: RunConfigScript action: ExecutePowerShell timeoutSeconds: 120 onFailure: Abort maxAttempts: 3 inputs: file: '{{build.DownloadConfigScript.inputs[0].destination}}' - name: Cleanup action: DeleteFile onFailure: Abort maxAttempts: 3 inputs: - path: '{{build.DownloadConfigScript.inputs[0].destination}}' - name: RebootAfterConfigApplied action: Reboot inputs: delaySeconds: 60 - name: InstallWindowsUpdates action: UpdateOS - name: validate steps: - name: DownloadTestConfigScript action: S3Download timeoutSeconds: 60 onFailure: Abort maxAttempts: 3 inputs: - source: 's3://customer-bucket/testConfig.ps1' destination: 'C:\testConfig.ps1' - name: ValidateConfigScript action: ExecutePowerShell timeoutSeconds: 120 onFailure: Abort maxAttempts: 3 inputs: file: '{{validate.DownloadTestConfigScript.inputs[0].destination}}' - name: Cleanup action: DeleteFile onFailure: Abort maxAttempts: 3 inputs: - path: '{{validate.DownloadTestConfigScript.inputs[0].destination}}' - name: test steps: - name: DownloadTestConfigScript action: S3Download timeoutSeconds: 60 onFailure: Abort maxAttempts: 3 inputs: - source: 's3://customer-bucket/testConfig.ps1' destination: 'C:\testConfig.ps1' - name: ValidateConfigScript action: ExecutePowerShell timeoutSeconds: 120 onFailure: Abort maxAttempts: 3 inputs: file: '{{test.DownloadTestConfigScript.inputs[0].destination}}'
Voici un exemple de schéma de document pour télécharger et exécuter un fichier binaire Linux personnalisé.
name: LinuxBin description: Download and run a custom Linux binary file. schemaVersion: 1.0 phases: - name: build steps: - name: Download action: S3Download inputs: - source: s3://<replaceable>amzn-s3-demo-source-bucket</replaceable>/<replaceable>myapplication</replaceable> destination: /tmp/<replaceable>myapplication</replaceable> - name: Enable action: ExecuteBash onFailure: Continue inputs: commands: - 'chmod u+x {{ build.Download.inputs[0].destination }}' - name: Install action: ExecuteBinary onFailure: Continue inputs: path: '{{ build.Download.inputs[0].destination }}' arguments: - '--install' - name: Delete action: DeleteFile inputs: - path: '{{ build.Download.inputs[0].destination }}'
Voici un exemple de schéma de document pour installer le AWS CLI sur une instance Windows à l'aide du fichier d'installation.
name: InstallCLISetUp description: Install &CLI; using the setup file schemaVersion: 1.0 phases: - name: build steps: - name: Download action: S3Download inputs: - source: s3://aws-cli/AWSCLISetup.exe destination: C:\Windows\temp\AWSCLISetup.exe - name: Install action: ExecuteBinary onFailure: Continue inputs: path: '{{ build.Download.inputs[0].destination }}' arguments: - '/install' - '/quiet' - '/norestart' - name: Delete action: DeleteFile inputs: - path: '{{ build.Download.inputs[0].destination }}'
Voici un exemple de schéma de document pour installer le à l' AWS CLI aide du MSI programme d'installation.
name: InstallCLIMSI description: Install &CLI; using the MSI installer schemaVersion: 1.0 phases: - name: build steps: - name: Download action: S3Download inputs: - source: s3://aws-cli/AWSCLI64PY3.msi destination: C:\Windows\temp\AWSCLI64PY3.msi - name: Install action: ExecuteBinary onFailure: Continue inputs: path: 'C:\Windows\System32\msiexec.exe' arguments: - '/i' - '{{ build.Download.inputs[0].destination }}' - '/quiet' - '/norestart' - name: Delete action: DeleteFile inputs: - path: '{{ build.Download.inputs[0].destination }}'