gpt4 book ai didi

amazon-web-services - Cloudwatch 自定义事件 SQS 无法正常工作

转载 作者:行者123 更新时间:2023-12-04 08:23:34 24 4
gpt4 key购买 nike

我正在使用 terraform 创建队列,同时还创建 Cloudwatch 事件规则并将其中一个队列设置为规则的目标。
总之,我有一个队列,它是 3 个单独的 cloudwatch 事件的目标。问题是,即使 cloudwatch 事件规则是相同的,当通过 terraform 创建时,只有其中一个可以工作,其他人最终在控制台中调用失败,没有日志或任何类型的可调试信息。如果自定义事件是从 aws 控制台创建的,则一切正常。
在 terraform 中创建队列

resource "aws_sqs_queue" "queue_cron" {
name = "cron"
visibility_timeout_seconds = 300 # 5 minutes
delay_seconds = 0
message_retention_seconds = 1800 # 30 minutes
receive_wait_time_seconds = 20
}
唯一的工作块
resource "aws_cloudwatch_event_rule" "eve_vendors_bot_sync" {
name = "vendors-bot-sync"
schedule_expression = "rate(1 minute)"
description = "Notify cron queue for vendors bot sync"
is_enabled = true
}

resource "aws_cloudwatch_event_target" "sqs_cron_vendors_bot_sync" {
rule = aws_cloudwatch_event_rule.eve_vendors_bot_sync.name
arn = var.queue_cron_arn
target_id = "sqsCronVendorBotSync"

input_transformer {
input_template = <<EOF
{
"messageType":"cron",
"cronType":"vendors-bot-sync"
}
EOF
}
}
即使它在结构上与上面的相同,也不起作用。
resource "aws_cloudwatch_event_rule" "eve_restos_sync" {
name = "restos-sync"
schedule_expression = "rate(1 minute)"
description = "Notify cron queue for restos sync"
is_enabled = true
}

resource "aws_cloudwatch_event_target" "sqs_cron_restos_sync" {
rule = aws_cloudwatch_event_rule.eve_restos_sync.name
arn = var.queue_cron_arn
target_id = "sqsCronRestosSync"

input_transformer {
input_template = <<EOF
{
"messageType":"cron",
"cronType":"restaurant-hours-open-close-management"
}
EOF
}
}
与上面的类似,不起作用
resource "aws_cloudwatch_event_rule" "eve_vendors_orders_sync" {
name = "vendors-orders-sync"
schedule_expression = "rate(1 minute)"
description = "Notify cron queue for vendors orders sync"
is_enabled = true
}
resource "aws_cloudwatch_event_target" "target_cron_vendors_sync" {
rule = aws_cloudwatch_event_rule.eve_vendors_orders_sync.name
arn = var.queue_cron_arn
target_id = "sqsCronVendorsOrderSync"

input_transformer {
input_template = <<EOF
{
"messageType":"cron",
"cronType":"vendors-orders-sync"
}
EOF
}
}
回答
正如@Marchin 正确指出的那样,拼图中缺失的部分确实是阻止 cloudwatch 向 SQS 发送消息的策略。
这是使其正常工作的更新配置。
  • 创建队列
  • 创建一个策略,允许 cloudwatch 能够将消息发送到队列
  • 将策略附加到队列
  • resource "aws_sqs_queue" "queue_cron" {
    name = "cron"
    visibility_timeout_seconds = 300 # 5 minutes
    delay_seconds = 0
    message_retention_seconds = 1800 # 30 minutes
    receive_wait_time_seconds = 20
    }

    data "aws_iam_policy_document" "policy_sqs" {
    statement {

    sid = "AWSEvents_"
    effect = "Allow"
    actions = [
    "sqs:SendMessage",
    ]

    principals {
    type = "Service"
    identifiers = ["events.amazonaws.com"]
    }

    resources = [aws_sqs_queue.queue_cron.arn]

    }
    }

    resource "aws_sqs_queue_policy" "cron_sqs_policy" {

    queue_url = aws_sqs_queue.queue_cron.id
    policy = data.aws_iam_policy_document.policy_sqs.json

    }

    最佳答案

    我认为您对 SQS 队列的权限缺失或不正确。假设您正在创建您的 queue_cron在 terraform 中(问题中未显示),队列及其允许 CW 事件向其发送消息的策略将是:

    data "aws_caller_identity" "current" {}

    data "aws_region" "current" {}

    resource "aws_sqs_queue" "queue_cron" {
    name = "queue_cron"
    }

    resource "aws_sqs_queue_policy" "test" {

    queue_url = aws_sqs_queue.queue_cron.id

    policy = <<POLICY
    {
    "Version": "2012-10-17",
    "Id": "sqspolicy",
    "Statement": [
    {
    "Sid": "First",
    "Effect": "Allow",
    "Principal": {
    "AWS": "${data.aws_caller_identity.current.account_id}"
    },
    "Action": "sqs:*",
    "Resource": "${aws_sqs_queue.queue_cron.arn}"
    },
    {
    "Sid": "AWSEvents_",
    "Effect": "Allow",
    "Principal": {
    "Service": "events.amazonaws.com"
    },
    "Action": "sqs:SendMessage",
    "Resource": "${aws_sqs_queue.queue_cron.arn}",
    "Condition": {
    "ArnEquals": {
    "aws:SourceArn": "arn:aws:events:${data.aws_region.current.name}:${data.aws_caller_identity.current.account_id}:rule/*"
    }
    }
    }
    ]
    }
    POLICY
    }

    关于amazon-web-services - Cloudwatch 自定义事件 SQS 无法正常工作,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/65383226/

    24 4 0
    Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
    广告合作:1813099741@qq.com 6ren.com