我想知道是否有人可以帮助我制作一个 shell 脚本来自动化 aws cli 进程:
1.创建安全组
2.设置角色到这个安全组端口22和端口80
3.使用此安全组创建一个 ec2 实例。
我已经做了一些事情,但还没有完全完成。
addSG=$ aws ec2 create-security-group --group-name plamenSG --description "Security group for SSH access" --vpc-id vpc-026278d069c2b6ffa
addRuleSG_22p=$ aws ec2 authorize-security-group-ingress --group-id sg-0032ab410f260ce27 --protocol tcp --port 22 --cidr 87.116.78.97/32
addRuleSG_80p=$ aws ec2 authorize-security-group-ingress --group-id sg-0032ab410f260ce27 --protocol tcp --port 80 --cidr 0.0.0.0/0
runEC2=$ aws ec2 run-instances --image-id ami-0c3083e7f17ee7441 --count 1 --instance-type t2.micro \
--key-name MyKeyPair --subnet-id subnet-05499bb79299f5868 --security-group-ids sg-0032ab410f260ce27 \
--user-data file://my_script.txt
从上面的代码中您可以看出,我们首先创建 SG,这通常是第一步。问题是,当我创建安全组时,我从命令中获得了安全组 ID 作为输出,我需要在行代码中用新 ID 替换旧安全组 ID。
关于此行代码 - --group-id sg-0032ab410f260ce27
我创建了一个变量,该变量获取第一个命令的输出,并将它代替 ID,如下所示:
addRuleSG_80p=$ aws ec2 authorize-security-group-ingress --group-id sg-$var --protocol tcp --port 80 --cidr 0.0.0.0/0
但我收到以下错误: 调用 AuthorizeSecurityGroupIngress 操作时发生错误 (InvalidGroupId.Malformed):安全组 ID“sg-”格式错误
任何想法?
答案1
awscli 的默认输出格式是 json。因此,您的aws ec2 create-security-group
命令将产生类似以下内容的输出:
{
"GroupId": "sg-903004f8"
}
您可以做的是使用类似工具来解析该 json jq
。
MYSG=$(aws ec2 create-security-group --group-name plamenSG \
--description "Security group for SSH access" \
--vpc-id vpc-026278d069c2b6ffa | jq -r '.GroupId')
希望这可以帮助。