【问题标题】:How to make aws_cloudwatch_event_rule with terraform and localstack?如何使用 terraform 和 localstack 制作 aws_cloudwatch_event_rule?
【发布时间】:2020-10-23 11:33:13
【问题描述】:

我正在使用 terraform(terraform) 和 localstack(localstack) 并尝试创建 aws_cloudwatch_event_rule。我收到一个错误:

错误:更新 CloudWatch 事件规则失败:UnrecognizedClientException:请求中包含的安全令牌无效。 状态码:400,请求ID:2d0671b9-cb55-4872-8e8c-82e26f4336cb

我不确定为什么会出现此错误,因为这可以在 AWS 中创建资源,但不能在 localstack 上创建资源????‍♂️。有人对如何解决这个问题有任何建议吗?谢谢。

它是一个大型 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}"
}

【问题讨论】:

  • 你能分享你的 Terraform 代码吗?这看起来很像您正在尝试在真实 AWS 而不是 localstack 中创建 Cloudwatch 事件规则。
  • 已添加。谢谢。
  • 你怎么把它指向localstack?
  • 您的 aws 提供程序是如何配置的?您也可以向我们展示提供程序块吗?首先想到的是添加skip_credentials_validation = true。您使用哪种服务?也许您需要在localhost:4587使用服务 EventBridge (CloudWatch Events)

标签: terraform localstack


【解决方案1】:

我意识到这是一个老问题,但我刚刚遇到了这个问题。我想分享为我解决的问题,以防它帮助到这里的其他人。这适用于 terraform 0.12(也适用于 0.13)和 AWS 提供商 3.x

当您收到The security token included in the request is invalid 错误时,通常意味着 terraform 尝试针对真实 AWS 而不是 localstack 执行操作。

以下内容应该可以解决创建 CloudWatch Event 规则的问题。

  1. 确保您在 localstack 中运行 events 服务。提供 CloudWatch Events 接口的是这项服务,而不是 cloudwatch。例如。如果您从命令行运行 localstack:
SERVICES=cloudwatch,events localstack start
  1. 确保 terraform 配置中的 AWS 提供程序指向 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 运行。

需要注意的另一个问题是,即使您启用了持久性,localstack 目前也不会持久化 CloudWatch 或 CloudWatch Events 数据。因此,当您终止或重新启动 localstack 时,任何 CloudWatch Events 规则都将丢失。

【讨论】:

  • 谢谢!这对我有帮助,但我还需要在我的提供程序配置中添加 cloudwatchlogs 端点以使我的 aws_cloudwatch_log_group 资源正常工作。
猜你喜欢
  • 2019-12-07
  • 2020-07-19
  • 2021-02-08
  • 2021-04-28
  • 1970-01-01
  • 2021-04-28
  • 2020-04-30
  • 2018-10-03
  • 2021-03-06
相关资源
最近更新 更多