TerraForm:无法将 API 网关使用计划链接到暂存,需要"api_stages.0.stage"



我无法创建一个API网关使用计划到它的阶段,即使我按照文档中给出的。

这是资源代码块。

resource "aws_api_gateway_usage_plan" "main" {
name = var.project
api_stages {
api_id = aws_api_gateway_rest_api.main.id
stage  = aws_api_gateway_deployment.main.stage_name
}
quota_settings {
limit  = 10000
period = "WEEK"
}
throttle_settings {
burst_limit = 5
rate_limit  = 50
}
tags = var.tags
}

和Iterraform apply时的错误消息;这很奇怪,因为我已经指定了舞台参数& &;价值。

Error: Missing required argument
│
│   with aws_api_gateway_usage_plan.main,
│   on main.tf line 112, in resource "aws_api_gateway_usage_plan" "main":
│  112: resource "aws_api_gateway_usage_plan" "main" {
│
│ The argument "api_stages.0.stage" is required, but no definition was found.

整个脚本是这样的。


resource "aws_api_gateway_rest_api" "main" {
# naming api gateway
name        = "api-gateway-${var.project}-${var.env}"
description = "API gateway for ${var.project}"
tags        = var.tags
}
resource "aws_api_gateway_resource" "main" {
# define API endpoint
rest_api_id = aws_api_gateway_rest_api.main.id
parent_id   = aws_api_gateway_rest_api.main.root_resource_id
path_part   = "{proxy+}"
}

# method ------
resource "aws_api_gateway_method" "main" {
# define the method(s), e.g. GET / POST / etc.
resource_id   = aws_api_gateway_resource.main.id
rest_api_id   = aws_api_gateway_rest_api.main.id
authorization = "NONE"
http_method   = "ANY"
}

# integration ------
resource "aws_api_gateway_integration" "main" {
# link with a lambda function
rest_api_id = aws_api_gateway_rest_api.main.id
resource_id = aws_api_gateway_resource.main.id
http_method = aws_api_gateway_method.main.http_method
integration_http_method = "POST"
type                    = "AWS_PROXY"
uri                     = var.lambda_arn
}

# deployment to stage ------
resource "aws_api_gateway_deployment" "main" {
# deploy API to a stage
rest_api_id = aws_api_gateway_rest_api.main.id
depends_on = [
aws_api_gateway_integration.main
]
lifecycle {
create_before_destroy = true
}
}
resource "aws_api_gateway_stage" "main" {
# define a stage
deployment_id = aws_api_gateway_deployment.main.id
rest_api_id   = aws_api_gateway_rest_api.main.id
stage_name    = var.env
}
resource "aws_lambda_permission" "apigw_lambda" {
statement_id  = "AllowExecutionFromAPIGateway-${var.project}-${var.env}"
action        = "lambda:InvokeFunction"
function_name = var.lambda_name
principal     = "apigateway.amazonaws.com"
source_arn = "${aws_api_gateway_rest_api.main.execution_arn}/*/*"
}

# API key ------
resource "aws_api_gateway_usage_plan" "main" {
name = var.project
api_stages {
api_id = aws_api_gateway_rest_api.main.id
stage  = aws_api_gateway_deployment.main.stage_name
}
quota_settings {
limit  = 10000
period = "WEEK"
}
throttle_settings {
burst_limit = 5
rate_limit  = 50
}
tags = var.tags
}
resource "aws_api_gateway_api_key" "main" {
name = "api-key-${var.project}"
}
resource "aws_api_gateway_usage_plan_key" "main" {
key_id        = aws_api_gateway_api_key.main.id
key_type      = "API_KEY"
usage_plan_id = aws_api_gateway_usage_plan.main.id
}

使用的版本为

terraform {
required_providers {
aws = {
source  = "hashicorp/aws"
version = "~> 4.21.0"
}
}
required_version = ">= 1.2.2"
}

原来我使用的文档是错误的/过时的。aws_api_gateway_deployment.main.stage_name没有艺名

之前
api_stages {
api_id = aws_api_gateway_rest_api.main.id
stage  = aws_api_gateway_deployment.main.stage_name
}

api_stages {
api_id = aws_api_gateway_rest_api.main.id
stage  = aws_api_gateway_stage.main.stage_name
}

最新更新