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.
Enregistrer un Hook personnalisé avec CloudFormation
Une fois que vous avez créé un Hook personnalisé, vous devez l' CloudFormation enregistrer pour pouvoir l'utiliser. Dans cette section, vous allez apprendre à empaqueter et à enregistrer votre Hook pour l'utiliser dans votre Compte AWS.
Package d'un Hook (Java)
Si vous avez développé votre Hook avec Java, utilisez Maven pour le packager.
Dans le répertoire de votre projet Hook, exécutez la commande suivante pour créer votre Hook, exécuter des tests unitaires et empaqueter votre projet sous forme de JAR fichier que vous pouvez utiliser pour soumettre votre Hook au CloudFormation registre.
mvn clean package
Enregistrer un Hook personnalisé
Pour enregistrer un Hook
-
(Facultatif) Configurez votre Région AWS nom par défaut sur
us-west-2, en soumettant l'configureopération.$aws configureAWS Access Key ID [None]:<Your Access Key ID>AWS Secret Access Key [None]:<Your Secret Key>Default region name [None]:us-west-2Default output format [None]:json -
(Facultatif) La commande suivante crée et empaquette votre projet Hook sans l'enregistrer.
$cfn submit --dry-run -
Enregistrez votre Hook en utilisant l'submitopération CloudFormation CLI.
$cfn submit --set-defaultCette commande renvoie la commande suivante.
{‘ProgressStatus’: ‘COMPLETE’}Résultats : Vous avez enregistré votre Hook avec succès.
Vérifier que les Hooks sont accessibles dans votre compte
Vérifiez que votre Hook est disponible dans votre région Compte AWS et dans les régions auxquelles vous l'avez envoyé.
-
Pour vérifier votre Hook, utilisez la list-typescommande pour répertorier le Hook que vous venez d'enregistrer et renvoyer une description sommaire de celui-ci.
$aws cloudformation list-typesLa commande renvoie le résultat suivant et vous montrera également les Hooks accessibles au public que vous pouvez activer dans votre région Compte AWS et dans votre région.
{ "TypeSummaries": [ { "Type": "HOOK", "TypeName": "MyCompany::Testing::MyTestHook", "DefaultVersionId": "00000001", "TypeArn": "arn:aws:cloudformation:us-west-2:ACCOUNT_ID/type/hook/MyCompany-Testing-MyTestHook", "LastUpdated": "2021-08-04T23:00:03.058000+00:00", "Description": "Verifies S3 bucket and SQS queues properties before creating or updating" } ] } -
Récupérez le contenu
TypeArnde lalist-typesortie de votre Hook et enregistrez-le.export HOOK_TYPE_ARN=arn:aws:cloudformation:us-west-2:ACCOUNT_ID/type/hook/MyCompany-Testing-MyTestHook
Pour savoir comment publier des Hooks destinés à un usage public, consultezHooks de publication destinés à un usage public.
Configurer les Hooks
Après avoir développé et enregistré votre Hook, vous pouvez le configurer dans votre Hook en le Compte AWS publiant dans le registre.
-
Pour configurer un Hook dans votre compte, utilisez l'SetTypeConfigurationopération. Cette opération active les propriétés du hook définies dans la section
propertiesde schéma du hook. Dans l'exemple suivant, laminBucketspropriété est définie sur1dans la configuration.Note
En activant les Hooks dans votre compte, vous autorisez un Hook à utiliser les autorisations définies par votre Compte AWS. CloudFormation supprime les autorisations non requises avant de transmettre vos autorisations au Hook. CloudFormation recommande aux clients ou aux utilisateurs de Hook de consulter les autorisations Hook et de connaître les autorisations auxquelles les Hooks sont autorisés avant d'activer Hooks dans votre compte.
Spécifiez les données de configuration de votre extension Hook enregistrée dans le même compte et Région AWS.
$aws cloudformation set-type-configuration --region us-west-2 --configuration '{"CloudFormationConfiguration":{"HookConfiguration":{"HookInvocationStatus":"ENABLED","FailureMode":"FAIL","Properties":{"minBuckets": "1","minQueues": "1", "encryptionAlgorithm": "aws:kms"}}}}' --type-arn $HOOK_TYPE_ARNImportant
Pour permettre à votre Hook d'inspecter de manière proactive la configuration de votre stack, vous devez définir le
HookInvocationStatustoENABLEDdans laHookConfigurationsection, une fois que le Hook a été enregistré et activé dans votre compte.
Accès AWS APIs dans les gestionnaires
Si votre Hooks utilise une AWS API dans l'un de ses gestionnaires, le CFN-CLI crée automatiquement un modèle de rôle d'exécution IAM,. hook-role.yaml Le hook-role.yaml modèle est basé sur les autorisations spécifiées pour chaque gestionnaire dans la section du gestionnaire du schéma Hook. Si l'--role-arnindicateur n'est pas utilisé pendant l'generateopération, le rôle de cette pile sera provisionné et utilisé comme rôle d'exécution du Hook.
Pour plus d'informations, consultez la section Accès à AWS APIs partir d'un type de ressource.
modèle hook-role.yaml
Note
Si vous choisissez de créer votre propre rôle d'exécution, nous vous recommandons vivement de suivre le principe du moindre privilège en autorisant uniquement le listage hooks.cloudformation.amazonaws.com etresources.cloudformation.amazonaws.com.
Le modèle suivant utilise les autorisations IAM, Amazon S3 et Amazon SQS.
AWSTemplateFormatVersion: 2010-09-09 Description: > This CloudFormation template creates a role assumed by CloudFormation during Hook operations on behalf of the customer. Resources: ExecutionRole: Type: 'AWS::IAM::Role' Properties: MaxSessionDuration: 8400 AssumeRolePolicyDocument: Version: 2012-10-17 Statement: - Effect: Allow Principal: Service: - resources.cloudformation.amazonaws.com - hooks.cloudformation.amazonaws.com Action: 'sts:AssumeRole' Condition: StringEquals: aws:SourceAccount: !Ref AWS::AccountId StringLike: aws:SourceArn: !Sub arn:${AWS::Partition}:cloudformation:${AWS::Region}:${AWS::AccountId}:type/hook/MyCompany-Testing-MyTestHook/* Path: / Policies: - PolicyName: HookTypePolicy PolicyDocument: Version: 2012-10-17 Statement: - Effect: Allow Action: - 's3:GetEncryptionConfiguration' - 's3:ListBucket' - 's3:ListAllMyBuckets' - 'sqs:GetQueueAttributes' - 'sqs:GetQueueUrl' - 'sqs:ListQueues' Resource: '*' Outputs: ExecutionRoleArn: Value: !GetAtt - ExecutionRole - Arn