Sélectionner vos préférences de cookies

Nous utilisons des cookies essentiels et des outils similaires qui sont nécessaires au fonctionnement de notre site et à la fourniture de nos services. Nous utilisons des cookies de performance pour collecter des statistiques anonymes afin de comprendre comment les clients utilisent notre site et d’apporter des améliorations. Les cookies essentiels ne peuvent pas être désactivés, mais vous pouvez cliquer sur « Personnaliser » ou « Refuser » pour refuser les cookies de performance.

Si vous êtes d’accord, AWS et les tiers approuvés utiliseront également des cookies pour fournir des fonctionnalités utiles au site, mémoriser vos préférences et afficher du contenu pertinent, y compris des publicités pertinentes. Pour accepter ou refuser tous les cookies non essentiels, cliquez sur « Accepter » ou « Refuser ». Pour effectuer des choix plus détaillés, cliquez sur « Personnaliser ».

Créez des fonctions Lambda pour évaluer les ressources pour les Lambda Hooks

Mode de mise au point
Créez des fonctions Lambda pour évaluer les ressources pour les Lambda 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.

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.

AWS CloudFormation Lambda Hooks vous permet d'évaluer CloudFormation et d'effectuer AWS Cloud Control API des opérations par rapport à votre propre code personnalisé. Votre Hook peut bloquer le déroulement d'une opération ou envoyer un avertissement à l'appelant et autoriser le déroulement de l'opération. Lorsque vous créez un Lambda Hook, vous pouvez le configurer pour intercepter et évaluer les opérations suivantes : CloudFormation

  • Opérations de ressources

  • Opérations de pile

  • Modifier les opérations du set

Développement d'un hook Lambda

Lorsque les Hooks invoquent votre Lambda, le Lambda attend jusqu'à 30 secondes pour évaluer l'entrée. Le Lambda renverra une JSON réponse indiquant si le Hook a réussi ou échoué.

Demande d'entrée

L'entrée transmise à votre fonction Lambda dépend de l'opération cible Hook (exemples : stack, resource ou change set).

Entrée de réponse

Afin de communiquer à Hooks si votre demande a réussi ou échoué, votre fonction Lambda doit renvoyer une JSON réponse.

Voici un exemple de forme de la réponse attendue par Hooks :

{ "hookStatus": "SUCCESS" or "FAILED" or "IN_PROGRESS", "errorCode": None or "NonCompliant" or "InternalFailure" "message": String, "clientRequestToken": String "callbackContext": None, "callbackDelaySeconds": Integer, }
hookStatus

L'état du Hook. Ce champ est obligatoire.

Valeurs valides : (SUCCESS| FAILED |IN_PROGRESS)

Note

Un Hook peut revenir IN_PROGRESS 3 fois. Si aucun résultat n'est renvoyé, le Hook échouera. Pour un Lambda Hook, cela signifie que votre fonction Lambda peut être invoquée jusqu'à 3 fois.

errorCode

Indique si l'opération a été évaluée et jugée non valide, ou si des erreurs se sont produites dans le Hook, empêchant l'évaluation. Ce champ est obligatoire en cas d'échec du Hook.

Valeurs valides : (NonCompliant|InternalFailure)

message

Le message envoyé à l'appelant expliquant pourquoi le Hook a réussi ou échoué.

Note

Lors de l'évaluation CloudFormation des opérations, ce champ est tronqué à 4 096 caractères.

Lors de l'évaluation API des opérations Cloud Control, ce champ est tronqué à 1024 caractères.

clientRequestToken

Le jeton de demande qui a été fourni en entrée de la demande Hook. Ce champ est obligatoire.

callbackContext

Si vous indiquez que hookStatus c'est le cas, IN_PROGRESS vous transmettez un contexte supplémentaire fourni en entrée lorsque la fonction Lambda est réinvoquée.

callbackDelaySeconds

Combien de temps les Hooks doivent-ils attendre pour invoquer à nouveau ce Hook ?

Exemples

Voici un exemple de réponse réussie :

{ "hookStatus": "SUCCESS", "message": "compliant", "clientRequestToken": "123avjdjk31" }

Voici un exemple d'échec de réponse :

{ "hookStatus": "FAILED", "errorCode": "NON_COMPLIANT", "message": "S3 Bucket Versioning must be enabled.", "clientRequestToken": "123avjdjk31" }

Évaluation des opérations sur les ressources avec les Lambda Hooks

