LoginSignup
0
1

More than 3 years have passed since last update.

ECSなコンテナにSSM Parameter Storeの値を渡して保持させる

Last updated at Posted at 2020-08-09

はじめに

ECSの環境変数機能のちょっとニッチな使い方。
コンテナに固め込んで起動することから、動的に変更することができなくなるので注意。環境情報はコンテナから切り離すというプラクティスから離れるアンチパターンであることを意識して、コンテナ化するプロダクトがクラウドにリフトするだけのケース等やむを得ない場合だけ利用することを推奨。

SSM Parameter Storeの参照方法

コンテナのアプリケーションからSDKを使って参照するという方法もあるが、もっとお手軽に実装するのが、ECSの(正確にはタスク定義の)環境変数を使うのが良い。

以前の記事で書いた「コンテナの編集」⇒「環境変数」から設定可能だ。プルダウンで「ValueFrom」を選択して、Parameter StoreのARNを指定する。

TerraformでIaCで記述するのであれば、aws_ssm_parameterリソースを

resource "aws_ssm_parameter" "test" {
  name        = "/${var.environment}/teststring"
  description = "Test for SSM Parameter Store"
  type        = "SecureString"
  value       = "this-is-test-string"

  tags = {
    environment = var.environment
  }
}

な感じで定義し、これをaws_ecs_task_definitionリソースの中で

resource "aws_ecs_task_definition" "ecsfargate" {
  :
(中略)
  :
  container_definitions = <<EOF
  [
    {
      "name" : "${local.container_name}",
      "image": "${data.aws_ecr_repository.my_image.repository_url}:latest",
      "cpu": 0,
      "memoryReservation": 256,
      "secrets": [
        {
          "name": "TESTSTRING",
          "valueFrom": "${aws_ssm_parameter.test.arn}"
        }
      ],
  :
(以下略)

として参照する。

あとは、アプリケーションの中で環境変数で参照するなり、Dockerの起動コマンドの中で参照するなりしてあげれば期待通りのことができるようになる。

ただし、上記の通り、aws_ssm_parametertypeプロパティがSecureStringであるにもかかわらず、.tfファイル中の文字列は平文になってしまっている。チームで作業する場合なんかは、非常によろしくないのではなかろうか……。
ちなみに、Terraformの公式ドキュメントでは、「Terraform Cloud使うかリモートステートでちゃんと暗号化してね!」と書いてある。terraform.stateファイルはともかくとして、ローカル情報を暗号化したまま渡すことはできないのだろうか……。

0
1
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
0
1