Windowsでcloud-initを使ってみた

記事タイトルとURLをコピーする
 皆さんこんにちは!自分が所属していたチームの正式名が「サービス開発」ではなく 「新規開発」だったことを最近知ったhiroです。

 私達のチームは名前の通り、自社サービスを考案し、構築していく使命を帯びています。 その中で得た知識から簡単な事だけれども地味に便利だと思われることをご紹介します!

 デフォルト以外のプログラムを入れたWindowsのAMI(マシーンイメージ)を作成し そのAMIからインスタンス起動時に特定の処理を実行させるcloud-initで そのプログラムに必要な初期設定を行う、というシナリオで進めていきます。

Windows AMIの元になるWindowsインスタンスの立ち上げ

 まずAWS Console EC2インスタンスメニューからLaunch Instanceで AMIの基となるWindowインスタンス作成します。

ここではWindows 2008 R2 Baseを選択しました。

Instance Typeはデフォルトのままにしておきます。

Advance Optionsもここではデフォルトのままです。

Storage Device Configurationもデ…以下略(w

Nameタグは識別しやすい名前を入れます。

キーペアにはあらかじめ登録していたものを使います。

セキュリティグループを作成します。

Remote Desktopで使用する3389ポートを開けておきます。 Sourceにはアクセス元のIPを記述します。

以上の設定でインスタンスを立ち上げます。

Windows AMIの元になるWindowsインスタンスのセットアップ
Windowsが起動したら、該当インスタンスのGet Windows Passwordを開きます。

Private Key欄に先ほど選択したキーペアの秘密鍵情報を入力してパスワードを取得しましょう。

Windowsインスタンスへリモート接続を行います。

MacではRemote Desktop Connectionを使います。 コンピューター欄にインスタンスのPublic DNSを入力しましょう。

ユーザー名にはadministrator, ドメインはインスタンスのPublic DNSを入力してログインします。

AMIを作るための前準備を行います。

このWindowsインスタンスをAMIとして使うために下記XMLファイルの指定項目をEnabledにします。

C:Program FilesAmazonEc2ConfigServiceSettingsconfig.xml

  • Ec2SetPassword
    起動時にパスワードを再発行します。
    - Ec2HandleUserData
    起動時にCloudInitを実行します。
ここでWindows AMIに必要になる追加プログラムをインストールします。

が、ここではインストールしたと仮定し、その設定ファイルにデータを追記するのを 想定して下記テキストファイルを作成しておきます。

C:Program Filesserverworks.txt

Windows AMIの作成

・AWS Consoleに戻り、該当インスタンスからAMIを作成します。

分かりやすい名前をつけましょう!

AMIからインスタンスを起動

AMIの作成が終わったら、そこからインスタンスを起動します。

最初にAMIの元となるWindowsインスタンスを立ち上げた時と同じようにオプションを 設定していきますが、「User Data:」欄には下記を入力します。

 <script>
    echo Hello World >> "C:Program Filesserverworks.txt"
    </script>

起動したら先ほどWindowsインスタンスを作成した時と同じようにパスワードを取得して Remote Desktop Connectionでログインします。

C:Program Filesserverworks.txtファイルを開くと…

Hello Worldが出力されました!

実際は、AWS Consoleからではなく、Webアプリ等から実行することが多いと 思いますので、その際は色々な値を動的に渡す事ができます。

User Dataに入力するscriptタグの代わりにpowershellタグを使う事でPowerShellを 実行する事も可能となっています。
※PowerShell向けにAWS Toolsが用意されています。

このようにWindowsでcloud-initを実行できると意外に便利だと思いますので 是非使ってみてください!