AWS OpsWorks
ユーザーガイド (API バージョン 2013-02-18)

AWS OpsWorks スタック

クラウドベースのコンピューティングには通常、まとめて作成および管理する必要のある AWS リソース(Amazon EC2 インスタンス、Amazon Relational Database Service (RDS) など)のグループが含まれます。たとえば、ウェブアプリケーションには、通常、アプリケーションサーバー、データベースサーバー、ロードバランサーなどが必要です。このインスタンスのグループは、一般にスタックと呼ばれています。例として、シンプルなアプリケーションサーバースタックを図に表すと以下のようになります。

インスタンスを作成したり、必要なパッケージをインストールしたりする他に、通常、アプリケーションをアプリケーションサーバーに分散したり、スタックのパフォーマンスを監視したり、セキュリティおよびアクセス許可を管理したりするなどの操作を行う方法が必要です。

AWS OpsWorks スタックは、スタックとアプリケーションを作成および管理するシンプルで柔軟な方法を提供します。

AWS OpsWorks スタックを使用した基本的なアプリケーションサーバースタックの構造は以下のようになります。Elastic Load Balancing ロードバランサーの背後で実行されるアプリケーションサーバーのグループとバックエンド Amazon RDS データベースサーバーで構成されます。

かなりシンプルですが、このスタックはすべての主要な AWS OpsWorks スタックの機能を示しています。構成を以下に示します。

スタック

スタックは AWS OpsWorks スタックの中心となるコンポーネントです。これは基本的に AWS リソース (Amazon EC2 インスタンス、Amazon RDS データベースインスタンスなど) 用のコンテナです。目的が共通で、論理的に一括して管理されます。スタックにより、ユーザーはこれらのリソースをグループで管理することができます。また、インスタンスのオペレーティングシステムや AWS リージョンなどの一部のデフォルトの構成設定もスタックにより定義されます。ユーザーの直接操作から分離する必要のあるスタックコンポーネントがある場合、そのスタックを VPC 内で実行することもできます。

Layer

1 つ以上の Layer を追加することにより、スタックのコンポーネントを定義します。Layer は、アプリケーションへのサービス提供やデータベースサーバーのホストのような特定の目的を果たす一連の Amazon EC2 インスタンスを表します。

パッケージのデフォルト設定を変更してレイヤーをカスタマイズまたは展開したり、Chef レシピを追加して追加のパッケージのインストールなどのタスクを実行したりできます。

すべてのスタックに対して、AWS OpsWorks スタックには、以下の AWS のサービスを表すサービスレイヤーが用意されています。

  • Amazon Relational Database Service

  • Elastic Load Balancing

  • Amazon Elastic Container Service

Layer により、インストールするパッケージ、インストールするパッケージの設定内容、アプリケーションをデプロイする方法などを完全に制御することができます。

レシピおよびライフサイクルイベント

Layer によって、Chef レシピに基づいてインスタンスへのパッケージのインストール、アプリケーションのデプロイ、スクリプトの実行などのタスクが処理されます。AWS OpsWorks スタックの主要な機能の 1 つに、指定した一連のレシピを各インスタンスで適時に自動的に実行するライフサイクルイベント (Setup、Configure、Deploy、Undeploy、Shutdown) があります。

各 Layer では、これらの各ライフサイクルイベントに一連のレシピが割り当てられており、そのイベントと Layer のさまざまなタスクの処理に使用されます。たとえば、ウェブサーバーレイヤーに属するインスタンスの起動が終了した後、AWS OpsWorks スタックは以下を実行します。

  1. Layer の Setup レシピを実行します。これにより、ウェブサーバーのインストールや設定などのタスクが実行できます。

  2. Layer の Deploy レシピを実行します。これにより、リポジトリからインスタンスに Layer のアプリケーションがデプロイされ、サービスの再開などの関連タスクが実行されます。

  3. スタックのすべてのインスタンスで Configure レシピを実行すると、各インスタンスは新しいインスタンスに適合するように必要に応じて設定を調整できます。

    たとえば、インスタンスでロードバランサーを実行しながら、Configure レシピで新しいインスタンスに含めるロードバランサーの設定を変更できます。

1 つのインスタンスが複数のレイヤーに属している場合、AWS OpsWorks スタックはレイヤーごとにレシピを実行するため、たとえば、PHP アプリケーションサーバーと MySQL データベースサーバーをサポートする 1 つのインスタンスを作成できます。

レシピを実装している場合は、各レシピを適切なレイヤーとイベントに割り当てることができ、AWS OpsWorks スタックによって適時に自動的に実行されるようになります。また、レシピはいつでも手動で実行することができます。

インスタンス

