Windows Subsystem for Linuxでpiculetとroadworkerを実行してみる

windows-10-logo

中山(順)です。

みなさん、PCは何を利用されてますか?
私はクラスメソッドのジョインするまでWindowsを利用しており、これからもWindowsを利用します。

しかし、社内のノウハウ(ツールのインストールおよび導入方法)はMacやLinuxを前提に書かれていることがほとんどです。
これでは社内のノウハウを十分に生かせない・・・
しかし、今のWindowsにはWindows Subsystem for Linux(以下、WSL)があります!(まだベータですが)

というわけで、この記事ではpiculetとroadworkerを使えるようにするまでの手順をまとめました。

Windows Subsystem for Linux(WSL)とは?

公式のドキュメント1では以下のように説明されています。

The Windows Subsystem for Linux lets developers run Linux environments -- including most command-line tools, utilities, and applications -- directly on Windows, unmodified, without the overhead of a virtual machine.

つまり、Linux上で動作する様々なツールをWindowsで動作させることができる機能です。

この記事の執筆時点ではベータ版ですが、直近の大型アップデート(Windows 10 Fall Creators Update)で正式版が提供される予定2です。

piculet, roadworkerとは?

Genki Sugawaraさんが開発したCodenize Toolsに含まれるツールです。
Codenize Toolsは、AWSのリソースなどをコード化するためのツール群で、puculetはVPCのSecurity Group、roadworkerはRoute53のHosted Zoneを管理するツールです。

全体の流れ

大きくは以下の手順でインストールを行います。

  1. WSLの有効化
  2. 前提条件の確認
  3. ツールのインストール

1. WSLの有効化

弊社福田の記事3をご確認ください。

Windows 10 Anniversary Updateで導入されたbashでAWS CLIを実行してみる

ちなみに、この記事を書いている時点のビルド(15063.632)では、Ubuntu 16.04に相当する環境を利用することが可能です。

$ lsb_release -a

No LSB modules are available.
Distributor ID: Ubuntu
Description:    Ubuntu 16.04.3 LTS
Release:        16.04
Codename:       xenial

将来的には他のディストリビューション(OpenSUSE, SLES)も利用できるようになるとのことです。4

2. 前提条件の確認

初期状態のWSLでは、rubyおよび開発ツールが含まれていません。
インストール済みのパッケージは、以下のコマンドで確認できます。

dpkg -l

ruby, build-essential

ruby5および開発ツールをインストールします。

sudo apt-get install ruby ruby-dev
sudo apt-get install build-essential

zlib1g-dev

piculetをインストールするため、以下のパッケージを追加します。
(ruby, build-essentialのみだと、エラーが発生しました)

sudo apt-get install zlib1g-dev

libpcap-dev

roadworkerをインストールするため、以下のパッケージを追加します。
(ruby, build-essentialのみだと、エラーが発生しました)

sudo apt-get install libpcap-dev

3. ツールのインストール

ツール自体のインストール方法は、gemを実行するだけです。
詳細は各ツールのreadmeをご確認ください。

piculet6

sudo gem install piculet --no-ri --no-rdoc

roadworker7

sudo gem install roadworker --no-rdoc --no-ri

動作確認

piculetで動作を確認してみます。

認証情報、リージョンの指定

認証情報およびリージョンを環境変数に格納します。
(AWS CLIなどで~/.aws配下に認証情報やリージョンを設定済みの場合、-pオプションでプロファイル名を指定することも可能です。)

$ export AWS_ACCESS_KEY_ID='...'
$ export AWS_SECRET_ACCESS_KEY='...'
$ export AWS_REGION='ap-northeast-1'

設定のエクスポート、設定の修正

現在の設定をエクスポートし、変更を加えます。
以下のようにviなどでも問題ありませんが、お好みのエディタ(Visual Studio Codeなど)で編集していただいても大丈夫です。
(Linux側の環境からWindowsファイルシステムを操作することが可能です)
ファイルシステムに関する内容やシンボリックリンクの作成などに関することは、公式ドキュメントのFAQ8をご確認ください。

$ piculet -e -o Groupfile

Export SecurityGroup to `Groupfile`
$ vi Groupfile

# -*- mode: ruby -*-
# vi: set ft=ruby :
ec2 "vpc-xxxxxxxx" do
  security_group "default" do
    description "default VPC security group"

    ingress do
      permission :any do
        groups(
          "default"
        )
      end
    end

    egress do
      permission :any do
        ip_ranges(
          "0.0.0.0/0"
        )
      end
    end
  end
end

動作確認(dry-run)

dry-runで実行内容を確認します。
(デフォルトのセキュリティグループと同じルールのセキュリティーグループを追加した結果です。)

$ piculet -a --dry-run

Apply `Groupfile` to SecurityGroup (dry-run)
Create SecurityGroup: vpc-xxxxxxxx > test (dry-run)
Create Permission: vpc-xxxxxxxx > test(ingress) > any  (dry-run)
  authorize test (dry-run)
No change

適用

dry-runの結果に問題なければ、適用します。

$ piculet -a

Apply `Groupfile` to SecurityGroup
Create SecurityGroup: vpc-xxxxxxxx > test
Create Permission: vpc-xxxxxxxx > test(ingress) > any
  authorize test

省略しますが、roadworkerも同じ要領で動作することを確認しました。

まとめ

この投稿がジョインして初めての技術的な内容の投稿です。
初歩的な内容ですが、いかがでしたでしょうか。

このように、WSLでもLinux上で動くツールを利用することができました。

今回使った範囲では、ファイルの作成先を意識する(Windowsファイルシステムを操作する場合)以外は普通のUbuntuを扱うのと差はないように感じました。
動作も非常に軽く、ストレスを感じることはありませんでした。
実際にはGUIのアプリケーションが利用できないなどの制限事項9はいろいろあるのですが、地道に慣れていこうと思います。

これからも社内のノウハウを使いまくって楽をしていこうと思います。

AWS Cloud Roadshow 2017 福岡