

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

# Linux インスタンスでの外部クックブック Berkshelf の使用
<a name="cookbooks-101-opsworks-berkshelf"></a>

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

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

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

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

**Topics**
+ [Test Kitchen および Vagrant での Berkshelf の使用](#cookbooks-101-opsworks-berkshelf-vagrant)
+ [スタックでの Berkshelf OpsWorks の使用](#opsworks-berkshelf-opsworks)

## Test Kitchen および Vagrant での Berkshelf の使用
<a name="cookbooks-101-opsworks-berkshelf-vagrant"></a>

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

**Berkshelf をインストールし、クックブックを初期化するには**

1. ワークステーションで、Berkshelf gem を次のようにインストールします。

   ```
   gem install berkshelf
   ```

   ワークステーションによっては、このコマンドで `sudo` が必要になる場合があります。また、[RVM](https://rvm.io/) などの Ruby 環境マネージャを使用することもできます。Berkshelf が正常にインストールされたことを確認するには、`berks --version` を実行します。

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

   ```
   berks cookbook external_cookbook
   ```

   このコマンドによって、`external_cookbook` ディレクトリといくつかの標準的な Chef および Test Kitchen サブディレクトリ (`recipes`、`test` など) が作成されます。さらに、次のような多数の標準ファイルのデフォルトバージョンも作成されます。
   + `metadata.rb`
   + Vagrant、Test Kitchen、および Berkshelf の設定ファイル
   + `default.rb` ディレクトリにある空の `recipes` レシピ
**注記**  
`kitchen init` を実行する必要はありません。それらのタスクは `berks cookbook` コマンドによって処理されます。

1. `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 に含めます。

  これは OpsWorks スタックで使用されるアプローチです。たとえば、この例で使用されている getting-started クックブックを指定するには、Berksfile に `cookbook "getting-started"` を含めます。そうすると、Berkshelf はデフォルトリポジトリでその名前のクックブックを探します。また、`cookbook` を使用して、明示的にクックブックソースと特定のバージョンを指定することもできます。詳細については「[Berkshelf](http://berkshelf.com/)」を参照してください。
+ `metadata` 宣言を Berksfile に含め、依存関係を `metadata.rb` で宣言します。

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

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

**getting-started クックブックをインストールするには**

1. デフォルト Berksfile を編集して、`metadata` 宣言を `cookbook` の `getting-started` 宣言に置き換えます。内容は次のようになります。

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

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

1. `external_cookbook::default` 実行リスト内の `.kitchen.yml` を `getting-started::default` に置き換えます。この例は external\$1cookbook のどのレシピも実行しません。基本的には、単に 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:
   ```

1. `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\$1cookbook と getting-started という 2 つのクックブックが表示されます。

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

## スタックでの Berkshelf OpsWorks の使用
<a name="opsworks-berkshelf-opsworks"></a>

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

  OpsWorks 次に、スタックはスタックのインスタンスに Berkshelf をインストールする詳細を処理します。
+ クックブックリポジトリのルートディレクトリに Berksfile を追加します。

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

 OpsWorks スタックがインスタンスにカスタムクックブックリポジトリをインストールすると、Berkshelf を使用して、リポジトリの Berksfile で宣言されている依存クックブックをインストールします。詳細については、「[Berkshelf の使用](workingcookbook-chef11-10.md#workingcookbook-chef11-10-berkshelf)」を参照してください。

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

**注記**  
 OpsWorks スタックスタックにカスタムクックブックを初めてインストールする場合は、まず[Linux インスタンスでのレシピの実行](cookbooks-101-opsworks-opsworks-instance.md)例を参照してください。

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

**Stack を作成する**

1. [OpsWorks スタックコンソール](https://console.aws.amazon.com/opsworks/)を開いて [**Add Stack**] をクリックします。

1. 次の設定を指定し、その他の設定はデフォルト値を受け入れて、[**Add Stack**] をクリックします。
   + **Name** (名前) – BerksTest
   + **Default SSH key** (デフォルト SSH キー) - Amazon EC2 キーペア

   Amazon EC2 キーペアの作成が必要な場合は、[「Amazon EC2 Key Pairs」](https://docs.aws.amazon.com/AWSEC2/latest/UserGuide/ec2-key-pairs.html)(Amazon EC2 キーペア) を参照してください。キーペアがインスタンスと同じ AWS リージョンに属している必要があることに注意してください。この例では、デフォルトに米国西部(オレゴン) リージョンを使用します。

1. [**Add a layer**] をクリックし、次の設定を使用してスタックに[カスタムレイヤーを追加](workinglayers-custom.md)します。
   + **Name** (名前) – BerksTest
   + **Short name** (短縮名) – berkstest

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

1. デフォルト設定で BerksTestレイヤーに [24/7 インスタンスを追加](workinginstances-add.md)します。ただし、まだ起動しないでください。

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

Amazon S3 バケットに配信されるコンテンツには、カスタマーコンテンツが含まれている場合があります。機密データの削除の詳細については、[「S3 バケットを空にする方法」](https://docs.aws.amazon.com/AmazonS3/latest/userguide/empty-bucket.html)または[「S3 バケットを削除する方法」](https://docs.aws.amazon.com/AmazonS3/latest/userguide/delete-bucket.html)を参照してください。

**クックブックリポジトリを作成するには**

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

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

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

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

1. 以下を含む `createfile` に `berkstest_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` をコピーします。

1. `berkstest_cookbooks` の `.zip` アーカイブを作成して [[アーカイブを Amazon S3 バケットにアップロードし](https://docs.aws.amazon.com/AmazonS3/latest/UG/UploadingObjectsintoAmazonS3.html)、[アーカイブを公開](https://docs.aws.amazon.com/AmazonS3/latest/UG/EditingPermissionsonanObject.html)して、アーカイブの URL を記録しておきます。

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

**クックブックをインストールし、レシピを実行するには**

1. [カスタムクックブックを有効にするようにスタックを編集](workingcookbook-installingcustom-enable.md)し、以下の設定を指定します。
   + **Repository type** (リポジトリタイプ) – **Http Archive** (Http アーカイブ)
   + **Repository URL** (リポジトリの URL) – 前の手順で記録したクックブックのアーカイブの URL
   + **Manage Berkshelf** (Berkshelf の管理) – **Yes** (はい)

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

1. BerksTestレイヤーを編集して、[レイヤーのSetup ライフサイクルイベントに以下のレシピを追加](workingcookbook-assigningcustom.md)します。
   + `getting-started::default`
   + `createfile::default`

1. インスタンスを[起動](workinginstances-starting.md)します。Setup イベントは、インスタンスの起動が完了した後に発生します。 OpsWorks スタックはクックブックリポジトリをインストールし、Berkshelf を使用して入門クックブックをダウンロードし、 `getting-started::default`および を含むレイヤーのセットアップおよびデプロイレシピを実行します`createfile::default`。

1. インスタンスがオンラインになったら、[SSH を使用してログインします。](workinginstances-ssh.md)次のように表示されます。
   + `/srv/www/shared` には `example_data.json` が含まれている必要があります。
   + `/root` には `chef-getting-started.txt` が含まれている必要があります。

     OpsWorks スタックはレシピをルートとして実行するため、getting-started はホーム`/root`ディレクトリではなく ディレクトリに ファイルをインストールします。