

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

# Vagrant でのスタック設定およびデプロイ属性の模倣
<a name="opsworks-opsworks-mock"></a>

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

**注記**  
このトピックは Linux インスタンスにのみ当てはまります。Test Kitchen はまだ Windows をサポートしていないため、すべての Windows の例を OpsWorks スタックインスタンスで実行します。

OpsWorks スタックは、すべてのライフサイクルイベントについて[、スタック内の各インスタンスのノードオブジェクトにスタック設定とデプロイ属性](workingcookbook-json.md)を追加します。これらの属性から、各レイヤーの設定とそのオンラインインスタンス、デプロイされた各アプリケーションの設定など、スタック設定のスナップショットが渡されます。これらの属性はノードオブジェクトにあるため、任意のレシピからアクセスできます。 スタックインスタンスのほとんどのレシピは、これらの属性の 1 OpsWorks つ以上を使用します。

Vagrant ボックスで実行されているインスタンスは OpsWorks スタックによって管理されないため、そのノードオブジェクトにはデフォルトでスタック設定およびデプロイ属性は含まれません。ただし、適切な属性のセットを Test Kitchen 環境に追加できます。その後、Test Kitchen は属性をインスタンスのノードオブジェクトに追加し、レシピは OpsWorks スタックインスタンスと同様に属性にアクセスできます。

このトピックでは、適切なスタック設定およびデプロイ属性のコピーを取得し、インスタンスにインストールして、属性にアクセスする方法について説明します。

