### Installation Source: https://github.com/aws-cloudformation/custom-resource-helper/blob/main/README.md Instructions on how to install the crhelper library into your Lambda function's root folder. ```shell cd my-lambda-function/ pip install crhelper -t . ``` -------------------------------- ### Example Usage Source: https://github.com/aws-cloudformation/custom-resource-helper/blob/main/README.md A comprehensive example demonstrating how to use the crhelper library for creating, updating, and deleting CloudFormation custom resources, including error handling and response data management. ```python from __future__ import print_function from crhelper import CfnResource import logging logger = logging.getLogger(__name__) # Initialise the helper, all inputs are optional, this example shows the defaults helper = CfnResource(json_logging=False, log_level='DEBUG', boto_level='CRITICAL', sleep_on_delete=120, ssl_verify=None) try: ## Init code goes here pass except Exception as e: helper.init_failure(e) @helper.create def create(event, context): logger.info("Got Create") # Optionally return an ID that will be used for the resource PhysicalResourceId, # if None is returned an ID will be generated. If a poll_create function is defined # return value is placed into the poll event as event['CrHelperData']['PhysicalResourceId'] # # To add response data update the helper.Data dict # If poll is enabled data is placed into poll event as event['CrHelperData'] helper.Data.update({"test": "testdata"}) # To return an error to cloudformation you raise an exception: if not helper.Data.get("test"): raise ValueError("this error will show in the cloudformation events log and console.") return "MyResourceId" @helper.update def update(event, context): logger.info("Got Update") # If the update resulted in a new resource being created, return an id for the new resource. # CloudFormation will send a delete event with the old id when stack update completes @helper.delete def delete(event, context): logger.info("Got Delete") # Delete never returns anything. Should not fail if the underlying resources are already deleted. # Desired state. @helper.poll_create def poll_create(event, context): logger.info("Got create poll") # Return a resource id or True to indicate that creation is complete. if True is returned an id # will be generated return True def handler(event, context): helper(event, context) ``` -------------------------------- ### AWS CDK template example Source: https://github.com/aws-cloudformation/custom-resource-helper/blob/main/README.md Example of using AWS CDK to deploy a Custom Resource that utilizes the Custom Resource Helper. ```python from aws_cdk import ( ... aws_lambda as _lambda, CustomResource, ) crhelperSumResource = _lambda.Function(...) customResource = CustomResource( self, 'MyCustomResource' serviceToken = crhelperSumResource.function_arn, properties = { 'No1': 1, 'No2': 2 }, ) ``` -------------------------------- ### Polling IAM Policy Source: https://github.com/aws-cloudformation/custom-resource-helper/blob/main/README.md The required IAM policy to attach to the Lambda function's role when using the polling feature for longer runtimes. ```json { "Version": "2012-10-17", "Statement": [ { "Effect": "Allow", "Action": [ "lambda:AddPermission", "lambda:RemovePermission", "events:PutRule", "events:DeleteRule", "events:PutTargets", "events:RemoveTargets" ], "Resource": "*" } ] } ``` === COMPLETE CONTENT === This response contains all available snippets from this library. No additional content exists. Do not make further requests.