Json 使用bash和AWS CLI从所有区域解除关联并释放所有弹性IP地址的脚本

Json 使用bash和AWS CLI从所有区域解除关联并释放所有弹性IP地址的脚本,json,bash,amazon-ec2,aws-cli,Json,Bash,Amazon Ec2,Aws Cli,我正在学习如何使用AWS基础架构和CLI工具。我使用Russell Jurney编写的另一个CLI脚本终止了许多带有公共IP的EC2实例 我试图修改它来发布所有的公共IP,但由于我对脚本和json非常陌生,所以我无法理解这一点。如何在此脚本中寻址所有公共IP,并执行正确的循环以释放每个IP for region in `aws ec2 describe-regions | jq -r .Regions[].RegionName` do echo "Releasing Elastic IPs

我正在学习如何使用AWS基础架构和CLI工具。我使用Russell Jurney编写的另一个CLI脚本终止了许多带有公共IP的EC2实例

我试图修改它来发布所有的公共IP,但由于我对脚本和json非常陌生,所以我无法理解这一点。如何在此脚本中寻址所有公共IP,并执行正确的循环以释放每个IP

for region in `aws ec2 describe-regions | jq -r .Regions[].RegionName`
do
  echo "Releasing Elastic IPs in region $region..."
  for address in 'aws ecs describe-regions | jq -r .Regions[].RegionName[]'
  do
    aws ec2 disassociate-address --region $region | \
      jq -r .Reservations[].Instances[].PrivateIpAddress| \
        xargs -L 1 -I {} aws ec2 modify-instance-attribute \
          --region $region \
          --allocation-id {}\
          --public-ip {}
    aws ec2 release-address --region $region | \
      jq -r .Reservations[].Instances[].PrivateIpAddress | \
        xargs -L 1 -I {} aws ec2 terminate-instances \
          --region $region \
          --allocation-id {}
          --instance-id {}
  done
done

因此,你的目标是:

  • 解除所有区域和中所有公共IP的关联
  • 将它们全部释放回AWS池
  • 尝试下面的脚本,我无法尝试,因为我手头没有环境,但是,这应该可以工作。如果您遇到任何错误消息,请更新(清楚说明错误消息)


    你的代码有什么问题?
    for region in $(aws ec2 describe-regions --profile default --output text | cut -f4)
    do
    for address in $(aws ec2 describe-addresses --region $region --profile default --query 'Addresses[].AssociationId' --output text)
    do
    echo -e "Disassociating $address from $region now..."
    aws ec2 disassociate-address --association-id $address --region $region --profile default
    for pubip in $(aws ec2 describe-addresses --region $region --profile default --query 'Addresses[].PublicIp' --output text)
    do
    echo -e "Now Releasing the PublicIP $pubip from region $region"
    aws ec2 release-address --public-ip $pubip --region $region --profile default
    done
    done
    done