我有一個 ECS 服務位于 API 網關后面,對于/foo/{proxy }使用方法的路徑子集()ANY,API 網關代理對 ECS 服務的請求。
我有一個附加規則的 EventBridge 總線 - 此規則匹配通過總線發送的事件子集(并且此過濾很重要 - 這就是我們不使用 SQS 的原因)。此規則有一個目標,它指向foo/events/ebeventAPI 網關上的路徑 ( ),我們希望POST將事件指向它。
基礎設施使用 Terraform 定義如下:
resource "aws_cloudwatch_event_bus" "test_bus" {
name = "test_bus"
}
resource "aws_cloudwatch_event_rule" "test_rule" {
name = "my_sample_rule"
description = "Matches some events."
event_bus_name = aws_cloudwatch_event_bus.test_bus.name
event_pattern = <<EOF
{
"detail-type": ["test_rule"]
}
EOF
}
resource "aws_cloudwatch_event_target" "test_api_gw_proxy_target" {
#devstage corresponds to the deployed stage on the API Gateway
#POST corresponds to the desired HTTP method
arn = "${var.payment_processor_execution_arn}/devstage/POST/foo/events/ebevent"
rule = aws_cloudwatch_event_rule.test_rule.name
event_bus_name = aws_cloudwatch_event_bus.test_bus.name
http_target {
path_parameter_values = ["foo/events/ebevent"]
}
}
事件正在發送到 API GW,并按預期代理到 ECS 任務。問題是 URL 中的斜杠被編碼為/- 這意味著當事件到達 ECS 容器時,URL 是foo/events/ebevent- 由于斜杠被編碼,它與 ECS 任務中路由器中定義的任何模式都不匹配影像,請求失敗。有什么方法可以阻止這個 URL 字串被 EventBridge 編碼?
另一種方法是更改?? ECS 映像中的路由配置(以處理對斜線的解碼),但是對于對路由器進行如此重大更改的回歸測驗存在擔憂——因為它可能會影響對任務的其他請求。
uj5u.com熱心網友回復:
您確定需要path_parameter_values,因為您已經在資源中定義了該路徑arn?查看檔案似乎只有在您嘗試填寫路徑通配符值時才需要使用path_parameter_values它,而您似乎沒有這樣做。
例如,如果您的端點 arn 是:"${var.payment_processor_execution_arn}/devstage/POST/*/*/*"那么您path_parameter_values需要:
path_parameter_values = ["foo", "events", "ebevent"]
注意它們是單獨的串列元素,而不是帶有斜線的單個字串。
轉載請註明出處,本文鏈接:https://www.uj5u.com/qita/488248.html
