AWS - Lambda część 4 skrypt


IV etap

AWS -> Lambda -> Tworzenie nowej funkcji -> Wybór języka programowania skryptu -> Nadanie uprawnień -> Dodanie znacznika czasowego (cron) -> Wstawienie skryptu -> Test -> Produkcja

Musimy umieścić skrypt, który będzie wskazywał instancje (serwery) oraz wymuszał ich uruchomienie. 

Możliwe są dwa podejścia:

SPOSÓB 1

Zadeklarować instancje - akcja zostanie wykonana na wskazanych serwerach

W skrypcie trzeba sprawdzić/zmodyfikować:

  • region - w moim przypadku "eu-central-1"
  • wskazać serwery, których to zadanie mam dotyczyć (podmienić i-XXXXXXXXXXXX)
  • zapisać wprowadzony skrypt
import boto3
region = 'eu-central-1'
instances = ['i-XXXXXXXXXXXX', 'i-XXXXXXXXXXXX']

ec2 = boto3.client('ec2', region_name=region)

def lambda_handler(event, context):
    ec2.start_instances(InstanceIds=instances)
    print('started  your instances: ' + str(instances))

-> Save

OPIS

Skrypt wyszukuje wszystkie wskazane instancje (i-XXXXXXXXXXXX ...) w regionie "eu-central-1". Po znalezieniu serwerów wywołuje akcje - ich uruchomienie

UWAGI

Sposób mało czytelny ze względu na konieczność stosowania nazw instancji (serwerów) utworzonych przez automat AWS -unikatowych nazw w skali całego AWS

SPOSÓB 2

Zadeklarować tag, value - akcja zostanie wykonana na instancjach (serwerach) którym dodamy tag wraz z wartością

Trzeba sprawdzić/zmodyfikować/dodać:

  • region - w moim przypadku "eu-central-1"
  • zmodyfikować tag wg uznania - w moim przypadku tag: "start" który musi mieć wartość "8_00"
  • zapisać wprowadzony skrypt
  • dodać tag do wybranej instancji którą automat włączenia ma objąć
import boto3
region = 'eu-central-1'

ec2 = boto3.client('ec2', region_name=region)

def lambda_handler(event, context):
    #Looking for instances, which has got tag 'start' with value '8_00'
    reservations = ec2.describe_instances(
        Filters=[
            {
                'Name': 'tag:start',
                'Values': [
                    '8_00',
                ]
            },
        ]
    )['Reservations']

    #Single reservation corresponds to single start instance command.
    #Usually there will be only one instanace for every reservation, but can be more
    instances = sum(
        [
            [i for i in r['Instances']]
            for r in reservations
        ], [])

    #Iterating through instances and retrieving their EBS volumes
    for instance in instances:
        ec2.start_instances(InstanceIds = [instance['InstanceId']])
        print('started  your instances: ' + str(instances))

-> Save

OPIS

Skrypt wyszukuje wszystkie instancje (serwery) w regionie "eu-central-1", które mają tag o nazwie "start" i value "8_00". Po znalezieniu instancji spełniających warunek wywołuje akcje - ich uruchomienie. Trzeba dodać ten tag wszystkim serwerom, które mają być objęte tą funkcją.

UWAGI

To rozwiązanie ma sporo zalet:

  • przez dodawanie, usuwanie tag-a bezpośrednio przy serwerze można włączać, wyłączać automat bez potrzeby modyfikacji ustawień LAMBDY
  • można stworzyć kilka funkcji z tym samym tagiem ale o różnych wartościach (powiązanych z innymi zadaniami CRON)
  • w sposób prosty można sprawdzić czy serwer podlega automatowi uruchomienia i o której godzinie

Spis treści

Artykuły powiązane:

AWS
Lambda część 1 wprowadzenie platforma AWS działająca w oparciu o zdarzenia
Lambda część 2 rola tworzenie funkcji
Lambda część 3 cron tworzenie kalendarza zdarzeń
Lambda część 4 skrypt powiązanie serwerów ze zdarzeniem
Lambda część 5 test testy utworzonego rozwiązania

Copyright ©2021 Tomasz Blauth