AWSへのデプロイ環境をdockerで作成する
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コンテナ内でできる。
ディスカッション
コメント一覧
まだ、コメントがありません