Czy istnieje prosty sposób na uruchamianie i zatrzymywanie instancji AWS EC2 o określonej godzinie każdego dnia? Mogłoby to zaoszczędzić sporo pieniędzy na moich serwerach programistycznych i testowych.
Czy istnieje prosty sposób na uruchamianie i zatrzymywanie instancji AWS EC2 o określonej godzinie każdego dnia? Mogłoby to zaoszczędzić sporo pieniędzy na moich serwerach programistycznych i testowych.
Aktualizacja
AWS wydało narzędzie o nazwie „ Harmonogram wystąpień ”, w tym pełne przewodnik konfiguracji, do którego prowadzi odnośnik z tej strony. Wygląda na ulepszenie harmonogramu EC2, który opisuję poniżej, z kilkoma dodatkowymi funkcjami, ale zasadniczo jest to ta sama rzecz.
Poniższy przewodnik nadal będzie działał, ale prawdopodobnie lepiej przyjrzeć się harmonogramowi instancji dla nowych instalacji.
Oryginalny post
AWS ma narzędzie o nazwie EC2 Scheduler, które zapewnia bardzo elastyczną kontrolę nad uruchamianiem i zatrzymywaniem instancji EC2.
Narzędzie pozwala zdefiniować domyślne czasy rozpoczęcia i zakończenia podczas konfiguracji narzędzia, które można zmienić później. Możesz wybrać, które instancje mają być kontrolowane, a Ty możesz określić różne czasy rozpoczęcia i zakończenia dla każdej instancji za pomocą znaczników.
Choć jest to świetne narzędzie, dokumentacja jest nieco niejasna i myląca. To tak, jakby dokumentację napisał inżynier, który napisał narzędzie i wie o nim wszystko, a nie pisarz techniczny.
Uwaga : jeśli masz opinie lub poprawki, komentarze są mile widziane. Jeśli masz pytanie oparte na tym, proszę rozpocząć własne pytanie.
Co to jest EC2 Scheduler
To narzędzie jest funkcją Lambda współpracującą ze zdarzeniami Cloudwatch i DynamoDB. Jest wdrażany za pomocą szablonu Cloudformation, który również konfiguruje niezbędne role i zasady IAM. Możesz przeczytać o architekturze tutaj .
Rozlokowanie
Zacznij od przejścia do tej strony i kliknięcia „uruchom rozwiązanie”. W tej chwili bezpośredni link jest tutaj , ale może się zmienić.
Wybierz region, w którym chcesz wdrożyć zasoby u góry konsoli. Skrypt kontroluje instancje EC2 w dowolnym regionie, ale działa w jednym regionie.
Tagowanie instancji EC2
Jest to omówione w dokumentacji tutaj , ale nie jest tak proste, jak mogłoby być.
Możesz kontrolować, które wystąpienia są uruchamiane i zatrzymywane, oznaczając je.
Najprostszy przypadek wymaga oznaczenia każdego wystąpienia EC2, które chcesz uruchomić i zatrzymać zgodnie z harmonogramem. Aby to zrobić, znajdź instancję EC2 w konsoli, kliknij tagi i utwórz ten tag
Aby włączyć kopiowanie i wklejanie:
Jeśli chcesz, aby określona instancja była uruchamiana i zatrzymywana w innym harmonogramie, dołączasz dodatkowe informacje do klucza i wartości tagu. Na przykład jeśli chcesz, aby instancja zaczęła się o godzinie 1500 UTC i zatrzymała się o godzinie 2400 UTC we wtorek, czwartek i piątek, wprowadź następujące informacje.
Klucz: harmonogram: ec2-startstop: late Wartość: 1500; 2400; utc; wt., Czw., Pt.
Zauważ, że słowo „późno” może być dowolnym ciągiem, „późno” nie ma specjalnego znaczenia.
Za pomocą tego narzędzia możesz przeliczyć UTC na czas lokalny .
Możesz użyć edytora znaczników do zbiorczego tworzenia znaczników. To może łatwiej skonfigurować znaczniki zbiorcze, co może być przydatne w przypadku różnych ustawień dla deweloperów, testów i produkcji. Wątpię jednak, czy użyłbyś tego w produkcji.
Parametry CloudFormation
Po uruchomieniu szablonu CloudFormation musisz wprowadzić wiele parametrów. Większość możesz pozostawić domyślnie. Oto niektóre z najważniejszych parametrów
Uprawnienia, zasady i role
Sekcja roli Uprawnienia / IAM szablonu CloudFormation to czerwony śledź - tzn. Jest w dużej mierze nieistotna. Określa tylko rolę używaną do uruchomienia skryptu CloudFormation, nie ma znaczenia dla tworzonych zasobów ani roli używanej podczas działania funkcji lambda. Z perspektywy czasu jest to oczywiste, ale nie było dla mnie oczywiste, kiedy zaczynałem.
Niezależnie od roli, którą uruchamiasz ten skrypt jako ta sama rola i uprawnienia wbudowane, są tworzone w IAM. Funkcja Lambda działa przy użyciu „roli harmonogramu ec2”, którą tworzy skrypt.
Poniżej zamieściłem moje zasady na wypadek, gdyby były przydatne dla każdego.
Zdarzenia i metryki CloudWatch
Jeśli chcesz zobaczyć dzienniki z funkcji Lambda, przejdź do Cloudwatch Events. Logowanie jest całkiem dobre. Istnieją również dane, więc możesz zobaczyć, kiedy działa, czas, itp.
Dodatkowy
Kod funkcji lambda jest dostępny na Github .
Zasady
Nie są to na ogół konieczne, ale mogą być dla kogoś, więc dołączę je.
Zasady dotyczące roli IAM
{
"Version": "2012-10-17",
"Statement": [
{
"Effect": "Allow",
"Action": [
"ec2:DescribeInstances",
"ec2:DescribeTags",
"iam:CreateRole",
"iam:GetRole",
"iam:PassRole",
"iam:PutRolePolicy",
"iam:DeleteRolePolicy",
"iam:DeleteRole",
"dynamodb:*",
"lambda:*",
"SNS:Publish",
"events:*"
],
"Resource": "*"
},
{
"Effect": "Allow",
"Action": "S3:GetObject",
"Resource": [
"arn:aws:s3:::solutions-us-west-2",
"arn:aws:s3:::solutions-us-west-2/*"
]
},
{
"Effect": "Allow",
"Action": [
"ec2:StopInstances",
"ec2:StartInstances"
],
"Resource": [
"arn:aws:ec2:us-west-2:123456789012:instance/i-0d112345Ab6789012"
]
}
]
}
Polityka zaufania dla roli IAM
{
"Version": "2012-10-17",
"Statement": [
{
"Effect": "Allow",
"Principal": {
"Service": [
"lambda.amazonaws.com",
"cloudformation.amazonaws.com"
]
},
"Action": "sts:AssumeRole"
}
]
}
Jeśli chcesz tylko uruchamiać i zatrzymywać instancje, oto kolejne spojrzenie na to, które również korzysta z usługi Lambda. Zakłada się, że chcesz kontrolować określony identyfikator instancji. Możesz kontrolować wiele instancji, dodając więcej identyfikatorów oddzielonych przecinkiem. (np .: „i-3453453”, „i-45656745”). Identyfikator instancji można znaleźć w sekcji Instancje konsoli AWS.
W konsoli Lambda
Kod poniżej
Kod poniżej
Pamiętaj, aby zastąpić wartości regionu i instancji własnymi.
Kod poniżej
Zaplanuj funkcje
Tutaj utworzysz wydarzenie CloudWatch, które w nocy wyzwoli Twoją funkcję Lambda
Uwaga: Wyrażenia Cron są oceniane w UTC. Pamiętaj, aby dostosować wyrażenie do preferowanej strefy czasowej. Oto przykład, w którym funkcja będzie uruchamiana codziennie o godzinie 08:00 GMT / UTC):
Aby ponownie uruchomić instancje rano, powtórz te kroki i użyj preferowanego czasu rozpoczęcia. Jeśli chcesz wysłać wiadomość e-mail za każdym razem, gdy zawiodą funkcje, możesz ustawić temat SNS i skonfigurować wysyłanie tej wiadomości w obszarze Debugowanie w oknie tworzenia funkcji Lmbda.
Źródło tego wszystkiego można znaleźć tutaj: dokumentacja AWS
źródło