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 代码位置的参数