実践Terraform ch12 設定管理

Terraform勉強メモ

出典: 


https://github.com/wand2016/terraform_ch12_example

コンテナの設定管理

  • 実行環境ごとに異なる設定をコンテナ実行時に注入する

    • DBホスト名、パスワード等

SSMパラメータストア

  • SSM: Simple Systems Manager
  • 設定管理のマネージドサービス
  • 平文または暗号化したデータとして保存できる

    • ~4KB

      • KMSの制限

Terraformによるコード化

よくない

resource "aws_ssm_parameter" "db_username" {
  name = "/db/username"
  value = "root"
  type = "String"
  description = "データベースのユーザー名"
}

resource "aws_ssm_parameter" "db_raw_password" {
  name = "/db/raw_password"
  value = "VeryStrongPassword!"
  type = "SecureString"
  description = "データベースのパスワード"
}

20200317215142

20200317215437

  • AWSコンソール上では伏せ字になっているが、暗号化すべき情報がmain.tfに平文で書かれてしまう

よい

resource "aws_ssm_parameter" "db_username" {
  name = "/db/username"
  value = "root"
  type = "String"
  description = "データベースのユーザー名"
}

resource "aws_ssm_parameter" "db_password" {
  name = "/db/password"
  value = "uninitialized"
  type = "SecureString"
  description = "データベースのパスワード"

  lifecycle {
    ignore_changes = [value]
  }
}
  • 未初期化のダミー値を入れておいてapply

20200317215520

  • のち、aws cliで上書きする

    • lifecycleでignoreしているのでドリフトにはならない
docker-compose run aws ssm put-parameter --name '/db/password' --type SecureString \
  --value 'ModifiedStrongPassword!' --overwrite
{
    "Version": 2,
    "Tier": "Standard"
}

20200317215504

コード化する必要ある?

  • 最初からこれでいいじゃん:
docker-compose run aws ssm put-parameter --name '/db/password' --type SecureString \
  --value 'ModifiedStrongPassword!' --overwrite

20200317215554

  • 好み

    • tfファイルにしておくと、ドキュメンテーションの場所として有用

SSMパラメータストアとECSの統合

  [
    {
      "name": "alpine",
      "image": "alpine:latest",
      "essential": true,
      "logConfiguration": {
        "logDriver": "awslogs",
        "options": {
          "awslogs-region": "ap-northeast-1",
          "awslogs-stream-prefix": "batch",
          "awslogs-group": "/ecs-scheduled-tasks/example"
        }
      },
+     "secrets": [
+       {
+         "name": "DB_USERNAME",
+         "valueFrom": "/db/username"
+       },
+       {
+         "name": "DB_PASSWORD",
+         "valueFrom": "/db/password"
+       }
+     ],
-     "command": ["/bin/date"]
+     "command": ["/usr/bin/env"]
    }
  ]

20200317215610