**注記**  
レシピのテストを Test Kitchen で実行している場合は、スタック設定およびデプロイ JSON を模倣する代替方法が [fauxhai](https://github.com/customink/fauxhai) によって提供されます。

**クックブックをセットアップするには**

1. `printjson` という名前の `opsworks_cookbooks` のサブディレクトリを作成し、そのディレクトリに移動します。

1. 「[例 1: パッケージのインストール](cookbooks-101-basics-packages.md)」で説明されているとおりに Test Kitchen を初期化および設定します。

1. `printjson` と `recipes` にサブディレクトリを 2 つ追加します`environments`.。

適切な定義で属性ファイルをクックブックに追加することで、スタック設定およびデプロイ属性を模倣することができますが、より良いアプローチは Test Kitchen 環境を使用することです。通常は、次のいずれかの方法でログインします。
+ `.kitchen.yml` に属性定義を追加します。

  このアプローチは、属性の数がほんの数個の場合に最も便利です。詳細については、「[kitchen.yml](https://docs.chef.io/config_yml_kitchen.html)」を参照してください。
+ 環境ファイルで属性を定義し、そのファイルを `.kitchen.yml` で参照します。

  このアプローチは通常、スタック設定およびデプロイ属性に適しています。環境ファイルがすでに JSON 形式であるためです。属性のコピーは、適切な スタックインスタンスから JSON OpsWorks 形式で取得し、貼り付けるだけです。すべての例で環境ファイルを使用します。

クックブックのスタック設定およびデプロイ属性を作成するための最も簡単な方法は、適切に設定したスタックを作成し、インスタンスから JSON 形式で属性のコピーを取得することです。Test Kitchen 環境ファイルを管理しやすい状態に保つには、レシピで必要になる属性のみを含むように、JSON を編集できます。この章の例は、「[Chef 11 Linux スタックの使用開始](gettingstarted.md)」からのスタックに基づいています。ロードバランサー、PHP アプリケーションサーバー、MySQL データベースサーバーが属する PHP アプリケーションサーバースタックです。

**スタック設定およびデプロイメント JSON を作成するには**

1. SimplePHPApp のデプロイなど、「[Chef 11 Linux スタックの使用開始](gettingstarted.md)」での説明に従って MyStack を作成します。希望する場合は、「[ステップ 4: MyStack の拡張](gettingstarted-scale.md)」で指示されている 2 番目の PHP アプリケーションサーバー インスタンスは、省略してもかまいません。例ではこれらの属性を使用しません。

1. `php-app1` インスタンスがまだ開始されていない場合は開始してから、[SSH を使用してログイン](workinginstances-ssh.md)します。

1. ターミナルウィンドウで、以下の[エージェント CLI](agent.md) コマンドを実行します。

   ```
   sudo opsworks-agent-cli get_json
   ```

   このコマンドは、インスタンスの最新のスタック設定およびデプロイ属性を JSON 形式でターミナルウィンドウに出力します。

1. JSON を `.json` ファイルにコピーし、ワークステーションの便利な場所に保存します。詳細は、SSH クライアントによって異なります。例えば、Windows で PuTTY を使用している場合は、`Copy All to Clipboard` コマンドを実行できます。このコマンドは、Windows クリップボードにターミナルウィンドウのすべてのテキストをコピーします。その後、`.json` ファイルに内容を貼り付け、ファイルを編集して余分なテキストをすべて削除できます。

1. 必要に応じて MyStack JSON を編集します。スタック設定およびデプロイ属性は多数あるため、クックブックでは通常、その一部しか使用しません。環境ファイルを管理しやすい状態に保つには、元の構造を保持しながら、クックブックで実際に使用される属性のみを含むように、JSON を編集できます。

   この例では、`['opsworks']['stack']` と `['id]` という 2 つの `['name']` 属性だけが含まれている、MyStack JSON の大幅に編集されたバージョンを使用します。次のような、MyStack JSON 編集バージョンを作成します。

   ```
   {
     "opsworks": {
       "stack": {
         "name": "MyStack",
         "id": "42dfd151-6766-4f1c-9940-ba79e5220b58",
       },
     },
   }
   ```

この JSON をインスタンスのノードオブジェクトに含めるには、Test Kitchen 環境に追加する必要があります。

**スタック設定およびデプロイ属性を Test Kitchen 環境に追加するには**

1. 以下の内容で `test.json` という名前の環境ファイルを作成し、クックブックの `environments` フォルダに保存します。

   ```
   {
     "default_attributes": {
       "opsworks" : {
         "stack" : {
           "name" : "MyStack",
           "id" : "42dfd151-6766-4f1c-9940-ba79e5220b58"
         }
       }
     },
     "chef_type" : "environment",
     "json_class" : "Chef::Environment"
   }
   ```

   環境ファイルには以下の要素があります。
   + `default_attributes` – JSON 形式のデフォルトの属性です。

     これらの属性は、`default` 属性タイプのノードオブジェクトに追加されます。このタイプは、スタック設定とデプロイメント JSON のすべての属性に使用されます。この例では、前に示したスタック設定とデプロイメント JSON の編集されたバージョンを使用します。
   + `chef_type` – この要素を`environment` に設定します。
   + `json_class` – この要素を`Chef::Environment` に設定します。

1. `.kitchen.yml` を編集して、Test Kitchen 環境を次のように定義します。

   ```
   ---
   driver:
     name: vagrant
   
   provisioner:
     name: chef_solo
     environments_path: ./environments
   
   platforms:
     - name: ubuntu-12.04
   
   suites:
     - name: printjson 
       provisioner:
         solo_rb:
           environment: test
       run_list:
         - recipe[printjson::default]
       attributes:
   ```

   `kitchen init` によって作成されたデフォルトの `.kitchen.yml` に以下の要素を追加して、環境を定義します。  
**provisioner**  
以下の要素を追加します。  
   + `name` – この要素を`chef_solo` に設定します。

      OpsWorks スタック環境をより厳密にレプリケートするには、[Chef solo の代わりに Chef クライアントローカルモード](https://docs.chef.io/ctl_chef_client.html)を使用できます。ローカルモードは、リモートサーバーではなくインスタンスでローカルに実行される Chef サーバー の軽量バージョン (Chef Zero) を使用する Chef Client オプションです。これによって、レシピはリモートサーバーに接続しなくても、検索やデータバッグなどの Chef サーバー機能を使用できます。
   + `environments_path` – クックブックのサブディレクトリです。この例では、環境ファイル `./environments` が含まれています。  
**suites:provisioner**  
`solo_rb` 要素を環境ファイル名 (.json 拡張子は含めない) に設定し、`environment` 要素を追加します。この例では、`environment` を `test` に設定します。

1. 以下の内容で `default.rb` という名前のレシピファイルを作成し、クックブックの `recipes` ディレクトリに保存します。

   ```
   log "Stack name: #{node['opsworks']['stack']['name']}"
   log "Stack id: #{node['opsworks']['stack']['id']}"
   ```

   このレシピは、環境に追加した 2 個のスタック設定およびデプロイメント 値を単純に記録します。レシピは仮想ボックスでローカルに実行されていますが、これらの属性は、レシピが OpsWorks スタックインスタンスで実行されている場合と同じノード構文を使用して参照します。

1. `kitchen converge` を実行します。次のようなログ出力が表示されます。

   ```
   ...
   Converging 2 resources       
   Recipe: printjson::default       
     * log[Stack name: MyStack] action write[2014-07-01T23:14:09+00:00] INFO: Processing log[Stack name: MyStack] action write (printjson::default line 1)       
   [2014-07-01T23:14:09+00:00] INFO: Stack name: MyStack       
                
     * log[Stack id: 42dfd151-6766-4f1c-9940-ba79e5220b58] action write[2014-07-01T23:14:09+00:00] INFO: Processing log[Stack id: 42dfd151-6766-4f1c-9940-ba79e5220b58] action write (printjson::default line 2)       
   [2014-07-01T23:14:09+00:00] INFO: Stack id: 42dfd151-6766-4f1c-9940-ba79e5220b58       
   ...
   ```