是否可以使用存盤在 s3 存盤桶上的 yaml 檔案設定 template_file?是否有任何其他解決方案可以將外部檔案附加到 API 網關(例如可以基于存盤在 s3 上的檔案構建的 lambda 函式)?
更新:我嘗試將 api_gateway 資源與 s3_bucket_object 結合為資料源,但 terraform 可能看不到它。有資訊表明沒有變化。
data "aws_s3_bucket_object" "open_api" {
bucket = aws_s3_bucket.lambda_functions_bucket.bucket
key = "openapi-${var.current_api_version}.yaml"
}
resource "aws_api_gateway_rest_api" "default" {
name = "main-gateway"
body = data.aws_s3_bucket_object.open_api.body
endpoint_configuration {
types = ["REGIONAL"]
}
}
我也嘗試通過使用 template_file 來實作它
data "aws_s3_bucket_object" "open_api" {
bucket = aws_s3_bucket.lambda_functions_bucket.bucket
key = "openapi-${var.current_api_version}.yaml"
}
data "template_file" "open_api" {
template = data.aws_s3_bucket_object.open_api.body
vars = {
lambda_invocation_arn_user_post = aws_lambda_function.user_post.invoke_arn
lambda_invocation_arn_webhook_post = aws_lambda_function.webhook_post.invoke_arn
}
}
resource "aws_api_gateway_rest_api" "default" {
name = "main-gateway"
body = data.template_file.open_api.rendered
endpoint_configuration {
types = ["REGIONAL"]
}
}
但結果是一樣的。
uj5u.com熱心網友回復:
- 對于 REST API 網關,您可以嘗試將aws_api_gateway_rest_api和aws_s3_bucket_object的主體引陣列合為資料源。
- 對于 HTTP API 網關,您可以嘗試將aws_apigatewayv2_api和aws_s3_bucket_object的主體引陣列合為資料源。
編輯:
來自 aws_s3_bucket_object 的 terraform 檔案:The content of an object (body field) is available only for objects which have a human-readable Content-Type (text/* and application/json).YAML 檔案的 Content-Type 標頭似乎不清楚,但在這種情況下,application/*對 YAML 使用 Content-Type 會導致 terraform 忽略檔案的內容。
uj5u.com熱心網友回復:
問題出在 YAML 檔案中,看起來 terraform 不支持它。必須使用 JSON 格式。
data "aws_s3_bucket_object" "open_api" {
bucket = aws_s3_bucket.lambda_functions_bucket.bucket
key = "openapi-${var.current_api_version}.json"
}
data "template_file" "open_api" {
template = data.aws_s3_bucket_object.open_api.body
vars = {
lambda_invocation_arn_user_post = aws_lambda_function.user_post.invoke_arn
lambda_invocation_arn_webhook_post = aws_lambda_function.webhook_post.invoke_arn
}
}
resource "aws_api_gateway_rest_api" "default" {
name = "main-gateway"
body = data.template_file.open_api.rendered
endpoint_configuration {
types = ["REGIONAL"]
}
}
轉載請註明出處,本文鏈接:https://www.uj5u.com/houduan/411128.html
標籤:
