EC2Launch v2の機能一覧

2020.07.07

しばたです。
本日7月7日は弊社の創立記念日ということで粛々とブログを書いております。

先日EC2Launch v2がリリースされたことをお伝えしました。

本記事ではEC2Launch v2で提供される機能についてお伝えします。

ドキュメント

EC2Launch v2の機能に関するドキュメントは以下にあります。

本記事ではこちらのドキュメントを一次情報として各機能を解説していきます。

EC2Launch v2の設定ファイル

前回の記事でも軽く触れましたがEC2Launch v2では設定ファイルが従来のXML形式からYAML形式に変わっています。
ファイルパスはC:\ProgramData\Amazon\EC2Launch\config\agent-config.ymlです。

後述する機能設定のGUI(EC2Launch settings)の設定も最終的にはこのYAMLファイルに行き着きます。
本記事ではYAMLファイルの詳細までは触れませんが、デフォルトでは以下の内容となっています。

version: 1.0
config:
  - stage: boot
    tasks:
      - task: extendRootPartition
  - stage: preReady
    tasks:
      - task: activateWindows
        inputs:
          activation:
            type: amazon
      - task: setDnsSuffix
        inputs:
          suffixes:
            - $REGION.ec2-utilities.amazonaws.com
      - task: setAdminAccount
        inputs:
          password:
            type: random
      - task: setWallpaper
        inputs:
          path: C:\ProgramData\Amazon\EC2Launch\wallpaper\Ec2Wallpaper.jpg
          attributes:
            - hostName
            - instanceId
            - privateIpAddress
            - publicIpAddress
            - instanceSize
            - availabilityZone
            - architecture
            - memory
            - network
  - stage: postReady
    tasks:
      - task: startSsm

なんとなく雰囲気は掴んでいただけると思います。

EC2Launch v2の機能一覧

ここから本題に入りEC2Launch v2の各機能の解説をしていきます。
まずは機能設定のGUI(EC2Launch settings)の各項目について解説し、最後にGUIの無い項目について解説します。

EC2Launch settings : Generalタブ

EC2Launch v2の基本的な設定画面です。

Set compurter name

EC2Config、EC2Launch v1からの継続機能です。
EC2の初回起動時にPrivate IPアドレスに対応したコンピューター名を付けることができます。

Extend boot volume

EC2Config、EC2Launch v1からの継続機能です。
EC2の初回起動時にBoot volume(Cドライブ)をEBSボリュームのサイズいっぱいに拡張する機能です。

Set Administrator account

EC2の初回起動時にAdminstratorユーザーのパスワードを設定します。
EC2Config、EC2Launch v1からの継続機能ですが、EC2Launch v2では、新たにAdministratorアカウント名の独自設定も可能になりました。

Start SSM service

EC2Launch v2からの新機能です。
ドキュメントに、

When selected, the Systems Manager service is enabled to start following Sysprep. EC2Launch v2 performs all of the tasks described earlier, and the SSM Agent processes requests for Systems Manager capabilities, such as Run Command and State Manager.

とある様にこの設定を有効にするとEC2Launch v2の初期処理をすべて実施した後にSSM Agentを開始する様になります。
まだこの設定が必要なユースケースが見えていないのですが、EC2Launch v2では独自の初期化スクリプトを設定可能になっているため、SSM Agentの処理(Run Commandなど)との実行順序調整のために追加されたのだと思われます。
デフォルトでは有効に設定されています。

Optimeze ENA

EC2Launch v1からの継続機能です。
この機能を有効にするとENAにReceive side scaling (RSS)の設定を施します。

Enable SSH

EC2Launch v2からの新機能です。
SACではWindows Server, version 1803からLTSCではWindows Server 2019からOS標準でOpenSSHが提供されており、Windows上でSSHサーバーを構成することができます。

この機能を有効にすると設定可能なバージョンの場合にSSHサーバーを構成+EC2キーペアの公開鍵の配置をしてくれるとのことですが、具体的にどの様な設定するかまではドキュメント化されていません。
実際に試してみた結果からは、

  • OpenSSHの機能の追加
  • 独自のFirewall設定
  • administrators_authorized_keysにEC2キーペアの公開鍵を設定

まではやっていましたが、administrators_authorized_keysのアクセス権設定が正しくされていないため(詳細は上記ブログを参照)実際に鍵認証でSSH接続することができませんでした...
またsshd_configの設定がデフォルトのままのためパスワード認証も有効のままとなっています。
この点については何らかの手段でAWSへフィードバックしておこうと思います。

Enable Jumbo Frames

EC2Launch v2からの新機能です。
この機能を有効にするとOSのネットワークアダプター設定をJumbo Frameを使用する様に変えてくれる様ですが、画面上で警告されている様に明確にJumbo Frameを使う必要がある時以外は設定しない方が良いでしょう。
Jumbo Frameに関するドキュメントはこちらになります。

EC2Launch settings : DNS suffixタブ

このタブではユーザーが独自に追加するDNS suffixを設定できます。
この機能自体はEC2Config、EC2Launch v1にもありましたが、EC2Launch v2で設定画面がつく形となりました。

デフォルトで追加されるsuffixは従来どおり

  • $REGION.ec2-utilities.amazonaws.com

となっています。
また、自動変数として

  • $REGION : リージョン名
  • $AZ : AZ名

が提供されています。

ただ、実際に試したところ、このDNS suffixは従来のグローバルな設定ではなくネットワーク接続ローカルのsuffixにのみ設定される様になっていました。
これが不具合なのか意図した仕様変更なのかはよくわかりません...

EC2Launch settings : Wallpaperタブ

