Linux インスタンスでの外部クックブック Berkshelf の使用 - AWS OpsWorks

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

Linux インスタンスでの外部クックブック Berkshelf の使用

重要

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

注記

Berkshelf は Chef 11.10 Linux スタックにのみ使用できます。

クックブックを実装する前に、Chef Community Cookbooks を確認してください。ここには、Chef コミュニティのメンバーによってさまざまな目的で作成されたクックブックがあります。これらのクックブックの多くは、 で使用できます。 AWS OpsWorks スタックは変更されないため、すべてのコードを自分で実装するのではなく、一部のタスクでスタックを活用できます。

インスタンスで外部クックブックを使用するには、それをインストールし、依存関係を管理する方法が必要です。最適なアプローチは、依存関係マネージャをサポートする、Berkshelf という名前のクックブックを実装することです。Berkshelf は、以下を含む Amazon EC2インスタンスで動作します。 AWS OpsWorks インスタンスをスタックしますが、Test Kitchen と Vagrant で動作するように設計されています。ただし、Vagrant の使用量は、 の使用とは少し異なります。 AWS OpsWorks スタックのため、このトピックには両方のプラットフォームの例が含まれています。Berkshelf の使用方法の詳細については、「Berkshelf」を参照してください。

Test Kitchen および Vagrant での Berkshelf の使用

この例では、Berkshelf を使用して getting-started コミュニティクックブックをインストールし、そのレシピを実行する方法を示します。このレシピは、短いテキストファイルをインスタンスのホームディレクトリにインストールします。

Berkshelf をインストールし、クックブックを初期化するには
  1. ワークステーションで、Berkshelf gem を次のようにインストールします。

    gem install berkshelf

    ワークステーションによっては、このコマンドに が必要になるかsudo、 などの Ruby 環境マネージャーを使用することもできますRVM。Berkshelf が正常にインストールされたことを確認するには、berks --version を実行します。

  2. このトピックのクックブックは、external_cookbook という名前です。以前のトピックで採用した手動のアプローチの代わりに、Berkshelf を使用して、初期化されたクックブックを作成できます。そのためには、opsworks_cookbooks ディレクトリに移動して、次のコマンドを実行します。

    berks cookbook external_cookbook

    このコマンドによって、external_cookbook ディレクトリといくつかの標準的な Chef および Test Kitchen サブディレクトリ (recipestest など) が作成されます。さらに、次のような多数の標準ファイルのデフォルトバージョンも作成されます。

    • metadata.rb

    • Vagrant、Test Kitchen、および Berkshelf の設定ファイル

    • default.rb ディレクトリにある空の recipes レシピ

    注記

    kitchen init を実行する必要はありません。それらのタスクは berks cookbook コマンドによって処理されます。

  3. kitchen converge を実行します。新しく作成したクックブックは、この時点では興味深いことを何もしませんが、集中を行います。

注記

また、berks init を使用して、Berkshelf を使用するように既存のクックブックを初期化できます。

Berkshelf を使用してクックブックの外部依存関係を管理するには、クックブックのルートディレクトリに Berksfile が含まれている必要があります。これは、Berkshelf がどのように依存関係を管理するかを指定する設定ファイルです。berks cookbook クックブックを作成するために external_cookbook を使用した場合、以下の内容の Berksfile が作成されます。

source "https://supermarket.chef.io" metadata

このファイルには、以下の宣言があります。

  • source – クックブックソースURLの 。

    Berksfile は、任意の数の source 宣言を持つことができます。各宣言は、依存クックブックのデフォルトのソースを指定します。クックブックのソースを明示的に指定しない場合、Berkshelf はデフォルトのリポジトリで同じ名前のクックブックを探します。デフォルト Berksfile には、コミュニティクックブックリポジトリを指定する単一の source 属性が含まれています。そのリポジトリには getting-started クックブックが含まれているので、行を変更する必要はありません。

  • metadata – クックブックの metadata.rb ファイルで宣言されているクックブックの依存関係を取り込むように Berkshelf に指示します。

    また、後で説明するように、cookbook 属性を取り込むことによって、Berksfile で依存クックブックを宣言できます。

クックブックの依存関係を宣言するには、次の 2 つの方法があります。

  • cookbook 宣言を Berksfile に含めます。

    これは、 で使用されるアプローチです。 AWS OpsWorks スタック。たとえば、この例で使用されている getting-started クックブックを指定するには、Berksfile に cookbook "getting-started" を含めます。そうすると、Berkshelf はデフォルトリポジトリでその名前のクックブックを探します。また、cookbook を使用して、明示的にクックブックソースと特定のバージョンを指定することもできます。詳細については「Berkshelf」を参照してください。

  • metadata 宣言を Berksfile に含め、依存関係を metadata.rb で宣言します。

    この宣言は、metadata.rb で宣言されているクックブックの依存関係を取り込むように Berkshelf に指示します。たとえば、getting-started の依存関係を宣言するには、クックブックの depends 'getting-started' ファイルに metadata.rb 宣言を追加します。

