カスタム AMI の使用 - AWS OpsWorks

翻訳は機械翻訳により提供されています。提供された翻訳内容と英語版の間で齟齬、不一致または矛盾がある場合、英語版が優先します。

カスタム AMI の使用

重要

AWS OpsWorks Stacks は新規顧客を受け付けなくなりました。既存のお客様は、2024 年 5 月 26 日までは OpsWorks コンソール、 API、 CLI、および CloudFormation リソースを通常どおり使用できますが、その時点でこれらのリソースは廃止されます。この移行に備えて、できるだけ早くスタックを AWS Systems Manager に移行することをおすすめします。詳細については、AWS OpsWorks Stacks サポート終了に関する FAQ および AWS Systems Manager アプリケーションマネージャへの AWS OpsWorks Stacks アプリケーションの移行 を参照してください。

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

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

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

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

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

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

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

  • 更新が容易な場合。

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

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

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

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

注記

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

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

開始時の動作

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

レイヤーの選択

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

インスタンスでレイヤータイプ別に実行されるレシピを確認するには、そのレイヤーを含むスタックを開きます。次に、ナビゲーションペインの [Layers] (レイヤー) をクリックし、目的のレイヤーの [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 を使用して、関連するレイヤーの設定に基づく Amazon EC2 インスタンスを作成します。

カスタム Linux AMI を作成する前に、AWS OpsWorks Stacks がカスタム Linux インスタンスにエージェントをインストールできるように、/tmp パーティションの noexec を無効にします。

注記

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

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

注記

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

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

カスタム AMI を作成する最も簡単な方法 (Windows AMI の唯一のオプション) は、Amazon EC2 コンソールまたは API を使用してタスク全体を実行することです。次のステップの詳細については、[独自の 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 を作成した場合、その ID が含まれ、AMI に基づくすべてのインスタンスが同じ ID を持つことになります。カスタム AMI に基づくインスタンスが確実に固有の ID を得るには、AMI を作成する前に、カスタマイズしたインスタンスから ID を削除する必要があります。

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

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

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

  4. インスタンスがオンラインである場合は、SSH でログインし、インスタンスのオペレーティングシステムに応じて次の 4 つのステップのいずれかを実行します。

  5. 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

  6. Chef 12 スタックの Ubuntu 16.04 LTS または 18.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

    5. systemctl stop apt-daily.timer

    6. systemctl stop apt-daily-upgrade.timer

    7. rm /var/lib/systemd/timers/stamp-apt-daily.timer

    8. rm /var/lib/systemd/timers/stamp-apt-daily-upgrade.timer

  7. 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

  8. 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

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

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

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

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

  10. AWS OpsWorks スタックコンソールに戻り、スタックからインスタンスを削除して、スタックをクリーンアップします。

カスタム Windows AMI の作成

次の手順では、Windows Server 2022 Base 用のカスタム AMI を作成します。Amazon EC2 管理コンソールで、他の Windows Server オペレーティングシステムを選択できます。

重要

現在、システム UI の言語が 英語 - 米国 (en-US) 以外の Windowsベースのインスタンスには、AWS OpsWorks Stacksエージェントをインストールすることができず、AWS OpsWorks Stacks は管理することができません。

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 2022 Base] を見つけて、[選択] を選択します。

  3. 目的のインスタンスタイプを選択し、[Configure Instance Details] を選択します。AMI で、マシン名、ストレージ、セキュリティグループ設定などの設定変更を行います。[Launch] (起動する) を選択します。

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

  5. Windowsの [Start] (スタート) 画面で [Start] (スタート) を選択し、次に ec2configservice の入力を開始し、結果に [EC2ConfigServiceSettings] コンソールを表示されるまで続けます。コンソールを開きます。

  6. [全般] タブで、[Enable UserData execution] (ユーザーデータの実行を有効にする) チェックボックスがオンであることを確認します (このオプションは Sysprep では不要ですが、AWS OpsWorks スタックがエージェントをインストールするために必要です)。[Set the computer name of the instance...] (インスタンスのコンピュータ名の設定...) オプションのチェックボックスをオフにします。このオプションをオンにすると、AWS OpsWorks スタックで再起動が繰り返されることがあるためです。

  7. [Image] (イメージ) タブで、[Administrator Password] (管理者パスワード) を、Amazon EC2 が SSH キーで取得できるパスワードを自動的に生成することを許可する [Random] (ランダム)、または自分のパスワードを指定する [Specify] (指定) のいずれかに設定します。Sysprep はこの設定を保存します。独自のパスワードを指定した場合は、都合の良い場所にパスワードを保存します。[Keep Existing] は選択しないことをお勧めします。

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

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

  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 2022 Base] を見つけて、[選択] を選択します。

  3. 目的のインスタンスタイプを選択し、[Configure Instance Details] を選択します。AMI で、マシン名、ストレージ、セキュリティグループ設定などの設定変更を行います。[Launch] (起動する) を選択します。

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

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

    • Ec2SetPasswordEnabled

    • Ec2HandleUserDataEnabled

  6. リモートデスクトップセッションからの接続を切り、Amazon EC2 コンソールに戻ります。

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

  8. インスタンスが停止したら、コンソールで [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] (カスタム Window AMI を使用する) を選択すると、AWS OpsWorks Stacks はカスタム 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] を選択します。

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