Terraform配置API Gateway对接Kinesis报ARN格式错误如何解决?
问题排查与修复方案
你遇到的报错核心是集成类型配置错误,配合其他几个配置疏漏共同导致报错,具体问题和修正方法如下:
- 集成类型配置错误
AWS_PROXY类型的API Gateway集成仅支持Lambda函数代理调用,对接Kinesis、Firehose这类其他AWS服务时,需要将type参数从AWS_PROXY改为AWS。 - 缺失IAM权限配置
你没有添加credentials参数指定调用Kinesis/Firehose的IAM角色ARN,需要补充该参数,且对应角色需要配置允许API Gateway服务扮演、以及对应Kinesis/Firehose的操作权限。 - 依赖配置不匹配
你定义的API资源名为aws_api_gateway_resource.api_resource_kinesis,但depends_on中写的资源名是resource_kinesis,名称不匹配会导致依赖解析异常。 - 服务资源不匹配
你当前创建的是Kinesis Firehose交付流,但集成URI配置的是原生Kinesis数据流的PutRecord动作,如果要对接你声明的Firehose流,需要将URI调整为Firehose对应的服务动作。
修正后的配置示例(对接你创建的Firehose流)
resource "aws_api_gateway_integration" "kinesis_integration" { rest_api_id = aws_api_gateway_rest_api.kinesis.id resource_id = aws_api_gateway_resource.api_resource_kinesis.id http_method = aws_api_gateway_method.post_kinesis.http_method # 修正集成类型 type = "AWS" # 修正为Firehose对应的动作URI uri = "arn:aws:apigateway:eu-central-1:firehose:action/PutRecordBatch" integration_http_method = "POST" # 补充调用服务的IAM角色 credentials = aws_iam_role.integration_role.arn depends_on = [ aws_api_gateway_resource.api_resource_kinesis ] }
如果确实需要对接原生Kinesis数据流而非Firehose,你需要额外创建aws_kinesis_stream类型的资源,再将URI改回Kinesis PutRecord地址即可。
内容的提问来源于stack exchange,提问作者user13067694
相关产品推荐
相关产品推荐

