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

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

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

重要

AWS OpsWorks Stacks は新規顧客を受け付けなくなりました。既存のお客様は、2024 年 5 月 26 日までは、通常どおり OpsWorks コンソール、API、CLI、および CloudFormation リソースを使用できます。その時点で廃止されます。この移行に備えて、できるだけ早くスタックを AWS Systems Manager に移行することをおすすめします。詳細については、「AWS OpsWorks Stacks サポート終了に関する FAQ」および「AWS Systems Manager アプリケーションマネージャへの AWS OpsWorks Stacks アプリケーションの移行」を参照してください。

注記

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 が必要になる場合があります。また、RVM などの Ruby 環境マネージャを使用することもできます。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 スタックインスタンスを使用しています。

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

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

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

    その後、スタックのインスタンスへの Berkshelf のインストールの詳細は AWS OpsWorks スタックによって処理されます。

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

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

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

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

注記

AWS OpsWorks スタックのスタックにカスタムクックブックを初めてインストールした場合は、まず「Linux インスタンスでのレシピの実行」の例を実行してみてください。

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

Stack を作成する
  1. AWS OpsWorks スタックコンソールを開いて [Add Stack] をクリックします。

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

    • 名前 – BerksTest

    • Default SSH key (デフォルト SSH キー) - Amazon EC2 キーペア

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

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

    • 名前 – BerksTest

    • Short name (短縮名) – berkstest

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

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

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. berkstest_cookbooks.zip アーカイブを作成して [アーカイブを Amazon S3 バケットにアップロードしアーカイブを公開して、アーカイブの URL を記録しておきます。

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

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

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

    • Repository URL (リポジトリの 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 スタックはルートとしてレシピを実行するので、getting-started ではファイルがホームディレクトリではなく /root ディレクトリにインストールされます。