我正在创建一个平台模块来支持AWS中的一个项目。大多数AWS资源使用虚线命名格式,而sid只接受字母数字字符,并且通常使用camelcasename。
我有一个模块,它接受bucket名称列表并创建s3 bucket。我想为那些具有描述性sid的人创建IAM语句,但我不想将其添加为开发人员可选择填充的另一个变量。
如何将s3-bucket-name
转换为S3BucketNameReadAccess
?
这不是最干净的解决方案,但没有更多的内在函数调用和自定义函数的可能性,那么我不确定存在什么其他最佳解决方案:
locals {
bucket_name = "s3-bucket-name"
bucket_sid = "${replace(title(replace(local.bucket_name, "-", " ")), " ", "")}ReadAccess"
}
- 内部
replace
将-
字符替换为单个空白字符。
title
转换第一个字母"每一个"词"(假设两者都有正则表达式匹配器)到大写- 外层
replace
删除单个空白字符(注意,内部函数存在用于删除字符串开头和/或结尾的空白字符,但不包括字符串内部)。
- 用字符串
ReadAccess
插入replace
的返回值。
您可以用output
自己确认local.bucket_sid
是期望的值。