我写了一个Cloud Formation模板,启动了12台服务器。
我希望在创建每个新的AWS EC2实例时运行的用户数据脚本自动将规则添加到安全组。
如果我提前了解CIDR块,那么就像运行一样简单:
aws ec2 authorize-security-group-ingress \
--group-id $opsSG \
--ip-permissions '[{"IpProtocol": "-1", "IpRanges": [{"CidrIp": "172.53.0.0/16"}]}]' \
--region us-west-2
但是CIDR块保存在一个变量中,该变量由Cloud Formation堆栈创建填充。
所以我尝试了各种方法来添加此规则,但除非明确设置CIDR块(如上所示),否则它总是会失败。
这是我试过的:
--ip-permissions '[{"IpProtocol": "-1", "IpRanges": [{"CidrIp": "$vpccidr"}]}]' \
--region us-west-2
这就是我得到的错误:
An error occurred (InvalidParameterValue) when calling the AuthorizeSecurityGroupIngress operation: CIDR block $vpccidr is malformed
更多尝试:
echo """'[{\"IpProtocol\": \"-1\", \"IpRanges\": [{\"CidrIp\": \"$(echo $vpccidr)\"}]}]'""" > /tmp/1
然后:
aws ec2 authorize-security-group-ingress \
--group-id $opsSG \
--ip-permissions $(cat /tmp/1) \
--region us-west-2
aws ec2 authorize-security-group-ingress \
--group-id $opsSG \
--ip-permissions '[{"IpProtocol": "-1", "IpRanges": [{"CidrIp": "$(echo $vpccidr)"}]}]' \
--region us-west-2
aws ec2 authorize-security-group-ingress \
--group-id $opsSG \
--cli-input-json file:///tmp/1.json \
--region us-west-2
Error parsing parameter 'cli-input-json': Invalid JSON: No JSON object could be decoded
JSON received: '[{"IpProtocol": "-1", "IpRanges": [{"CidrIp": "172.53.0.0/16"}]}]'
无论我尝试什么,它都无法将规则添加到安全组。
有什么想法吗?