Почему мой скрипт Boto3 работает только для моего профиля по умолчанию? - PullRequest
0 голосов
/ 14 марта 2020

Я написал это, чтобы перечислить экземпляры по значению тега Costcenter для нескольких регионов. Я передаю ему два аргумента в скрипт, профиль и div. Когда я меняю аргумент профиля, он продолжает использовать профиль по умолчанию. Я протестировал печать содержимого переменной и вижу, что данные в переменной - это то, что я передал. У меня есть несколько профилей, и я хотел бы иметь возможность запускать это для любого профиля, который я настроил.

import boto3, sys

def intances_by_tag(profile, div):
    ec2 = boto3.resource('ec2')
    boto3.session.Session(profile_name=profile)
    instances = ec2.instances.filter(
        Filters=[
            {'Name': 'tag:Costcenter', 'Values': [div]}
            ]
        )
    for x in instances:
        for tag in x.tags:
            if tag["Key"] == 'Name':
                a = tag["Value"]
        print('{}'.format(a))

intances_by_tag(str(sys.argv[1]), str(sys.argv[2]))

Ответы [ 2 ]

1 голос
/ 14 марта 2020
import boto3, sys

def intances_by_tag(profile, div):
    session = boto3.session.Session(profile_name=profile)
    ec2 = session.client('ec2')

    instances = ec2.instances.filter(
        Filters=[
            {'Name': 'tag:Costcenter', 'Values': [div]}
            ]
        )
    for x in instances:
        for tag in x.tags:
            if tag["Key"] == 'Name':
                a = tag["Value"]
        print('{}'.format(a))

intances_by_tag(str(sys.argv[1]), str(sys.argv[2]))

В приведенном ниже коде, как и в оригинале, будет использоваться автоматически созданный сеанс по умолчанию, а не сеанс, который вы хотите использовать в своем профиле.

boto3.resource('ec2')
0 голосов
/ 15 марта 2020

Когда я использовал ответ от Mon, скрипт не смог найти атрибуты экземпляра EC2. Вот что я сейчас использую:

import boto3, sys

profile = str(sys.argv[1])
boto3.setup_default_session(profile_name=profile)
ec2 = boto3.resource('ec2')
div = str(sys.argv[2])

def intances_by_tag(profile, div):
    instances = ec2.instances.filter(
        Filters=[
            {'Name': 'tag:Costcenter', 'Values': [div]}
        ]
    )
    for x in instances:
        for tag in x.tags:
            if tag["Key"] == 'Name':
                a = tag["Value"]
                print('{}'.format(a))

intances_by_tag(profile, div)
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...