インスタンスとは、Amazon EC2 インスタンスなどの 1 つのコンピューティングリソースを意味します。インスタンスは、オペレーティングシステムやサイズなど基本的な設定を定義します。Elastic IP アドレスや Amazon EBS ボリュームなどのその他の設定は、インスタンスの Layer によって定義されます。Layer のレシピは、パッケージをインストールして設定したりアプリケーションをデプロイしたりするタスクを実行することで設定を完了します。

AWS OpsWorks スタックを使用してインスタンスを作成し、それをレイヤーに追加できます。インスタンスを起動すると、AWS OpsWorks スタックによって、インスタンスとそのレイヤーで指定されている設定を使用して Amazon EC2 インスタンスが起動されます。Amazon EC2 インスタンスの起動後、AWS OpsWorks スタックはインスタンスとサービス間の通信を処理するエージェントをインストールし、ライフサイクルイベントに応じて適切なレシピを実行します。

AWS OpsWorks スタックは、起動方法と停止方法によって区別される以下のインスタンスタイプをサポートしています。

  • 24/7 インスタンスは、ユーザーが手動で起動し、ユーザーが停止するまで実行されます。

  • 時間ベースのインスタンスは、指定した日単位や週単位のスケジュールに応じて AWS OpsWorks スタックによって実行されます。

    このインスタンスにより、予想される使用パターンに対応するようにスタックのインスタンス数を自動的に調整することが可能となります。

  • 負荷ベースのインスタンスは、CPU 使用率などの負荷のメトリクスに基づいて AWS OpsWorks スタックによって自動的に起動および停止されます。

    このインスタンスにより、スタックのインスタンス数を着信トラフィックの変動に対応するように自動的に調整することが可能となります。負荷ベースのインスタンスは Linux ベースのスタックにのみ使用できます。

AWS OpsWorks スタックでは、インスタンスの自動ヒーリングがサポートされています。エージェントとサービスの間の通信が途絶えると、AWS OpsWorks スタックは自動的にインスタンスの停止と再起動を行います。

また、AWS OpsWorks スタックの外部で作成された Linux ベースのコンピューティングリソースをスタックに組み込むこともできます。

  • Amazon EC2 コンソール、CLI、または API を使用して直接作成した Amazon EC2 インスタンス。

  • 仮想マシンで実行しているインスタンスを含め、独自のハードウェアで実行しているオンプレミスインスタンス。

これらのいずれかのインスタンスを登録すると、そのインスタンスは AWS OpsWorks スタックインスタンスになり、AWS OpsWorks スタックで作成したインスタンスと同様の方法で管理できるようになります。

アプリケーション

ユーザーは Amazon S3 バケットなどのリポジトリにアプリケーションおよび関連ファイルを保存します。各アプリケーションは、アプリケーションタイプを指定した App として表されます。App には、リポジトリからインスタンスにアプリケーションをデプロイするために必要な情報 (リポジトリ URL、パスワードなど) も指定します。アプリケーションをデプロイすると、AWS OpsWorks スタックによって Deploy イベントがトリガーされ、スタックのインスタンスで Deploy レシピが実行されます。

以下の方法でアプリケーションをデプロイすることができます。

  • 自動 — インスタンスを起動すると、AWS OpsWorks スタックによってインスタンスの Deploy レシピが自動的に実行されます。

  • 手動 — 新しいアプリケーションをデプロイする場合または既存のアプリケーションを更新する必要がある場合、ユーザーは手動でオンラインインスタンスの Deploy レシピを実行できます。

通常は AWS OpsWorks スタックによってスタック全体で Deploy レシピが実行されるようにします。この操作では、他のレイヤーのインスタンスがその設定を適切に変更できます。ただし、すべてのアプリケーションサーバーのインスタンスに新しいアプリケーションをデプロイする前に、それをテストする必要がある場合などには、デプロイをインスタンスのサブセットに制限することができます。

スタックのカスタマイズ

AWS OpsWorks スタックでは、特定の要件に合わせてレイヤーをカスタマイズするためのさまざまな方法が提供されています。

  • さまざまな設定を表す属性を上書きしたり、設定ファイルを作成するために使用したテンプレートをオーバーライドしたりすることで、AWS OpsWorks スタックがパッケージを設定する方法を変更できます。

  • スクリプトの実行や標準外のパッケージのインストールおよび設定などのタスクを実行する独自のレシピを指定することによって、既存の Layer を拡張することができます。

すべてのスタックには、レシピの最小限のセットで始める 1 つ以上の Layer を含めることができます。パッケージのインストール、アプリケーションのデプロイなどのタスクを処理するレシピを実装することで、Layer に機能を追加します。カスタムレシピおよび関連するファイルを 1 つ以上のクックブックにまとめ、そのクックブックを Amazon S3 や Git などのリポジトリに保管します。

