ECS on Fargateで複数環境のDockerfileを共通で利用する

複数環境(本番、検証、開発)でECS on Fargateを構築した際にDockerfileを共通化した備忘録です。

前提情報

  • 各環境は別々のAWSアカウント
  • ECSのタスク内は「Nginx」と「SpringBoot」のコンテナで連携
  • 本記事の共通化対象は「SpringBoot」のコンテナで利用するDockerfile

手順

buildspec.yml内のdocker buildするところでDockerfileに引数を渡すことで共通化できます。
例)Javaのメモリ割り当てのところを共通化する

1、パラメータストアにメモリの初期値と最大値を設定する

メモリ初期値のキー名:/web/java-min-memsize

メモリ最大値のキー名:/web/java-max-memsize ※画像は省略

2、buildspec.ymlでパラメータストアの値を取得し、Dockerfileに引数で渡す

--build-arg」を利用してDockerfileに引数で渡す
複数の値を渡したい場合は以下のように「--build-arg」を複数書く。

buildspec.yml

version: 0.2

env:
  parameter-store:
    maxsize: "/web/java-max-memsize"
    minsize: "/web/java-min-memsize" 

phases:
  install:
    runtime-versions:
      python: 3.9
  pre_build:
    commands:
   pre_buildは省略    

  build:
    commands:
      - mv buildConf/backOffice/* .
      - docker build -t $REPOSITORY_URI:latest --build-arg MAXSIZE=${maxsize} --build-arg MINSIZE=${minsize} .
      - docker tag $REPOSITORY_URI:latest $REPOSITORY_URI:$IMAGE_TAG


3、Dockerfileで値を受け取る

「ARG」で引数を受け取り、「ENV」で環境変数に設定します。
最後に${}で括って環境変数名を入れます。
環境変数に入れないと実行時に参照することができません。

Dockerfile

FROM public.ecr.aws/amazoncorretto/amazoncorretto:17

ARG MINSIZE
ARG MAXSIZE

ENV MINSIZE ${MINSIZE}
ENV MAXSIZE ${MAXSIZE}

CMD java -Xms${MINSIZE}m -Xmx${MAXSIZE}m -Dloader.path=/test/conf -jar /test/sample.jar

以上で設定は完了です。