Uzyskaj spójne tagowanie na poziomie aplikacji do śledzenia kosztów w AWS
Gdy organizacje przekształcają swoją działalność lub rozwijają się w związku z zapotrzebowaniem rynku, często mają trudności z wdrożeniem odpowiednich narzędzi, aby móc zrozumieć ich wpływ na AWS i związane z tym koszty. Duży zasięg AWS może obejmować wiele kont AWS, różne środowiska infrastruktury i środowiska aplikacji dla określonych projektów. Złożoność tej przestrzeni zwiększa się, jeśli aplikacje są budowane przy użyciu architektury mikrousług z indywidualnymi potokami kompilacji i wdrażania oraz częstymi cyklami wydawania.
Aby nadążyć za rozwojem i skutecznie zarządzać dużymi przestrzeniami AWS, istnieją różne podejścia, które mogą okazać się pomocne:
- Automatyzacja infrastruktury i udostępniania zasobów;
- Standaryzowane śledzenie kosztów.
Pierwsza jest automatyzacja, w ramach której organizacje przenoszą się do definiowania swojej infrastruktury za pomocą kodu (Infrastructure-as-Code [IaC]). Kolejny poziom gotowości pochodzi ze zdefiniowania cyklu życia dla infrastruktury i aplikacji. Jest to proces ciągłej integracji (CI) (ciągłe tworzenie i testowanie kodu) oraz ciągłe dostarczanie i/lub wdrażanie (CD) (automatyzacja) zapewniające elastyczność cyklu produktu. Aby przyspieszyć wdrażanie CI/CD przy zachowaniu kontroli i standardów, zespoły inżynierów platform mogą zapewnić zespołom aplikacji (twórcom oprogramowania) mechanizm samoobsługi w celu wdrożenia znormalizowanej infrastruktury.
W tym artykule autorzy przyjrzą się i omówią, jak AWS Proton pomaga w standaryzacji i automatyzacji w całej organizacji.
Drugi element to śledzenie kosztów, w którym widoczność na poziomie organizacji i spójny widok kosztów są istotne, aby zrozumieć, w jaki sposób zespoły wydają zasoby AWS. Każdy zasób musi być śledzony pod kątem kosztów, a mechanizm śledzenia musi reagować na zmiany w zasobach. Staje się to dużym wyzwaniem wraz z rozprzestrzenianiem się mikrousług i różnych środowisk. Aplikacja może mieć kilka mikrousług, z których każda posiada wiele zasobów (takich jak zadania Amazon ECS, funkcje AWS Lambda i wdrożenia Kubernetes), a każda mikrousługa ma swój własny cykl (CI/CD) w różnych środowiskach (rozwój/test/etap/produkcja).
W jaki sposób możesz skutecznie śledzić koszty nowoczesnych aplikacji za pomocą mikroserwisów?
Używanie tagów do przydziału kosztów
Zarządzanie rozliczeniami i kosztami AWS zapewnia szczegółowe informacje rozliczeniowe na poziomie konta. Na stronie konsoli rozliczeń możesz uzyskać zestawienie kosztów na poziomie usługi AWS dla całego konta. Mimo to nie zapewnia to widoczności na poziomie mikrousług szczegółowych. Jak zatem przedostać się do tego poziomu szczegółowości?
AWS udostępnia AWS Cost Allocation Tags, aby umożliwić śledzenie kosztów. Tagi to pary klucz:wartość przypisane do utworzonych zasobów. Tagi te są ustawiane przez administratorów organizacji na podstawie stosowanej przez organizację metody klasyfikacji i śledzenia obciążeń. Poniższy zrzut ekranu przedstawia sposób śledzenia przy użyciu miejsca powstawania kosztów i środowiska.
Przedstawienie rozwiązania
Po tym jak tagi zostają aktywowane i zastosowane do zasobów, można przeszukiwać wszystkie zasoby z określonym tagiem, a koszty można skonsolidować w celu uzyskania szczegółowego widoku (na przykład określonego centrum kosztów CostCenter:78925 lub według środowiska userStack:Production). Istnieje dostępny mechanizm, ale jednocześnie pojawia się pytanie, w jaki sposób są stosowane te tagi i jak są wykorzystywane do uzyskania widoczności i otrzymania przydatnych informacji?
Wyzwania związane z tagowaniem i efektywnym wykorzystaniem tagów
Stosowanie tagów do wszystkich zasobów to świetne rozwiązanie, ale jakie wyzwania związane z tagowaniem mogą się pojawić?
- Po pierwsze, każdy zasób, z którym związany jest koszt, musi być oznaczony, gdy zasoby są dodawane, modyfikowane lub usuwane. (Tagi dla poszczególnych zasobów można dodać w kodzie za pomocą IaC).
- Po drugie, znaczniki muszą być ustawione na poziomie szczegółowości, aby osoba zarządzająca mogła zobaczyć zasoby na poziomie środowiska (takiego jak programowanie/testowanie/etap/produkcja), na poziomie aplikacji (oraz na poziomie usług [mikroserwisów]).
- Po trzecie, szczegółowe tagowanie na poziomie mikrousług dla obciążeń kontenerowych staje się zniechęcające w miarę rozprzestrzeniania się aplikacji i mikrousług. Utrzymanie wersji mikrousług zwiększa ten problem.
- Wreszcie, jeśli każdy zespół aplikacyjny używa innego zestawu znaczników do klasyfikowania zasobów dla swojej aplikacji, to spójny obraz wydatków nie może zostać osiągnięty na poziomie organizacyjnym. Oczywiste jest, że tagowaniem musi zarządzać jednostka centralna na poziomie organizacji, a nie poszczególne zespoły aplikacyjne.
Wymienione powyżej powody wyraźnie wskazują, że konsekwentne stosowanie tagów i utrzymywanie ich w dużej i szybko rozwijającej się organizacji nie jest łatwe. Aby zapewnić skuteczne śledzenie kosztów, musi istnieć zautomatyzowany sposób jednolitego stosowania tagów do zasobów na poziomie szczegółowym (innymi słowy, na poziomie konta AWS, utworzonych środowiskach oraz na poziomie aplikacji lub mikrousług). Jak można to osiągnąć?
Przegląd
AWS Proton
AWS Proton to zarządzana usługa dostarczania kontenerów i aplikacji bezserwerowych, która pomaga zespołom platformy zautomatyzować tworzenie spójnej infrastruktury i szablonów aplikacji, które mogą być używane przez zespół aplikacji. AWS Proton automatycznie taguje zasoby utworzone w AWS CloudFormation i obsługuje spójne tagowanie Terraform. W rezultacie AWS Proton jest centralną lokalizacją, z której można uzyskać spójne definiowanie zasobów i śledzenie.
AWS Proton osiąga to dzięki wykorzystaniu szablonów środowiska i szablonów usług:
- Szablony środowiska: Twórz wspólne zasoby infrastruktury (takie jak Amazon VPC, Amazon ECS i AWS ParallelCluster), aby zapewnić łatwy sposób kontroli wersji i replikacji infrastruktury.
- Szablony usług: Twórz zasoby infrastruktury specyficzne dla aplikacji (takie jak Amazon Fargate i AWS Lambda), które zapewniają twórcom aplikacji mechanizm samoobsługi w celu rozwijania i testowania aplikacji.
Powyższe szablony znajdują się w wersji kontrolowanej przez AWS Proton, co ułatwia zarządzanie i utrzymanie zmian w infrastrukturze i aplikacjach w dynamicznej organizacji z centralnej lokalizacji.
AWS Proton obsługuje AWS CloudFormation i HashiCorp Configuration Language (Terraform). Istnieją różnice w sposobie zarządzania szablonami utworzonymi w powyższych językach IaC. Udostępnianie zarządzane przez AWS (CloudFormation) zapewnia zintegrowane środowisko, a samozarządzane udostępnianie (HCL przy użyciu Terraform) używa żądania ściągnięcia do repozytorium kodu źródłowego.
Zobacz dokumentację metod aprowizacji, aby dowiedzieć się, jak działa aprowizacja zarządzana przez AWS i samozarządzana (przeczytaj artykuł AWS Proton Self-Managed Provisioning, aby uzyskać więcej informacji w tym temacie).
W jaki sposób może to pomóc w rozwiązaniu wszystkich problemów związanych ze spójnym tagowaniem?
Automatyczne tagowanie AWS Proton
Kluczowym mechanizmem, z którego korzysta AWS Proton, jest definicja szablonu dla infrastruktury i aplikacji. Gdy tworzone są szablony, tagi można łatwo umieszczać. Ze względu na to, że AWS Proton służy jako centralna lokalizacja do tworzenia infrastruktury zarówno dla zespołów platform, jak i aplikacji, tagowanie staje się spójne automatycznie. Zapewnia to wygodny sposób wizualizacji zasobów na podstawie znaczników kosztów w środowisku infrastruktury i przy każdej usłudze.
Tagi na poziomie infrastruktury (np. VPC i klaster ECS).
Tagi na poziomie aplikacji i usługi (np. usługa front-end).
Uwaga: W przypadku AWS-Managed Provisioning (szablony CloudFormation) Tagi są dodawane automatycznie przez AWS Proton. W przypadku aprowizacji samozarządzającej (szablony Terraform) tagowanie jest realizowane przy użyciu funkcji domyślnych tagów programu Terraform (przeczytaj informacje o tagach domyślnych tutaj). Twój szablon AWS Proton musi zawierać zmienną Terraform proton_tags, którą należy zdefiniować w szablonie AWS Proton i uwzględnić jako default_tags u dostawcy AWS.
Wizualizacja oparta na tagach AWS Cost Explorer
Jak wspomniano wcześniej, AWS Cost Explorer (i inne narzędzia innych firm) może być używany do wizualizacji kosztów na poziomie szczegółowym (np. Środowiska i usługi) za pomocą tagów kosztów automatycznie aplikowanych przez AWS Proton. Poniższy diagram pokazuje, jak można to zrobić za pomocą AWS Cost Explorer.
- Wybierz Tag w sekcji Filter po prawej stronie
- Wybierz tag proton:service
- Wybierz nazwę usługi, którą chcesz przejrzeć (jak arn:aws:proton:us-west-2:271661399851:service/frontend).
Ten filtr ma zastosowanie do wszystkich zasobów aplikacji używanych przez front end usługi. Poniższy raport pokazuje przykładowe dane wyjściowe z AWS Cost Explorer.
Wpis na temat bibliotek szablonów AWS Proton zawiera przykładowe szablony zarówno dla AWS CloudFormation, jak i Terraform. Dołączone są również przykładowe aplikacje odpowiadające szablonom AWS Proton Environment. Zapewnia to łatwy sposób na rozpoczęcie pracy z AWS Proton. Możesz również dowiedzieć się więcej o AWS Proton jako mechanizmie udostępniania klastrów Amazon EKS i wdrażaniu AWS Proton Sample Multi Service.
Dodatkowe uwagi dotyczące Terraform: aprowizacja samozarządzająca
Jak wspomniano wcześniej, AWS Proton Tagging zasobów dla szablonów opartych na Terraform jest realizowany przy użyciu funkcji default-tags Terraform (przeczytaj o tagach domyślnych u dostawcy Terraform AWS). AWS Proton używa zmiennej Terraform proton_tags. Zmienna musi być zdefiniowana w Twoim szablonie AWS Proton i uwzględniona jako default_tags w Twoim dostawcy AWS. Poniższy przykład pokazuje, jak można osiągnąć automatyczne tagowanie za pomocą Terraform.
Terrafrom AWS provider (z default_tags)
# Configure the AWS Provider
provider "aws" {
region = var.aws_region
default_tags {
tags = var.proton_tags # All tags in proton_tags will be included as default tags
}
}
AWS Proton renderuje pliki języka konfiguracji HashiCorp (HCL), umieszczając niezbędne znaczniki w zmiennej proton_tags, a dostawca AWS jest aktualizowany, aby uwzględnić znaczniki we wszystkich domyślnie tworzonych zasobach.
{
"proton_tags" : {
"proton:account" : "1234567890",
"proton:template" : "arn:aws:proton:us-east-1:1234567890:environment-template/ecs-ec2-env",
"proton:environment" : "arn:aws:proton:us-east-1:1234567890:environment/dev"
}
}
Inną kwestią jest automatyzacja aprowizacji Terraform przy użyciu akcji GitHub. Repozytorium AWS Samples GitHub udostępnia przykładowe repozytorium akcji GitHub, które może służyć do automatyzacji procesu udostępniania infrastruktury Terraform, gdy AWS Proton przesyła żądanie.
Wymagania wstępne
Aby rozpocząć, upewnij się, że posiadasz konto AWS, co najmniej jeden plik IaC w CloudFormation lub Terraform, którego możesz użyć do zdefiniowania usługi, i rozpocznij pracę z AWS Proton.
Porządkowanie
Po wypróbowaniu tego procesu tagowania pamiętaj, aby usunąć przykładowe zasoby, aby uniknąć dodatkowych kosztów w przyszłości.
Wnioski
Za pomocą tego artykułu autorzy pokazali, jak skutecznie śledzić i zarządzać zasobami oraz śledzić koszty w organizacji, która tworzy aplikacje w oparciu o nowoczesne metodologie tworzenia aplikacji z wykorzystaniem AWS Proton. Korzystając z funkcji automatycznego tagowania AWS Proton, organizacja może stosować spójne znaczniki na poziomie infrastruktury i aplikacji oraz wizualizować wykorzystanie kosztów według aplikacji środowiska (na mikrousługę i aplikację bezserwerową) oraz uzyskiwać przydatne informacje za pomocą narzędzi, takich jak AWS Cost Explorer.
Źródło: AWS