AWSへのデプロイ環境をdockerで作成する

2019-09-23

aws cliが使えるdocker環境の作成について。これはもう書き尽くされた情報なんですが、一応メモ。

ローカルPC内やデプロイ用サーバー内でも環境を汚したくない時がある。特にローカル環境ではAWSの複数アカウントを使用する場合、管理も複雑になりがち。

そこでdockerでaws cliの環境を作成し、そこからawsへデプロイする、またはgitlabやjenkinsでCIするのが良い。

AWS-CLIなDocker環境

Dockerfileは以下のように作成。

FROM docker
ARG pip_installer="https://bootstrap.pypa.io/get-pip.py"
ARG awscli_version="1.16.76"

RUN apk --update add \
    bash \
    python \
    curl \
    groff \
    jq \
    less

RUN curl ${pip_installer} | python && \
    pip install awscli==${awscli_version}
RUN bash -c 'echo complete -C '/usr/bin/aws_completer' aws  >> $HOME/.bashrc'

ENV PS1="[\u@\h:\w]$"

そしてcredentialsやconfigも作成(それぞれ用に作成)
credentials

[ecr]
aws_access_key_id = HOGE
aws_secret_access_key = FUGA

config

[profile ecr]
region = ap-northeast-1

credentialsとconfigは.awsディレクトリ内に配置しておく。
そしてdocker-compose.ymlで以下のようにマウント。

version: '3'
services:
  aws-cli:
      build: ./
      working_dir: /src
      volumes:
        - /var/run/docker.sock:/var/run/docker.sock
        - ./.aws:/root/.aws
      tty: true

そしてbuildしてrunするとdocker内でawsコマンドが使用できるよね。

docker-compose build
docker-compose up -d

Dockerコンテナ内からdockerコマンドも

上記のdockerコンテナではdockerコマンドも使える。imageを「docker」公式イメージでビルドしているし、わざわざホストマシンの/var/run/docker.sockをマウントしているからだ。

他のdockerコンテナやイメージをビルドしてそれをAWS ECRにpushするなど、上記のコンテナ内から行える。例えば上記のaws-ciコンテナ内で以下を実行するなど。

$(aws ecr get-login --region ap-northeast-1 --profile erc --no-include-email)
docker commit [対象のdockerコンテナ名] ECR-URI
docker push ECR-URI

これで、dockerイメージのビルドからawsへのデプロイまでdockerコンテナ内でできる。