amazon-web-services - 使用 CloudFormation Mapping 作为自定义资源 lambda 的环境变量

标签 amazon-web-services aws-lambda aws-cloudformation

我在 CloudFormation 模板中有一个映射,让我们说它是:

"Mappings" : {
    "RegionMap" : {
      "us-east-1" : { "Name" : "Aaaa" },
      "ap-northeast-1" : { "Name" : "Bbbb" }
    }
}

现在我想将此映射作为环境变量传递给此模板中的 lambda:

 "Environment": {
     "Variables": {
           "regions": {
                 "Ref": "RegionMap"
            }
     }
  }

但这给了我错误:

Template contains errors.: Template format error: Unresolved resource dependencies [RegionMap] in the Resources block of the template

有什么办法让它发挥作用吗?

最佳答案

CloudFormation 映射部分数据只能使用内部函数 Fn::FindInMap 来提取。这意味着您将无法将整个映射对象作为环境变量发送。此外,无论上下文如何,环境变量始终是字符串。 CloudFormation 必须以 json 或 yaml 或其他格式序列化此对象,这可能就是它不允许您这样做的原因。

话虽这么说,您可以自己执行此操作,您可以复制映射并将其转换为 json 字符串(带有转义引号等),并将值作为环境变量传递。然后,您可以在 Lambda 代码中将其转换回对象。

如果您的意图是创建 Custom Resource使用 Lambda 函数,然后您可以将整个 JSON 对象作为参数传递给资源。例如:

"AMIInfo": {
  "Type": "Custom::AMIInfo",
  "Properties": {
    "ServiceToken": { "Fn::GetAtt" : ["AMIInfoFunction", "Arn"] },
    "RegionMap" : {
      "us-east-1" : { "Name" : "Aaaa" },
      "ap-northeast-1" : { "Name" : "Bbbb" }
    }
  }
}

关于amazon-web-services - 使用 CloudFormation Mapping 作为自定义资源 lambda 的环境变量,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/46731464/

相关文章:

django - Apache 不会提供 Django 静态文件

amazon-web-services - 使用 SQS 触发器进行 Lambda 缩放

python - 如何使用 Terraform 将值列表传递到 Lambda 环境变量

amazon-web-services - 如何在AWS Lambda触发器云形成模板中提供多个SQS队列名称

amazon-web-services - 通过 AWS QuickSight 使用 AWS Athena 的查询结果是否存储在 S3 中?

amazon-web-services - 如何在链接到API Gateway的AWS Lambda函数中获取阶段名称

amazon-web-services - 适用于 AWS Inspector 的 AWS CloudFormation 模板是否可以添加 SNS 主题

aws-cloudformation - CloudFormation + 将子网添加到现有 VPC 中

json - 通过cloudformation创建IAM角色时policyName出错

json - 使用 Nodejs 将 DynamoDB 中的 map 结构插入到现有 map 中