Référence syntaxique du schéma pour les AWS CloudFormation Hooks - AWS CloudFormation

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.

Référence syntaxique du schéma pour les AWS CloudFormation Hooks

Cette section décrit la syntaxe du schéma que vous utilisez pour développer des AWS CloudFormation Hooks.

Un Hook inclut une spécification Hook représentée par un JSON schéma et des gestionnaires Hook. La première étape de la création d'un Hook personnalisé consiste à modéliser un schéma qui définit le Hook, ses propriétés et ses attributs. Lorsque vous initialisez un projet Hook personnalisé à l'aide du CloudFormation CLI initcommande, un fichier de schéma Hook est créé pour vous. Utilisez ce fichier de schéma comme point de départ pour définir la forme et la sémantique de votre Hook personnalisé.

Syntaxe du schéma

Le schéma suivant représente la structure d'un Hook.

{ "typeName": "string", "description": "string", "sourceUrl": "string", "documentationUrl": "string", "definitions": { "definitionName": { . . . } }, "typeConfiguration": { "properties": { "propertyName": { "description": "string", "type": "string", . . . }, }, "required": [ "propertyName" . . . ], "additionalProperties": false }, "handlers": { "preCreate": { "targetNames": [ ], "permissions": [ ] }, "preUpdate": { "targetNames": [ ], "permissions": [ ] }, "preDelete": { "targetNames": [ ], "permissions": [ ] } }, "additionalProperties": false }
typeName

Le nom unique de votre Hook. Spécifie un espace de noms en trois parties pour votre Hook, avec un modèle recommandé de. Organization::Service::Hook

Note

Les espaces de noms d'organisation suivants sont réservés et ne peuvent pas être utilisés dans les noms de vos types de Hook :

  • Alexa

  • AMZN

  • Amazon

  • ASK

  • AWS

  • Custom

  • Dev

Obligatoire : oui

Modèle : ^[a-zA-Z0-9]{2,64}::[a-zA-Z0-9]{2,64}::[a-zA-Z0-9]{2,64}$

Minimum : 10

Maximum : 196

description

Brève description du Hook affiché dans la CloudFormation console.

Obligatoire : oui

sourceUrl

Le code source URL du Hook, s'il est public.

Obligatoire : non

Maximum : 4096

documentationUrl

Le URL d'une page fournissant une documentation détaillée pour le Hook.

Obligatoire : oui

