Vagrant でのスタック設定およびデプロイ属性の模倣 - AWS OpsWorks

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

Vagrant でのスタック設定およびデプロイ属性の模倣

重要

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

注記

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

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

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

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

注記

レシピのテストを Test Kitchen で実行している場合は、スタック設定およびデプロイ JSON を模倣する代替方法が fauxhai によって提供されます。

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

  2. 例 1: パッケージのインストール」で説明されているとおりに Test Kitchen を初期化および設定します。

  3. printjsonrecipes にサブディレクトリを 2 つ追加しますenvironments.。

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

  • .kitchen.yml に属性定義を追加します。

    このアプローチは、属性の数がほんの数個の場合に最も便利です。詳細については、「kitchen.yml」を参照してください。

  • 環境ファイルで属性を定義し、そのファイルを .kitchen.yml で参照します。

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

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

スタック設定およびデプロイメント JSON を作成するには
  1. SimplePHPApp のデプロイを含めChef 11 Linux スタックの使用開始、「」の説明 MyStack に従って を作成します。 SimplePHPApp 希望する場合は、「ステップ 4: スケールアウトする MyStack」で指示されている 2 番目の PHP アプリケーションサーバー インスタンスは、省略してもかまいません。例ではこれらの属性を使用しません。

  2. php-app1 インスタンスがまだ開始されていない場合は開始してから、SSH を使用してログインします。

  3. ターミナルウィンドウで、以下のエージェント CLI コマンドを実行します。

    sudo opsworks-agent-cli get_json

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

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

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

    この例では、 ['id]と の 2 つの['opsworks']['stack']属性のみを含む MyStack JSON の高度に編集されたバージョンを使用しています['name']。次のような 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 に設定します。

  2. .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 に設定します。

      AWS OpsWorks スタック環境をより密接にレプリケートするには、Chef solo の代わりに Chef クライアントのローカルモードを使用できます。ローカルモードは、リモートサーバーではなくインスタンスでローカルに実行される Chef サーバー の軽量バージョン (Chef Zero) を使用する Chef Client オプションです。これによって、レシピはリモートサーバーに接続しなくても、検索やデータバッグなどの Chef サーバー機能を使用できます。

    • environments_path – クックブックのサブディレクトリです。この例では、環境ファイル ./environments が含まれています。

    suites:provisioner

    solo_rb 要素を環境ファイル名 (.json 拡張子は含めない) に設定し、environment 要素を追加します。この例では、environmenttest に設定します。

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

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

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

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