VirtualBox + Vagrant で Docker + AWS CLI の環境を最短で構築する

Amazon Elastic Container Service (Amazon ECS) で利用するための Docker コンテナを作るのに、手元の環境に Docker がなかったので、お手軽に Vagrant 環境の上で走らせることにしました。

やりたいこと

Docker 環境のほか、 ECR (Elastic Container Registry) にコンテナを登録するために AWS Command Line Interface (AWS CLI) が必要なので、これらがインストールされた CentOS 7 環境を起動します。

前提

  • VirtualBox と Vagrant はインストール済み
  • Vagrant box は CentOS 7 + Docker の williamyeh/centos7-docker を利用
  • awscli は Vagrant のプロビジョニングでインストール

Vagrantfile

適当なフォルダを作って、 Vagrantfile を作成します。

williamyeh/centos7-docker を使わせていただくので、 config.vm.box = "williamyeh/centos7-docker" を書くだけです。

あとは後述の provision.sh を読み込んで AWS CLI をインストールさせるために config.vm.provision を指定しておきます。

このときデフォルトでは root で実行されてしまうので privileged: false をつけて vagrant ユーザーで実行するようにしておきます。

# -*- mode: ruby -*-
# vi: set ft=ruby :

Vagrant.configure("2") do |config|
  config.vm.box = "williamyeh/centos7-docker"
  config.vm.provision "shell", path: 'provision.sh', privileged: false
end

プロビジョニング用シェルスクリプト

Vagrant 起動後に自動的に走らせたいスクリプトを記述します。今回は上記で書いた provision.sh というファイル名にします。

今回は、 awscli のインストールに必要な pip とそれに必要な epel リポジトリをインストールしてから、 AWS CLI をインストールしています。

AWS CLI のインストール方法は AWS CLI の公式ページ の手順を参考にしました。

#!/bin/env bash

sudo yum update -y
sudo yum install -y epel-release
sudo yum install -y python-pip
sudo pip install pip --upgrade
pip install awscli --user --upgrade

Vagrant 起動

Vagrant を起動します。起動後に自動的にプロビジョニングが行われます。

vagrant up

すべて完了したら vagrant ssh で VM に入り、 aws --version を叩いてバージョン番号が表示されれば OK です。

vagrant@localhost ~ $ aws --version
aws-cli/1.16.14 Python/2.7.5 Linux/3.10.0-327.28.3.el7.x86_64 botocore/1.12.4
kenzauros