Modèle : ^https\:\/\/[0-9a-zA-Z]([-.\w]*[0-9a-zA-Z])(\:[0-9]*)*([\?/#].*)?$

Maximum : 4096

Note

Bien que le schéma Hook doive inclure des descriptions de propriétés complètes et précises, vous pouvez utiliser la documentationURL propriété pour fournir aux utilisateurs plus de détails, notamment des exemples, des cas d'utilisation et d'autres informations détaillées.

definitions

Utilisez le definitions bloc pour fournir des schémas de propriétés Hook partagés.

Il est considéré comme une bonne pratique d'utiliser cette definitions section pour définir des éléments de schéma qui peuvent être utilisés à plusieurs points de votre schéma de type Hook. Vous pouvez ensuite utiliser un JSON pointeur pour référencer cet élément aux endroits appropriés de votre schéma de type Hook.

Obligatoire : non

typeConfiguration

Définition des données de configuration d'un Hook.

Obligatoire : oui

properties

Les propriétés du Hook. Toutes les propriétés d'un Hook doivent être exprimées dans le schéma. Alignez les propriétés du schéma Hook avec les propriétés de configuration du type Hook.

Note

Les propriétés imbriquées ne sont pas autorisées. Définissez plutôt les propriétés imbriquées de l'definitionsélément et utilisez un $ref pointeur pour les référencer dans la propriété souhaitée.

additionalProperties

additionalProperties doit être défini sur false. Toutes les propriétés d'un Hook doivent être exprimées dans le schéma : les entrées arbitraires ne sont pas autorisées.

Obligatoire : oui

Valeurs valides : false

handlers

Les gestionnaires spécifient les opérations qui peuvent initier le Hook défini dans le schéma, telles que les points d'invocation du Hook. Par exemple, un preUpdate gestionnaire est invoqué avant les opérations de mise à jour pour toutes les cibles spécifiées dans le gestionnaire.

Valeurs valides : preCreate | preUpdate | preDelete

Note

Au moins une valeur doit être spécifiée pour le gestionnaire.

Important

Les opérations de pile qui se traduisent par le statut de UpdateCleanup n'invoquent pas de Hook. Par exemple, dans les deux scénarios suivants, le preDelete gestionnaire du Hook n'est pas invoqué :

  • la pile est mise à jour après la suppression d'une ressource du modèle.

  • une ressource dont le type de mise à jour est remplacé est supprimée.

targetNames

Un tableau de chaînes de noms de types que Hook cible. Par exemple, si un preCreate gestionnaire a une AWS::S3::Bucket cible, le Hook s'exécute pour les compartiments Amazon S3 pendant la phase de préapprovisionnement.

  • TargetName

    Spécifiez au moins un nom de cible pour chaque gestionnaire implémenté.

    Modèle : ^[a-zA-Z0-9]{2,64}::[a-zA-Z0-9]{2,64}::[a-zA-Z0-9]{2,64}$

    Minimum : 1

    Obligatoire : oui

    Avertissement

    SSM SecureString et les références dynamiques de Secrets Manager ne sont pas résolues avant d'être transmises à Hooks.

permissions

Un tableau de chaînes qui spécifie les AWS autorisations nécessaires pour appeler le gestionnaire.

Obligatoire : oui

additionalProperties

additionalProperties doit être défini sur false. Toutes les propriétés d'un Hook doivent être exprimées dans le schéma : les entrées arbitraires ne sont pas autorisées.

Obligatoire : oui

Valeurs valides : false

Exemples de schémas Hooks

Exemple 1

Les procédures pas à pas pour Java et Python utilisent l'exemple de code suivant. Voici un exemple de structure pour un Hook appelémycompany-testing-mytesthook.json.

{ "typeName":"MyCompany::Testing::MyTestHook", "description":"Verifies S3 bucket and SQS queues properties before create and update", "sourceUrl":"https://mycorp.com/my-repo.git", "documentationUrl":"https://mycorp.com/documentation", "typeConfiguration":{ "properties":{ "minBuckets":{ "description":"Minimum number of compliant buckets", "type":"string" }, "minQueues":{ "description":"Minimum number of compliant queues", "type":"string" }, "encryptionAlgorithm":{ "description":"Encryption algorithm for SSE", "default":"AES256", "type":"string" } }, "required":[ ], "additionalProperties":false }, "handlers":{ "preCreate":{ "targetNames":[ "AWS::S3::Bucket", "AWS::SQS::Queue" ], "permissions":[ ] }, "preUpdate":{ "targetNames":[ "AWS::S3::Bucket", "AWS::SQS::Queue" ], "permissions":[ ] }, "preDelete":{ "targetNames":[ "AWS::S3::Bucket", "AWS::SQS::Queue" ], "permissions":[ "s3:ListBucket", "s3:ListAllMyBuckets", "s3:GetEncryptionConfiguration", "sqs:ListQueues", "sqs:GetQueueAttributes", "sqs:GetQueueUrl" ] } }, "additionalProperties":false }

Exemple 2

L'exemple suivant est un schéma qui utilise le STACK et CAHNGE_SET pour targetNames pour cibler un modèle de pile et une opération d'ensemble de modifications.

{ "typeName":"MyCompany::Testing::MyTestHook", "description":"Verifies Stack and Change Set properties before create and update", "sourceUrl":"https://mycorp.com/my-repo.git", "documentationUrl":"https://mycorp.com/documentation", "typeConfiguration":{ "properties":{ "minBuckets":{ "description":"Minimum number of compliant buckets", "type":"string" }, "minQueues":{ "description":"Minimum number of compliant queues", "type":"string" }, "encryptionAlgorithm":{ "description":"Encryption algorithm for SSE", "default":"AES256", "type":"string" } }, "required":[ ], "additionalProperties":false }, "handlers":{ "preCreate":{ "targetNames":[ "STACK", "CHANGE_SET" ], "permissions":[ ] }, "preUpdate":{ "targetNames":[ "STACK" ], "permissions":[ ] }, "preDelete":{ "targetNames":[ "STACK" ], "permissions":[ ] } }, "additionalProperties":false }