Как сделать aws_cloudwatch_event_rule с terraform и localstack?

Я использую terraform (terraform) и localstack (localstack) и пытается создать aws_cloudwatch_event_rule. Я получаю сообщение об ошибке:

Ошибка: не удалось обновить правило события CloudWatch: UnrecognizedClientException: токен безопасности, включенный в запрос, недействителен. код состояния: 400, идентификатор запроса: 2d0671b9-cb55-4872-8e8c-82e26f4336cb

Я не уверен, почему я получаю эту ошибку, потому что это работает для создания ресурса в AWS, но не в локальном стеке ????‍♂️. Есть ли у кого-нибудь предложения, как это исправить? Спасибо.

Это большой проект terraform, поэтому я не могу поделиться всем кодом. Это соответствующий раздел.

resource "aws_cloudwatch_event_rule" "trigger" {
  name        = "trigger-event"
  description = "STUFF"
  schedule_expression = "cron(0 */1 * * ? *)"
}

resource "aws_cloudwatch_event_target" "trigger_target" {
  rule      = "${aws_cloudwatch_event_rule.trigger.name}"
  arn       = "${trigger.arn}"
}

person Dan    schedule 16.01.2020    source источник
comment
Можете ли вы поделиться своим кодом Terraform? Это очень похоже на то, что вы пытаетесь создать правило события Cloudwatch в реальном AWS, а не в локальном стеке.   -  person ydaetskcoR    schedule 17.01.2020
comment
Добавил. Спасибо.   -  person Dan    schedule 17.01.2020
comment
Как вы указываете это на localstack?   -  person ydaetskcoR    schedule 18.01.2020
comment
Как настроен ваш провайдер aws? Можете также показать нам блок провайдера? Первое, что приходит в голову, это добавить skip_credentials_validation = true. Какой услугой вы пользуетесь? Возможно, вам нужно использовать службу EventBridge (CloudWatch Events) по адресу localhost: 4587   -  person Baptiste Bouchereau    schedule 13.02.2020


Ответы (1)


Я понимаю, что это старый вопрос, но я только что столкнулся с этой проблемой. Я хотел поделиться тем, что разрешило это для меня, на случай, если это поможет другим, кто окажется здесь. У меня это работает с terraform 0.12 (также должно работать для 0.13) и провайдером AWS 3.x.

Когда вы получаете The security token included in the request is invalid ошибку, это обычно означает, что terraform попытался выполнить операцию с реальным AWS, а не с локальным стеком.

Следующее должно решить проблему с созданием правил событий CloudWatch.

  1. Убедитесь, что вы используете службу events в локальном стеке. Именно эта служба, а не cloudwatch, предоставляет интерфейс CloudWatch Events. Например. если вы запускаете localstack из командной строки:
SERVICES=cloudwatch,events localstack start
  1. Убедитесь, что провайдер AWS в конфигурации terraform указывает на localstack. Как и в шаге (1), нам нужно убедиться, что у нас есть настройка специально для CloudWatch Events. В конфигурации поставщика AWS это cloudwatchevents.
provider "aws" {
  version = "~> 3.0"

  profile                     = "<profile used for localstack>"
  region                      = "<region configured for localstack>"
  skip_credentials_validation = true
  skip_metadata_api_check     = true
  skip_requesting_account_id  = true

  endpoints {
    # Update the urls below if you've e.g. customized localstack's port
    cloudwatch        = "http://localhost:4566"
    cloudwatchevents  = "http://localhost:4566"
    iam               = "http://localhost:4566"
    sts               = "http://localhost:4566"
  }
}

Теперь terraform apply должен успешно работать с локальным стеком.

Еще одна проблема, о которой следует помнить, заключается в том, что в настоящее время localstack не сохраняет данные CloudWatch или CloudWatch Events, даже если вы включили сохранение. Поэтому, когда вы убиваете или перезапускаете локальный стек, все правила CloudWatch Events будут потеряны.

person verespej    schedule 23.10.2020
comment
Спасибо! Это помогло мне, но мне также нужно было добавить конечную точку cloudwatchlogs в конфигурацию моего провайдера, чтобы мой ресурс aws_cloudwatch_log_group работал. - person Robert; 09.02.2021