Chaque fois que vous créez, mettez à jour ou supprimez une ressource, cela est considéré comme une opération de ressource. Par exemple, si vous exécutez la mise à jour d'une CloudFormation pile qui crée une nouvelle ressource, vous avez terminé une opération sur la ressource. Lorsque vous créez, mettez à jour ou supprimez une ressource à l'aide de Cloud ControlAPI, cela est également considéré comme une opération de ressource. Vous pouvez configurer votre CloudFormation Lambda Hook en fonction du ciblage RESOURCE et CLOUD_CONTROL des opérations dans la configuration du HookTargetOperations.

Note

Le gestionnaire delete Hook n'est invoqué que lorsqu'une ressource est supprimée à l'aide d'un déclencheur d'opération depuis cloud-control delete-resource oucloudformation delete-stack.

Syntaxe d'entrée des ressources Lambda Hook

Lorsque votre Lambda est invoqué pour une opération sur une ressource, vous recevez une JSON entrée contenant les propriétés de la ressource, les propriétés proposées et le contexte de l'invocation de Hook.

Voici un exemple de forme de l'JSONentrée :

{ "awsAccountId": String, "stackId": String, "changeSetId": String, "hookTypeName": String, "hookTypeVersion": String, "hookModel": { "LambdaFunction": String }, "actionInvocationPoint": "CREATE_PRE_PROVISION" or "UPDATE_PRE_PROVISION" or "DELETE_PRE_PROVISION" "requestData": { "targetName": String, "targetType": String, "targetLogicalId": String, "targetModel": { "resourceProperties": {...}, "previousResourceProperties": {...} } }, "requestContext": { "invocation": 1, "callbackContext": null } }
awsAccountId

ID du Compte AWS contenant la ressource en cours d'évaluation.

stackId

L'ID de pile de la CloudFormation pile dont cette opération fait partie. Ce champ est vide si l'appelant est Cloud ControlAPI.

changeSetId

L'ID de l'ensemble de modifications qui a initié l'invocation de Hook. Cette valeur est vide si le changement de ressource a été initié par Cloud Control API ou par les delete-stack opérations create-stackupdate-stack, ou.

hookTypeName

Le nom du Hook en cours d'exécution.

hookTypeVersion

Version du Hook en cours d'exécution.

hookModel
LambdaFunction

Le Lambda actuel ARN invoqué par le Hook.

actionInvocationPoint

Point exact de la logique de provisionnement où le Hook s'exécute.

Valeurs valides : (CREATE_PRE_PROVISION| UPDATE_PRE_PROVISION |DELETE_PRE_PROVISION)

requestData
targetName

Nom de la ressource cible en cours de création.

targetType

Le type de cible en cours de création, par exempleAWS::S3::Bucket.

targetLogicalId

ID logique de la ressource en cours d'évaluation. Si l'origine de l'invocation de Hook est CloudFormation, il s'agira de l'ID de ressource logique défini dans votre CloudFormation modèle. Si l'origine de cette invocation de Hook est Cloud ControlAPI, il s'agira d'une valeur construite.

targetModel
resourceProperties

Les propriétés proposées pour la ressource en cours de modification. Si la ressource est supprimée, cette valeur sera vide.

previousResourceProperties

Les propriétés actuellement associées à la ressource en cours de modification. Si la ressource est créée, cette valeur sera vide.

requestContext
invocation

La tentative actuelle d'exécution du Hook.

callbackContext

Si le Hook a été réglé sur IN_PROGRESS et callbackContext a été renvoyé, il sera là après sa révocation.

Exemple d'entrée de modification de ressource Lambda Hook

Dans l'exemple de saisie suivant, le Guard Hook recevra la définition de la AWS::DynamoDB::Table ressource en cours de modification. Les ReadCapacityUnits paramètres ProvisionedThroughput et sont mis à jour de 3 à 10.

Pour plus d'informations sur les propriétés disponibles pour la ressource, voir AWS: :DynamoDB : :Table.

