【问题标题】:How to find ec2 instances running under particular VPC using boto3如何使用 boto3 查找在特定 VPC 下运行的 ec2 实例
【发布时间】:2021-05-09 11:30:56
【问题描述】:

我正在尝试创建一个脚本,该脚本可以在我以特定 VPC ID 运行的众多实例之一上卷曲。

假设我有 VPC ID 。那么我如何获取在此 VPC 下运行的所有 ec2 实例的列表,以及最终如何找到名为“test-ec2”的特定 ec2 实例。然后运行一个命令,例如。 "卷曲 ip_address_of_test-ec2"

我没用过boto3,所以不太了解。

任何可以解决此问题的建议。

【问题讨论】:

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


    【解决方案1】:

    您可以使用describe-instances 及其--filtersvpc-idtag:key 作为名称。

    例如,要获取给定 vpc 中的所有实例 ID:

    aws ec2 describe-instances \
      --filters Name=vpc-id,Values=<your-vpc-id> \
      --query 'Reservations[].Instances[].InstanceId' \
      --output text
    

    还要按名称过滤:

    aws ec2 describe-instances \
      --filters Name=vpc-id,Values=<your-vpc-id> \
                Name=tag:Name,Values=<instance-name> \
      --query 'Reservations[].Instances[].InstanceId' \
      --output text
    

    在boto3中,等效函数为describe_instances

    ec2 = boto3.client('ec2')
    
    r = ec2.describe_instances(Filters=[
            {
                'Name': 'vpc-id',
                'Values': ['<your-vpc-id>']
            },
            {
                'Name': 'tag:Name',
                'Values': ['<instance-name>']
            }  
        ])
    
    for reservation in r['Reservations']:
      for instance in reservation['Instances']:
        private_ip_addr = instance['PrivateIpAddress']
        print(private_ip_addr)
    
    

    【讨论】:

    • 再次非常感谢@Marcin,需要再澄清一下:这是否是找出实例的 ipaddress 然后卷曲到它的正确方法:` ec2info = defaultdict() 例如在 r : ipaddress = instance[unicode('PrivateIpAddress')] res = subprocess.check_output(['curl','ipaddress']) print(res) `
    • @Legitimate_Figure_4430 从 cmets 很难说,但为什么 curl。您可以使用 requests 库或 python 的内置工具来查询 url。你还需要私有IP地址还是公共IP地址?
    • 1.我需要私有 IP 地址 2。一个 API 正在那个 EC2 上运行,所以我想基本上卷曲它。您可以建议使用 api 的任何其他方式。 3. API URL 将类似于:ip_address/test
    • @Legitimate_Figure_4430 我更新了答案以展示如何遍历实例并获取它们的 IP 地址。如果答案有帮助,我们将不胜感激。
    • 谢谢 Marcin,我只是想知道为什么会这样:在 r['Reservations'] 中进行预订:.......2。这个说法是什么意思。是的,我会接受答案。非常感谢您的帮助
    猜你喜欢
    • 2016-07-29
    • 2017-08-11
    • 2018-07-19
    • 2020-09-30
    • 1970-01-01
    • 1970-01-01
    • 2021-11-10
    • 2015-12-28
    • 2018-04-07
    相关资源
    最近更新 更多