この例では、 との一貫性を保つために最初のアプローチを使用しています。 AWS OpsWorks スタック。

getting-started クックブックをインストールするには
  1. デフォルト Berksfile を編集して、metadata 宣言を cookbookgetting-started 宣言に置き換えます。内容は次のようになります。

    source "https://supermarket.chef.io" cookbook 'getting-started'
  2. berks install を実行すると、コミュニティクックブックリポジトリからワークステーションの Berkshelf ディレクトリ (通常は ~/.berkshelf) に getting-started クックブックがダウンロードされます。このディレクトリは、多くの場合、単に Berkshelf と呼ばれます。Berkshelf の cookbooks ディレクトリを見ると、クックブックのディレクトリ (getting-started-0.4.0getting-started- のような名前のディレクトリ) が表示されるはずです。

  3. external_cookbook::default 実行リスト内の .kitchen.ymlgetting-started::default に置き換えます。この例は external_cookbook のどのレシピも実行しません。基本的には、単に getting-started クックブックを使用するための手段です。.kitchen.yml ファイルは次のようになっているはずです。

    --- driver: name: vagrant provisioner: name: chef_solo platforms: - name: ubuntu-12.04 suites: - name: default run_list: - recipe[getting-started::default] attributes:
  4. kitchen converge を実行してから kitchen login を使用してインスタンスにログインします。ログインディレクトリには、次のような内容の chef-getting-started.txt という名前のファイルが含まれているはずです。

    Welcome to Chef! This is Chef version 11.12.8. Running on ubuntu. Version 12.04.

    Test Kitchen によって、インスタンスの /tmp/kitchen/cookbooks ディレクトリ内のクックブックがインストールされます。このディレクトリの内容を一覧表示すると、external_cookbook と getting-started という 2 つのクックブックが表示されます。

  5. kitchen destroy を実行して、インスタンスをシャットダウンします。次の例では、 を使用します。 AWS OpsWorks スタックインスタンス。

での Berkshelf の使用 AWS OpsWorks スタック

AWS OpsWorks スタックは、Chef 11.10 スタックの Berkshelf をオプションでサポートします。スタックで Berkshelf を使用するには、以下の操作を実行する必要があります。

  • スタックの Berkshelf を有効にします。

    AWS OpsWorks その後、スタックはスタックのインスタンスに Berkshelf をインストールする詳細を処理します。

  • クックブックリポジトリのルートディレクトリに Berksfile を追加します。

    Berksfile には、すべての依存クックブックの source および cookbook 宣言が含まれている必要があります。

メトリック AWS OpsWorks スタックはカスタムクックブックリポジトリをインスタンスにインストールし、Berkshelf を使用して、リポジトリの Berksfile で宣言されている依存クックブックをインストールします。詳細については、「Berkshelf の使用」を参照してください。

この例では、Berkshelf を使用して に入門コミュニティクックブックをインストールする方法を示します。 AWS OpsWorks スタックインスタンス。また、指定したディレクトリ内にファイルを作成する、createfile カスタムクックブックのバージョンもインストールします。createfile の動作の詳細については、「クックブックからのファイルのインストール」を参照してください。

注記

にカスタムクックブックを初めてインストールする場合 AWS OpsWorks スタックスタックでは、まずこのLinux インスタンスでのレシピの実行例を実行する必要があります。

以下にまとめたように、スタックの作成から始めます。詳細については、「新しいスタックを作成する」を参照してください。

Stack を作成する
  1. を開きますAWS OpsWorks スタックコンソールでスタックの追加 をクリックします。

  2. 次の設定を指定し、その他の設定はデフォルト値を受け入れて、[Add Stack] をクリックします。

    • 名前 – BerksTest

    • デフォルトSSHキー — Amazon EC2キーペア

    Amazon EC2キーペアを作成する必要がある場合は、「Amazon EC2 キーペア」を参照してください。キーペアは、インスタンスと同じAWSリージョンに属している必要があることに注意してください。この例では、デフォルトに米国西部(オレゴン) リージョンを使用します。

  3. [Add a layer] をクリックし、次の設定を使用してスタックにカスタムレイヤーを追加します。

    • 名前 – BerksTest

    • Short name (短縮名) – berkstest

    この例では、実際には任意のレイヤータイプを使用できます。しかし、この例では他のレイヤーによってインストールされるパッケージは必要ないので、カスタムレイヤーが最もシンプルなアプローチです。

  4. デフォルト設定で 24/7 インスタンスを BerksTest レイヤーに追加しますが、まだ起動しないでください。

