Skip to content
GitHubXDiscordRSS

LambdaHook

Learn how to create, update, and manage AWS CloudFormation LambdaHooks using Alchemy Cloud Control.

The LambdaHook resource lets you manage AWS CloudFormation LambdaHooks for controlling the lifecycle of your CloudFormation stacks via AWS Lambda functions.

Create a basic LambdaHook with required properties and one optional property for stack filters.

import AWS from "alchemy/aws/control";
const simpleLambdaHook = await AWS.CloudFormation.LambdaHook("simpleLambdaHook", {
HookStatus: "ACTIVE",
Alias: "myLambdaHookAlias",
TargetOperations: ["Create", "Update"],
LambdaFunction: "arn:aws:lambda:us-west-2:123456789012:function:myLambdaFunction",
ExecutionRole: "arn:aws:iam::123456789012:role/myExecutionRole"
});

Configure a LambdaHook with advanced settings, including target filters and a failure mode.

const advancedLambdaHook = await AWS.CloudFormation.LambdaHook("advancedLambdaHook", {
HookStatus: "ACTIVE",
Alias: "myAdvancedLambdaHook",
StackFilters: {
Region: ["us-west-2"],
AccountId: ["123456789012"]
},
TargetOperations: ["Delete"],
TargetFilters: {
ResourceTypes: ["AWS::S3::Bucket"]
},
LambdaFunction: "arn:aws:lambda:us-west-2:123456789012:function:myAdvancedLambdaFunction",
ExecutionRole: "arn:aws:iam::123456789012:role/myAdvancedExecutionRole",
FailureMode: "ROLLBACK"
});

Create a LambdaHook that adopts an existing resource if it already exists.

const adoptingLambdaHook = await AWS.CloudFormation.LambdaHook("adoptLambdaHook", {
HookStatus: "ACTIVE",
Alias: "myAdoptLambdaHook",
TargetOperations: ["Update"],
LambdaFunction: "arn:aws:lambda:us-west-2:123456789012:function:myAdoptLambdaFunction",
ExecutionRole: "arn:aws:iam::123456789012:role/myAdoptExecutionRole",
adopt: true // Adopt existing resource instead of failing
});

Define a LambdaHook alongside an IAM policy for execution.

const lambdaExecutionRole = await AWS.IAM.Role("lambdaExecutionRole", {
AssumeRolePolicyDocument: {
Version: "2012-10-17",
Statement: [{
Effect: "Allow",
Principal: { Service: "lambda.amazonaws.com" },
Action: "sts:AssumeRole"
}]
},
Policies: [{
PolicyName: "LambdaHookPolicy",
PolicyDocument: {
Version: "2012-10-17",
Statement: [{
Effect: "Allow",
Action: ["cloudformation:DescribeStacks", "cloudformation:UpdateStack"],
Resource: "*"
}]
}
}]
});
const lambdaHookWithIAM = await AWS.CloudFormation.LambdaHook("lambdaHookWithIAM", {
HookStatus: "ACTIVE",
Alias: "myIAMLambdaHook",
TargetOperations: ["Create", "Update"],
LambdaFunction: "arn:aws:lambda:us-west-2:123456789012:function:myIAMLambdaFunction",
ExecutionRole: lambdaExecutionRole.Arn
});