Terraform:如果目标是 aws_sfn_state_machine,则 aws_api_gateway_integration 的 uri 参数是什么

Mar*_*lte 4 amazon-web-services terraform aws-api-gateway aws-step-functions

我想使用 Terraforms api_gateway_integrationsfn_state_machine使用 API 网关创建一个步进函数 API

我现在必须在 api_gateway_integration 处填写uri 参数

我的 step 函数已创建,我可以引用 step 函数的 id(类似于arn:aws:states:*region*:*account*:stateMachine:*step-function-name*:stateMachine:*step-function-entry-point*)。

如果 AWS 阶跃函数是目标,谁能告诉我该方案或 uri 参数外观的示例?

resource "aws_api_gateway_integration" "endpoint_integration" {
  ...
  integration_http_method = "POST"
  type = "AWS"
  uri = <<<<< What to place here???
}
Run Code Online (Sandbox Code Playgroud)

Mar*_*lte 7

Terraform 将 AWS lambda 与 API 网关集成相比,您不能“直接”从 API 网关指向特定的 AWS 状态机(使用“uri”参数)。相反,aws_api_gateway_integration-resource 指向AWS 状态机一般来说,具体的 AWS 状态机会被AWS ARN引用作为请求的一部分。您可以使用API 网关请求模板将 API 网关映射到具体的状态机,这样就可以省略 stateMachineArn请求您的 API 时。有关详细说明,请查看AWS 文档“使用 API 网关创建 Step Functions API”

工作示例

# var.aws_region = eu-central-1
# var.sfn_orchestrater_arn = arn:aws:states:eu-central-1:*account*:stateMachine:*step-function-entry-point*
resource "aws_api_gateway_integration" "endpoint_integration" {
  http_method             = "POST"
  integration_http_method = "POST"
  type                    = "AWS"
  passthrough_behavior    = "NEVER"
  uri                     = "arn:aws:apigateway:${var.aws_region}:states:action/StartExecution"

  request_templates = {
    "application/json" = <<EOF
{
    "input": "$util.escapeJavaScript($input.json('$'))",
    "stateMachineArn": "${var.sfn_orchestrater_arn}"
}
EOF
  }
}
Run Code Online (Sandbox Code Playgroud)