.env から AWS パラメータストアの Terraform ファイルを生成するツールを作った


envssm

Docker/docker-compose で.env を使っていると本番環境のシークレットの管理がめんどうですよね。

シークレットは AWS のパラメータストアに登録して、ECS など環境変数として利用するのが一般的のようですが、一つ一つコンソールに打ち込むのは骨が折れます。

なので.env ファイルからパラメータストアの Terraform ファイルを生成するツールを作りました。

対象読者

  • Terraform の基本がわかっている方
  • docker-compose などで.env を使っている方

Terraform や Docker の使い方には触れませんのでご了承ください。

インストール

go get github.com/tetsuzawa/envssm

Example

1. .env を用意

$ tree -a
.
└── .env
.env
DB_USER=user
DB_PASSWORD=password

2. envssm を実行

$ envssm

3. 出力ファイルを確認

$ tree -a
.
├── .env
├── ssm.tf              # generated
├── terraform.tfvars    # generated
└── variable.tf         # generated
ssm.tf
resource "aws_ssm_parameter" "db_user" {
  name  = "DB_USER"
  type  = "SecureString"
  value = var.db_user
}

resource "aws_ssm_parameter" "db_password" {
  name  = "DB_PASSWORD"
  type  = "SecureString"
  value = var.db_password
}
variables.tf
variable "db_user" {
  type = string
}

variable "db_password" {
  type = string
}
terraform.tfvars
db_user     = "user"
db_password = "password"

オプション

  • -f: .env ファイルのパス (prod.env や ./build/dev.env など)
  • -d: description = ""などのプレースホルダを生成
  • -so: 出力される ssm.tf のパス
  • -vo: 出力される variables.tf のパス
  • -to: 出力される terraform.tfvars のパス

説明

  • 出力ファイルを Terraform の構成に加えていただければパラメータストアに環境変数を登録することができます。
  • パラメータストアから環境変数を読み込むために EC2 や ECS 側で参照設定を忘れないようにしてください

終わりに

私の場合、パラメータストアを使うことで環境変数の注入を AWS 側に任せることができるようになり、GitHub 上での CD の方法に悩まされることがなくなりました。

設計など適当に短時間で作ってしまったため、修正依頼お待ちしてます。
https://github.com/tetsuzawa/envssm