Optymalizacja kosztów poprzez automatyzację uruchamiania/zatrzymywania zasobów w środowiskach nieprodukcyjnych

12 stycznia 2022

Łatwość tworzenia zasobów na żądanie w AWS może czasami prowadzić do tzw. over-provisioning’u lub niepełnego wykorzystania zasobów AWS, takich jak Amazon EC2 i Amazon RDS.

Może to prowadzić do wyższych kosztów, których często można uniknąć dzięki odpowiedniemu planowaniu i monitorowaniu. Środowiska niekrytyczne, takie jak deweloperskie i testowe, często nie są regularnie monitorowane i mogą powodować niepełne wykorzystanie zasobów AWS.

AWS omówił popularną strategię optymalizacji kosztów AWS, która jest zautomatyzowanym i wdrażalnym rozwiązaniem do planowania uruchamiania/zatrzymywania zasobów AWS. W tym przykładzie rozważono środowiska nieprodukcyjne, ponieważ w większości przypadków nie muszą one być dostępne przez cały czas. Stosując to rozwiązanie, architekci chmury mogą zautomatyzować uruchamianie/zatrzymywanie usług w oparciu o ich wzorce użytkowania i mogą zaoszczędzić do 70% kosztów związanych ze środowiskiem nieprodukcyjnym.

Opisane tutaj rozwiązanie ma na celu automatyczne zatrzymywanie i uruchamianie następujących usług AWS w zależności od potrzeb: Amazon RDS, Amazon Aurora, Amazon EC2, grup Auto Scaling, AWS Beanstalk i Amazon EKS. Rozwiązanie jest zautomatyzowane przy użyciu AWS Step functions, AWS LambdaAWS Cloud​Formation TemplatesAmazon EventBridge oraz AWS Identity and Access Management (IAM).

W tym rozwiązaniu AWS zapewnia również możliwość wykluczenia określonych nazw zasobów Amazon Resource Names (ARNs) z podanych usług. Pomaga to architektom chmury wykluczyć funkcję start/stop dla różnych przypadków użycia, takich jak środowisko QA, gdy nie chcą zatrzymywać Aurory lub chcą uruchomić RDS w środowisku deweloperskim. To rozwiązanie może być używane do okresowego uruchamiania/zatrzymywania wspomnianych wcześniej usług, ale może być również wykorzystywane do innych usług, takich Amazon ECSAmazon SageMaker Notebook InstancesAmazon Redshift i wielu innych.

Uwaga — nie należy konfigurować tego rozwiązania w środowisku produkcyjnym lub innym, w którym wymagana jest ciągła dostępność usług.

Wymagania wstępne

W przypadku tych instrukcji, powinieneś spełniać następujące wymagania wstępne:

  • Konto AWS z uprawnieniami do korzystania z wymaganych zasobów.
  • Działająca instancja Amazon Aurora na źródłowym koncie AWS.

Instrukcja

Aby skonfigurować to rozwiązanie, wykonaj następujące dwa kroki:

  1. Skonfiguruj przepływ pracy funkcji Step Function, aby zatrzymać usługi za pomocą szablonu CloudFormation. W zaplanowanych odstępach czasu ten przepływ pracy zostanie uruchomiony i zatrzyma wybrane usługi.
  2. Skonfiguruj przepływ pracy funkcji Step Function, aby zatrzymać usługi za pomocą szablonu CloudFormation. W zaplanowanych odstępach czasu ten przepływ pracy zostanie uruchomiony i włączy usługi zgodnie z konfiguracją podczas konfiguracji CloudFormation.

Zatrzymanie usługi za pomocą Step Function na wstępnie zdefiniowany czas

Rysunek 1 — Architektura przedstawiająca AWS Step Functions Workflow służący do zatrzymywania usług

Rysunek 1 — Architektura przedstawiająca AWS Step Functions Workflow służący do zatrzymywania usług

Funkcje AWS Lambda zaangażowane w ten proces:

  • StopAuroraCluster: Ta funkcja Lambda zatrzyma cały klaster Aurora Cluster w regionie, w tym replikę do odczytu.
  • StopRDSInstances: Ta funkcja Lambda zatrzyma wszystkie instancje RDS z wyjątkiem konfiguracji Aurora w regionie.
  • ScaleDownEKSNodeGroups: Ta funkcja Lambda zmniejszy rozmiar wszystkich grup węzłów do zera w całym regionie.
  • ScaleDownASG: Ta funkcja Lambda zmniejszy rozmiar wszystkich grup Auto Scaling, w tym grupy Elastic Beanstalk Auto Scaling, do zera instancji w całym regionie. Możesz edytować szablony CloudFormation, aby uwzględnić niestandardową wartość.
  • StopEC2Instances: Ta funkcja Lambda zatrzyma wszystkie instancje EC2 skonfigurowane w regionie.

Korzystając z następującego szablonu AWS CloudFormation, konfigurujemy wymagane usługi i przepływ pracy:

Uruchom szablon na koncie źródłowym i Regionie źródłowym:

lunch stack

Wypełnij powyższy formularz z następującymi danymi i wybierz Next.

Specify-stack-details-screenshot

Stack name: Nazwa stosu, który chcesz utworzyć.

ExcludeAuroraClusterArnListInCommaSeprated: Oddzielone przecinkami ARN klastrów Aurora, których nie chcesz zatrzymywać, zachowaj wartość domyślną, jeśli nie ma listy wykluczeń.

Na przykład:

arn:aws:rds:us-east-1:111111111111:cluster:aurorcluster1, arn:aws:rds:us-east-2:111111111111:cluster:auroracluster2

ExcludeRDSDBInstancesArnListInCommaSeprated: Oddzielone przecinkami, ARN instancji RDS, których nie chcesz zatrzymywać, zachowaj wartość domyślną, jeśli nie ma listy wykluczeń.

Na przykład:

arn:aws:rds:us-east-1:111111111111:db:rds-instance-1, arn:aws:rds:us-east-2:111111111111:db:rds-instance-2

ExcludeEKSClusterNodeGroupsArnListInCommaSeprated: Comma separated EKS Clusters ARN which you don’t want to start, keep the default value if there is no exclusion list.

Na przykład:

arn:aws:eks:us-east-2:111111111111:cluster/testcluster

ExcludeAutoScalingGroupIncludingBeanstalkListInCommaSeprated: Comma separated Beanstalk and other Auto Clusters groups ARN (except EKS) which you don’t want to start, keep the default value if there is no exclusion list.

Na przykład:

arn:aws:autoscaling:us-east-1:111111111111:autoScalingGroup:6d5af669-eb3b-4530-894b-e314a667f2e7:autoScalingGroupName/test-0-ASG

ExcludeEC2InstancesIdListInCommaSeprated: Comma separated EC2 instance ID s you  don’t want to start, keep the default value if there is no exclusion list.

Na przykład:

i-02185df0872f0f852, 0775f7e39513c50dd

ScheduleExpression: Schedule a cron expression when you want to run this workflow. Sample expressions are available in this guide, Schedule expressions using rate or cron.

Select IAM role to launch this template.  As a best practice, select the AWS CloudFormation service role to manage AWS services and resources available to each user.

Permissions-screenshot

Acknowledge that you want to create various resources including IAM roles and policies and select Create Stack.

Acknowledge that you want to create various resources including IAM roles and policies and select Create Stack.

Uruchom usługi za pomocą procesu Step Function we wstępnie skonfigurowanym czasie

Architecture-showing-the-AWS-Step-Functions-Workflow-to-start-services

Rysunek 2 — Architektura przedstawiająca AWS Step Functions Workflow

Funkcje Lambda zaangażowane w ten przepływ pracy/proces:

  • StartAuroraCluster: Ta funkcja Lambda uruchomi klastry Aurora w regionie, w tym replikę do odczytu.
  • StartRDSInstances: Ta funkcja Lambda uruchomi wszystkie instancje RDS z wyjątkiem klastrów Aurora w regionie.
  • ScaleUpEKSNodeGroups: Ta funkcja Lambda rozszerzy wszystkie grupy węzłów do minimum 2 i maksymalnie 4 instancji w całym regionie. Możesz edytować szablony CloudFormation, aby uwzględnić niestandardową wartość.
  • ScaleUpASG: Ta funkcja Lambda przeskaluje wszystkie grupy automatycznego skalowania, w tym grupę Elastic Beanstalk Auto Scaling, do minimum 2 i maksymalnie 4 instancji w całym regionie. Możesz edytować szablony CloudFormation, aby uwzględnić niestandardową wartość.
  • StartEC2Instances: Ta funkcja Lambda uruchomi wszystkie instancjeEC2 w regionie.

