Optymalizacja kosztów poprzez automatyzację uruchamiania/zatrzymywania zasobów w środowiskach nieprodukcyjnych
Ł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 Lambda, AWS CloudFormation Templates, Amazon 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 ECS, Amazon SageMaker Notebook Instances, Amazon 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:
- 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.
- 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
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:
Wypełnij powyższy formularz z następującymi danymi i wybierz Next.
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.
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
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:
Wypełnij poniższy formularz z następującymi danymi i wybierz Next.
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.
Acknowledge that you want to create various resources including IAM roles and policies and select Create Stack.
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