Execute AWS Lambda functions during deployment
Project description
Triggers
---Triggers allows you to execute code during deployments. This can be used for a variety of use cases such as:
- Self tests: validate something after a resource/construct been provisioned
- Data priming: add initial data to resources after they are created
- Preconditions: check things such as account limits or external dependencies before deployment.
Usage
The TriggerFunction
construct will define an AWS Lambda function which is
triggered during deployment:
import aws_cdk.aws_lambda as lambda_
import aws_cdk.triggers as triggers
from aws_cdk.core import Stack
# stack: Stack
triggers.TriggerFunction(stack, "MyTrigger",
runtime=lambda_.Runtime.NODEJS_12_X,
handler="index.handler",
code=lambda_.Code.from_asset(__dirname + "/my-trigger")
)
In the above example, the AWS Lambda function defined in myLambdaFunction
will
be invoked when the stack is deployed.
Trigger Failures
If the trigger handler fails (e.g. an exception is raised), the CloudFormation deployment will fail, as if a resource failed to provision. This makes it easy to implement "self tests" via triggers by simply making a set of assertions on some provisioned infrastructure.
Order of Execution
By default, a trigger will be executed by CloudFormation after the associated handler is provisioned. This means that if the handler takes an implicit dependency on other resources (e.g. via environment variables), those resources will be provisioned before the trigger is executed.
In most cases, implicit ordering should be sufficient, but you can also use
executeAfter
and executeBefore
to control the order of execution.
The following example defines the following order: (hello, world) => myTrigger => goodbye
.
The resources under hello
and world
will be provisioned in
parallel, and then the trigger myTrigger
will be executed. Only then the
resources under goodbye
will be provisioned:
from constructs import Construct, Node
import aws_cdk.triggers as triggers
# my_trigger: triggers.Trigger
# hello: Construct
# world: Construct
# goodbye: Construct
my_trigger.execute_after(hello, world)
my_trigger.execute_before(goodbye)
Note that hello
and world
are construct scopes. This means that they can
be specific resources (such as an s3.Bucket
object) or groups of resources
composed together into constructs.
Re-execution of Triggers
By default, executeOnHandlerChange
is enabled. This implies that the trigger
is re-executed every time the handler function code or configuration changes. If
this option is disabled, the trigger will be executed only once upon first
deployment.
In the future we will consider adding support for additional re-execution modes:
executeOnEveryDeployment: boolean
- re-executes every time the stack is deployed (add random "salt" during synthesis).executeOnResourceChange: Construct[]
- re-executes when one of the resources under the specified scopes has changed (add the hash the CloudFormation resource specs).
Project details
Release history Release notifications | RSS feed
Download files
Download the file for your platform. If you're not sure which to choose, learn more about installing packages.
Source Distribution
Built Distribution
Hashes for aws_cdk.triggers-1.171.0-py3-none-any.whl
Algorithm | Hash digest | |
---|---|---|
SHA256 | 3ecbf83d6de7aeb61732edb7ea5ed8ba31c34ee09e2f6b0a292495553813d43c |
|
MD5 | 633328d1909db35d1419841dd3999210 |
|
BLAKE2b-256 | 13f2f48a859b00f8a7e0a2663553883678d4ee5a334decd48d5f95e17437a1d9 |