Не уверен, лучше ли здесь или ТАК спросить об этом ...
Я пытаюсь разделить наши шаблоны CloudFormation, чтобы сделать их удобнее и меньше.
Я столкнулся с проблемой, когда я хочу использовать «базовый» шаблон группы безопасности, который по существу пуст, а затем указать его вместе с параметрами для каждой группы безопасности, которую мне нужно создать.
Моя проблема связана с заполнением частей «SecurityGroupIngress / Egress», поскольку они содержат массивы json, и, насколько я понимаю, вы можете передавать только строки или числа через параметры.
Вот пример;
Родительский стек:
{
"AWSTemplateFormatVersion": "2010-09-09",
"Description": "CloudFormation template to create all Security Groups",
"Resources": {
"CommonSecurityGroupStack" : {
"Type" : "AWS::CloudFormation::Stack",
"DependsOn": [
],
"Properties" : {
"TemplateURL" : "https://s3.template.url/template.name",
"TimeoutInMinutes" : "60",
"Parameters": {
"VPC" : { "Ref": "VPC" },
"VpcCidrRange": { "Ref": "VpcCidrRange" },
"SecurityGroupIngress": { "Something here" },
"SecurityGroupName": "CommonSecurityGroup"
}
}
}
}
}
Вложенный стек:
{
"AWSTemplateFormatVersion": "2010-09-09",
"Description": "CloudFormation template to create a security group",
"Parameters": {
"VPC": {
"Description": "Name of the VPC",
"Type": "String"
},
"GroupDescription": {
"Description": "Description of Security Group",
"Type": "String"
},
"SecurityGroupIngress" : {
"Description": "List of rules for the Security Group Ingress"
},
"VpcCidrRange": {
"Description": "CIDR IP range",
"Type": "String",
"MinLength": "9",
"MaxLength": "18",
"Default": "0.0.0.0/0",
"AllowedPattern": "(\\d{1,3})\\.(\\d{1,3})\\.(\\d{1,3})\\.(\\d{1,3})/(\\d{1,2})",
"ConstraintDescription": "must be a valid CIDR range of the form x.x.x.x/x."
},
"SecurityGroupName": {
"Description": "Name of the Security Group",
"Type": "String"
}
},
"Resources": {
"SecurityGroup": {
"DependsOn": [],
"Type": "AWS::EC2::SecurityGroup",
"Properties": {
"GroupDescription": { "Ref": "GroupDescription" },
"VpcId": {
"Ref": "VPC"
},
"SecurityGroupIngress": {"Ref" : "SecurityGroupIngress"},
"Tags": [
{
"Key": "Name",
"Value": { "Ref": "SecurityGroupName" }
}
]
}
}
}
}
Мне нужен способ передать что-то, эквивалентное следующему, в стек в качестве параметра для заполнения SecurityGroupIngress
свойство.
[
{
"IpProtocol": "tcp",
"FromPort": "22",
"ToPort": "22",
"CidrIp": {
"Ref": "VpcCidrRange"
}
},
{
"IpProtocol": "tcp",
"FromPort": "443",
"ToPort": "443",
"CidrIp": {
"Ref": "VpcCidrRange"
}
}
]
К сожалению, CloudFormation не так сложна. Вы ограничены типами данных, которые можно использовать в качестве параметров:
Вместо этого попробуйте следующее:
AWS::EC2::SecurityGroupIngress
ресурсы иСсылки: