Невозможно создать проверку работоспособности Route 53 со связанным сигналом тревоги CloudWatch

Я пытаюсь создать новую проверку работоспособности Route 53 с сигналом тревоги, который должен срабатывать в случае сбоя проверки работоспособности. Я использую следующую команду и конфигурацию проверки работоспособности:

aws route53 create-health-check --caller-reference cw-20240607 \
  --health-check-config file://health_check_config.json
{
  "Type": "HTTPS_STR_MATCH",
  "FullyQualifiedDomainName": "https://api.dev.somedomain.dev",
  "Port": 443,
  "ResourcePath": "/health",
  "SearchString": "\"status\":\"ok\"",
  "EnableSNI": true,
  "AlarmIdentifier": {
    "Name": "regen-api-health-check",
    "Region": "us-east-1"
  }
}

Я получаю следующую ошибку:

An error occurred (InvalidInput) when calling the CreateHealthCheck operation:
Invalid parameter : Basic health checks must not have an metric region specified.

Я попробовал удалить регион из AlarmIdentifier, но, конечно, это обязательный параметр, поэтому новая ошибка:

Parameter validation failed:
Missing required parameter in HealthCheckConfig.AlarmIdentifier: "Region"

Я нашел эту проблему шестилетней давности в репозитории aws-sdk-php, которая указывает на то, что вы не можете указать AlarmIdentifier с «базовой» проверкой работоспособности. Однако я не могу найти в документации никаких упоминаний о том, что представляет собой «базовая» проверка работоспособности или какая конфигурация позволила бы мне указать идентификатор сигнала тревоги.

Итак, мои вопросы:

  1. Что конкретно представляет собой базовая проверка здоровья по сравнению с… небазовой?
  2. Как настроить проверку работоспособности с помощью идентификатора сигнала тревоги, чтобы он активировал сигнал тревоги CloudWatch?

Кстати, сначала я попытался сделать это с помощью CloudFormation, но ошибка, которую он продолжал выдавать, была крайне бесполезной и неспецифичной:

Resource handler returned message: "Invalid request provided: AWS::Route53::HealthCheck"

Кажется, я неправильно понял, для чего нужен AlarmIdentifier. Похоже, он используется для проверки работоспособности с помощью типа CLOUDWATCH_METRIC, а не для мониторинга конечных точек.

Clark 07.06.2024 23:05
Стоит ли изучать PHP в 2023-2024 годах?
Стоит ли изучать PHP в 2023-2024 годах?
Привет всем, сегодня я хочу высказать свои соображения по поводу вопроса, который я уже много раз получал в своем сообществе: "Стоит ли изучать PHP в...
Поведение ключевого слова "this" в стрелочной функции в сравнении с нормальной функцией
Поведение ключевого слова "this" в стрелочной функции в сравнении с нормальной функцией
В JavaScript одним из самых запутанных понятий является поведение ключевого слова "this" в стрелочной и обычной функциях.
Приемы CSS-макетирования - floats и Flexbox
Приемы CSS-макетирования - floats и Flexbox
Здравствуйте, друзья-студенты! Готовы совершенствовать свои навыки веб-дизайна? Сегодня в нашем путешествии мы рассмотрим приемы CSS-верстки - в...
Тестирование функциональных ngrx-эффектов в Angular 16 с помощью Jest
В системе управления состояниями ngrx, совместимой с Angular 16, появились функциональные эффекты. Это здорово и делает код определенно легче для...
Концепция локализации и ее применение в приложениях React ⚡️
Концепция локализации и ее применение в приложениях React ⚡️
Локализация - это процесс адаптации приложения к различным языкам и культурным требованиям. Это позволяет пользователям получить опыт, соответствующий...
Пользовательский скаляр GraphQL
Пользовательский скаляр GraphQL
Листовые узлы системы типов GraphQL называются скалярами. Достигнув скалярного типа, невозможно спуститься дальше по иерархии типов. Скалярный тип...
0
1
62
1
Перейти к ответу Данный вопрос помечен как решенный

Ответы 1

Ответ принят как подходящий

В конце концов я понял, что AlarmIdentifier не предназначен для указания тревоги, которую должна вызвать проверка работоспособности. Правильный способ связать сигнал тревоги CloudWatch с проверкой работоспособности — указать HealthCheckId в параметре размеров при создании сигнала тревоги. Используя CLI, это выглядит так:

aws route53 create-health-check --caller-reference cw-20240607 \
  --health-check-config file://health_check_config.json

aws cloudwatch put-metric-alarm --alarm-name my-api-health-check \
  --namespace AWS/Route53 --metric-name HealthCheckStatus \
  --dimensions "Name=HealthCheckId,Value=<health check ID>" \
  --comparison-operator LessThanThreshold --statistic Average --period 60 \
  --threshold 1 --evaluation-periods 3 --datapoints-to-alarm 3 \
  --alarm-actions "arn:aws:sns:us-east-1:<account ID>:my-alerts"

health_check_config.json содержание:

{
  "Type": "HTTPS_STR_MATCH",
  "FullyQualifiedDomainName": "api.dev.somedomain.dev",
  "Port": 443,
  "ResourcePath": "/health",
  "SearchString": "\"status\":\"ok\"",
  "EnableSNI": true,
  "Regions": ["us-east-1", "us-west-1", "us-west-2"]
}

Как только исправление стало очевидным, я смог развернуть проверку работоспособности и оповещение через CloudFormation:

{
  "AWSTemplateFormatVersion": "2010-09-09",
  "Description": "Testing Health Check and Alarm config",
  "Resources": {
    "Route53HealthCheck": {
      "Type": "AWS::Route53::HealthCheck",
      "Properties": {
        "HealthCheckConfig": {
          "Type": "HTTPS_STR_MATCH",
          "FullyQualifiedDomainName": "api.dev.somedomain.dev",
          "Port": 443,
          "ResourcePath": "/health",
          "SearchString": "\"status\":\"ok\"",
          "EnableSNI": true,
          "Regions": ["us-east-1", "us-west-1", "us-west-2"]
        }
      }
    },
    "HealthCheckAlarm": {
      "Type": "AWS::CloudWatch::Alarm",
      "Properties": {
        "AlarmName": "my-api-health-check",
        "Namespace": "AWS/Route53",
        "MetricName": "HealthCheckStatus",
        "ComparisonOperator": "LessThanThreshold",
        "Statistic": "Average",
        "Period": 60,
        "Threshold": 1,
        "DatapointsToAlarm": 3,
        "EvaluationPeriods": 3,
        "AlarmActions": [
          {
            "Fn::Join": [
              ":",
              ["arn:aws:sns", { "Ref": "AWS::Region" }, { "Ref": "AWS::AccountId" }, "my-alerts"]
            ]
          }
        ],
        "OKActions": [
          {
            "Fn::Join": [
              ":",
              ["arn:aws:sns", { "Ref": "AWS::Region" }, { "Ref": "AWS::AccountId" }, "my-alerts"]
            ]
          }
        ],
        "Dimensions": [
          {
            "Name": "HealthCheckId",
            "Value": { "Fn::GetAtt": ["Route53HealthCheck", "HealthCheckId"] }
          }
        ]
      }
    }
  }
}

Другие вопросы по теме