サーバ構築

ECSでParameterStoreを利用する

投稿日:

概要

Docker環境でDBのパスワードやシークレットキーなどを利用する場合、enviroment/env_fileなどで環境変数として渡すことが多いと思が、ECS環境だとコンソール画面から環境変数で渡した値が丸見えになってしまうので、何かいい方法ないか調べた。

参考
https://aws.amazon.com/jp/blogs/news/managing-secrets-for-amazon-ecs-applications-using-parameter-store-and-iam-roles-for-tasks/

現状、調べた限りコンテナ内からParameterStoreへアクセスさせるしかなさそうということが分かった。
ざっくりと以下のことをやる必要がありそう。(IAM設定・ParameterSotre設定済みの前提)

  1. コンテナにawscliインストールするようにDockerfile構成
  2. 環境変数をセットするスクリプトをコンテナに配置
  3. コンテナ起動時に2のスクリプトを実行させる

3については、
- Dockerfileのentrypointに上記のスクリプトを実行させる
- 実行時にentrypoint上書きして実行させる
- 実行時のcmdに追加する形で実行させる(command1 && command1みたいな感じ)
があると思う(他にもあるのかも?)

サンプルファイル

  • ParameterStoreから変数取得してそれを環境変数としてセットする

    #!/bin/ash
    
    EC2_AVAIL_ZONE=`curl --connect-timeout 3 -s http://169.254.169.254/latest/meta-data/placement/availability-zone`
    
    if [[ "${EC2_AVAIL_ZONE}" != "" ]]; then
      export EC2_REGION="`echo \"$EC2_AVAIL_ZONE\" | sed -e 's:\([0-9][0-9]*\)[a-z]*\$:\\1:'`"
    
      # Trying to retrieve parameters from the EC2 Parameter Store
      export PRD_DBPASSWORD=`aws ssm get-parameters --names "/prd/dbpassword" --with-decryption --region $EC2_REGION --output text 2>&1`
      export PRD_SECRETKEY=`aws ssm get-parameters --names "/prd/secretkey" --no-with-decryption --region $EC2_REGION --output text 2>&1`
    fi
    
    exec "$@"
    

  • AWSCLIインストールしてentrypointで上記のスクリプトを呼び出す

    FROM alpine
    
    RUN apk --update add python curl groff && \
        rm -rf /var/cache/apk/*
    
    RUN curl https://bootstrap.pypa.io/get-pip.py | python && pip install awscli
    
    COPY ./entrypoint.sh ./entrypoint.sh
    
    ENTRYPOINT ["./entrypoint.sh"]
    
    CMD ["env"]
    

-サーバ構築
-,

Copyright© 明日から頑張ります。 , 2025 All Rights Reserved Powered by STINGER.