{ "awsAccountId": "123456789", "stackId": "arn:aws:cloudformation:eu-central-1:123456789:stack/test-stack/123456abcd", "hookTypeName": "my::lambda::resourcehookfunction", "hookTypeVersion": "00000008", "hookModel": { "LambdaFunction": "arn:aws:lambda:eu-central-1:123456789:function:resourcehookfunction" }, "actionInvocationPoint": "UPDATE_PRE_PROVISION", "requestData": { "targetName": "AWS::DynamoDB::Table", "targetType": "AWS::DynamoDB::Table", "targetLogicalId": "DDBTable", "targetModel": { "resourceProperties": { "AttributeDefinitions": [ { "AttributeType": "S", "AttributeName": "Album" }, { "AttributeType": "S", "AttributeName": "Artist" } ], "ProvisionedThroughput": { "WriteCapacityUnits": 5, "ReadCapacityUnits": 10 }, "KeySchema": [ { "KeyType": "HASH", "AttributeName": "Album" }, { "KeyType": "RANGE", "AttributeName": "Artist" } ] }, "previousResourceProperties": { "AttributeDefinitions": [ { "AttributeType": "S", "AttributeName": "Album" }, { "AttributeType": "S", "AttributeName": "Artist" } ], "ProvisionedThroughput": { "WriteCapacityUnits": 5, "ReadCapacityUnits": 5 }, "KeySchema": [ { "KeyType": "HASH", "AttributeName": "Album" }, { "KeyType": "RANGE", "AttributeName": "Artist" } ] } } }, "requestContext": { "invocation": 1, "callbackContext": null } }

Exemple de fonction Lambda pour les opérations sur les ressources

Voici un exemple de cibles Lambda Hook. Node.js Il s'agit d'une fonction simple qui échoue à toute mise à jour des ressources de DynamoDB, qui essaie de définir une valeur ProvisionedThroughput ReadCapacity supérieure à 10. Si le Hook réussit, le message « ReadCapacity  est correctement configuré » s'affichera à l'attention de l'appelant. Si la demande échoue à la validation, le Hook échouera avec le statut « ReadCapacity  ne peut pas être supérieur à 10 ».

export const handler = async (event, context) => { var targetModel = event?.requestData?.targetModel; var targetName = event?.requestData?.targetName; var response = { "hookStatus": "SUCCESS", "message": "ReadCapacity is correctly configured.", "clientRequestToken": event.clientRequestToken }; if (targetName == "AWS::DynamoDB::Table") { var readCapacity = targetModel?.resourceProperties?.ProvisionedThroughput?.ReadCapacityUnits; if (readCapacity > 10) { response.hookStatus = "FAILED"; response.errorCode = "NonCompliant"; response.message = "ReadCapacity must be cannot be more than 10."; } } return response; };

Évaluation des opérations de stack avec les Lambda Hooks

Chaque fois que vous créez, mettez à jour ou supprimez une pile avec un nouveau modèle, vous pouvez configurer votre CloudFormation Lambda Hook pour commencer par évaluer le nouveau modèle et éventuellement bloquer le déroulement de l'opération de pile. Vous pouvez configurer votre CloudFormation Lambda Hook pour cibler les STACK opérations dans la configuration HookTargetOperations.

Syntaxe d'entrée Lambda Hook Stack

Lorsque votre Lambda est invoqué pour une opération de pile, vous recevez une JSON demande contenant le contexte d'invocation Hook et le contexte de la demande. actionInvocationPoint En raison de la taille des CloudFormation modèles et de la taille d'entrée limitée acceptée par les fonctions Lambda, les modèles réels sont stockés dans un objet Amazon S3. L'entrée requestData inclut un Amazon S3 affecté URL à un autre objet, qui contient la version actuelle et précédente du modèle.

Voici un exemple de forme de l'JSONentrée :

{ "clientRequesttoken": String, "awsAccountId": String, "stackID": String, "changeSetId": String, "hookTypeName": String, "hookTypeVersion": String, "hookModel": { "LambdaFunction":String }, "actionInvocationPoint": "CREATE_PRE_PROVISION" or "UPDATE_PRE_PROVISION" or "DELETE_PRE_PROVISION" "requestData": { "targetName": "STACK", "targetType": "STACK", "targetLogicalId": String, "payload": String (S3 Presigned URL) }, "requestContext": { "invocation": Integer, "callbackContext": String } }
clientRequesttoken

Le jeton de demande qui a été fourni en entrée de la demande Hook. Ce champ est obligatoire.

awsAccountId

L'ID du Compte AWS contenant la pile en cours d'évaluation.

stackID

L'ID de pile de la CloudFormation pile.

changeSetId

L'ID de l'ensemble de modifications qui a initié l'invocation de Hook. Cette valeur est vide si le changement de pile a été initié par Cloud Control API ou par les delete-stack opérations create-stackupdate-stack, ou.

hookTypeName