カスタムレシピは手動で実行することができますが、AWS OpsWorks スタックでは、以下の 5 つのライフサイクルイベントがサポートされているため、ユーザーはこのプロセスを自動化することもできます。

  • Setup イベントは、新しいインスタンスが正常にブートした後に発生します。

  • Configure イベントは、インスタンスがオンライン状態に移行したときとオンライン状態から移行したときに、スタックのすべてのインスタンスで発生します。

  • Deploy イベントは、ユーザーがアプリケーションをデプロイするときに発生します。

  • Undeploy イベントは、ユーザーがアプリケーションを削除するときに発生します。

  • Shutdown イベントは、ユーザーがインスタンスを停止するときに発生します。

各 Layer で、各イベントに任意の数のレシピを割り当てることができます。レイヤーのインスタンスでライフサイクルイベントが発生すると、AWS OpsWorks スタックは関連付けられているレシピを実行します。たとえば、アプリケーションサーバーのインスタンスで Deploy イベントが発生した場合は、AWS OpsWorks スタックによって、そのアプリケーションをダウンロードしたり関連タスクを実行したりする、レイヤーの組み込み Deploy レシピが実行されます。

リソース管理

Elastic IP アドレスなどの他の AWS リソースをスタックに組み込むことができます。AWS OpsWorks スタックのコンソールや API を使用して、スタックにリソースを登録したり、登録したリソースをインスタンスにアタッチしたり、登録したリソースをインスタンスからデタッチしたり、あるインスタンスから別のインスタンスにリソースを移動したりすることができます。

セキュリティおよびアクセス許可

AWS OpsWorks スタックは AWS Identity and Access Management (IAM) と統合されているため、以下のような、ユーザーが AWS OpsWorks スタックにアクセスする方法をしっかりと制御できます。

  • 個々のユーザーが Layer やインスタンスなどのスタックリソースを作成できるかどうかや、SSH または RDP を使用してスタックの Amazon EC2 インスタンスに接続できるかどうかなど、個々のユーザーが各スタックを操作する方法。

  • AWS OpsWorks スタックがユーザーに代わって Amazon EC2 インスタンスなどの AWS リソースを操作するために実行できる方法。

  • AWS OpsWorks スタックインスタンスで実行されるアプリケーションが Amazon S3 バケットなどの AWS リソースにアクセスする方法。

  • ユーザーの SSH パブリックキーと RDP パスワードを管理する方法、およびインスタンスに接続する方法。

モニタリングとロギング

AWS OpsWorks スタックには、スタックをモニタリングしたり、スタックやレシピに関する問題をトラブルシューティングしたりできるように、以下に示すいくつかの機能が用意されています。すべてのスタック用:

  • AWS OpsWorks スタックには、Linux スタック用に一連のカスタム CloudWatch メトリクスが用意されており、便利なように [Monitoring] ページにまとめられています。

    AWS OpsWorks スタックでは、Windows スタック用に標準の CloudWatch メトリクスがサポートされています。CloudWatch コンソールでそれらを監視できます。

  • CloudTrail ログ。AWS アカウントの AWS OpsWorks スタックまたはその代理によって行われた API コールをすべて記録します。

  • イベントログ。スタックのすべてのイベントをリスト表示します。

  • Chef ログ。実行されたレシピや発生したエラーなど、各インスタンスで各ライフサイクルイベントに対して起こったことの詳細を表示します。

Linux ベースのスタックには、スタックのインスタンスに関する詳細モニタリングデータの収集と表示に使用できる Ganglia マスター Layer もあります。

CLI、SDK、および AWS CloudFormation テンプレート

AWS OpsWorks スタックでは、コンソールに加えて、複数の言語に対応するコマンドラインインターフェイス (CLI) と SDK もサポートされていて、操作の実行に使用できます。以下の機能を考慮してください。

  • AWS OpsWorks スタックの CLI は、AWS CLI の一部であり、コマンドラインから操作を実行するために使用できます。

    AWS CLI は、複数の AWS サービスをサポートし、Windows、Linux、または OS X システムにインストールできます。

  • AWS OpsWorks スタックは、Windows PowerShell 用 AWS ツールに含まれ、Windows PowerShell のコマンドラインからの操作の実行に使用できます。

  • AWS OpsWorks スタック SDK は AWS SDK に含まれ、JavaJavaScript (ブラウザベースおよび Node.js)、.NETPHPPython (boto)、または Ruby で実装したアプリケーションで使用できます。

AWS CloudFormation テンプレートを使用して、スタックをプロビジョニングすることもできます。「AWS OpsWorks のスニペット」に記載されたいくつかの例を参照してください。