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
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ąć
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
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 |