Gre*_*uff 2 amazon-web-services amazon-vpc terraform
设置
地形资源
我创建了一个私有 API 网关,它通过 VPC 链接将流量路由到 NLB。我已经部署了 API,但为了简洁起见,我省略了下面的该资源,因为它很琐碎。
resource "aws_api_gateway_rest_api" "this" {
name = "MyAPI"
body = "${file("./api-spec.yaml")}"
endpoint_configuration {
types = ["PRIVATE"]
}
}
resource "aws_lb" "app" {
name = "MyNLB"
internal = true
load_balancer_type = "network"
subnets = ["MySubnetIds"]
}
resource "aws_api_gateway_vpc_link" "nlb" {
name = "api-gateway-to-nlb"
target_arns = ["${aws_lb.app.arn}"]
}
Run Code Online (Sandbox Code Playgroud)
文件中引用了 VPC 链接api-spec.yaml。相关部分是:
paths:
/items:
get:
summary: Gets a collection of items
responses:
'200':
description: Ok
content:
application/json:
schema:
type: array
items:
$ref: '#/components/schemas/Item'
x-amazon-apigateway-integration:
type: http_proxy
httpMethod: GET
uri: https://my-internal-nlb/api/v1/items
connectionType: "VPC_LINK"
connectionId: "${vpclink_id}"
responses:
default:
statusCode: '200'
Run Code Online (Sandbox Code Playgroud)
问题
当我运行时terraform destroy,我收到以下消息:
错误:应用计划时出错:
发生 1 个错误:
* aws_api_gateway_vpc_link.nlb(销毁):发生 1 个错误:
* aws_api_gateway_vpc_link.nlb:删除 API Gateway VPC 链接 (bgzpv1) 时出错:BadRequestException:无法删除 vpc 链接。Vpc 链接“bgzpv1”在已部署阶段 [POST:50f55s:development, GET:50f55s:development] 中以 [Method:Resource:Stage] 格式引用,也在未部署集成 [GET:50f55s, POST:50f55s] 中以 [Method:Resource:Stage] 格式引用[方法:资源]。状态代码:400,请求 ID:d9a9667b-8099-11e9-98d1-9f899674f4b9
如果我等待几分钟然后terraform destroy再次运行,以下资源将被破坏:
aws_lb.appaws_api_gateway_vpc_link.nlb我用谷歌搜索过,但找不到有关该主题的太多信息。AWS 支持论坛上提出了一张罚单,但这是不久前的事,AWS 表示他们将解决该问题
实际答案与 @dtelaroli 提到的略有不同,我一直在研究问题可能是什么。
部署 API Gateway 后,它会内置到发行版中并推送到为其提供服务的 CloudFront。
如果您引用 VPC 链接,则该链接会内置到分配中并也会推送到 CloudFront。这就是为什么部署此API时,VPC链接无法被破坏。因为它正在实时 CloudFront 发行版中使用。
为了销毁VPC链接,您需要首先删除针对VPC链接的集成,然后再次部署API网关,这意味着您的API可能在这个阶段被破坏,但现在您将能够删除VPC 链接。
此时,您应该能够销毁 API 网关,或以某种方式重建它,因为 CloudFront 不再包含与 VPC 链接的连接。
我无法想象如何通过使用空资源或类似的东西来编写脚本或将其构建到 terraform 中,但这就是问题发生的原因。
| 归档时间: |
|
| 查看次数: |
2578 次 |
| 最近记录: |