メニュー
AWS OpsWorks
ユーザーガイド (API Version 2013-02-18)

カスタム AMI の使用

AWS OpsWorks スタックはインスタンスをカスタマイズする 2 種類の方法をサポートしています。カスタム Amazon マシンイメージ (AMI) と、Chef レシピです。どちらのアプローチでも、インストールするパッケージおよびパッケージバージョンの種類や設定方法などをコントロールできます。ただし、それぞれの利点は異なるため、どちらが最適であるかは要件によって変わります。

カスタム AMI の使用を検討する必要がある主な状況は、次のとおりです。

  • インスタンスの起動後に特定のパッケージをインストールするのではなく、特定のパッケージを事前にバンドルする場合。

  • Layer に一貫したベースイメージを提供するようにパッケージ更新のタイミングを管理する場合。

  • インスタンス (特に負荷ベースのインスタンス) を迅速に起動する場合。

Chef レシピの使用を検討すべき主な場合は、次のとおりです。

  • カスタム AMI より柔軟性が高い場合。

  • 更新が容易な場合。

  • 実行中のインスタンスで更新を実行できる場合。

現実的には、両方の手法を組み合わせることが最適なソリューションと考えることもできます。レシピの詳細については、「クックブックとレシピ」を参照してください。

カスタム AMI と AWS OpsWorks スタックの連携の仕組み

インスタンス用のカスタム AMI を指定するには、新しいインスタンスを作成するときに、インスタンスのオペレーティングシステムとして [Use custom AMI] を選択します。次に、AWS OpsWorks スタックによって、スタックのリージョンでカスタム AMI のリストが表示されます。リストから適切なカスタム AMI を選択します。詳細については、「Layer へのインスタンスの追加」を参照してください。

注記

スタックのデフォルトオペレーティングシステムとして特定のカスタム AMI を指定することはできません。スタックのデフォルトオペレーティングシステムとして Use custom AMI を設定できますが、特定の AMI を指定できるのは、新しいインスタンスを Layer に追加するときのみです。詳細については、Layer へのインスタンスの追加 および 新しいスタックを作成する を参照してください。カスタム AMI またはコミュニティで作成された AMI から作成された他のオペレーティングシステム (CentOS 6.x) でインスタンスを作成することが可能な場合もありますが、これらは公式にはサポートされていません。

このトピックでは、カスタム AMI を作成または使用する前に考慮する必要がある一般的な問題について説明します。

開始時の動作

インスタンスを起動すると、AWS OpsWorks スタックによって、指定されたカスタム AMI を使用して新しい Amazon EC2 インスタンスが起動されます。次に、AWS OpsWorks スタックは cloud-init を使用してインスタンスに AWS OpsWorks スタックエージェントをインストールし、エージェントはインスタンスの Setup レシピに続けて Deploy レシピを実行します。インスタンスがオンラインになると、エージェントは新しく追加されたインスタンスを含め、スタックのすべてのインスタンスに対して Configure レシピを実行します。

Layer の選択

AWS OpsWorks スタックエージェントは通常、インストール済みのパッケージと競合しません。ただし、インスタンスは、少なくとも 1 つの Layer のメンバーである必要があります。AWS OpsWorks スタックは常にそのレイヤーのレシピを実行するため、問題が発生する可能性があります。カスタム AMI を持つインスタンスをその Layer に追加する前に、Layer のレシピによるインスタンスへの操作について正確に理解する必要があります。

インスタンスで Layer タイプ別に実行されるレシピを確認するには、その Layer を含むスタックを開きます。次に、ナビゲーションペインの [Layers] をクリックし、目的の Layer の [Recipes] をクリックします。実際のコードを表示するには、レシピの名前をクリックします。

注記

Linux AMI で、競合の可能性を低くする 1 つの方法は、カスタム AMI の基にするインスタンスを、AWS OpsWorks スタックを使用してプロビジョニングおよび設定することです。詳細については、「AWS OpsWorks スタックインスタンスからのカスタム Linux AMI の作成」を参照してください。

アプリケーションの処理

パッケージに加えて、AMI にアプリケーションを含めたい場合もあります。大規模で複雑なアプリケーションがある場合、AMI に含めると、インスタンスの起動時間を短縮できます。AMI には小規模のアプリケーションを含めることができますが、通常は、AWS OpsWorks スタックによるアプリケーションのデプロイと比較して、時間的なメリットはほとんどまたはまったくありません。

1 つのオプションは、アプリケーションを AMI に含めると共に、リポジトリからインスタンスにアプリケーションをデプロイするアプリケーションを作成することです。このアプローチでは、起動時間が短縮されるだけでなく、インスタンスの実行後にアプリケーションを更新する際に便利な方法を使用できます。Chef レシピはべき等であるため、リポジトリのバージョンがインスタンスのバージョンと同じである限り、デプロイレシピはアプリケーションを変更しません。

