ステップ 2.3: カスタムクックブックの実装 - AWS OpsWorks

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

ステップ 2.3: カスタムクックブックの実装

重要

この AWS OpsWorks Stacks サービスは 2024 年 5 月 26 日にサポート終了となり、新規および既存のお客様の両方で無効になっています。できるだけ早くワークロードを他のソリューションに移行することを強くお勧めします。移行についてご質問がある場合は、 AWS re:Post または AWS Premium Support を通じて AWS Support チームにお問い合わせください。

スタックは、基本的にはインスタンスのコンテナですが、インスタンスを直接スタックに追加することはありません。それぞれ関連するインスタンスのグループを表すレイヤーを 1 つ以上追加し、そのレイヤーにインスタンスを追加します。

レイヤーは基本的に、 AWS OpsWorks スタックが同じ設定で一連の Amazon EC2 インスタンスを作成するために使用する設計図です。インスタンスは、オペレーティングシステムの基本バージョンから開始し、インスタンスのレイヤーはさまざまなタスクをインスタンスで実行して、次のような設計図を実装します。

  • ディレクトリとファイルの作成

  • ユーザーの管理

  • ソフトウェアのインストールと設定

  • サーバーの起動または停止

  • アプリケーションコードおよび関連ファイルのデプロイ

レイヤーは、[Chef recipes] (シェフのレシピ) (略してレシピ)を実行してインスタンスに対してタスクを実行します。レシピは、インスタンスの最終的な状態を記述する Chef のドメイン固有言語 (DSL) を使用する Ruby アプリケーションです。 AWS OpsWorks スタックでは、通常、各レシピは、レイヤーのライフサイクルイベントの 1 つに割り当てられます: セットアップ、設定、デプロイ、デプロイ解除、シャットダウン。インスタンスでライフサイクルイベントが発生すると、 AWS OpsWorks スタックはイベントのレシピを実行して適切なタスクを実行します。例えば、Setup イベントは、インスタンスの起動が完了した後に発生します。 AWS OpsWorks スタックは Setup レシピを実行します。通常、このレシピは、サーバーソフトウェアのインストールと設定、関連サービスの開始などのタスクを実行します。

AWS OpsWorks スタックは、標準タスクを実行する一連の組み込みレシピを各レイヤーに提供します。カスタムレシピを実装して追加タスクを実行し、レイヤーのライフサイクルイベントに割り当てることで、レイヤーの機能を拡張できます。Windows スタックは、いくつかの基本タスクのみ実行する最小限のレシピセットを持つカスタムレイヤーをサポートします。Windows インスタンスに機能を追加するには、ソフトウェアのインストール、アプリケーションのデプロイなどを行うカスタムレシピを実装する必要があります。このトピックでは、IIS インスタンスをサポートするシンプルなカスタムレイヤーを作成する方法を説明します。

クックブックとレシピの簡単な説明

レシピは、インスタンスの予想される状態の 1 つ以上の側面を定義します (存在するディレクトリ、インストールが必要なソフトウェアパッケージ、デプロイが必要なアプリケーションなど)。レシピは、クックブックにパッケージ化されており、通常は 1 つ以上の関連レシピと、設定ファイルを作成するためのテンプレートなどの関連するファイルが含まれています。

このトピックは、レシピのかなり基本的な説明であり、クックブックを実装してシンプルなカスタム IISレイヤーをサポートする方法のみ示しているにすぎません。クックブックのより全般的な説明については、「クックブックとレシピ」を参照してください。Windows 固有のトピックを含む、クックブックの実装方法の詳細なチュートリアルについては、「クックブック 101」を参照してください。

Chef レシピは、技術的には Ruby アプリケーションですが、コードの大部分 (すべてではありません) は Chef DSL で記述されています。DSL の大部分は、インスタンスの状態の側面を宣言により指定するために使用できる一連のリソースで構成されています。例えば、directory リソースは、システムに追加するディレクトリを定義します。次の例は、指定されたユーザーに属する、フルコントロール権限を持つ C:\data ディレクトリを定義しており、親ディレクトリの権限を継承しません。

directory 'C:\data' do rights :full_control, 'WORKGROUP\username' inherits false action :create end

Chef は、レシピを実行するとき、関連付けられたプロバイダ (インスタンスの状態の変更の詳細を処理する Ruby オブジェクト) にデータを渡すことにより各リソースを実行します。この場合、プロバイダは指定された設定を使用して新しいディレクトリを作成します。

