Monitorowanie zasobów AWS stworzonych przez Terraform w Amazon DevOps Guru za pomocą tfdevops

7 lutego 2022

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ę:

Monitorowanie zasobów AWS stworzonych przez Terraform w Amazon DevOps Guru za pomocą tfdevops

Warunki wstępne

Zanim rozpoczniesz, upewnij się, że spełniasz poniże warunki:

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.

Monitorowanie zasobów AWS stworzonych przez Terraform w Amazon DevOps Guru za pomocą tfdevops

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.

Monitorowanie zasobów AWS stworzonych przez Terraform w Amazon DevOps Guru za pomocą tfdevops

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.

Monitorowanie zasobów AWS stworzonych przez Terraform w Amazon DevOps Guru za pomocą tfdevops

Zauważ, że gdy używasz narzędzia tfdevops, automatycznie włącza ono DevOps Guru na importowanym stosie.

Monitorowanie zasobów AWS stworzonych przez Terraform w Amazon DevOps Guru za pomocą tfdevops7. Nie zapomnij o czyszczeniu – usuń stos.

Monitorowanie zasobów AWS stworzonych przez Terraform w Amazon DevOps Guru za pomocą tfdevops

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

 

 

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.