Как вызвать функцию Lambda во всех регионах AWS? - PullRequest
0 голосов
/ 28 ноября 2018

У меня есть ниже лямбда-функция, которая останавливает все экземпляры Ec-2 с тегом AutoOff_uat.Если я хочу запустить эту лямбду в двух регионах: us-east-1 и us-east-2.какие изменения мне нужно сделать

import boto3
import logging

#setup simple logging for INFO
logger = logging.getLogger()
logger.setLevel(logging.INFO)

#define the connection
ec2 = boto3.resource('ec2')



def lambda_handler(event, context):
# Use the filter() method of the instances collection to retrieve
# all running EC2 instances.
filters = [{
        'Name': 'tag:AutoOff_uat',
        'Values': ['True']
    },
    {
        'Name': 'instance-state-name', 
        'Values': ['running']
    }
]

#filter the instances
instances = ec2.instances.filter(Filters=filters)

#locate all running instances
RunningInstances = [instance.id for instance in instances]

#print the instances for logging purposes
#print RunningInstances 

#make sure there are actually instances to shut down. 
if len(RunningInstances) > 0:
    #perform the shutdown
    shuttingDown = ec2.instances.filter(InstanceIds=RunningInstances).stop()
    print shuttingDown
else:
    print "Nothing to see here"

1 Ответ

0 голосов
/ 28 ноября 2018

Вы можете передать регион ресурсу при его создании

ec2 = boto3.resource('ec2', region_name='us-east-2')

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

import boto3
import logging

#setup simple logging for INFO
logger = logging.getLogger()
logger.setLevel(logging.INFO)


def shutdown_instances(region):
    #define the connection
    ec2 = boto3.resource('ec2', region=region)

    # Use the filter() method of the instances collection to retrieve
    # all running EC2 instances.
    filters = [{
            'Name': 'tag:AutoOff_uat',
            'Values': ['True']
        },
        {
            'Name': 'instance-state-name', 
            'Values': ['running']
        }
    ]

    #filter the instances
    instances = ec2.instances.filter(Filters=filters)

    #locate all running instances
    RunningInstances = [instance.id for instance in instances]

    #print the instances for logging purposes
    #print RunningInstances 

    #make sure there are actually instances to shut down. 


def lambda_handler(event, context):
    for region in ['us-east-1', 'us-east-2']:
        shutdown_instances(region)
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...