首页 文章

terraform api网关与openapi规范集成

提问于
浏览
1

我目前正在使用json文件中的open api spec创建一个带有terraform的AWS API网关 .

resource "aws_api_gateway_rest_api" "my_test_gateway" {
  name        = "test_gateway"
  description = "test gateway"
  body        = "${file("assets/test_openapi_spc.json")}"
}

我需要将由所述openAPI规范创建的api资源映射到AWS Step Functions . 如何引用openAPI规范创建的API网关资源,以便能够创建新的aws_api_gateway_integration?通常你会做这样的事情并描述terraform中的资源

resource "aws_api_gateway_integration" "test" {
  resource_id = "${aws_api_gateway_resource.my_resource.id}"
}

但是,就我而言,我的terraform脚本中没有定义资源ID,因为它们是由openAPI规范创建的 .

是否有某种方法可以提取作为terraform数据源创建的api网关的所有资源,以便我可以引用它们?我不确定我是否遗漏了一些重要的东西 .

1 回答

  • 1

    似乎最好的方法是使用swagger扩展https://swagger.io/docs/specification/openapi-extensions/

    API资源的集成部分可以驻留在您的swagger规范中 .

    就像在aws API网关扩展中提到的swagger https://docs.aws.amazon.com/apigateway/latest/developerguide/api-gateway-swagger-extensions.html

    因此,如果要将资源映射到步骤函数,您可以执行以下操作:

    x-amazon-apigateway-integration:
        credentials: "arn:aws:iam::my_account:role/ApiGWToStepFunction"
        responses:
          default:
            statusCode: "201"
        uri: "arn:aws:apigateway:my_zone:states:action/StartExecution"
        passthroughBehavior: "when_no_templates"
        httpMethod: "POST"
        type: "aws"
    

    我还没完成,但我相信它应该是 arn:aws:apigateway:my_zone:states:your_step_function_name 而不是 arn:aws:apigateway:my_zone:states:action/StartExecution

相关问题