1

使用下面的代码,我可以创建和部署一个 lambda,但我想在每次执行部署时调用它。此代码在 github 操作工作流中运行。

import os

from aws_cdk import (
    core as cdk,
    aws_lambda as lambda_,
    aws_iam as iam,
    aws_stepfunctions as invoke
)

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

        lambda_fn = lambda_.Function(
            self, "DmsAutoFillLambda",
            code=lambda_.Code.from_asset(
                os.path.join(os.path.abspath("."), "lambda_function")
            ),
            handler="create_dms_backfill.event_handler",
            environment={
                'schema_name': os.getenv('schema_name', ''),
                'table_name': os.getenv('table_name', '')
            },
            timeout=cdk.Duration.seconds(ADD_EMR_STEP_LAMBDA_TIMEOUT),
            runtime=lambda_.Runtime.PYTHON_3_7,
        )

我也尝试过使用CustomResourcefromaws_cdk但它没有用,它只在创建之后运行 lambda(第一次创建 cloudformation 资源),而不是在每次调用 github 操作之后(在 cloudformation 上生成更新)资源)。

更新

我选择创建一个boto3用于调用 lambda 的脚本,并使用 Github Actions 进行调用。

我得出的结论CDK是更好地用于创建和管理基础设施作为代码,而boto3更好地操作这些创建的资源。

4

1 回答 1

1

如果有人发现这个问题,我想展示一种使用 cdk 的方法。

您可以使用AwsCustomResource堆栈调用 AWS 命令​​。

来自文档:https ://docs.aws.amazon.com/cdk/api/latest/docs/@aws-cdk_custom-resources.AwsCustomResource.html

定义使用特定 AWS API 调用实现的自定义资源。

使用它来弥补 CloudFormation Coverage 中可能存在的任何差距。您可以准确指定为“CREATE”、“UPDATE”和“DELETE”生命周期事件调用的调用。

此自定义资源将启动一个执行您指定的 aws cli 命令的 lambda 函数。

确保您的资源被授予调用该函数的权限。您可以通过分配策略或使用授权助手(https://docs.aws.amazon.com/cdk/api/latest/docs/@aws-cdk_custom-resources.AwsCustomResource.html#policy)来做到这一点:

自定义资源还实现了 iam.IGrantable,从而可以使用 grantXxx() 方法。

于 2021-11-16T16:41:33.863 回答