翻訳は機械翻訳により提供されています。提供された翻訳内容と英語版の間で齟齬、不一致または矛盾がある場合、英語版が優先します。
ステップ 2.3: カスタムクックブックの実装
重要
この AWS OpsWorks Stacks サービスは 2024 年 5 月 26 日にサポート終了となり、新規および既存のお客様の両方で無効になっています。できるだけ早くワークロードを他のソリューションに移行することを強くお勧めします。移行についてご質問がある場合は、 AWS re:Post
スタックは、基本的にはインスタンスのコンテナですが、インスタンスを直接スタックに追加することはありません。それぞれ関連するインスタンスのグループを表すレイヤーを 1 つ以上追加し、そのレイヤーにインスタンスを追加します。
レイヤーは基本的に、同じ設定の Amazon EC2 インスタンスのセットを作成するために AWS OpsWorks スタックが使用する設計図です。インスタンスは、オペレーティングシステムの基本バージョンから開始し、インスタンスのレイヤーはさまざまなタスクをインスタンスで実行して、次のような設計図を実装します。
-
ディレクトリとファイルの作成
-
ユーザーの管理
-
ソフトウェアのインストールと設定
-
サーバーの起動または停止
-
アプリケーションコードおよび関連ファイルのデプロイ
レイヤーは、[Chef recipes]
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レイヤーをサポートする方法について説明します。以降のトピックでは、レシピを実装する方法を示します。
開始するには、以下の手順を実行します。
-
ワークステーション上の適切な場所に、
iis-cookbook
というディレクトリを作成します。 -
iis-cookbook
に、次のコンテンツを含むmetadata.rb
ファイルを追加します。name "iis-cookbook" version "0.1.0"
この例では、最小限の
metadata.rb
を使用します。このファイルを使用する方法の詳細については、「metadata.rb」を参照してください。 -
iis-cookbook
にrecipes
ディレクトリを追加します。このディレクトリ (名前を
recipes
にする必要があります) には、クックブックのレシピが含まれています。
通常、クックブックには他のさまざまディレクトリを含めることができます。たとえば、レシピがテンプレートを使用して設定ファイルを作成する場合、テンプレートは通常 templates\default
ディレクトリに配置されます。この例のクックブックは完全にレシピで構成されているため、他のディレクトリは必要ありません。また、この例では、1 つのクックブックを使用しますが、必要な数のクックブックを使用できます。複雑なプロジェクトでは、多くの場合、複数のクックブックを使用することが推奨されます。たとえば、セットアップタスクとデプロイタスクに別個のクックブックを使用することができます。クックブックのその他の例については、「クックブックとレシピ」を参照してください。
IIS のインストールと起動を行うレシピの実装
IIS は Windows の機能の 1 つであり、Windows Server に必要に応じてインストールできる一連のシステムコンポーネントに含まれます。レシピには、次のいずれかの方法で IIS をインストールさせることができます。
-
powershell_script
リソースお使用して Install-WindowsFeature
コマンドレットを実行する。 -
Chef Windows クックブック
の windows_feature
リソースを使用する。windows
クックブックには一連のリソースが含まれており、これらのリソースのプロバイダは、Deployment Image Servicing and Management(DISM) を使用して Windows インスタンスでさまざまなタスク (機能のインストールなど) を実行します。
注記
powershell_script
は、特に Windows レシピに役立ちます。これを使うと、PowerShell スクリプトまたはコマンドレットを実行する方法によりインスタンスでさまざまなタスクを実行することができます。特に、Chef リソースによってサポートされていないタスクに役立ちます。
この例は、PowerShell スクリプトを実行して Web Server (IIS) をインストールおよび起動する例です。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] (べき等) にするため、同じタスクを複数回実行して時間を無駄にすることがありません。
各リソースには、プロバイダが実行するアクションを指定するアクションがあります。この例には明示的なアクションがないため、プロバイダはデフォルトの
:run
アクションを実行します、これにより指定された PowerShell スクリプトが実行されます。詳細については、「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 アーカイブを使用するには
-
.zip
ディレクトリのiis-cookbook
アーカイブを作成します。AWS OpsWorks スタックは、Windows スタックの
.tgz
(gzip 圧縮 tar) アーカイブもサポートしています。 -
アーカイブを米国西部 (カルフォルニア北部) リージョンの S3 バケットにアップロードし、ファイルを公開します。プライベート S3 アーカイブを使用することもできますが、この例ではパブリックアーカイブで十分であり、作業がいくらかシンプルになります。
にサインイン AWS Management Console し、https://console.aws.amazon.com/s3/
で Amazon S3 コンソールを開きます。 -
us-west-1
内にバケットがまだ存在しない場合は、[Create Bucket] (バケットを作成する) を選択して、バケットを米国西部 (カリフォルニア北部)リージョン内に作成します。 -
バケットリストの中からファイルをアップロードしたいバケットの名前を選択し、[Upload] を選択します。
-
[Add Files] を選択します。
-
アップロードするアーカイブを選択し、[Open] を選択します。
-
[Upload - Select Files and Folders] ダイアログの下部で、[Set Details] を選択します。
-
[Set Details] ダイアログの下部で、[Set Permissions] を選択します。
-
[Set Permissions] ダイアログで、[Make everything public] を選択します。
-
[Set Permissions] ダイアログの下部で、[Start Upload] を選択します。アップロードが終了すると、
iis-cookbook.zip
ファイルがバケット内に表示されます。 -
バケットを選択し、選択したバケットの [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 の料金
スタックのカスタムクックブックを有効にするには
-
AWS OpsWorks スタックコンソールで、ナビゲーションペインでスタックを選択し、右上のスタック設定を選択します。
-
[Settings] ページの右上にある [Edit] を選択します。
-
[Settings] ページで、[Use custom Chef cookbooks] を [Yes] に設定し、次の情報を入力します。
-
[リポジトリタイプ] - [S3 Archive] (S3 アーカイブ)
-
[リポジトリ URL] - 以前に記録したクックブックアーカイブファイルの S3 URL。
-
-
[Save] を選択してスタック設定を更新します。
AWS OpsWorks スタックは、すべての新しいインスタンスにカスタムクックブックをインストールします。 AWS OpsWorks スタックは、オンラインインスタンスにはカスタムクックブックを自動的にインストールまたは更新しない点に注意してください。これは、後で説明するように、手動で行うことができます。