で AWS OpsWorks スタック、クックブックは、標準のディレクトリ構造を持つリモートリポジトリにある必要があります。次に、ダウンロード情報を に提供します。 AWS OpsWorks スタック。起動時にスタックの各インスタンスにリポジトリを自動的にダウンロードします。わかりやすくするために、この例のリポジトリはパブリック Amazon S3 アーカイブですが、 AWS OpsWorks スタックは、HTTPアーカイブ、Git リポジトリ、および Subversion リポジトリもサポートしています。詳細については、「クックブックリポジトリ」を参照してください。

Amazon S3 バケットに配信されるコンテンツには、カスタマーコンテンツが含まれている場合があります。機密データの削除の詳細については、「S3 バケットを空にする方法」または「S3 バケットを削除する方法」を参照してください。

クックブックリポジトリを作成するには
  1. opsworks_cookbooks ディレクトリに berkstest_cookbooks という名前のディレクトリを作成します。このディレクトリは、リポジトリにアップロードするため、都合のよい任意の場所に作成することもできます。

  2. 以下の内容で、Berksfile という名前のファイルを berkstest_cookbooks に追加します。

    source "https://supermarket.chef.io" cookbook 'getting-started'

    このファイルは、getting-started クックブックの依存関係を宣言し、それをコミュニティクックブックサイトからダウンロードするように Berkshelf に指示します。

  3. 以下を含む createfileberkstest_cookbooks ディレクトリを追加します。

    • 以下の内容の metadata.rb ファイル。

      name "createfile" version "0.1.0"
    • 以下のコンテンツを持つ files/default ファイルが含まれている example_data.json ディレクトリ。

      { "my_name" : "myname", "your_name" : "yourname", "a_number" : 42, "a_boolean" : true }

      ファイルの名前および内容は任意です。レシピは単に、指定された場所にファイルをコピーします。

    • 以下のレシピコードを持つ recipes ファイルが含まれている default.rb ディレクトリ。

      directory "/srv/www/shared" do mode 0755 owner 'root' group 'root' recursive true action :create end cookbook_file "/srv/www/shared/example_data.json" do source "example_data.json" mode 0644 action :create_if_missing end

      このレシピは、/srv/www/shared を作成し、クックブックの example_data.json ディレクトリからそのディレクトリに files をコピーします。

  4. .zipアーカイブを作成しberkstest_cookbooksアーカイブを Amazon S3 バケット にアップロードし、アーカイブを公開して、アーカイブの を記録しますURL。

これで、クックブックをインストールし、レシピを実行できるようになりました。

クックブックをインストールし、レシピを実行するには
  1. カスタムクックブックを有効にするようにスタックを編集し、以下の設定を指定します。

    • Repository type (リポジトリタイプ) – Http Archive (Http アーカイブ)

    • リポジトリ URL — 前に記録URLしたクックブックアーカイブ

    • Manage Berkshelf (Berkshelf の管理) – Yes (はい)

    最初の 2 つの設定は、 AWS OpsWorks クックブックリポジトリをインスタンスにダウンロードするために必要な情報を含むスタック。最後の設定は、Berkshelf サポートを有効にします。これによって、getting-started クックブックがインスタンスにダウンロードされます。その他の設定ではデフォルト値を受け入れ、[Save] をクリックしてスタック設定を更新します。

  2. BerksTest レイヤーを編集して、レイヤーの Setup ライフサイクルイベント に次のレシピを追加します

    • getting-started::default

    • createfile::default

  3. インスタンスを起動します。Setup イベントは、インスタンスの起動の完了後に発生します。 AWS OpsWorks スタックが次に、クックブックリポジトリをインストールし、Berkshelf を使用して getting-started クックブックをダウンロードして、getting-started::defaultcreatefile::default を含む、レイヤーのセットアップおよびデプロイレシピを実行します。

  4. インスタンスがオンラインになったら、 SSHを使用して にログインします。次のように表示されます。

    • /srv/www/shared には example_data.json が含まれている必要があります。

    • /root には chef-getting-started.txt が含まれている必要があります。

      AWS OpsWorks スタックはレシピをルートとして実行するので、入門時にホーム/rootディレクトリではなく ディレクトリに ファイルがインストールされます。