Python開発の勉強(1) Vagrantで開発環境サーバ作成

はじめに

昨今、インフラエンジニア界隈でも自動化やInfrastructure as Codeといったワードがトレンドとなってきました。これらを実現するためのプログラミング言語としてPythonがメジャーなようなので、勉強してみることにしました。

まずは、プログラム言語を動かすために開発環境サーバを作成します。仮想マシン構築を自動化ツールのVagrantを使用します。

前提条件

今回は、macOS Mojave(10.14.x)で作業をします。

VirtualBoxのインストール

公式サイトのダウンロードページから、「VirtualBox 6.x.x platform packages」の項目で自身の環境に合わせたインストーラをダウンロードします。
公式マニュアルを参考に、自身の環境に合わせた項目のインストール方法を実施します。

Vagrantのインストール

公式サイトのダウンロードページから、「macOS 64-bit」のリンクをクリックし、インストーラをダウンロードします。
インストーラのダウンロードが完了したら、同ファイルを実行し、画面の指示にしたがってインストールを行います。
インストール完了後、macOSのターミナルを起動し、下記のようにバージョンが表示されればインストール完了です。

$ vagrant --version
Vagrant 2.2.4

仮想マシンの作成

Vagrant Cloudでは、Boxと呼ばれるVagrantで使用できる仮想マシンのイメージが公開されています。
今回は「centos/7」のBoxを使用して仮想マシンを作成します。

作業用ディレクトリの作成

Vagrant用のディレクトリ「vagrant」をホームディレクトリに作成し、同ディレクトリ配下に今回作成する仮想マシン用ディレクトリ「centos7」を作成します。

$ mkdir -p ~/vagrant/centos7
$ cd ~/vagrant/centos7
$ pwd
/Users/user01/vagrant/centos7

Vagrantfileの作成

仮想マシンの設計図であるVagrantfileを作成します。
コマンドの引数に指定している「centos/7」の部分は、Vagrant Cloudで公開されている任意のBoxを指定できます。

$ vagrant init centos/7
A `Vagrantfile` has been placed in this directory. You are now
ready to `vagrant up` your first virtual environment! Please read
the comments in the Vagrantfile as well as documentation on
`vagrantup.com` for more information on using Vagrant.
$ ls
Vagrantfile

Vagrantfileの編集

作成したVagrantfileを編集します。今回は下記変更を行いました。

  • ホストマシンからのみアクセス可能なNICを作成しIPアドレスに192.168.33.10を指定
  • 仮想マシンのメモリを1024MBに設定
  • 仮想マシン作成後、OS上でyum updateを自動実施

なお、ホストマシンからのみアクセス可能なNICの設定有無に関わらず、外部へNAT接続するタイプのNICは標準で設定されるようです。
今回作成するVagrantfileを使用して仮想マシンを作成すると、NATとホストオンリーアダプタの2NICが作成されることになります。

$ vim Vagrantfile

# config.vm.network "private_network", ip: "192.168.33.10"
↓
config.vm.network "private_network", ip: "192.168.33.10"

# config.vm.provider "virtualbox" do |vb|
#   # Display the VirtualBox GUI when booting the machine
#   vb.gui = true
#
#   # Customize the amount of memory on the VM:
#   vb.memory = "1024"
# end
↓
config.vm.provider "virtualbox" do |vb|
  vb.memory = "1024"
end

# config.vm.provision "shell", inline: <<-SHELL
#   apt-get update
#   apt-get install -y apache2
# SHELL
↓
config.vm.provision "shell", inline: <<-SHELL
  yum -y update
SHELL

編集したVagrantファイルからコメント行と空白行を除くと、下記のようになります。

$ egrep -v '(^.*#|^\s*$)' Vagrantfile
Vagrant.configure("2") do |config|
  config.vm.box = "centos/7"
  config.vm.network "private_network", ip: "192.168.33.10"
config.vm.provider "virtualbox" do |vb|
  vb.memory = "1024"
end
config.vm.provision "shell", inline: <<-SHELL
  yum -y update
SHELL
end

仮想マシン起動

編集したVagrantfileを使用して、仮想マシンを起動します。
ターミナルの出力で、パラメータが設定されていく様子がわかります。
vagrant initコマンドで指定した仮想マシンイメージが初回利用の場合、インターネット上からイメージをダウンロードする処理が入るので、仮想マシンの起動に十数分ほど時間が必要です。

