CDK 添加随机参数

Posted

技术标签:

【中文标题】CDK 添加随机参数【英文标题】:CDK adds random parameters 【发布时间】:2020-09-02 23:28:40 【问题描述】:

所以我有这个函数,我正在尝试声明它,除非你取消注释 logRetention 设置,否则它可以正常工作和部署。如果指定logRetention cdk deploy 操作 向堆栈添加其他参数。当然,这种行为在文档中完全没有解释。

https://docs.aws.amazon.com/cdk/api/latest/docs/aws-lambda-readme.html#log-group

SingletonFunction.Builder.create(this, "native-lambda-s3-fun")
                        .functionName(funcName)
                        .description("")
                        // .logRetention(RetentionDays.ONE_DAY)
                        .handler("app")
                        .timeout(Duration.seconds(300))
                        .runtime(Runtime.GO_1_X)
                        .uuid(UUID.randomUUID().toString())
                        .environment(new HashMap<String, String>()
                            put("FILE_KEY", "/file/key");
                            put("S3_BUCKET", junk.getBucketName());
                        )
                        .code(Code.fromBucket(uploads, functionUploadKey(
                                "formation-examples",
                                "native-lambda-s3",
                                lambdaVersion.getValueAsString()
                        )))
                        .build();
"Parameters": 
    "lambdaVersion": 
      "Type": "String"
    ,
    "AssetParametersceefd938ac7ea929077f2e2f4cf09b5034ebdd14799216b1281f4b28427da40aS3BucketB030C8A8": 
      "Type": "String",
      "Description": "S3 bucket for asset \"ceefd938ac7ea929077f2e2f4cf09b5034ebdd14799216b1281f4b28427da40a\""
    ,
    "AssetParametersceefd938ac7ea929077f2e2f4cf09b5034ebdd14799216b1281f4b28427da40aS3VersionKey6A2AABD7": 
      "Type": "String",
      "Description": "S3 key for asset version \"ceefd938ac7ea929077f2e2f4cf09b5034ebdd14799216b1281f4b28427da40a\""
    ,
    "AssetParametersceefd938ac7ea929077f2e2f4cf09b5034ebdd14799216b1281f4b28427da40aArtifactHashEDC522F0": 
      "Type": "String",
      "Description": "Artifact hash for asset \"ceefd938ac7ea929077f2e2f4cf09b5034ebdd14799216b1281f4b28427da40a\""
    
  ,

【问题讨论】:

【参考方案1】:

这是一个bug。他们是Working On It™。所以,高兴吧 - 我们可能会在未来十年内的某个时候得到修复。


我还没有尝试过,但我猜解决方法是 manipulate 低级 CfnLogGroup 构造,因为它具有权威的 retentionInDays 属性。相关的高级日志组构造可能可以通过其logGroup property 从函数中获得。如果做不到这一点,则可以从头开始创建 LogGroup(这可能会让人头疼)。

【讨论】:

【参考方案2】:

我也遇到了上述问题。据我所知,我们是unable to specify a log group name,因此日志组名称是可预测的。

我的解决方案是简单地创建一个与我的 Lambda 函数同名并带有 /aws/lambda/ 前缀的 LogGroup。

例子:

var function = new Function(
    this,
    "Thing",
    new FunctionProps
    
        FunctionName = $"Stack.Of(this).StackName-Thing",
        // ...
    );

_ = new LogGroup(
    this,
    "ThingLogGroup",
    new LogGroupProps
    
        LogGroupName = $"/aws/lambda/function.FunctionName",
        Retention = RetentionDays.ONE_MONTH,
    );

这不会像 inline 选项那样创建不必要的“AssetParameters...”CF 模板参数。

注意:我在 C# 中使用 CDK 版本 1.111.0 和 1.86.0

【讨论】:

@Robert Hodgen 的解决方案对我有用。我正在使用带有 Python 的 CDK 版本 1.97.0。对我来说,在定义了 Lambda 之后,在定义 LogGroup 时,我可以参考函数的名称。无需在定义 Lambda 中指定硬编码名称。在生成的 CloudFormation 中,它使用 Lambda 函数的 Ref。

以上是关于CDK 添加随机参数的主要内容,如果未能解决你的问题,请参考以下文章

将安全字符串参数插入 ssm 参数存储的 CDK 和自动化?

AWS CDK,打字稿-“this”类型的参数不可分配给“Construct”类型的参数

AWS CDK - 多个堆栈 - 找不到 Lambda 代码位置的参数

AWS 跨账户 - 对 AWS CDK 中的参数的参数存储/Secrets Manager 访问

jmeter sql返回值随机获取进行参数化

随机搜索获取参数未实现