Le nom du Hook en cours d'exécution.

hookTypeVersion

Version du Hook en cours d'exécution.

hookModel
LambdaFunction

Le Lambda actuel ARN invoqué par le Hook.

actionInvocationPoint

Point exact de la logique de provisionnement où le Hook s'exécute.

Valeurs valides : (CREATE_PRE_PROVISION| UPDATE_PRE_PROVISION |DELETE_PRE_PROVISION)

requestData
targetName

Cette valeur seraSTACK.

targetType

Cette valeur seraSTACK.

targetLogicalId

Nom de la pile.

payload

L'Amazon S3 présigné URL contient un JSON objet avec les définitions de modèles actuelles et précédentes.

requestContext

Si le Hook est réinvoqué, cet objet sera défini.

invocation

La tentative actuelle d'exécution du Hook.

callbackContext

Si le Hook a été réglé sur IN_PROGRESS et callbackContext a été renvoyé, il sera présent lors de sa révocation.

La payload propriété contenue dans les données de demande est URL celle que votre code doit récupérer. Une fois qu'il a reçu leURL, vous obtenez un objet avec le schéma suivant :

{ "template": String, "previousTemplate": String }
template

Le CloudFormation modèle complet qui a été fourni à create-stack ouupdate-stack. Il peut s'agir d'une YAML chaîne JSON ou d'une chaîne en fonction de ce qui a été fourni à CloudFormation.

Dans delete-stack les opérations, cette valeur sera vide.

previousTemplate

Le CloudFormation modèle précédent. Il peut s'agir d'une YAML chaîne JSON ou d'une chaîne en fonction de ce qui a été fourni à CloudFormation.

Dans delete-stack les opérations, cette valeur sera vide.

Exemple d'entrée de modification de la pile Lambda Hook

Voici un exemple d'entrée de changement de pile. The Hook évalue une modification qui met le à jour ObjectLockEnabled à true et ajoute une SQS file d'attente Amazon :

{ "clientRequestToken": "f8da6d11-b23f-48f4-814c-0fb6a667f50e", "awsAccountId": "123456789", "stackId": "arn:aws:cloudformation:eu-central-1:123456789:stack/david-ddb-test-stack/400b40f0-8e72-11ef-80ab-02f2902f0df1", "changeSetId": null, "hookTypeName": "my::lambda::stackhook", "hookTypeVersion": "00000008", "hookModel": { "LambdaFunction": "arn:aws:lambda:eu-central-1:123456789:function:stackhookfunction" }, "actionInvocationPoint": "UPDATE_PRE_PROVISION", "requestData": { "targetName": "STACK", "targetType": "STACK", "targetLogicalId": "my-cloudformation-stack", "payload": "https://s3......" }, "requestContext": { "invocation": 1, "callbackContext": null } }

Voici un exemple payload de requestData :

{ "template": "{\"Resources\":{\"S3Bucket\":{\"Type\":\"AWS::S3::Bucket\",\"Properties\":{\"ObjectLockEnabled\":true}},\"SQSQueue\":{\"Type\":\"AWS::SQS::Queue\",\"Properties\":{\"QueueName\":\"NewQueue\"}}}}", "previousTemplate": "{\"Resources\":{\"S3Bucket\":{\"Type\":\"AWS::S3::Bucket\",\"Properties\":{\"ObjectLockEnabled\":false}}}}" }

Exemple de fonction Lambda pour les opérations de stack

L'exemple suivant Lambda Hook cible. Node.js Il s'agit d'une fonction simple qui télécharge la charge utile de l'opération de pile, analyse le modèle et JSON renvoie. SUCCESS

