如何从资源名创建IAM SID ?



我正在创建一个平台模块来支持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是期望的值。

最新更新