カスタム IISレイヤー用のカスタムクックブックは、次のタスクを実行する必要があります。

  • IIS 機能をインストールし、サービスを起動します。

    通常は、インスタンスの起動が終了した直後のセットアップ中にこのタスクを実行します。

  • アプリケーションをインスタンスにデプロイします (この例ではシンプルな HTML ページ)。

    通常は、セットアップ時にこのタスクを実行します。ただし、アプリケーションは通常定期的に更新する必要があるため、インスタンスがオンラインのときに更新をデプロイする必要もあります。

1 つのレシピでこれらのすべてのタスクを実行する必要があります。ただし、セットアップタスクとデプロイタスクに別個のレシピを使用することをお勧めします。このようにして、セットアップコードを実行しなくても、いつでもアプリケーションの更新をデプロイすることができます。以下では、クックブックをセットアップしてカスタム IISレイヤーをサポートする方法について説明します。以降のトピックでは、レシピを実装する方法を示します。

開始するには、以下の手順を実行します。
  1. ワークステーション上の適切な場所に、iis-cookbook というディレクトリを作成します。

  2. iis-cookbook に、次のコンテンツを含む metadata.rb ファイルを追加します。

    name "iis-cookbook" version "0.1.0"

    この例では、最小限の metadata.rb を使用します。このファイルを使用する方法の詳細については、「metadata.rb」を参照してください。

  3. iis-cookbookrecipes ディレクトリを追加します。

    このディレクトリ (名前を recipes にする必要があります) には、クックブックのレシピが含まれています。

通常、クックブックには他のさまざまディレクトリを含めることができます。たとえば、レシピがテンプレートを使用して設定ファイルを作成する場合、テンプレートは通常 templates\default ディレクトリに配置されます。この例のクックブックは完全にレシピで構成されているため、他のディレクトリは必要ありません。また、この例では、1 つのクックブックを使用しますが、必要な数のクックブックを使用できます。複雑なプロジェクトでは、多くの場合、複数のクックブックを使用することが推奨されます。たとえば、セットアップタスクとデプロイタスクに別個のクックブックを使用することができます。クックブックのその他の例については、「クックブックとレシピ」を参照してください。

IIS のインストールと起動を行うレシピの実装

IIS は Windows の機能の 1 つであり、Windows Server に必要に応じてインストールできる一連のシステムコンポーネントに含まれます。レシピには、次のいずれかの方法で IIS をインストールさせることができます。

注記

powershell_script は、特に Windows レシピに役立ちます。 PowerShell スクリプトまたはコマンドレットを実行することで、インスタンスでさまざまなタスクを実行できます。特に、Chef リソースによってサポートされていないタスクに役立ちます。

この例では、Web Server (IIS) をインストールして起動する PowerShell スクリプトを実行します。windows クックブックについては後で説明します。windows_feature を使用して IIS をインストールする方法の例については、「Windows の機能のインストール: IIS」を参照してください。

以下の内容で install.rb という名前のレシピをクックブックの recipes ディレクトリに追加します。

powershell_script 'Install IIS' do code 'Install-WindowsFeature Web-Server' not_if "(Get-WindowsFeature -Name Web-Server).Installed" end service 'w3svc' do action [:start, :enable] end

レシピには、2 つのリソースが含まれています。

powershell_script

powershell_script は、指定された PowerShellスクリプトまたはコマンドレットを実行します。例では、以下の属性設定を使用します。

  • code – 実行する PowerShell コマンドレット。

    この例は、Web Server (IIS) をインストールする Install-WindowsFeature コマンドレットを実行する例です。通常、code 属性の行数に制限はないため、必要な数のコマンドレットを実行できます。

  • not-if - IIS がまだインストールされていない場合にのみレシピが IIS をインストールするようにする [guard attribute (ガード属性)]。

    通常は、レシピを [idempotent] (べき等) にするため、同じタスクを複数回実行して時間を無駄にすることがありません。

各リソースには、プロバイダが実行するアクションを指定するアクションがあります。この例には明示的なアクションがないため、プロバイダーは指定された PowerShell スクリプトを実行するデフォルトの:runアクションを実行します。詳細については、「Windows PowerShell スクリプトの実行」を参照してください。

service

