Die vorliegende Übersetzung wurde maschinell erstellt. Im Falle eines Konflikts oder eines Widerspruchs zwischen dieser übersetzten Fassung und der englischen Fassung (einschließlich infolge von Verzögerungen bei der Übersetzung) ist die englische Fassung maßgeblich.
Erstellen Sie Lambda-Funktionen, um Ressourcen für Lambda Hooks auszuwerten
CloudFormation Mit Lambda Hooks können Sie Ihren eigenen benutzerdefinierten Code auswerten CloudFormation und anhand dessen AWS -Cloud-Control- API arbeiten. Ihr Hook kann den Fortgang eines Vorgangs blockieren oder eine Warnung an den Aufrufer ausgeben, sodass der Vorgang fortgesetzt werden kann. Wenn Sie einen Lambda-Hook erstellen, können Sie ihn so konfigurieren, dass er die folgenden CloudFormation Operationen abfängt und auswertet:
-
Ressourcenvorgänge
-
Operationen stapeln
-
Set-Operationen ändern
Themen
Entwicklung eines Lambda-Hooks
Wenn Hooks Ihr Lambda aufrufen, wartet es bis zu 30 Sekunden, bis das Lambda die Eingabe ausgewertet hat. Das Lambda gibt eine JSON-Antwort zurück, die angibt, ob der Hook erfolgreich war oder fehlgeschlagen ist.
Eingabe anfordern
Die an Ihre Lambda-Funktion übergebene Eingabe hängt von der Hook-Zieloperation ab (Beispiele: Stack, Ressource oder Änderungssatz).
Eingabe der Antwort
Um Hooks mitzuteilen, ob Ihre Anfrage erfolgreich war oder fehlgeschlagen ist, muss Ihre Lambda-Funktion eine JSON-Antwort zurückgeben.
Das Folgende ist ein Beispiel für die Form der Antwort, die Hooks erwartet:
{ "HookStatus": "SUCCESS" or "FAILED" or "IN_PROGRESS", "errorCode": "NonCompliant" or "InternalFailure" "Nachricht": String, "clientRequestToken": String, "Callback-Kontext": None, "callbackDelaySeconds": Integer, "Anmerkungen": [ { "annotationName": String, "status": "PASSED" or "FAILED" or "SKIPPED", "statusMessage": String, "remediationMessage": String, "remediationLink": String, "severityLevel": "INFORMATIONAL" or "LOW" or "MEDIUM" or "HIGH" or "CRITICAL" } ] }
- HookStatus
-
Der Status des Hooks. Dies ist ein Pflichtfeld.
Gültige Werte: (
SUCCESS|FAILED|IN_PROGRESS)Anmerkung
Ein Hook kann
IN_PROGRESSdreimal zurückkehren. Wenn kein Ergebnis zurückgegeben wird, schlägt der Hook fehl. Für einen Lambda-Hook bedeutet dies, dass Ihre Lambda-Funktion bis zu dreimal aufgerufen werden kann. - errorCode
-
Zeigt an, ob der Vorgang ausgewertet und für ungültig befunden wurde oder ob innerhalb des Hooks Fehler aufgetreten sind, die die Auswertung verhindert haben. Dieses Feld ist erforderlich, wenn der Hook fehlschlägt.
Gültige Werte: (
NonCompliant|InternalFailure) - Nachricht
-
Die Nachricht an den Aufrufer, die angibt, warum der Hook erfolgreich war oder fehlgeschlagen ist.
Anmerkung
Bei der Auswertung von CloudFormation Vorgängen wird dieses Feld auf 4096 Zeichen gekürzt.
Bei der Auswertung von Cloud Control API-Vorgängen wird dieses Feld auf 1024 Zeichen gekürzt.
- clientRequestToken
-
Das Anforderungstoken, das als Eingabe für die Hook-Anfrage bereitgestellt wurde. Dies ist ein Pflichtfeld.
- Callback-Kontext
-
Wenn Sie angeben, dass das
hookStatusist, übergebenIN_PROGRESSSie einen zusätzlichen Kontext, der als Eingabe bereitgestellt wird, wenn die Lambda-Funktion erneut aufgerufen wird. - callbackDelaySeconds
-
Wie lange Hooks warten sollten, um diesen Hook erneut aufzurufen.
- Anmerkungen
-
Eine Reihe von Annotationsobjekten, die weitere Details und Anleitungen zur Problembehebung enthalten.
- Name der Anmerkung
-
Ein Bezeichner für die Anmerkung.
- Status
-
Der Status des Hook-Aufrufs. Dies ist hilfreich, wenn Anmerkungen eine Logik mit Pass/Fail-Bewertung darstellen, die einer Guard-Regel ähnelt.
Gültige Werte: (| |)
PASSEDFAILEDSKIPPED - Statusmeldung
-
Erklärung für den spezifischen Status.
- Meldung zur Behebung
-
Vorschlag zur Behebung eines
FAILEDStatus. Wenn bei einer Ressource beispielsweise die Verschlüsselung fehlt, können Sie angeben, wie die Verschlüsselung zur Ressourcenkonfiguration hinzugefügt werden soll. - Link zur Behebung
-
Eine HTTP-URL für zusätzliche Anleitungen zur Problembehebung.
- severityLevel
-
Definiert das relative Risiko, das mit Verstößen dieser Art verbunden ist. Wenn Sie Ihren Hook-Aufrufergebnissen Schweregrade zuweisen, können Sie sich auf das AWS Security Hub Schweregradschema als Beispiel für die Strukturierung aussagekräftiger Schweregradkategorien beziehen.
Gültige Werte: (
INFORMATIONAL| |LOW|MEDIUM|HIGH)CRITICAL
Beispiele
Im Folgenden finden Sie ein Beispiel für eine erfolgreiche Antwort:
{ "hookStatus": "SUCCESS", "message": "compliant", "clientRequestToken": "123avjdjk31" }
Das Folgende ist ein Beispiel für eine fehlgeschlagene Antwort:
{ "hookStatus": "FAILED", "errorCode": "NonCompliant", "message": "S3 Bucket Versioning must be enabled.", "clientRequestToken": "123avjdjk31" }
Evaluierung von Ressourcenoperationen mit Lambda Hooks
Jedes Mal, wenn Sie eine Ressource erstellen, aktualisieren oder löschen, wird dies als Ressourcenvorgang betrachtet. Wenn Sie beispielsweise die Aktualisierung eines CloudFormation Stacks ausführen, der eine neue Ressource erstellt, haben Sie einen Ressourcenvorgang abgeschlossen. Wenn Sie eine Ressource mithilfe der Cloud Control API erstellen, aktualisieren oder löschen, wird dies ebenfalls als Ressourcenvorgang betrachtet. Sie können Ihren CloudFormation Lambda-Hook für Ziele RESOURCE und CLOUD_CONTROL Operationen in der TargetOperations Hook-Konfiguration konfigurieren.
Anmerkung
Der delete Hook-Handler wird nur aufgerufen, wenn eine Ressource mithilfe eines Operationstriggers von der Cloud Control API delete-resource oder gelöscht wird. CloudFormation delete-stack
Themen
Eingabesyntax für Lambda-Hook-Ressourcen
Wenn Ihr Lambda für einen Ressourcenvorgang aufgerufen wird, erhalten Sie eine JSON-Eingabe, die die Ressourceneigenschaften, die vorgeschlagenen Eigenschaften und den Kontext rund um den Hook-Aufruf enthält.
Im Folgenden finden Sie ein Beispiel für die Form der JSON-Eingabe:
{ "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": { "Aufruf": 1, "CallbackContext": null } }
awsAccountId-
Die ID der Ressource AWS-Konto , die ausgewertet wird, enthält.
stackId-
Die Stack-ID des CloudFormation Stacks, zu dem diese Operation gehört. Dieses Feld ist leer, wenn der Aufrufer die Cloud Control API ist.
changeSetId-
Die ID des Änderungssatzes, der den Hook-Aufruf initiiert hat. Dieser Wert ist leer, wenn die Ressourcenänderung durch die Cloud Control API oder die
create-stackdelete-stackOperationen, oder initiiert wurde.update-stack hookTypeName-
Der Name des Hooks, der gerade läuft.
hookTypeVersion-
Die Version des Hooks, der ausgeführt wird.
hookModel-
LambdaFunction-
Der aktuelle Lambda-ARN, der vom Hook aufgerufen wird.
actionInvocationPoint-
Der genaue Punkt in der Bereitstellungslogik, an dem der Hook ausgeführt wird.
Gültige Werte: (
CREATE_PRE_PROVISION|UPDATE_PRE_PROVISION|DELETE_PRE_PROVISION) requestData-
targetName-
Der Zieltyp, der ausgewertet wird, zum Beispiel
AWS::S3::Bucket. targetType-
Der Zieltyp, der ausgewertet wird, zum Beispiel
AWS::S3::Bucket. Für Ressourcen, die mit der Cloud Control API bereitgestellt wurden, lautet dieser Wert.RESOURCE targetLogicalId-
Die logische ID der Ressource, die ausgewertet wird. Wenn der Ursprung des Hook-Aufrufs ist CloudFormation, ist dies die logische Ressourcen-ID, die in Ihrer CloudFormation Vorlage definiert ist. Wenn der Ursprung dieses Hook-Aufrufs die Cloud Control API ist, handelt es sich um einen konstruierten Wert.
targetModel-
resourceProperties-
Die vorgeschlagenen Eigenschaften der Ressource, die geändert werden soll. Wenn die Ressource gelöscht wird, ist dieser Wert leer.
previousResourceProperties-
Die Eigenschaften, die derzeit der Ressource zugeordnet sind, die geändert wird. Wenn die Ressource erstellt wird, ist dieser Wert leer.
requestContext-
- Aufruf
-
Der aktuelle Versuch, den Hook auszuführen.
- CallbackContext
-
Wenn der Hook auf gesetzt war und zurückgegeben
callbackContextwurdeIN_PROGRESS, ist er nach dem erneuten Aufruf wieder da.
Beispiel für eine Eingabe zur Änderung der Lambda-Hook-Ressource
Die folgende Beispieleingabe zeigt einen Lambda-Hook, der die Definition der zu aktualisierenden AWS::DynamoDB::Table Ressource empfängt, wobei ReadCapacityUnits der Wert von 3 auf 10 geändert ProvisionedThroughput wird. Dies sind die Daten, die Lambda zur Auswertung zur Verfügung stehen.
{ "awsAccountId": "123456789012", "stackId": "arn:aws:cloudformation:us-west-2:123456789012:stack/MyStack/1a2345b6-0000-00a0-a123-00abc0abc000", "hookTypeName": "my::lambda::resourcehookfunction", "hookTypeVersion": "00000008", "hookModel": { "LambdaFunction": "arn:aws:lambda:us-west-2:123456789012:function:MyFunction" }, "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 } }
Alle für den Ressourcentyp verfügbaren Eigenschaften finden Sie unter AWS::DynamoDB::Table.
Beispiel für eine Lambda-Funktion für Ressourcenoperationen
Die folgende einfache Funktion schlägt bei jeder Ressourcenaktualisierung für DynamoDB fehl, bei der versucht wird, den Wert ReadCapacity von auf einen Wert größer als 10 ProvisionedThroughput zu setzen. Wenn der Hook erfolgreich ist, wird dem Aufrufer die Meldung "ReadCapacity ist korrekt konfiguriert“ angezeigt. Wenn die Anforderung nicht validiert werden kann, schlägt der Hook mit dem Status "ReadCapacity nicht mehr als 10“ fehl.
Auswertung von Stack-Operationen mit Lambda Hooks
Jedes Mal, wenn Sie einen Stack mit einer neuen Vorlage erstellen, aktualisieren oder löschen, können Sie Ihren CloudFormation Lambda-Hook so konfigurieren, dass er zunächst die neue Vorlage auswertet und möglicherweise die Fortsetzung des Stack-Vorgangs blockiert. Sie können Ihren CloudFormation Lambda-Hook in der TargetOperations Hook-Konfiguration so konfigurieren, dass er auf STACK Operationen abzielt.
Themen
Lambda Hook-Stack-Eingabesyntax
Wenn Ihr Lambda für einen Stack-Vorgang aufgerufen wird, erhalten Sie eine JSON-Anfrage, die den Hook-Aufrufkontext und den Anforderungskontext enthält. actionInvocationPoint Aufgrund der Größe der CloudFormation Vorlagen und der begrenzten Eingabegröße, die von Lambda-Funktionen akzeptiert wird, werden die tatsächlichen Vorlagen in einem Amazon S3 S3-Objekt gespeichert. Die Eingabe von requestData beinhaltet eine von Amazon S3 signierte URL zu einem anderen Objekt, das die aktuelle und vorherige Vorlagenversion enthält.
Das Folgende ist ein Beispiel für die Form der JSON-Eingabe:
{ "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-
Das Anforderungstoken, das als Eingabe für die Hook-Anfrage bereitgestellt wurde. Dies ist ein Pflichtfeld.
awsAccountId-
Die ID des Stacks AWS-Konto , der den ausgewerteten Stapel enthält.
stackID-
Die Stack-ID des CloudFormation Stacks.
changeSetId-
Die ID des Änderungssatzes, der den Hook-Aufruf initiiert hat. Dieser Wert ist leer, wenn die Stack-Änderung durch die Cloud Control API oder die
delete-stackOperationencreate-stackupdate-stack, oder initiiert wurde. hookTypeName-
Der Name des Hooks, der gerade läuft.
hookTypeVersion-
Die Version des Hooks, der ausgeführt wird.
hookModel-
LambdaFunction-
Der aktuelle Lambda-ARN, der vom Hook aufgerufen wird.
actionInvocationPoint-
Der genaue Punkt in der Bereitstellungslogik, an dem der Hook ausgeführt wird.
Gültige Werte: (
CREATE_PRE_PROVISION|UPDATE_PRE_PROVISION|DELETE_PRE_PROVISION) requestData-
targetName-
Dieser Wert wird sein
STACK. targetType-
Dieser Wert wird sein
STACK. targetLogicalId-
Der Name des Stacks.
payload-
Die vorsignierte Amazon S3 S3-URL, die ein JSON-Objekt mit den aktuellen und vorherigen Vorlagendefinitionen enthält.
requestContext-
Wenn der Hook erneut aufgerufen wird, wird dieses Objekt gesetzt.
invocation-
Der aktuelle Versuch, den Hook auszuführen.
callbackContext-
Wenn der Hook auf gesetzt war
IN_PROGRESSund zurückgegebencallbackContextwurde, wird er beim erneuten Aufruf hier angezeigt.
Die payload Eigenschaft in den Anforderungsdaten ist eine URL, die Ihr Code abrufen muss. Sobald es die URL erhalten hat, erhalten Sie ein Objekt mit dem folgenden Schema:
{ "template": String, "previousTemplate": String }
template-
Die vollständige CloudFormation Vorlage, die für
create-stackoder bereitgestellt wurdeupdate-stack. Je nachdem, wofür bereitgestellt wurde, kann es sich um CloudFormation eine JSON- oder YAML-Zeichenfolge handeln.Bei
delete-stackOperationen ist dieser Wert leer. previousTemplate-
Die vorherige CloudFormation Vorlage. Es kann sich um eine JSON- oder YAML-Zeichenfolge handeln, je nachdem, was bereitgestellt wurde. CloudFormation
Bei
delete-stackOperationen ist dieser Wert leer.
Beispiel für eine Lambda-Hook-Stack-Änderungseingabe
Im Folgenden finden Sie ein Beispiel für eine Stack-Change-Eingabe. Der Hook evaluiert eine Änderung, die das ObjectLockEnabled auf true aktualisiert und eine Amazon SQS SQS-Warteschlange hinzufügt:
{ "clientRequestToken": "f8da6d11-b23f-48f4-814c-0fb6a667f50e", "awsAccountId": "123456789012", "stackId": "arn:aws:cloudformation:us-west-2:123456789012:stack/MyStack/1a2345b6-0000-00a0-a123-00abc0abc000", "changeSetId": null, "hookTypeName": "my::lambda::stackhook", "hookTypeVersion": "00000008", "hookModel": { "LambdaFunction": "arn:aws:lambda:us-west-2:123456789012:function:MyFunction" }, "actionInvocationPoint": "UPDATE_PRE_PROVISION", "requestData": { "targetName": "STACK", "targetType": "STACK", "targetLogicalId": "my-cloudformation-stack", "payload": "https://s3......" }, "requestContext": { "invocation": 1, "callbackContext": null } }
Dies ist ein Beispiel payload für: 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}}}}" }
Beispiel für eine Lambda-Funktion für Stack-Operationen
Das folgende Beispiel ist eine einfache Funktion, die die Nutzdaten der Stack-Operation herunterlädt, die JSON-Vorlage analysiert und zurückgibt. SUCCESS
Evaluierung von Change-Set-Vorgängen mit Lambda Hooks
Jedes Mal, wenn Sie einen Änderungssatz erstellen, können Sie Ihren CloudFormation Lambda Hook so konfigurieren, dass er zuerst den neuen Änderungssatz auswertet und möglicherweise seine Ausführung blockiert. Sie können Ihren CloudFormation Lambda-Hook in der TargetOperations Hook-Konfiguration so konfigurieren, dass er auf CHANGE_SET Operationen abzielt.
Themen
Lambda Hook Change Set-Eingabesyntax
Die Eingabe für Änderungssatz-Operationen ähnelt Stack-Operationen, aber die Nutzlast von umfasst requestData auch eine Liste von Ressourcenänderungen, die durch den Änderungssatz eingeführt wurden.
Im Folgenden finden Sie ein Beispiel für die Form der JSON-Eingabe:
{ "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-
Das Anforderungstoken, das als Eingabe für die Hook-Anfrage bereitgestellt wurde. Dies ist ein Pflichtfeld.
awsAccountId-
Die ID des Stacks AWS-Konto , der den ausgewerteten Stapel enthält.
stackID-
Die Stack-ID des CloudFormation Stacks.
changeSetId-
Die ID des Änderungssatzes, der den Hook-Aufruf initiiert hat.
hookTypeName-
Der Name des Hooks, der gerade läuft.
hookTypeVersion-
Die Version des Hooks, der ausgeführt wird.
hookModel-
LambdaFunction-
Der aktuelle Lambda-ARN, der vom Hook aufgerufen wird.
requestData-
targetName-
Dieser Wert wird sein.
CHANGE_SET targetType-
Dieser Wert wird sein
CHANGE_SET. targetLogicalId-
Der Änderungssatz ARN..
payload-
Die vorsignierte Amazon S3 S3-URL, die ein JSON-Objekt mit der aktuellen Vorlage sowie eine Liste der durch diesen Änderungssatz eingeführten Änderungen enthält.
requestContext-
Wenn der Hook erneut aufgerufen wird, wird dieses Objekt gesetzt.
invocation-
Der aktuelle Versuch, den Hook auszuführen.
callbackContext-
Wenn der Hook auf gesetzt war
IN_PROGRESSund zurückgegebencallbackContextwurde, wird er beim erneuten Aufruf hier angezeigt.
Die payload Eigenschaft in den Anforderungsdaten ist eine URL, die Ihr Code abrufen muss. Sobald es die URL erhalten hat, erhalten Sie ein Objekt mit dem folgenden Schema:
{ "template": String, "changedResources": [ { "action": String, "beforeContext": JSON String, "afterContext": JSON String, "lineNumber": Integer, "logicalResourceId": String, "resourceType": String } ] }
template-
Die vollständige CloudFormation Vorlage, die für
create-stackoder bereitgestellt wurdeupdate-stack. Je nachdem, wofür bereitgestellt wurde, kann es sich um CloudFormation eine JSON- oder YAML-Zeichenfolge handeln. changedResources-
Eine Liste der geänderten Ressourcen.
action-
Die Art der Änderung, die auf die Ressource angewendet wurde.
Gültige Werte: (
CREATE|UPDATE|DELETE) beforeContext-
Eine JSON-Zeichenfolge der Ressourceneigenschaften vor der Änderung. Dieser Wert ist Null, wenn die Ressource erstellt wird. Alle booleschen Werte und Zahlenwerte in dieser JSON-Zeichenfolge sind STRINGS.
afterContext-
Eine JSON-Zeichenfolge der Ressourceneigenschaften, falls dieser Änderungssatz ausgeführt wird. Dieser Wert ist Null, wenn die Ressource gelöscht wird. Alle booleschen Werte und Zahlenwerte in dieser JSON-Zeichenfolge sind STRINGS.
lineNumber-
Die Zeilennummer in der Vorlage, die diese Änderung verursacht hat. Wenn die Aktion ist, ist
DELETEdieser Wert Null. logicalResourceId-
Die logische Ressourcen-ID der Ressource, die geändert wird.
resourceType-
Der Ressourcentyp, der geändert wird.
Beispiel für eine Lambda-Hook-Change-Set-Änderungseingabe
Im Folgenden finden Sie ein Beispiel für eine Änderungseingabe für einen Änderungssatz. Im folgenden Beispiel sehen Sie die Änderungen, die durch den Änderungssatz eingeführt wurden. Die erste Änderung ist das Löschen einer Warteschlange namensCoolQueue. Die zweite Änderung ist das Hinzufügen einer neuen Warteschlange namensNewCoolQueue. Die letzte Änderung ist ein Update fürDynamoDBTable.
{ "clientRequestToken": "f8da6d11-b23f-48f4-814c-0fb6a667f50e", "awsAccountId": "123456789012", "stackId": "arn:aws:cloudformation:us-west-2:123456789012:stack/MyStack/1a2345b6-0000-00a0-a123-00abc0abc000", "changeSetId": "arn:aws:cloudformation:us-west-2:123456789012:changeSet/SampleChangeSet/1a2345b6-0000-00a0-a123-00abc0abc000", "hookTypeName": "my::lambda::changesethook", "hookTypeVersion": "00000008", "hookModel": { "LambdaFunction": "arn:aws:lambda:us-west-2:123456789012:function:MyFunction" }, "actionInvocationPoint": "CREATE_PRE_PROVISION", "requestData": { "targetName": "CHANGE_SET", "targetType": "CHANGE_SET", "targetLogicalId": "arn:aws:cloudformation:us-west-2:123456789012:changeSet/SampleChangeSet/1a2345b6-0000-00a0-a123-00abc0abc000", "payload": "https://s3......" }, "requestContext": { "invocation": 1, "callbackContext": null } }
Dies ist ein Beispiel payload fürrequestData.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"}]}}' } ] }
Beispiel für eine Lambda-Funktion für Change-Set-Operationen
Das folgende Beispiel ist eine einfache Funktion, die die Nutzdaten der Change-Set-Operation herunterlädt, jede Änderung durchläuft und dann die Vorher-Nachher-Eigenschaften ausgibt, bevor sie eine zurückgibt. SUCCESS