You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

Terraform配置API Gateway集成Kinesis时URI参数报错如何处理

问题解决方案

你遇到的报错是因为直接传入Kinesis数据流的ARN作为API Gateway集成uri不符合AWS服务集成的uri规范,对接Kinesis时的uri构造规则和修改方案如下:

正确的uri构造规则

对接Kinesis服务时,uri需要按照API Gateway AWS服务集成的规范拼接,你所在的区域为eu-central-1,按你调用的Kinesis API不同填写对应值:

  • 单条数据写入:调用PutRecord接口,uri为 arn:aws:apigateway:eu-central-1:kinesis:action/PutRecord
  • 批量数据写入:调用PutRecords接口,uri为 arn:aws:apigateway:eu-central-1:kinesis:action/PutRecords

修改后的Terraform配置示例

resource "aws_api_gateway_integration" "kinesis_integration" {
  rest_api_id             = aws_api_gateway_rest_api.shippeo_api_kinesis.id
  resource_id             = aws_api_gateway_resource.shippeo_api_resource_kinesis.id
  http_method             = aws_api_gateway_method.post_json_files_kinesis.http_method
  # 注意:对接非Lambda的AWS服务使用AWS类型,不要用AWS_PROXY
  type                    = "AWS"
  # 替换为符合规范的uri
  uri                     = "arn:aws:apigateway:eu-central-1:kinesis:action/PutRecord"
  integration_http_method = "POST"
  # 需提前创建有Kinesis写入权限的IAM角色,填入角色ARN
  credentials             = aws_iam_role.api_gateway_kinesis_role.arn

  # 配置请求头,Kinesis要求指定json协议版本
  request_parameters = {
    "integration.request.header.Content-Type" = "'application/x-amz-json-1.1'"
  }

  # 配置请求模板,将客户端请求转换为Kinesis接受的格式,示例如下:
  request_templates = {
    "application/json" = <<EOF
{
  "StreamName": "${aws_kinesis_stream.shippeo-kinesis-stream.name}",
  "Data": "$util.base64Encode($input.body)",
  "PartitionKey": "$context.requestId"
}
EOF
  }

  depends_on = [
    aws_api_gateway_resource.shippeo_api_resource_kinesis
  ]
}

额外注意事项

  • 你需要为上述配置中用到的IAM角色添加权限策略,允许执行kinesis:PutRecord或kinesis:PutRecords操作,资源指向你的Kinesis数据流ARN
  • 如果有自定义PartitionKey的需求,可以修改请求模板中的PartitionKey字段为你需要的取值逻辑

内容的提问来源于stack exchange,提问作者x89

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.09.24 12:36:00