我們在 vars 中有一個前綴,它基于一個名為deployment_name_modifier.
prefix = (length(var.deployment_name_modifier) != 0) ?
"${var.environment}-${var.deployment_name_modifier}-${local.service_name}" :
"${var.environment}-${local.service_name}"
這是 API 網關設定(當然不是全部):
resource "aws_apigatewayv2_api" "ui_backend_gateway" {
name = "${local.prefix}-gateway"
protocol_type = "HTTP"
cors_configuration {
allow_origins = var.environment == "prd" ? ["foo.bar.services"] : ["*"]
allow_methods = ["POST", "OPTIONS", "HEAD"]
allow_headers = [
"Content-Type", "X-Amz-Date", "X-Amz-Security-Token",
"Authorization", "X-Api-Key", "X-Requested-With", "Accept", "Access-Control-Allow-Methods",
"Access-Control-Allow-Origin", "Access-Control-Allow-Headers", "referer", "origin",
"access-control-request-method", "sec-*"
]
max_age = 300
}
}
我想要的是一個帶有 Lambda 和 API 網關的功能分支,它連接到它自己的子域,而主分支位于一組單獨的資源上。
問題是使用deployment_name_modifierset 應用此配置作業正常——直到我部署 master。當我使用空 Terraform 部署 master 時,deployment_name_modifier將功能分支中的子域應用到已經存在的 API 網關。我通過區分兩個節目計劃看到了這一點。這意味著主分支資源集的子域從dev.foo.bar.services到dev-1234.foo.bar.services。我真正需要的是:
dev.foo.bar.services -> API A -> Lambda A
dev-1234.foo.bar.services -> API B -> Lambda B
其中 A 是主分支,B 是功能分支(1234 是票號,它是分支名稱的一部分)。改變 aws_apigatewayv2_api舞臺名稱顯然是不夠的。
如何讓 Terraform 相信我真的想要兩個基于輸入變數的完全獨立的 API 網關?
如果我需要在這里添加一些東西(也許是子域配置?)請在評論中告訴我。
地形 1.1.3
uj5u.com熱心網友回復:
如果您想重用您的代碼庫,一種方法是通過 TF 的作業區:
多個作業區的常見用途是創建一組基礎架構的并行、不同副本,以便在修改主要生產基礎架構之前測驗一組更改。
uj5u.com熱心網友回復:
我通常會通過引入作業區兄弟來實作狀態和計劃檔案的分離!如果您的 terraform 檔案共享不同環境的狀態,您的腳本將破壞之前的 api 網關和 lambda 函式!這是我的計劃自動化腳本的示例:
#!/bin/bash
# Script will stop if any error is thrown
set -e
ENV_NAME="demo" # Could be changed to prod
WORKSPACE_NAME="upload-apis-${ENV_NAME}"
PLAN_FILE="./.plans/${ENV_NAME}_tf_plan"
PLAN_DIR="./.plans"
#source $ENV_FILE;
if test -d "$PLAN_DIR"; then
echo "Plan directory already exists"
else
echo "Creating plan directory"
mkdir ./.plans
fi
# Initialize without remote state to execute validation
terraform init -backend=false
# Script will stop if any validation issue is found
terraform validate
# Initialize terraform with remote state after validation
terraform init
# Beautify code format of TF files
terraform fmt .
WS_COUNT=$(terraform workspace list | grep "$WORKSPACE_NAME" | wc -l)
# Create workspace if not exists
if [[ $WS_COUNT == 0 ]]; then
terraform workspace new "$WORKSPACE_NAME"
fi
terraform workspace select "$WORKSPACE_NAME"
terraform plan -out="${PLAN_FILE}" -var-file="./envs/${ENV_NAME}.tfvars"
echo "Plan file is saved into ${ENV_NAME}_${PLAN_FILE}"
和我的apply劇本
#!/bin/bash
ENV_NAME="demo" # Could be changed to prod
WORKSPACE_NAME="upload-apis-${ENV_NAME}"
PLAN_FILE="./.plans/${ENV_NAME}_tf_plan"
terraform workspace select "$WORKSPACE_NAME"
terraform apply "${PLAN_FILE}"
轉載請註明出處,本文鏈接:https://www.uj5u.com/shujuku/419433.html
標籤:
上一篇:IAM中的組和路徑有什么區別?
