【问题标题】:How to Stop EC2 Instance from the list如何从列表中停止 EC2 实例
【发布时间】:2021-03-01 18:07:02
【问题描述】:

我有下面的代码,它在本地运行良好,可以停止 EC2 实例,但是当我试图移动它的生产时,它只停止第一个实例而不是第二个/第 n 个实例

import boto3
import json

access_key = "AKIAJSVXXXXXXXXXX"
secret_key = "mSvhX5q7uw8dTZ543qtC6OXXXXXXXXXXXX"
client = boto3.client('ec2', aws_access_key_id=access_key, aws_secret_access_key=secret_key, region_name='us-east-1')
file1 = open("Myfile.txt", "r").read().split("\n")
print(file1)

ec2_result = client.describe_instances(
    Filters=[
        {
            'Name': 'tag:Name',
            'Values': file1
            
        }
    ]
)


ids = [ec2_result['Reservations'][0]['Instances'][i]['InstanceId'] for i in
       range(len(ec2_result['Reservations'][0]['Instances']))]
print(ids)
response = client.stop_instances(
    InstanceIds=ids
)

print("stooped now")

我的文件.txt

instanceonename
instance2name

它在我的本地系统中运行良好,但在生产中,它只停止第一个 EC2 实例 不是第二个

【问题讨论】:

  • 确保正确标记实例。确保您期望的标签在生产中与您期望的标签匹配。确保在您执行 print(ids) 时显示您期望的实例 ID
  • 打印显示的 ID ['instanceonename']
  • 再次检查您的标签。检查response 是否有任何信息/错误。检查未终止实例上的 Ec2 终止保护状态
  • 如果我在做 print(file1),它会显示 `` ['insatceone','instacne2', ' ']`` 虽然没有第三个实例
  • @rdas 如果我停止单独的实例,它在 prod 中工作得很好

标签: python amazon-web-services amazon-ec2 boto3 boto


【解决方案1】:

它只停止一个实例,因为您的列表理解只迭代一个实例。你需要 double

ids = [instance['InstanceId'] \
         for reservation in ec2_result['Reservations'] \
         for instance in reservation['Instances']]

【讨论】:

  • 你永远是我的向导/英雄,非常感谢你,它现在一如既往地工作,你让我很开心,谢谢先生,非常感谢
  • @RahultheSWE 没问题。很高兴它有效:-)
  • 但我想知道相同的代码在我的个人 aws 帐户中运行,但是当它是 prod 时它正在显示这个东西
  • @RahultheSWE 也许是因为您在 prod 帐户中有一个实例?很难推测。最重要的是,它现在可以工作了。
  • 我在 prod 中有 4000 多个实例 :)
猜你喜欢
  • 2015-11-15
  • 2012-11-27
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2013-10-30
  • 1970-01-01
  • 2022-11-18
相关资源
最近更新 更多