――Wenn Sie EC2 für die Entwicklungsumgebung verwenden, können Sie das Herunterfahren der Instanz bei der Rückkehr nach Hause leicht vergessen. ――Es scheint ein Sprichwort zu geben: "Wenn sich Staub ansammelt, wird es zu einem Berg."
――Wenn Sie die Einstellungen von Rolle und GUI hier verstehen können. [Klassenmethode] Ich habe versucht, EC2 automatisch mit Lambdas Schedule-Ereignis zu starten und zu stoppen [Verhindern Sie, dass Sie vergessen, EC2, RDS und ELB zu stoppen oder zu löschen! Lambda Schedule Event] (http://dev.classmethod.jp/cloud/aws/lambda-scheduled-event-info/ "Verhindern Sie, dass Sie vergessen, das EC2-, RDS-, ELB! LambdaSchedule-Ereignis zu stoppen oder zu löschen")
--Für die Beurteilung von Wochentagen oder Samstagen und Sonntagen kann MON-FRI in ScheduleEvent (cron) von Lambda nur an Wochentagen ausgeführt werden, aufgrund des später beschriebenen UTC-Problems, falls erforderlich, Python-Standarddatum.Wochentag () usw. verwenden ――Es gibt verschiedene Möglichkeiten, Feiertage zu beurteilen, aber am Ende verlasse ich mich auf die japanischen Feiertage von Google Kalender. Ich habe also ein Python-Modul von Google, also werde ich es verwenden. [google-api-python-client] (https://github.com/google/google-api-python-client "google-api-python-client")
cd [Passendes Verzeichnis]
sudo pip install --upgrade google-api-python-client -t ./
#Schreiben Sie die Hauptdatei, die auf Lambda ausgeführt werden soll, in dasselbe Verzeichnis
vim hoge.py
hoge.py
import boto3
import datetime
import sys
from apiclient.discovery import build
# https://console.developers.google.com/Projekt von hier
API_KEY = '[Google Development API-Schlüssel]'
CALENDAR_ID = 'ja.japanese#[email protected]'
#Jahres- und Neujahrsfeiertage sowie Betriebsfeiertage beginnen nicht automatisch(YYYY-MM-Mit DD aufzählen)。
company_holiday_list = []
#Funktionsname(Hier Lambda_handler)Und der Dateiname(Hier hoge.py)Zu
#Auf Lambdas Handler-Namen setzen, z.) hoge.lambda_handler
def lambda_handler(event, context):
client = boto3.client('ec2')
#Startet automatisch, wenn der Tag-Name "Auto Shutdown" AUTO lautet/Halt
#Wenn der Tag-Name "Auto Shutdown" aktiviert ist, wird nur ein automatischer Stopp ausgeführt.
query_start = [
{'Name': 'tag:AutoShutdown', "Values": ['AUTO']},
{'Name': 'instance-state-name', "Values": ['stopped']}
]
query_stop = [
{'Name': 'tag:AutoShutdown', "Values": ['ON', 'AUTO']},
{'Name': 'instance-state-name', "Values": ['running']}
]
service = build(serviceName='calendar', version='v3', developerKey=API_KEY)
events = service.events().list(calendarId=CALENDAR_ID).execute()
holiday_list = []
for item in events['items']:
holiday_list.append(item['start']['date'])
holiday_list.extend(company_holiday_list)
#Bestätigung des Ereignisnamens der Zündquelle
try:
#Bei automatischem Start nur an Wochentagen außer samstags, sonntags und an Feiertagen arbeiten
if '[Ereignisquelle ARN(ScheduleEvent für den automatischen Start)Kopieren]' in event['resources']:
if not str(datetime.date.today()) in holiday_list:
client.start_instances(InstanceIds=get_instanceid(query_start))
elif '[Ereignisquelle ARN(ScheduleEvent für automatischen Stopp)Kopieren]' in event['resources']:
client.stop_instances(InstanceIds=get_instanceid(query_stop))
elif '[Ereignisquelle ARN(ScheduleEvent für automatischen Stopp X Minuten Vorabbenachrichtigung)Kopieren]' in event['resources'] \
and (not str(datetime.date.today()) in holiday_list):
#Es ist freundlicher, hier einen Prozess zu schreiben, der Sie 5 oder 10 Minuten im Voraus über Slack informiert.(Automatischer Stopp-Explosionsschutz)
except Exception as e:
#Fehlerbehandlung. Als würde man eine Stapelspur in Slack werfen.
print("SUCCESS: task succeeded")
return
def get_instanceid(query):
client = boto3.client('ec2')
response = client.describe_instances(Filters=query)
ec2_count = len(response['Reservations'])
ec2_list = []
if not ec2_count == 0:
for i in range(0, ec2_count):
ec2_list.append(response['Reservations'][i]['Instances'][0]['InstanceId'])
return ec2_list
else:
print("SUCCESS: specified hosts is None")
sys.exit()
zip -r ~/hoge.zip .
aws lambda update-function-code --function-name [Funktionsname beim Erstellen von Lambda festgelegt] --zip-file fileb://~/hoge.zip
-Bitte schreiben Sie [Ereignisquelle ARN] in Ihre eigene Umgebung m (_ _) m Der ARN-Teil im Bild unten ist ein Kopieren und Einfügen.