export const handler = async (event, context) => { var targetType = event?.requestData?.targetType; var payloadUrl = event?.requestData?.payload; var response = { "hookStatus": "SUCCESS", "message": "Stack update is compliant", "clientRequestToken": event.clientRequestToken }; try { const templateHookPayloadRequest = await fetch(payloadUrl); const templateHookPayload = await templateHookPayloadRequest.json() if (templateHookPayload.template) { // Do something with the template templateHookPayload.template // JSON or YAML } if (templateHookPayload.previousTemplate) { // Do something with the template templateHookPayload.previousTemplate // JSON or YAML } } catch (error) { console.log(error); response.hookStatus = "FAILED"; response.message = "Failed to evaluate stack operation."; response.errorCode = "InternalFailure"; } return response; };

Évaluation des opérations relatives aux ensembles de modifications à l'aide de Lambda Hooks

Chaque fois que vous créez un ensemble de modifications, vous pouvez configurer votre CloudFormation Lambda Hook pour d'abord évaluer le nouvel ensemble de modifications et éventuellement bloquer son exécution. Vous pouvez configurer votre CloudFormation Lambda Hook pour cibler les CHANGE_SET opérations dans la configuration HookTargetOperations.

Lambda Hook modifie la syntaxe d'entrée du set

L'entrée pour les opérations d'ensemble de modifications est similaire à celle des opérations de pile, mais la charge utile des opérations inclut requestData également une liste des modifications de ressources introduites par l'ensemble de modifications.

Voici un exemple de forme de l'JSONentrée :

{ "clientRequesttoken": String, "awsAccountId": String, "stackID": String, "changeSetId": String, "hookTypeName": String, "hookTypeVersion": String, "hookModel": { "LambdaFunction":String }, "requestData": { "targetName": "CHANGE_SET", "targetType": "CHANGE_SET", "targetLogicalId": String, "payload": String (S3 Presigned URL) }, "requestContext": { "invocation": Integer, "callbackContext": String } }
clientRequesttoken

Le jeton de demande qui a été fourni en entrée de la demande Hook. Ce champ est obligatoire.

awsAccountId

ID du Compte AWS contenant la pile en cours d'évaluation.

stackID

L'ID de pile de la CloudFormation pile.

changeSetId

L'ID de l'ensemble de modifications qui a initié l'invocation de Hook.

hookTypeName

Le nom du Hook en cours d'exécution.

hookTypeVersion

Version du Hook en cours d'exécution.

hookModel
LambdaFunction

Le Lambda actuel ARN invoqué par le Hook.

requestData
targetName

Cette valeur seraCHANGE_SET.

targetType

Cette valeur seraCHANGE_SET.

targetLogicalId

Le kit de modificationsARN.

payload

L'Amazon S3 présigné URL contient un JSON objet avec le modèle actuel, ainsi qu'une liste des modifications introduites par cet ensemble de modifications.

requestContext

Si le Hook est réinvoqué, cet objet sera défini.

invocation

La tentative actuelle d'exécution du Hook.

callbackContext

Si le Hook a été réglé sur IN_PROGRESS et callbackContext a été renvoyé, il sera présent lors de sa révocation.

La payload propriété contenue dans les données de demande est URL celle que votre code doit récupérer. Une fois qu'il a reçu leURL, vous obtenez un objet avec le schéma suivant :

{ "template": String, "changedResources": [ { "action": String, "beforeContext": JSON String, "afterContext": JSON String, "lineNumber": Integer, "logicalResourceId": String, "resourceType": String } ] }
template

Le CloudFormation modèle complet qui a été fourni à create-stack ouupdate-stack. Il peut s'agir d'une YAML chaîne JSON ou d'une chaîne en fonction de ce qui a été fourni à CloudFormation.

changedResources

Liste des ressources modifiées.

action

Type de modification appliqué à la ressource.

Valeurs valides : (CREATE| UPDATE |DELETE)

beforeContext

JSONChaîne contenant les propriétés de la ressource avant la modification. Cette valeur est nulle lors de la création de la ressource. Toutes les valeurs booléennes et numériques de cette JSON chaîne sont. STRINGS

afterContext

JSONChaîne contenant les propriétés des ressources si cet ensemble de modifications est exécuté. Cette valeur est nulle lorsque la ressource est supprimée. Toutes les valeurs booléennes et numériques de cette JSON chaîne sont. STRINGS

lineNumber

Numéro de ligne du modèle à l'origine de cette modification. Si c'est le cas, DELETE cette valeur sera nulle.

logicalResourceId

ID de ressource logique de la ressource en cours de modification.

resourceType

Type de ressource en cours de modification.

Exemple : Lambda Hook change Set, change d'entrée

Voici un exemple d'entrée de modification d'ensemble de modifications. Dans l'exemple suivant, vous pouvez voir les modifications introduites par l'ensemble de modifications. La première modification consiste à supprimer une file d'attente appeléeCoolQueue. La deuxième modification consiste à ajouter une nouvelle file d'attente appeléeNewCoolQueue. La dernière modification est une mise à jour duDynamoDBTable.

{ "clientRequestToken": "f8da6d11-b23f-48f4-814c-0fb6a667f50e", "awsAccountId": "123456789", "stackId": "arn:aws:cloudformation:eu-central-1:123456789:stack/david-ddb-test-stack/400b40f0-8e72-11ef-80ab-02f2902f0df1", "changeSetId": "arn:aws:cloudformation:eu-central-1:123456789:changeSet/davids-change-set/59ebd63c-7c89-4771-a576-74c3047c15c6", "hookTypeName": "my::lambda::changesethook", "hookTypeVersion": "00000008", "hookModel": { "LambdaFunction": "arn:aws:lambda:eu-central-1:123456789:function:changesethookfunction" }, "actionInvocationPoint": "CREATE_PRE_PROVISION", "requestData": { "targetName": "CHANGE_SET", "targetType": "CHANGE_SET", "targetLogicalId": "arn:aws:cloudformation:eu-central-1:123456789:changeSet/davids-change-set/59ebd63c-7c89-4771-a576-74c3047c15c6", "payload": "https://s3......" }, "requestContext": { "invocation": 1, "callbackContext": null } }

Voici un exemple payload de requestData.payload :

{ template: 'Resources:\n' + ' DynamoDBTable:\n' + ' Type: AWS::DynamoDB::Table\n' + ' Properties:\n' + ' AttributeDefinitions:\n' + ' - AttributeName: "PK"\n' + ' AttributeType: "S"\n' + ' BillingMode: "PAY_PER_REQUEST"\n' + ' KeySchema:\n' + ' - AttributeName: "PK"\n' + ' KeyType: "HASH"\n' + ' PointInTimeRecoverySpecification:\n' + ' PointInTimeRecoveryEnabled: false\n' + ' NewSQSQueue:\n' + ' Type: AWS::SQS::Queue\n' + ' Properties:\n' + ' QueueName: "NewCoolQueue"', changedResources: [ { logicalResourceId: 'SQSQueue', resourceType: 'AWS::SQS::Queue', action: 'DELETE', lineNumber: null, beforeContext: '{"Properties":{"QueueName":"CoolQueue"}}', afterContext: null }, { logicalResourceId: 'NewSQSQueue', resourceType: 'AWS::SQS::Queue', action: 'CREATE', lineNumber: 14, beforeContext: null, afterContext: '{"Properties":{"QueueName":"NewCoolQueue"}}' }, { logicalResourceId: 'DynamoDBTable', resourceType: 'AWS::DynamoDB::Table', action: 'UPDATE', lineNumber: 2, beforeContext: '{"Properties":{"BillingMode":"PAY_PER_REQUEST","AttributeDefinitions":[{"AttributeType":"S","AttributeName":"PK"}],"KeySchema":[{"KeyType":"HASH","AttributeName":"PK"}]}}', afterContext: '{"Properties":{"BillingMode":"PAY_PER_REQUEST","PointInTimeRecoverySpecification":{"PointInTimeRecoveryEnabled":"false"},"AttributeDefinitions":[{"AttributeType":"S","AttributeName":"PK"}],"KeySchema":[{"KeyType":"HASH","AttributeName":"PK"}]}}' } ] }

Exemple de fonction Lambda pour les opérations d'ensemble de modifications

L'exemple suivant Lambda Hook cible. Node.js Il s'agit d'une fonction simple qui télécharge la charge utile de l'opération d'ensemble de modifications, passe en revue chaque modification, puis imprime les propriétés avant et après avant de renvoyer unSUCCESS.

export const handler = async (event, context) => { var payloadUrl = event?.requestData?.payload; var response = { "hookStatus": "SUCCESS", "message": "Change set changes are compliant", "clientRequestToken": event.clientRequestToken }; try { const changeSetHookPayloadRequest = await fetch(payloadUrl); const changeSetHookPayload = await changeSetHookPayloadRequest.json(); const changes = changeSetHookPayload.changedResources || []; for(const change of changes) { var beforeContext = {}; var afterContext = {}; if(change.beforeContext) { beforeContext = JSON.parse(change.beforeContext); } if(change.afterContext) { afterContext = JSON.parse(change.afterContext); } console.log(beforeContext) console.log(afterContext) // Evaluate Change here } } catch (error) { console.log(error); response.hookStatus = "FAILED"; response.message = "Failed to evaluate change set operation."; response.errorCode = "InternalFailure"; } return response; };
ConfidentialitéConditions d'utilisation du sitePréférences de cookies
© 2025, Amazon Web Services, Inc. ou ses affiliés. Tous droits réservés.