このタブではデスクトップの壁紙と壁紙に表示する項目の設定ができます。
壁紙の表示機能自体はEC2Config、EC2Launch v1にもありましたが、EC2Launch v2で設定画面が提供され設定項目の指定方法も簡素化されました。

可能な設定項目は以下。

  • Image path : 壁紙にはJPEGファイルを指定可能です。デフォルトではC:\ProgramData\Amazon\EC2Launch\wallpaper\Ec2Wallpaper.jpgが設定されています。
  • 表示属性 : 壁紙に表示したい属性にチェックを付けます。デフォルトでは以下の全属性にチェックが付いています。
    • Hostname : コンピューター名
    • Instance ID : インスタンスID
    • Private IP address : プライベートIPアドレス
    • Public IP address : パブリックIPアドレス
    • Instance size : インスタンスタイプ
    • Availability Zone : EC2が配置されているAvailability Zone
    • Architecture : CPUアーキテクチャ
    • Memory : OSのメモリサイズ(MB)
    • Network : ネットワーク帯域

EC2Launch settings : Volumesタブ

このタブでは追加EBSボリュームのフォーマットに関する設定ができます。
EC2Configであった設定画面が復活した形です。(EC2Launch v1では設定スクリプトのみの提供だった)

Initialize Volumes欄にチェックを付けると追加EBSボリュームを自動フォーマットしてくれます。
すべてのボリュームを対象にするか、従来からあるDrive Letter Mappingを使い個別にフォーマットするボリュームを指定することも可能です。

ただし、デフォルト設定についてはEC2Launch v1に合わせて「デフォルト無効」となっています。

その他GUIの設定画面が無い機能

この他にGUIの設定画面がない機能としては以下のものが提供されています。

activateWindows

指定のKMSサーバーに対してWindowsのアクティベーションを実施するかを設定する様です。
この設定は初回起動時のみ有効で、デフォルトではAWS提供のKMSサーバーに対してアクティベーションを実施する様になっています。

独自のKMSサーバーを使う場合はこの設定を実施しない様にする想定のようです。

executeProgram

指定した任意のプログラムを実行する機能です。
実行頻度は「初回起動時のみ(once)」か「起動の都度(always)」を選べます。

指定可能なパラメーターの詳細はドキュメントを参照してください。
以下の様な指定をすることができます。

task: executeProgram
  inputs:
  - frequency: always
    path: C:\Users\Administrator\Desktop\setup.exe
    arguments: ['-quiet']

executeScript

指定した任意のスクリプト(バッチファイル or PowerShellスクリプト)を実行する機能です。
実行頻度は「初回起動時のみ(once)」か「起動の都度(always)」を選べます。

指定可能なパラメーターの詳細はドキュメントを参照してください。
以下の様な指定をすることができます。

task: executeScript
  inputs:
  - frequency: always
    type: powershell
    content: |
      Get-Process | Out-File -FilePath .\Process.txt
    runAs: localSystem

writeFile

指定した任意のファイルを作成します。 実行頻度は「初回起動時のみ(once)」か「起動の都度(always)」を選べます。

指定可能なパラメーターの詳細はドキュメントを参照してください。
以下の様な指定をすることができます。

task: writeFile
  inputs:
  - frequency: once
    destination: C:\Users\Administrator\Desktop\booted.txt
    content: Windows Has Booted

ちなみに既存のファイルがある場合は上書きされます。

ec2launch.exeのコマンドライン

EC2Launch v2の本体であるec2launch.exeはWindowsサービスであるのと同時にCLIツールとして幾つかの機能を持っています。

ec2launch collect-logs

EC2Launch v2の各種ログをZipファイルに固めて出力します。

# 実行例
.\ec2launch collect-logs -o C:\Mylogs.zip

ec2launch reset

EC2Launch v2では初回起動時のタスクを実行した後にC:\ProgramData\Amazon\EC2Launch\state\.runonceというファイルを作成し以降の実行を抑制しているのですが、ec2launch resetコマンドを実行することでこのファイルを削除します。
また-cオプションを付けることで各種ログのクリアも行います。

# 実行例
.\ec2launch reset -c

当然ですがこのコマンドを実行してしまうと次回起動時に初期設定処理(初期コンピューター名の設定や、Administratorパスワードのリセットなど)が実行されてしまいますので、本番運用している環境ではうかつに実行しない様にしてください。

ec2launch run

EC2Launchの初期処理を手動実行します。
YAMLの設定を変えた後に手動実行で反映させる、ec2launch resetと組み合わせて構成のデバッグに使うといった用途に向いてそうです。

# 実行例
ec2launch run

ec2launch sysprep

EC2Launch経由でSysprepを実行します。
-cオプションを付けることでSysprep実行前に各種ログのクリアも行います。

# 実行例
.\ec2launch sysprep -c

ec2launch validate

YAMLの設定ファイルagent-config.ymlの検証を行います。

# 実行例
.\ec2launch validate

ec2launch version

バージョン情報を取得します。

# 実行例
.\ec2launch version

最後に

以上となります。

EC2Launch v2の設定を一通り試した所感としては、設定の大部分はGUIから可能で基本的にはYAMLを意識しなくても大丈夫な様に作りこまれており、また、GUIは無いもののユーザー独自のプログラムやスクリプトを設定可能に機能追加されているためEC2のカスタマイズの幅が広がっているなという印象です。
一方でカスタムルートの設定などEC2Configでは設定可能であった機能がEC2Launch v2では常に実行されるされる様になっているなど、ユーザーにカスタマイズさせる部分の最適化も図られていると感じました。

SSHの設定などで一部挙動が怪しい部分はありましたがこちらはフィードバックを経て改善されていくと思いますのでEC2Launch v2への移行を随時検討していくと良いでしょう。