(InvalidParameterCombination) 调用 RunInstances 操作时:参数 groupName 不能与参数子网

问题描述

the example in AWS-CLI documentation 之后,我尝试使用 AWS CLI 运行 EC2 实例,但出现错误

An error occurred (InvalidParameterCombination) when calling the RunInstances operation: The parameter groupName cannot be used with the parameter subnet

与其手动提取每条信息,我认为将它们设置为环境变量然后将它们传递给 docker run

export AMI_ID=ami-0b2ca94b5b49e0132
export KEY_NAME=$(aws ec2 describe-key-pairs --query 'KeyPairs[*].KeyName | [0]' --output text)
export SG_ID=$(aws ec2 describe-security-groups --filters Name=group-name,Values="my-sg" --query 'SecurityGroups[*].GroupId | [0]' --output text)
export subnet_ID=$(aws ec2 describe-subnets --query 'subnets[*].subnetId | [0]' --output text)
export VPC_ID=$(aws ec2 describe-vpcs --query 'Vpcs[*].VpcId | [0]' --output text)
docker run --rm -it -e AMI_ID -e KEY_NAME -e SG_ID -e subnet_ID -v ~/.aws:/root/.aws -v $(pwd):/aws amazon/aws-cli ec2 run-instances --image-id ${AMI_ID} --count 1 --instance-type t2.micro --key-name ${KEY_NAME} --security-group-ids ${SG_ID} --subnet-id ${subnet_ID}

到目前为止我发现的其他帖子表明问题在于使用 --security-groups 参数而不是 --security-group-ids 但我已经在使用后者所以我被卡住了。

解决方法

我仍然不确定以前的语法有什么问题,但是在声明环境变量时,它们被标记为附加字符,例如开头的 $' 和结尾的 \C-M'

export AMI_ID=ami-0b2ca94b5b49e0132
export KEY_NAME=`aws ec2 describe-key-pairs | jq -j '.KeyPairs[0].KeyName'`
export SG_ID=`aws ec2 describe-security-groups --filters Name=group-name,Values="my-sg"  | jq -j '.SecurityGroups[0].GroupId'`
export SUBNET_ID=`aws ec2 describe-subnets | jq -j '.Subnets[0].SubnetId'`

还有之前的 docker run 是臃肿的,因为在执行 docker run 之前环境变量被 shell 替换了,并且因为它们在图像中不再使用,所以它们不需要传递。所以较短的命令是

docker run --rm -it -v ~/.aws:/root/.aws -v $(pwd):/aws amazon/aws-cli ec2 run-instances --image-id $AMI_ID --count 1 --instance-type t2.micro --key-name $KEY_NAME --security-group-ids $SG_ID --subnet-id $SUBNET_ID

这对我有用。