【新機能】Launch Template でUserDataをバージョン管理する

AWS運用自動化サービス「Cloud Automator」
この記事は1年以上前に書かれたものです。
内容が古い可能性がありますのでご注意ください。

2017/11/29にLaunch Templates for Amazon EC2 instances がリリースされました。
Launch Templates for Amazon EC2 instances の紹介

Launch Templates で設定をテンプレート化してオンデマンドインスタンスの起動や、スポットインスタンスの起動を効率的に行う事ができるようになりました。
さらに、Launch Templates を利用することで、UserDataのバージョン管理も可能となりました。
今回は、Launch Templates によるUserDataのバージョン管理についてご紹介します。

Launch Templatesの作成

Launch Templatesを作成します。
同じ設定で何度もEC2インスタンスをローンチする場合に、共通する設定をテンプレート化しておくことでローンチを効率化できます。

  1. マネージメントコンソールで[インスタンス]-[Launch Templates]-[Create Launch Templates]をクリックします。
  2. テンプレートを新規作成する場合は[Create a new template]を選択します。
  3. [Launch template name]にテンプレート名を入力します。
  4. [Template version description]にはバージョンを表す文字列を入力します。(省略可能)
    例えば、ローンチするアプリケーションのバージョンなどを入力出来ます。
    Zabbixのバージョン毎に別々のTemplate version descriptionを分けるなどの使い方ができます。
  5. 既存の[Launch Templates]の設定を流用する場合には[Source template]を選択します。(省略可能)
  6. 利用するAMI,インスタンスタイプ,アタッチするキーペア、VPC EC2かクラッシックEC2か、を選択します。(省略可能)
  7. ENIの追加設定等が必要な場合は[Network Interface]を設定します。(省略可能)
  8. EBSやエフェメラルディスクの設定が必要な場合は[Strage(Volumes)]の設定を行います。(省略可能)
  9. インスタンスにタグ設定が必要な場合は[Tags]の設定を行います。(省略可能)
  10. インスタンスに特定のセキュリティーグループをアタッチする場合は[Security Groups] にセキュリティーグループIDを入力します(省略可能)
  11. [Advanced details]の設定で、IAMロールの設定やUserDataを指定することができます。(省略可能)
  12. テンプレート化したい内容(繰り返し設定する内容)を入力したら[Create Launch Templates]をクリックします。
  13. 問題が無ければLaunch Templatesが作成されます。

Launch Templatesのバージョン管理

Launch Templatesはバージョン管理が可能です。
先ほど作成したLaunch Templatesの作成の新バージョンを作成します。

  1. マネージメントコンソールで[インスタンス]-[Launch Templates]-[Create Launch Templates]をクリックします。
  2. [Create a new template version]を選択します。
  3. [Launch template name]で新バージョンを作成したい[Launch Templates]を選択します。
  4. インストールするソフトウェアを変える時などは、[Template version description]を利用することで管理がしやすくなります。
  5. [Source Template Version]で参照元のバージョンを指定します。
  6. 指定した[Source Template Version]の内容が入力されので、更新したい項目を変更し、[Create Launch Templates]をクリックします。
  7. 新しいバージョンの[Launch Templates]が作成されます。

Launch Templatesのバージョン確認

Launch Templates ID を選択し、[Details]タブ[Vresion Details]で[Version]を選択することで、各バージョンの設定を確認することができます。

UserDataの内容もバージョン毎に保持されるためLaunch Templatesを使ってUserDataのバージョン管理が可能になります。

Launch Templatesによるオンデマンドインスタンスの作成

Launch Templatesを使ってオンデマンドインスタンスを起動する場合は、目的のLaunch Templates IDをし選択し、[アクション]-[Launch Instance from template]を選択します。

[Source template version]を選択すると、Launch Templatesの内容が自動的に入力されますので、そのまま[Launch Instance from template]をクリックすることで、必要なパラメーターが設定されたEC2インスタンスがローンチされます。

Launch Templatesによるスポットインスタンスの作成

2017/12/05現在[アクション]-[Create Spot fleet]は動作しません。
[スポットインスタンス]-[スポットインスタンスのリクエスト]に進み[Launch template]から、目的の[Launch Template Name],[active version]を選択してください。

Launch Templatesによるオートスケーリング

Auto Scaling グループの[起動設定]の代わりに[Launch Templates]を利用することができます。
[アクション]-[Create Auto Scaling group]を選択します。

Auto Scaling グループでは[デフォルト]もしくは[最新]のLaunch Templates versionが選択出来ます。

2017/12/05現在任意のversionを指定してのAuto Scaling グループ作成はできないようです。

Launch Templatesの制限事項

2017/12/05現在の状況ですが、EC2インスタンスに設定出来るUserDataに比べてLaunch Templatesに登録出来るUserDataには特殊文字などに制約があるようです。
sedやawk等を用いた複雑なUserDataを登録しようとした場合に、通常のEC2ローンチでは動作するUserDataであってもLaunch Templatesではエラーとなる場合があります。

まとめ

Launch Templatesを利用することにより、EC2インスタンスをローンチする際の、繰り返し作業が不要になりました。
RPMパッケージ作成環境のような同じ構成のインスタンスを何度も作成、削除するような場合に作業の効率化、ミスの軽減が可能になります。
また、UserDataやローンチ情報をバージョン管理することができるようになりますので、インスタンスを削除しても、どのようなローンチ設定を行ったのかを管理することが出来るようになりました。
運用管理の点でこの機能はかなり有用だと思います。
EC2ローンチの構成管理として、是非Launch Templatesを有効活用してみてはいかがでしょうか。



この記事はOpsJAWS Advent Calendar 2017 5日目の記事です。

OpsJAWS Advent Calendar 2017

AWS運用自動化サービス「Cloud Automator」