service はサービス (この場合、Web Server IIS サービス (W3SVC)) を管理します。この例では、デフォルト属性を使用し、IIS を起動および有効化する 2 つのアクション (:start:enable) を指定します。

注記

パッケージインストーラを使用するソフトウェアをインストールする場合 (MSI など)、windows_package リソースを使用できます。詳細については、「パッケージのインストール」を参照してください。

カスタムクックブックの有効化

AWS OpsWorks スタックは、各インスタンスのローカルキャッシュからレシピを実行します。カスタムレシピを実行するには、以下を実行する必要があります。

  • リモートリポジトリにクックブックを保存します。

    AWS OpsWorks スタックは、このリポジトリから各インスタンスのローカルキャッシュにクックブックをダウンロードします。

  • カスタムクックブックが有効になるようにスタックを編集します。

    カスタムクックブックはデフォルトで無効なため、スタックのカスタムクックブックを有効にし、リポジトリ URL および関連情報を指定する必要があります。

AWS OpsWorks スタックはカスタムクックブックの S3 アーカイブと Git リポジトリをサポートします。この例では S3 アーカイブを使用します。詳細については、「クックブックリポジトリ」を参照してください。

S3 アーカイブを使用するには
  1. .zip ディレクトリの iis-cookbook アーカイブを作成します。

    AWS OpsWorks スタックは、Windows スタックの .tgz (gzip 圧縮 tar) アーカイブもサポートしています。

  2. アーカイブを米国西部 (カルフォルニア北部) リージョンの S3 バケットにアップロードし、ファイルを公開します。プライベート S3 アーカイブを使用することもできますが、この例ではパブリックアーカイブで十分であり、作業がいくらかシンプルになります。

    1. にサインイン AWS Management Console し、https://console.aws.amazon.com/s3/ で Amazon S3 コンソールを開きます。

    2. us-west-1 内にバケットがまだ存在しない場合は、[Create Bucket] (バケットを作成する) を選択して、バケットを米国西部 (カリフォルニア北部)リージョン内に作成します。

    3. バケットリストの中からファイルをアップロードしたいバケットの名前を選択し、[Upload] を選択します。

    4. [Add Files] を選択します。

    5. アップロードするアーカイブを選択し、[Open] を選択します。

    6. [Upload - Select Files and Folders] ダイアログの下部で、[Set Details] を選択します。

    7. [Set Details] ダイアログの下部で、[Set Permissions] を選択します。

    8. [Set Permissions] ダイアログで、[Make everything public] を選択します。

    9. [Set Permissions] ダイアログの下部で、[Start Upload] を選択します。アップロードが終了すると、iis-cookbook.zip ファイルがバケット内に表示されます。

    10. バケットを選択し、選択したバケットの [Properties] タブを選択します。[Link] の横で、後で使用できるように、アーカイブファイルの URL を記録します。

    Amazon S3 バケットへのファイルのアップロードの詳細については、「Amazon S3 Console User Guide」(Amazon S3 コンソールユーザーガイド) で「How Do I Upload Files and Folders to an S3 Bucket? (S3 バケットにファイルとフォルダをアップロードする方法) を参照してください。

重要

この時点までで、ウォークスルーにかかるコストはほんのわずかです。 AWS OpsWorks スタックサービス自体は無料です。ただし、Amazon S3 ストレージなど、使用する AWS リソースには料金がかかります。アーカイブをアップロードするとすぐに料金が発生し始めます。詳細については、「AWS の料金」を参照してください。

スタックのカスタムクックブックを有効にするには
  1. AWS OpsWorks スタックコンソールで、ナビゲーションペインでスタックを選択し、右上のスタック設定を選択します。

  2. [Settings] ページの右上にある [Edit] を選択します。

  3. [Settings] ページで、[Use custom Chef cookbooks] を [Yes] に設定し、次の情報を入力します。

    • [リポジトリタイプ] - [S3 Archive] (S3 アーカイブ)

    • [リポジトリ URL] - 以前に記録したクックブックアーカイブファイルの S3 URL。

  4. [Save] を選択してスタック設定を更新します。

AWS OpsWorks スタックは、すべての新しいインスタンスにカスタムクックブックをインストールします。 AWS OpsWorks スタックは、オンラインインスタンスにはカスタムクックブックを自動的にインストールまたは更新しない点に注意してください。これは、後で説明するように、手動で行うことができます。