初めに
現在作成中のポートフォリオは、Terraformを利用してAWSにデプロイをしています。
ECSのコンテナに対して、enviromentから環境変数を渡していましたが変数の追加などがあった際、タスク定義を書き換える必要がありめんどくさいです。
SSMを通して環境変数を渡すことでタスク定義を書き換えずに更新できます。
環境
- terraform v1.0.2
- provider AWS v3.38.0
環境変数を SSM に登録する
task definitionのsecretsのvalueFromにSSMの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を利用しているので、varsのssm_parameter_arnにaws_ssm_parameterのarnを書きます。
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_FILEをrailsのコンテナに渡すことができます。
環境変数を変更したい場合は、terraform.tfvarsを書き換えterraform applyをすることで更新するできます。