Korzystając z następującego szablonu AWS CloudFormation, konfigurujemy wymagane usługi i proces:

Uruchom szablon na koncie źródłowym i Regionie źródłowym:

lunch stack

Wypełnij poniższy formularz z następującymi danymi i wybierz Next.

Stack-details-screenshot

Stack name: Nazwa stosu, który chcesz utworzyć.

ExcludeAuroraClusterArnListInCommaSeprated: Oddzielone przecinkami, ARN klastrów Aurora, których nie chcesz zatrzymywać, zachowaj wartość domyślną, jeśli nie ma listy wykluczeń.

 

 

Na przykład:

arn:aws:rds:us-east-1:111111111111:cluster:aurorcluster1, arn:aws:rds:us-east-2:111111111111:cluster:auroracluster2

ExcludeRDSDBInstancesArnListInCommaSeprated: Oddzielone przecinkami, ARN Instancji DB, których nie chcesz zatrzymywać, zachowaj wartość domyślną, jeśli nie ma listy wykluczeń.

Na przykład:

arn:aws:rds:us-east-1:111111111111:db:rds-instance-1, arn:aws:rds:us-east-2:111111111111:db:rds-instance-2

ExcludeEKSClusterNodeGroupsArnListInCommaSeprated: Oddzielone przecinkami, ARN Klastrów EKS, których nie chcesz zatrzymywać, zachowaj wartość domyślną, jeśli nie ma listy wykluczeń.

Na przykład:

arn:aws:eks:us-east-2:111111111111:cluster/testcluster

ExcludeAutoScalingGroupIncludingBeanstalkListInCommaSeprated: Comma separated Beanstalk and other Auto Clusters groups ARN (except EKS) which you don’t want to start, keep the default value if there is no exclusion list.

Na przykład:

arn:aws:autoscaling:us-east-1:111111111111:autoScalingGroup:6d5af669-eb3b-4530-894b-e314a667f2e7:autoScalingGroupName/test-0-ASG

ExcludeEC2InstancesIdListInCommaSeprated: Oddzielone przecinkami identyfikatory instancji EC2, których nie chcesz zatrzymywać, zachowaj wartość domyślną, jeśli nie ma listy wykluczeń.

Na przykład:

i-02185df0872f0f852, 0775f7e39513c50dd

ScheduleExpression: Schedule a cron expression when you want to run this workflow. Sample expressions are available in this guide, Schedule expressions using rate or cron.

Select IAM role to launch this template.  As a best practice, select the AWS CloudFormation service role to manage AWS services and resources available to each user.

Permissions

Acknowledge that you want to create various resources including IAM roles and policies and select Create Stack.

Acknowledgement

Czynności końcowe

Usuń wszelkie nieużywane zasoby, aby uniknąć ponoszenia przyszłych opłat.

Podsumowanie

Przedstawiliśmy rozwiązanie, które pomoże zoptymalizować koszty poprzez automatyzację zatrzymywania/uruchamiania usług AWS w środowiskach nieprodukcyjnych. Optymalizacja kosztów i zarządzanie finansami w chmurze to bieżące inicjatywy AWS. Mamy nadzieję, że rozwiązanie to okazało się pomocne i zachęcamy do zbadania dodatkowych sposobów optymalizacji kosztów w AWS Architecture Center.

źródło: AWS

Case Studies
Referencje

Firma Hostersi pozwoliła nam osadzić ogólne zagadnienia programu Well Architected Framework w kontekście naszej firmy. Oszczędziło nam to wiele czasu i pozwoliło znaleźć lepiej dopasowane rozwiązania do specyfiki naszego biznesu. WAF był świetnym katalizatorem do wprowadzenie szeregu zmian w obszarze niezawodności, szybkości i bezpieczeństwa edrone. 

Piotr Stachowicz
CTO
W skrócie o nas
Specjalizujemy się w dostarczaniu rozwiązań IT w obszarach projektowania infrastruktury serwerowej, wdrażania chmury obliczeniowej, opieki administracyjnej i bezpieczeństwa danych.