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

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

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

重要

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

注記

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

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

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

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

注記

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

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

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

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

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

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

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

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

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

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

スタック設定とデプロイを作成するには JSON
  1. S のデプロイを含めChef 11 Linux スタックの使用開始、「」の説明 MyStack に従って を作成します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 を使用している場合、 Copy All to Clipboard コマンドを実行して、ターミナルウィンドウのすべてのテキストを Windows クリップボードにコピーできます。その後、.json ファイルに内容を貼り付け、ファイルを編集して余分なテキストをすべて削除できます。

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

    この例では、 ['id]と の 2 MyStack JSONつの['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 ...