LoginSignup
1
0

More than 1 year has passed since last update.

【Terraform】ECSの環境変数をSSMを利用して設定する

Posted at

初めに

現在作成中のポートフォリオは、Terraformを利用してAWSにデプロイをしています。

ECSのコンテナに対して、enviromentから環境変数を渡していましたが変数の追加などがあった際、タスク定義を書き換える必要がありめんどくさいです。

SSMを通して環境変数を渡すことでタスク定義を書き換えずに更新できます。

環境

  • terraform v1.0.2
  • provider AWS v3.38.0

環境変数を SSM に登録する

task definitionsecretsのvalueFromSSMのarnを追加する必要があります。

まずはssm_parameterを作成します。

変数自体はterraform.tfvarsに書きます。

ssm.tf
resource "aws_ssm_parameter" "secret" {
  name = "ENV_FILE"
  type = "SecureString"
  value = var.env_file
}

利用するタスク定義を書き換える

ecs_task definitionを書き換えます。

template_fileを利用しているので、varsssm_parameter_arnaws_ssm_parameterarnを書きます。

ecs.tf
resource "aws_ecs_task_definition" "ecs-task" { #タスク定義
  family                   = "ecs-task"
  cpu                      = "512"
  memory                   = "1024"
  network_mode             = "awsvpc"
  requires_compatibilities = ["FARGATE"]
  container_definitions    = data.template_file.rails_task.rendered
}

data "template_file" "rails_task" {
  template = file("${path.module}/task/rails_container_definitions.json")

  vars = {
    ssm_parameter_arn = aws_ssm_parameter.secret.arn,
    rails_image = var.rails_image,
  }
}
task_definitions.json
[
  {
    "name": "rails",
    "image": "${rails_image}",
    "environment": [
      {
        "name": "RAILS_ENV",
        "value": "production"
      }
    ],
    "secrets": [
      {
        "name": "ENV_FILE",
        "valueFrom": "${ssm_parameter_arn}"
      }
    ],
    // 以下省略
  }
]

これにより、ssm_paramterで設定したENV_FILErailsのコンテナに渡すことができます。

環境変数を変更したい場合は、terraform.tfvarsを書き換えterraform applyをすることで更新するできます。

参考

1
0
0

Register as a new user and use Qiita more conveniently

  1. You get articles that match your needs
  2. You can efficiently read back useful information
  3. You can use dark theme
What you can do with signing up
1
0