繁体   English   中英

AWS CDK - 在 Lambda Function 中有条件地创建角色

[英]AWS CDK - Create role conditionally in Lambda Function

我正在尝试使用 AWS CDK 在 Python 中创建一个 Lambda function。 挑战在于,这个 function 的角色属性来自输入参数。 如果输入参数值为 ARN,则应在创建 lambda 时使用它。如果输入参数值为空字符串,则显式创建新角色并分配权限。 我能够通过分配一个虚拟角色 arn 然后再次分配它来让它工作。

myLambdaFunction = _lambda.CfnFunction(self, 
            id = "myFunction",
            function_name = "myLambdaFunction",
            description = My Lambda Function",
            memory_size = 1024,
            timeout = 30,
            vpc_config=_lambda.CfnFunction.VpcConfigProperty(
                security_group_ids=["sg-00000000000000000"],
                subnet_ids=["subnet-00000000"]
            ),
            runtime = "PYTHON_3_9",
            handler = "lambda-handler.main",
            code=_lambda.S3Code(
                bucket=my_lambda_code_bucket,
                key=inputParams.myLambdaFunctionPackage
            ),
            role = "arn:aws:iam::111111111111:role/Lambda-Role-DUMMY"
        )

myLambdaFunction.node.default_child.add_property_deletion_override("Role")
        myLambdaFunction.node.default_child.add_property_override(
            "Role",
            cdk.Fn.condition_if(
                "createrolecondition", 
                my_lambda_role.role_arn, 
                RoleARNFromInputParameter
            )
        )

这很好用。

但是,当我将事件源添加到此 lambda function 时,问题就开始了。它会自动尝试使用虚拟角色 11111 创建策略。

myLambdaFunction.add_event_source(
                _lambda_event_source.SqsEventSource(
                    my_queue,
                    batch_size=10
                )
            )

如果我在添加事件源后运行 cdk synth,它会自动添加一个新的 SQS 策略并允许 SQS 访问这个 lambda 并且它有这个甚至不存在的虚拟 Arn。

请建议在创建 lambda 时设置角色时是否有更好的使用条件的方法。

使用 CloudFormation 参数(部署时解析)的要求给 CDK 带来了复杂性,CDK 针对合成时解析进行了优化。 要支持参数条件性,您必须重复 OP 中的转义影线属性覆盖模式,以在参数值出现的任何地方注入CfnCondition

一种这样的情况是当您将 SQS 事件源添加到Function目标时。 CDK 使用this.queue.grantConsumeMessages(target); github 来源),您注意到这是有问题的。 因此,您需要将另一个CfnCondition注入到生成的策略资源中。 您也可以手动连接事件目标并从头开始创建您自己的权限,但这似乎并不容易。

有没有更好的办法? 避免参数

一般而言,我们建议不要将 AWS CloudFormation 参数与 AWS CDK 一起使用。 与上下文值或环境变量不同,这是将值传递到您的 AWS CDK 应用程序而无需对其进行硬编码的常用方法,参数值在合成时不可用,因此无法轻松地用于您的 AWS CDK 应用程序的其他部分,特别是对于控制流。

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM