Hashicorp Terraform を使用して AWS API Gateway を定義し、Lambda 関数をヒットします。コストを追跡できるように、AWS リソースに特定のタグを付ける必要があるという要件があります。Terraform は、ほとんどのリソースでこれを許可しているようです。ただし、 aws_api_gateway_deploymentを使用して API Gateway ステージを作成する場合、タグを指定するオプションがありません。
最近、Terraform にリソースaws_api_gateway_stageが追加されたことがわかります。これはタグを指定することを許可します。ただし、aws_api_gateway_stageにはaws_api_gateway_deploymentが必要です。同じ「stage_name」を与えると、次のようになります。
resource "aws_api_gateway_stage" "PlayLambdaApiGatewayStage" {
stage_name = "${environment}"
rest_api_id = "${aws_api_gateway_rest_api.PlayLambdaApiGateway.id}"
deployment_id = "${aws_api_gateway_deployment.PlayLambdaApiGatewayDeployment.id}"
tags = {
cost-allocation = "play-${var.environment}"
}
}
resource "aws_api_gateway_deployment" "PlayLambdaApiGatewayDeployment" {
depends_on = [
"aws_api_gateway_integration.PlayLambdaApiLambdaIntegration",
"aws_api_gateway_integration.PlayLambdaApiLambdaIntegrationRoot"
]
rest_api_id = "${aws_api_gateway_rest_api.PlayLambdaApiGateway.id}"
stage_name = "${var.environment}"
}
次に、両方のリソースがステージを作成しようとすると、エラーが発生します。
aws_api_gateway_stage.PlayLambdaApiGatewayStage: API Gateway ステージの作成中にエラーが発生しました: ConflictException: ステージは既に存在します ステータス コード: 409、リクエスト ID: f67a10c4-8aad-11e8-b486-c337ea2d214f
ここでは、aws_api_gateway_deploymentがすでにステージを作成しているように見えるため、aws_api_gateway_stageリソースもそれを作成できませんでした。ステージをデプロイメントの「depends_on」に追加して、ステージが最初に作成されるようにすると、2 つの間に循環があると不平を言います。
したがって、次のようになります。
- aws_api_gateway_stageは、デプロイに使用するステージを作成するのではなく、デプロイにステージを追加することのみを目的としています
- aws_api_gateway_deploymentでは、ステージの作成時にタグを指定できません。
何か案は?私は何が欠けていますか?