amazon-web-services - CloudFormation 使用 FindInMap 连接字符串列表
问题描述
在从地图中获取字符串列表后,我遇到了 Cloudformation 加入字符串列表的问题。
导致的错误是安全组需要一个字符串列表。
"123456":
us-east-1:
#VPC1
VpcId: vpc-xxxx
VpcCidr: 10.78.160.0/20
SecurityGroups: sg-123
AvailabilityZones: us-east-1a,us-east-1b,us-east-1c
"123457":
us-east-1:
#VPC
VpcId: vpc-xxxx
VpcCidr: 10.78.160.0/20
SecurityGroups: sg-123,sg-124
AvailabilityZones: us-east-1a,us-east-1b,us-east-1c
LaunchConfig:
Type: AWS::AutoScaling::LaunchConfiguration
Metadata:
AWS::CloudFormation::Init:
config:
Properties:
InstanceType:
Ref: InstanceType
SecurityGroups: !Join [ ",", [!FindInMap [!Ref "AWS::AccountId", !Ref "AWS::Region", SecurityGroups], !Ref EC2SG ]]
IamInstanceProfile:
请让我知道如何获取安全组列表并将其添加到另一个资源
通过使用this question解决
解决方案
让我们进行映射:
Mappings:
"111222333444":
us-east-1:
SecurityGroups:
- sg-abc
- sg-xyz
us-west-2:
SecurityGroups:
- sg-1234
- sg-3456
安全组可以称为
SecurityGroupIds:
"Fn::FindInMap":
[!Ref AWS::AccountId, !Ref AWS::Region, SecurityGroups]
在映射中定义为数组并传递完整的数组,这样我们可以避免拆分和连接。
完整模板,在 Lambda 上测试
AWSTemplateFormatVersion: "2010-09-09"
Description: "Test"
Mappings:
"111222333444":
us-east-1:
SecurityGroups:
- sg-abc
- sg-xyz
us-west-2:
SecurityGroups:
- sg-1234
- sg-3456
Resources:
TestLambda:
Type: "AWS::Lambda::Function"
Properties:
Handler: com.test.MainClass::handleRequest
Runtime: java8
FunctionName: "Test-Lambda"
Code:
S3Bucket: code-bucket
S3Key: !Sub "artifacts/test.jar"
Description: "Test Lambda"
MemorySize: 512
Timeout: 60
Role: !Ref my-role-arn
VpcConfig:
SecurityGroupIds:
"Fn::FindInMap":
[!Ref AWS::AccountId, !Ref AWS::Region, SecurityGroups]
SubnetIds:
- subnet-1
- subnet-2
推荐阅读
- node.js - 在 NodeJS 中记录 API 调用
- android - Google Fit API 的 Datapoint 的 AppPackageName 与其他应用同步后更改
- reactjs - Create React App 模板中的测试脚本中的“it”函数是什么?
- selenium - Cucumber 中的逻辑 AND 和 OR 标签
- algorithm - 如何处理包含偶数个元素的子集?(使用分而治之找到峰值问题)
- javascript - 如何通过 AJAX 响应将值推送到数组中?
- python - 神经网络模型
- javascript - 随机彩色字母
- powershell - WSMan 工作,WinRM 运行,PSSession 无法解决任何问题,只是挂起
- java - 滑动磁贴不适用于动画图像