Monitorowanie zasobów AWS stworzonych przez Terraform w Amazon DevOps Guru za pomocą tfdevops
Amazon DevOps Guru to usługa oparta na uczeniu maszynowym (ML), która pomaga deweloperom oraz operatorom automatycznie wykrywać anomalie i poprawiać dostępność aplikacji.
Amazon DevOps Guru wykorzystuje modele uczenia maszynowego, oparte na wieloletniej doskonałości operacyjnej Amazon.com i AWS, aby identyfikować nietypowe zachowanie aplikacji (np. zwiększone opóźnienia, wskaźniki błędów, ograniczenia zasobów) i ujawniać krytyczne problemy, które mogą powodować potencjalne przestoje lub zakłócenia usług.
Detektory anomalii DevOps Guru mogą również proaktywnie wykrywać anomalie, zanim się pojawią, pomagając Ci rozwiązać problemy, zanim się pojawią; podglądy zawierają zalecenia dotyczące łagodzenia nieprawidłowego zachowania.
Po uruchomieniu usługi DevOps Guru możesz skonfigurować jej zakres działania i określić, które zasoby AWS chcesz analizować. Opcjonalnie możesz zdefiniować granicę zasięgu, wybierając określone stosy AWS CloudFormation. Dla każdego wybranego stosu DevOps Guru analizuje dane operacyjne z obsługiwanych zasobów, aby wykryć nietypowe zachowanie. Zobacz Praca ze stosami AWS CloudFormation w DevOps Guru, aby uzyskać więcej informacji.
Dla użytkowników Terraforma, platforma Stacklet opracowała narzędzie typu open-source o nazwie tfdevops, które konwertuje stan Terraform na importowalny stos CloudFormation umożliwiający usłudze DevOps Guru na rozpoczęcie monitorowania zasobów AWS. Zauważ, że tfdevops nie jest narzędziem do konwersji Terraform na CloudFormation. Zamiast tego tworzy stos CloudFormation zawierający importowane zasoby, które są określone w module Terraform i umożliwia DevOps Guru monitorowanie zasobów w tym stosie CloudFormation.
W tym poście wytłumaczymy, jak skonfigurować i używać tfdevops, aby z łatwością włączyć usługę DevOps Guru dla istniejących zasobów AWS utworzonych przez Terraform.
Podstawy rozwiązania
Narzędzie tfdevops wykonuje następujące kroki, aby zaimportować zasoby do Amazon DevOps Guru:
- Tłumaczy stan terraform na szablon AWS CloudFormation z zachowaniem zasad usuwania
- Tworzy stos AWS CloudFormation z zaimportowanymi zasobami
- Rejestruje stos w Amazon DevOps Guru
W celach ilustracyjnych użyjemy przykładowej aplikacji bezserwerowej, która zawiera niektóre komponenty obsługiwane przez DevOps Guru i tfdevops. Ta aplikacja składa się z Amazon Simple Queue Service (SQS) oraz funkcji AWS Lambda, która przetwarza wiadomości w kolejce SQS. Dodatkowo zawiera również tabelę Amazon DynamoDB z której korzysta funkcja Lambda do utrwalania lub odczytu danych, a także zawiera temat Amazon Simple Notification Service (SNS), w którym funkcja Lambda publikuje wyniki swojego przetwarzania. Poniższy diagram przedstawia naszą przykładową aplikację:
Warunki wstępne
Zanim rozpoczniesz, upewnij się, że spełniasz poniże warunki:
- Zainstaluj i uwierzytelnij AWS CLI. Możesz uwierzytelnić się za pomocą użytkownika AWS Identity and Access Management (IAM) lub tokenu AWS Security Token Service (AWS STS).
- Zainstaluj Terraform.
- Zainstaluj pip.
Opis przejścia
Wykonaj poniższe kroki, aby rozpocząć monitorowanie zasobów AWS utworzonych za pomocą wzorców Terraform przy użyciu tfdevops:
1. Zainstaluj tfdevops zgodnie z instrukcją na GitHub
2. Utwórz moduł Terraform z zasobami obsługiwanymi przez tfdevops
3. Wdróż Terraform na swoje konto AWS, aby utworzyć zasoby na swoim koncie
Poniżej przedstawiamy przykładowy moduł Terraform do tworzenia przykładowej funkcji AWS Lambda, tabeli Amazon DynamoDB, tematu Amazon SNS oraz kolejki Amazon SQS.
# IAM role for the lambda function
resource "aws_iam_role" "lambda_role" {
name = "iam_role_lambda_function"
assume_role_policy = <<EOF
{
"Version": "2012-10-17",
"Statement": [
{
"Action": "sts:AssumeRole",
"Principal": {
"Service": "lambda.amazonaws.com"
},
"Effect": "Allow",
"Sid": ""
}
]
}
EOF
}
# IAM policy for logging from the lambda function
resource "aws_iam_policy" "lambda_logging" {
name = "iam_policy_lambda_logging_function"
path = "/"
description = "IAM policy for logging from a lambda"
policy = <<EOF
{
"Version": "2012-10-17",
"Statement": [
{
"Action": [
"logs:CreateLogGroup",
"logs:CreateLogStream",
"logs:PutLogEvents"
],
"Resource": "arn:aws:logs:*:*:*",
"Effect": "Allow"
}
]
}
EOF
}
# Policy attachment for the role
resource "aws_iam_role_policy_attachment" "policy_attach" {
role = aws_iam_role.lambda_role.name
policy_arn = aws_iam_policy.lambda_logging.arn
}
# Generates an archive from the source
data "archive_file" "default" {
type = "zip"
source_dir = "${path.module}/src/"
output_path = "${path.module}/myzip/python.zip"
}
# Create a lambda function
resource "aws_lambda_function" "basic_lambda_function" {
filename = "${path.module}/myzip/python.zip"
function_name = "basic_lambda_function"
role = aws_iam_role.lambda_role.arn
handler = "index.lambda_handler"
runtime = "python3.8"
depends_on = [aws_iam_role_policy_attachment.policy_attach]
}
# Create a DynamoDB table
resource "aws_dynamodb_table" "sample_dynamodb_table" {
name = "sample_dynamodb_table"
hash_key = "sampleHashKey"
billing_mode = "PAY_PER_REQUEST"
attribute {
name = "sampleHashKey"
type = "S"
}
}
# Create an SQS queue
resource "aws_sqs_queue" "sample_sqs_queue" {
name = "sample_sqs_queue"
}
# Create an SNS topic
resource "aws_sns_topic" "sample_sns_topic" {
name = "sample_sns_topic"
}
4. Uruchom tfdevops, aby przekonwertować do szablonu CloudFormation, wdrożyć stos i włączyć DevOps Guru
Następujące polecenie generuje szablon CloudFormation lokalnie ze pliku stanu Terraform:
tfdevops cfn -d ~/path/to/terraform/module --template mycfn.json --resources importable-ids.json
Następujące polecenie uruchamia szablon CloudFormation, tworzy stos CloudFormation, importuje zasoby oraz aktywuje DevOps Guru na stosie:
tfdevops deploy --template mycfn.json --resources importable-ids.json
5. Gdy tfdevops zakończy wdrażanie, możesz już zobaczyć stos w dashboardzie CloudFormation.
Narzędzie tfdevops importuje istniejące zasoby z modułu Terraform do AWS CloudFormation. Należy zauważyć, że nie są to nowe zasoby i nie będą generowały dodatkowych kosztów dla samych zasobów. Zobacz Wprowadzanie istniejących zasobów do zarządzania CloudFormation, aby dowiedzieć się więcej o importowaniu zasobów do CloudFormation.
6. Twój stos pojawia się również w dashboardzie DevOps Guru, wskazując, że DevOps Guru monitoruje Twoje zasoby i będzie alarmował w przypadku wykrycia nietypowego zachowania. Podglądy to sekwencja zdarzeń i ścieżek powiązanych ze sobą, zgrupowanych w celu zapewnienia niezbędnych zarządzeń i zaleceń dotyczących przyczyn, oraz szybszego rozwiązywania problemów.
Zauważ, że gdy używasz narzędzia tfdevops, automatycznie włącza ono DevOps Guru na importowanym stosie.
7. Nie zapomnij o czyszczeniu – usuń stos.
Podsumowanie
Zaprezentowaliśmy, jak umożliwić DevOps Guru monitorowanie zasobów AWS utworzonych przez Terraform. Korzystając z narzędzia tfdevops, możesz utworzyć stos CloudFormation ze swojego stanu Terraform i użyć go do zdefiniowania granicy zasięgu dla DevOps Guru. Dzięki temu, jeśli Twoje zasoby zachowują się nieoczekiwanie lub nietypowo, DevOps Guru powiadomi Cię i przedstawi zalecenia, które pomogą Ci szybko rozwiązać problem.
Jeśli chcesz poeksperymentować z DevOps Guru, AWS oferuje tzw. free tier przez pierwsze trzy miesiące, która obejmuje 7200 godzin zasobów AWS miesięcznie za darmo w każdej grupie zasobów A i B. Ponadto możesz oszacować koszty analizy zasobów Amazon DevOps Guru na podstawie AWS Management Console. Ta funkcja skanuje wybrane zasoby, aby automatycznie wygenerować miesięczny kosztorys. Ponadto zapoznaj się z artykułem Uzyskiwanie wglądu operacyjnego za pomocą AIOps przy użyciu Amazon DevOps Guru, aby dowiedzieć się więcej o tym, jak DevOps Guru pomaga zwiększyć dostępność aplikacji. Zapoznaj się z tymi warsztatami, aby uzyskać praktyczny przewodnik po głównych funkcjach i możliwościach DevOps Guru. Aby dowiedzieć się więcej o proaktywnych wglądach, zobacz Generating DevOps Guru Proactive Insights for Amazon ECS. Aby dowiedzieć się więcej o wykrywaniu anomalii, zobacz Wykrywanie anomalii w AWS Lambda przy użyciu analiz opartych na ML firmy Amazon DevOps Guru.
źródło: AWS