AWS OpsWorks スタック用のカスタム AMI の作成

AWS OpsWorks スタックでカスタム AMI を使用するには、最初に、カスタマイズしたインスタンスから AMI を作成する必要があります。2 つの基本的なアプローチから選べます。

  • Amazon EC2 のコンソールまたは API を使用して、いずれかの AWS OpsWorks スタック対応 AMI の 64 ビットバージョンに基づくインスタンスを作成およびカスタマイズします。

  • Linux AMI では、OpsWorks を使用して、関連する Layer の設定に基づく Amazon EC2 インスタンスを作成します。

注記

AMI はすべてのインスタンスタイプに対応している訳ではないことにご注意ください。開始する AMI が、使用するインスタンスタイプと互換性があることを確認してください。特に、R3 インスタンスタイプには、ハードウェアアシストによる仮想化 (HVM) AMI が必要です。

次に Amazon EC2 コンソールまたは API を使用して、カスタマイズしたインスタンスからカスタム AMI を作成します。インスタンスを Layer に追加し、カスタム AMI を指定することで、同じリージョンのすべてのスタックでカスタム AMI を使用できます。カスタム AMI を使用するインスタンスの作成方法の詳細については、「Layer へのインスタンスの追加」を参照してください。

注記

デフォルトでは、AWS OpsWorks スタックは起動時にすべての Amazon Linux の更新をインストールすることで、最新リリースを提供します。また Amazon Linux は新しいバージョンを約 6 か月ごとにリリースしており、大きな変更が実施される場合もあります。デフォルトで、Amazon Linux に基づくカスタム AMI は、新しいバージョンがリリースされると自動的に更新されます。カスタム AMI は特定の Amazon Linux バージョンにロックしておき、新しいバージョンをテストするまで更新を延期できるようにすることをお勧めします。詳細については、「AMI を特定のバージョンに固定するにはどうすればよいですか?」を参照してください。

Amazon EC2 を使用したカスタム AMI の作成

カスタム AMI を作成する最もシンプルな方法は、Amazon EC2 コンソールまたは API を使用して作成タスクをすべて実行することです (Windows AMI ではこの方法しかありません)。次のステップの詳細については、「独自の AMI の作成」を参照してください。

Amazon EC2 コンソールまたは API を使用してカスタム AMI を作成するには

  1. いずれかの AWS OpsWorks スタック対応 AMI の 64 ビットバージョンを使用してインスタンスを作成します。

  2. インスタンスを設定し、パッケージをインストールするなどして、ステップ 1 からインスタンスをカスタマイズします。インストールしたものすべてが、AMI に基づいてすべてのインスタンス上で再現されるため、特定のインスタンスに固有の項目は含めないでください。

  3. インスタンスを停止し、カスタム AMI を作成します。

AWS OpsWorks スタックインスタンスからのカスタム Linux AMI の作成

カスタマイズした AWS OpsWorks スタックの Linux インスタンスを使用して AMI を作成する場合は、OpsWorks で作成したすべての Amazon EC2 インスタンスに固有の ID が含まれていることに注意してください。このようなインスタンスからカスタム AMI を作成した場合、カスタム AMI にその ID が含まれ、AMI に基づくすべてのインスタンスが同じ IDを持つことになります。カスタム AMI に基づくインスタンスが確実に固有の ID を得るには、AMI を作成する前に、カスタマイズしたインスタンスから ID を削除する必要があります。

