Я работаю с AWS API Gateway и Terraform, и мне нужна помощь с использованием переменных этапа в поле Connection_id ресурса aws_api_gateway_integration.
Я хочу использовать переменную этапа «${stageVariables.vpcLinkId}» для динамической установки Connection_id для интеграции шлюза API, использующей ссылку VPC.
resource "aws_api_gateway_integration" "vpc_integration_delete" {
rest_api_id = aws_api_gateway_rest_api.example.id
resource_id = aws_api_gateway_resource.example.id
http_method = "DELETE"
type = "HTTP_PROXY"
integration_http_method = "POST"
uri = "http://example.com/resource"
connection_type = "VPC_LINK"
connection_id = "${stageVariables.vpcLinkId}"
}
Terraform, похоже, не поддерживает использование stageVariables.vpcLinkId напрямую в поле Connection_id. Когда я применяю конфигурацию, выдается такая ошибка: «Управляемый ресурс «stageVariables» «vpcLinkId» не объявлен в корневом модуле». но я уже определил переменную stage в ресурсе aws_api_gateway_stage следующим образом:
resource "aws_api_gateway_stage" "example_stage" {
stage_name = "dev"
rest_api_id = aws_api_gateway_rest_api.example.id
deployment_id = aws_api_gateway_deployment.example.id
variables = {
vpcLinkId = aws_api_gateway_vpc_link.example.id
}
}
Есть ли способ использовать переменные этапа, такие как stageVariables.vpcLinkId, в поле Connection_id ресурса aws_api_gateway_integration в Terraform? Если нет, то как лучше всего динамически устанавливать Connection_id на основе переменной этапа, при этом управляя всем через Terraform?
Я уже определил переменную stage в ресурсе aws_api_gateway_stage следующим образом:
resource "aws_api_gateway_stage" "example_stage" {
stage_name = "prod"
rest_api_id = aws_api_gateway_rest_api.example.id
deployment_id = aws_api_gateway_deployment.example.id
variables = {
vpcLinkId = aws_api_gateway_vpc_link.example.id
}
}
Проблема в том, что API Gateway и Terraform используют один и тот же синтаксис шаблонов, а именно ${...}
. Подстановка переменных этапа — это то, что API Gateway должен делать, а не терраформировать. Поэтому вам необходимо убедиться, что terraform игнорирует строки шаблона, экранируя их. Синтаксис экранирования: $${...}
:
connection_id = "$${stageVariables.vpcLinkId}"
это приведет к тому, что ${stageVariables.vpcLinkId}
будет фактически отправлен на шлюз API вместо того, чтобы его интерпретировать терраформированием.
Попробуйте
$${stageVariables.vpcLinkId}
сбежать.