$ vagrant up
Bringing machine 'default' up with 'virtualbox' provider...
==> default: Box 'centos/7' could not be found. Attempting to find and install...
default: Box Provider: virtualbox
default: Box Version: >= 0
==> default: Loading metadata for box 'centos/7'
default: URL: https://vagrantcloud.com/centos/7
==> default: Adding box 'centos/7' (v1902.01) for provider: virtualbox
default: Downloading: https://vagrantcloud.com/centos/boxes/7/versions/1902.01/providers/virtualbox.box
default: Download redirected to host: cloud.centos.org
==> default: Successfully added box 'centos/7' (v1902.01) for 'virtualbox'!
==> default: Importing base box 'centos/7'...
==> default: Matching MAC address for NAT networking...
==> default: Checking if box 'centos/7' version '1902.01' is up to date...
==> default: Setting the name of the VM: centos7_default_1560435174790_18483
==> default: Clearing any previously set network interfaces...
==> default: Preparing network interfaces based on configuration...
default: Adapter 1: nat
default: Adapter 2: hostonly
==> default: Forwarding ports...
default: 22 (guest) => 2222 (host) (adapter 1)
==> default: Running 'pre-boot' VM customizations...
==> default: Booting VM...
==> default: Waiting for machine to boot. This may take a few minutes...
default: SSH address: 127.0.0.1:2222
default: SSH username: vagrant
default: SSH auth method: private key
default:
default: Vagrant insecure key detected. Vagrant will automatically replace
default: this with a newly generated keypair for better security.
default:
default: Inserting generated public key within guest...
default: Removing insecure key from the guest if it's present...
default: Key inserted! Disconnecting and reconnecting using new SSH key...
==> default: Machine booted and ready!
==> default: Checking for guest additions in VM...
default: No guest additions were detected on the base box for this VM! Guest
default: additions are required for forwarded ports, shared folders, host only
default: networking, and more. If SSH fails on this machine, please install
default: the guest additions and repackage the box to continue.
default:
default: This is not an error message; everything may continue to work properly,
default: in which case you may ignore this message.
==> default: Configuring and enabling network interfaces...
==> default: Rsyncing folder: /Users/hoshino/vagrant/centos7/ => /vagrant
==> default: Running provisioner: shell...
default: Running: inline script
(略)

仮想マシンへログイン

vagrant sshで、起動した仮想マシンのシェルにログインできます。
仮想マシンのシェルからログアウトするときは、exitを実行します。

$ vagrant ssh
$ cat /etc/redhat-release
CentOS Linux release 7.6.1810 (Core)
$ exit

仮想マシンの停止

vagrant haltで仮想マシンを停止します。vagrant statusで、仮想マシンの状態を確認すると、停止前後で表示が変わることがわかります。

$ vagrant status
Current machine states:

default                   running (virtualbox)

The VM is running. To stop this VM, you can run `vagrant halt` to
shut it down forcefully, or you can run `vagrant suspend` to simply
suspend the virtual machine. In either case, to restart it again,
simply run `vagrant up`.
$ vagrant halt
==&gt; default: Attempting graceful shutdown of VM...
$ vagrant status
Current machine states:

default                   poweroff (virtualbox)

The VM is powered off. To restart the VM, simply run `vagrant up`

仮想マシンの削除

使わなくなった仮想マシンはvagrant destroyで削除できます。
一連のVagrantコマンドで、テストで使用するサーバなどは、必要な時に作成し、使い終わったら削除するような使い方ができます。

$ vagrant destroy
default: Are you sure you want to destroy the 'default' VM? [y/N] y
==&gt; default: Destroying VM and associated drives...
$ vagrant status
Current machine states:

default                   not created (virtualbox)

The environment has not yet been created. Run `vagrant up` to
create the environment. If a machine is not created, only the
default provider will be shown. So if a provider is not listed,
then the machine is not created for that environment.

まとめ

Vagrantで一連の仮想マシン操作を行いました。

  • Vagrantでは、Boxと呼ばれるインターネットに公開された仮想マシンイメージをベースに仮想マシンを作成します。
  • Vagrantfileで仮想マシンの設計図を作成します。
  • vagrantコマンドで仮想マシンの操作を行います。

コメントを残す

メールアドレスが公開されることはありません。 * が付いている欄は必須項目です