AWS OpsWorks スタックインスタンスからカスタム AMI を作成するには

  1. Linux スタックを作成し、1 つ以上の Layer を追加して、カスタマイズしたインスタンスの設定を定義します。組み込み Layer、完全なカスタム Layer に加え、必要に応じてカスタマイズした Layer を使用できます。詳細については、「AWS OpsWorks スタックのカスタマイズ」を参照してください。

  2. Layer を編集し、自動ヒーリングを無効にします。

  3. 任意の Linux ディストリビューションを使用してインスタンスを Layer に追加し、起動します。Amazon EBS-backed インスタンスを使用することをお勧めします。インスタンスの詳細ページを開き、後で確認できるよう Amazon EC2 ID を記録します。

  4. インスタンスがオンラインのときは、SSH でログインして、インスタンスオペレーティングシステムに基づいて以下のコマンドを指定された順序で実行します。

    Chef 11 または Chef 12 スタックの Amazon Linux インスタンス、または Chef 11 スタックの Red Hat Enterprise Linux 7 インスタンスの場合

    1. sudo /etc/init.d/monit stop

    2. sudo /etc/init.d/opsworks-agent stop

    3. sudo rm -rf /etc/aws/opsworks/ /opt/aws/opsworks/ /var/log/aws/opsworks/ /var/lib/aws/opsworks/ /etc/monit.d/opsworks-agent.monitrc /etc/monit/conf.d/opsworks-agent.monitrc /var/lib/cloud/ /etc/chef

      注記

      Chef 12 スタックのインスタンスについて、このコマンドに次の 2 つのフォルダを追加します。

      • /var/chef

      • /opt/chef

    4. sudo rpm -e opsworks-agent-ruby

    5. sudo rpm -e chef

    Chef 12 スタックの Ubuntu 16.04 LTS インスタンス

    1. sudo systemctl stop opsworks-agent

    2. sudo rm -rf /etc/aws/opsworks/ /opt/aws/opsworks/ /var/log/aws/opsworks/ /var/lib/aws/opsworks/ /etc/monit.d/opsworks-agent.monitrc /etc/monit/conf.d/opsworks-agent.monitrc /var/lib/cloud/ /var/chef /opt/chef /etc/chef

    3. sudo apt-get -y remove chef

    4. sudo dpkg -r opsworks-agent-ruby

    Chef 12 スタックの他のサポートされている Ubuntuバージョン

    1. sudo /etc/init.d/monit stop

    2. sudo /etc/init.d/opsworks-agent stop

    3. sudo rm -rf /etc/aws/opsworks/ /opt/aws/opsworks/ /var/log/aws/opsworks/ /var/lib/aws/opsworks/ /etc/monit.d/opsworks-agent.monitrc /etc/monit/conf.d/opsworks-agent.monitrc /var/lib/cloud/ /var/chef /opt/chef /etc/chef

    4. sudo apt-get -y remove chef

    5. sudo dpkg -r opsworks-agent-ruby

    Chef 12 スタックの Red Hat Enterprise Linux 7 インスタンスの場合

    1. sudo systemctl stop opsworks-agent

    2. sudo rm -rf /etc/aws/opsworks/ /opt/aws/opsworks/ /var/log/aws/opsworks/ /var/lib/aws/opsworks/ /etc/monit.d/opsworks-agent.monitrc /etc/monit/conf.d/opsworks-agent.monitrc /var/lib/cloud/ /etc/chef /var/chef

    3. sudo rpm -e opsworks-agent-ruby

    4. sudo rpm -e chef

  5. このステップは、インスタンスタイプによって異なります。

    • Amazon EBS-backed インスタンスの場合は、AWS OpsWorks スタックコンソールを使用してインスタンスを停止し、「Amazon EBS-Backed Linux AMI の作成」に記載されている方法で AMI を作成します。

    • Instance store-backed インスタンスの場合は、「Instance Store-Backed Linux AMI の作成」に記載されている方法で AMI を作成した後に、AWS OpsWorks スタックコンソールを使用してインスタンスを停止します。

      AMI を作成する際は、必ず証明書ファイルを含めます。たとえば、-i $(find /etc /usr /opt -name '*.pem' -o -name '*.crt' -o -name '*.gpg' | tr '\n' ',') に設定した -i 引数で ec2-bundle-vol コマンドを呼び出せます。バンドルするとき、apt パブリックキーを削除しないでください。デフォルトの ec2-bundle-vol コマンドがこのタスクを処理します。

  6. AWS OpsWorks スタックコンソールに戻り、スタックからインスタンスを削除して、スタックをクリーンアップしてください。

カスタム Windows AMI の作成

次の手順では、Windows Server 2012 R2 用のカスタム AMI を作成します。Amazon EC2 管理コンソールで、他の Windows Server オペレーティングシステムを選択できます。利用できる最も古いリリースの Windows Server は、Windows Server 2003 R2 です。

重要

現在、AWS OpsWorks スタックエージェントは、米国英語 (en-US) 以外のシステム UI 言語を使用している Windows ベースのインスタンスにインストールできません。また、AWS OpsWorks スタックでは、このようなインスタンスを管理することもできません。

Sysprep を使用したカスタム Windows AMI の作成

通常、Sysprep を使用してカスタム Windows AMI を作成するとインスタンスの起動が遅くなりますが、よりクリーンなプロセスとなります。Sysprep で作成されたイメージから作成されたインスタンスの初回起動時には、より多くの時間がかかります。これは、セットアップと設定を含む、Sysprep のアクティビティ、再起動、AWS OpsWorks スタックのプロビジョニング、および AWS OpsWorks スタックの初回実行に時間がかかるためです。Amazon EC2 コンソールで、カスタム Windows AMI を作成するための手順を完了します。

