3

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では、ステージの作成時にタグを指定できません。

何か案は?私は何が欠けていますか?

4

1 に答える 1