def __init__()

in apigw-canary-deployment-cdk/app.py [0:0]


    def __init__(self, scope: cdk.Construct, construct_id: str, **kwargs) -> None:
        super().__init__(scope, construct_id, **kwargs)

        # Import Lambda ARN, REST API ID, and Method ARN from stack exports
        LAMBDA_ARN = cdk.Fn.import_value("MyLambdaFunction")
        API_ID = cdk.Fn.import_value("MyAPIGWID")
        METHOD_ARN = cdk.Fn.import_value("MyMethodArn")
        STAGE_NAME = cdk.Fn.import_value("MyStageName")

        # Import Lambda function from ARN
        lambda_fn = lambda_.Function.from_function_arn(self, 'lambda_fn', LAMBDA_ARN)

        # Create new function version
        version = lambda_.CfnVersion(
            self, "lambdaVersion",
            function_name=lambda_fn.function_name
        )

        # Save Versions when deleting stack for canary promotion and additional deployments
        version.apply_removal_policy(policy=cdk.RemovalPolicy.RETAIN)

        # Create Dev alias
        alias = lambda_.CfnAlias(
            self, "lambdaAlias",
            function_name=lambda_fn.function_name,
            function_version=version.attr_version,
            name="Dev"
        )

        # Add permissions for Dev alias
        permission = lambda_.CfnPermission(
            self, "aliasPermission",
            action="lambda:InvokeFunction",
            function_name=alias.ref,
            principal="apigateway.amazonaws.com",
            source_arn=METHOD_ARN.replace(
                STAGE_NAME, "*"
            )
        )

        # Create a canary deployment
        canary_deployment = apigateway.CfnDeployment(
            self, "CanaryDeployment",
            rest_api_id=API_ID,

            deployment_canary_settings=apigateway.CfnDeployment.DeploymentCanarySettingsProperty(
                percent_traffic=50,
                stage_variable_overrides={
                    "lambdaAlias": "Dev"
                }
            ),
            stage_name="prod"
        )