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

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

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

重要

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

注記

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

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

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

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

注記

Test Kitchen を使用してレシピでテストを実行する場合、Baliquehai はスタック設定とデプロイをモックする代替方法を提供しますJSON。

クックブックをセットアップするには
  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アプリケーションサーバー、My データベースサーバーを備えたシンプルなPHPアプリケーションサーバースタックである のSQLスタックに基づいています。

スタック設定とデプロイを作成するには JSON
  1. 「」の説明 MyStack に従って を作成します。これには Chef 11 Linux スタックの使用開始S のデプロイも含まれますimplePHPApp。 必要に応じて、 で を呼び出す 2 番目の PHP App Server インスタンスを省略できますステップ 4: スケールアウトする MyStack。この例では、これらの属性を使用しません。

  2. まだ起動していない場合は、php-app1インスタンスを起動し、 でログインSSHします。

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

    sudo opsworks-agent-cli get_json

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

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

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

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