AWS ECR を使う開発に便利な Vagrantfile
概要
ECS で稼働させるアプリケーションを開発していますが、Docker for Mac は何かと遅いので、Docker/ECR まわりの作業だけ Vagrant上でやるための Vagrantfile を作りました。その内容を残しておきます。
Vagrantfile
# Vagrant環境に予めインストールしておきたいものを記述する # ここでは、AWS CLI をインストールし、 ECR へ Push するための docker login コマンドを alias として追加している $provision_script = <<SCRIPT apt-get update apt-get install -y zip unzip curl "https://awscli.amazonaws.com/awscli-exe-linux-x86_64.zip" -o "awscliv2.zip" unzip awscliv2.zip sudo ./aws/install --update rm awscliv2.zip echo 'alias ecr-docker-login="docker login -u AWS -p $(aws ecr get-login-password) https://$(aws sts get-caller-identity --query Account --output text).dkr.ecr.${AWS_REGION}.amazonaws.com"' >> .bashrc SCRIPT Vagrant.configure("2") do |config| # お好みの Distro の Box を以下サイトから検索して指定。ここでは Ubuntu 18.04 を使用。 # https://app.vagrantup.com/boxes/search config.vm.box = "bento/ubuntu-18.04" # メモリを増やしておく config.vm.provider "virtualbox" do |v| v.memory = 4096 v.cpus = 2 end # Windows + Hyper-V の場合 # config.vm.provider "hyperv" do |v| # v.memory = 4096 # v.cpus = 2 # end # VM 上で初めから Docker を使えるようにしておく config.vm.provision "docker" # 初期インストールスクリプト実行 config.vm.provision "shell", inline: $provision_script # Dockerコンテナでサービスするポートにホストからアクセスできるようにする config.vm.network "private_network", ip: "172.12.8.150" config.vm.network "forwarded_port", host: 8080, guest: 80 # ホスト側のソースコード VM 内で参照するため共有しておく # (gitwork の下に、 github から clone したリポジトリがある想定) config.vm.synced_folder "#{ENV['HOME']}/gitwork", "/home/vagrant/gitwork", type: "nfs" # Windows の場合 # config.vm.synced_folder "#{ENV['HOMEDRIVE']}\\#{ENV['HOMEPATH']}\\gitwork", "/home/vagrant/gitwork", type: "nfs" # ホスト(ローカル)での AWS Credential を共有したい場合 # config.vm.synced_folder "#{ENV['HOME']}/.aws", "/home/vagrant/.aws", type: "nfs" end
使用方法
vagrant up
して、VMが起動したら vagrant ssh
し、上記でマウントしたソースコードのディレクトリに移動して docker build
します。
ECR に Push するときは
$ AWS_REGION=ap-northeast-1 ecr-docker-login # AWS_REGION には使用する ECRリポジトリがあるリージョンを指定
とした後に、ドキュメント通り、タグ付けと docker push を行います。
終わりに
今回は、Mac上に開発環境が出来上がっている状態で作成したので、ソースコードなどのリソースはホスト(Mac) のファイルシステムをマウントする形にしていますが、ゼロから作るのであれば、Vagrant の VM のファイルシステム上に git clone
して開発環境を作ったほうが何かと幸せかもしれません。
VS Code なら SSH Remote Connect を使えば開発作業もある程度シームレスにできるでしょう。