Sysprep でカスタム Windows AMI を作成するには

  1. Amazon EC2 コンソールで、[Launch Instance] を選択します。

  2. [Microsoft Windows Server 2012 R2 Base] を見つけて、[Select] を選択します。

  3. 目的のインスタンスタイプを選択し、[Configure Instance Details] を選択します。マシン名、ストレージ、およびセキュリティグループの設定を含む設定変更を AMI に加えます。[Launch] を選択します。

  4. インスタンスのブートプロセスが終了したら、パスワードを使用して、Windows の [リモートデスクトップ接続] ウィンドウでインスタンスに接続します。

  5. Windows の [スタート] 画面で [スタート] を選択し、EC2ConfigServiceSettings コンソールが表示されるまで、「ec2configservice」と入力します。コンソールを開きます。

  6. [General] タブで、[Enable UserData execution] チェックボックスがチェックされていることを確認します (このオプションは Sysprep には必須ではありませんが、AWS OpsWorks スタックでエージェントをインストールするために必要です)。[Set the computer name of the instance...] オプションのチェックボックスをオフにします。このオプションを選択すると、AWS OpsWorks スタックで再起動が繰り返される可能性があるためです。

  7. [Image] タブで、[Administrator Password] を [Random] に設定して、Amazon EC2 が、SSH キーで取得できるパスワードを自動的に生成できるようにします。または、[Specify] を指定して独自のパスワードを指定します。Sysprep でこの設定が保存されます。独自のパスワードを指定した場合は、都合の良い場所にパスワードを保存します。[Keep Existing] は選択しないことをお勧めします。

  8. [Apply] を選択し、[Shutdown with Sysprep] を選択します。確認を求められたら、[Yes] を選択します。

  9. インスタンスが停止したら、Amazon EC2 コンソールで [Instances] リストのインスタンスを右クリックし、[Image] を選択して、[Create Image] を選択します。

  10. [Create Image] ページで、イメージの名前と説明を指定し、ボリュームの設定を指定します。終了したら、[Create Image] を選択します。

  11. [Images] ページを開き、イメージが [pending] 段階から [available] に変わるのを待ちます。新しい AMI を使用する準備ができました。

Sysprep を使用しないカスタム Windows AMI の作成

Amazon EC2 コンソールで、カスタム Windows AMI を作成するための手順を完了します。

Sysprep なしでカスタム Windows AMI を作成するには

  1. Amazon EC2 コンソールで、[Launch Instance] を選択します。

  2. [Microsoft Windows Server 2012 R2 Base] を見つけて、[Select] を選択します。

  3. 目的のインスタンスタイプを選択し、[Configure Instance Details] を選択します。マシン名、ストレージ、およびセキュリティグループの設定を含む設定変更を AMI に加えます。[Launch] を選択します。

  4. インスタンスのブートプロセスが終了したら、パスワードを使用して、Windows の [リモートデスクトップ接続] ウィンドウでインスタンスに接続します。

  5. インスタンスで、C:\Program Files\Amazon\Ec2ConfigService\Settings\config.xml を開き、次の 2 つの設定を変更してから、ファイルを保存して閉じます。

    • Ec2SetPasswordEnabled

    • Ec2HandleUserDataEnabled

  6. Remote Desktop セッションから切断し、Amazon EC2 コンソールに戻ります。

  7. [Instances] リストで、インスタンスを停止します。

  8. インスタンスが停止したら、Amazon EC2 コンソールで [Instances] リストのインスタンスを右クリックし、[Image] を選択して、[Create Image] を選択します。

  9. [Create Image] ページで、イメージの名前と説明を指定し、ボリュームの設定を指定します。終了したら、[Create Image] を選択します。

  10. [Images] ページを開き、イメージが [pending] 段階から [available] に変わるのを待ちます。新しい AMI を使用する準備ができました。

カスタム Windows AMI を使用した新しいインスタンスの追加

イメージが [available] 状態に変わったら、カスタム Windows AMI に基づいて新しいインスタンスを作成できます。[Operating system] リストから [Use custom Windows AMI] を選択すると、AWS OpsWorks スタックによってカスタム AMI のリストが表示されます。

カスタム Windows AMI に基づいて新しいインスタンスを追加するには

  1. 新しい AMI が利用可能になったら、AWS OpsWorks スタックコンソールに移動し、Windows スタックの [Instances] ページを開き、ページ下部近くにある [+ Instance] を選択して新しいインスタンスを追加します。

  2. [New] タブの [Advanced] を選択します。

  3. [Operating system] ドロップダウンリストで、[Use custom Windows AMI] を選択します。

  4. [Custom AMI] ドロップダウンリストで、作成した AMI を選択し、[Add Instance] を選択します。

これで、インスタンスを起動して実行できるようになりました。