

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

# ローカルでのクックブックの依存関係のパッケージ化
<a name="best-practices-packaging-cookbooks-locally"></a>

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

Berkshelf を使用してローカルでクックブックの依存関係をパッケージ化し、Amazon S3 にパッケージをアップロードし、スタックを変更して、Amazon S3 パッケージをクックブックのソースとして使用できます。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)を参照してください。

以下のチュートリアルでは、クックブックとその依存関係を .zip ファイルにプリパッケージし、 スタックの Linux OpsWorks インスタンスのクックブックソースとして .zip ファイルを使用する方法について説明します。最初のチュートリアルでは、1 つのクックブックをパッケージ化する方法を説明します。2 番目のチュートリアルでは、複数のクックブックをパッケージ化する方法について説明します。

始める前に、[Chef Development Kit](https://www.chef.io/downloads) (Chef DK とも呼ばれる) をインストールします。これは Chef コミュニティによって開発されたツールのセットです。ChefDK は `chef` コマンドラインツールを使用するために必要です。

## Chef 12 での依存関係のローカルパッケージ化
<a name="best-practices-packaging-cookbooks-locally-12"></a>

Chef 12 Linux では、Berkshelf がスタックインスタンスにデフォルトでインストールされなくなりました。ローカルの開発用コンピュータに Berkshelf をインストールし、これを使用してクックブックの依存関係をローカルにパッケージ化することをお勧めします。依存関係を含めたパッケージを Amazon S3 にアップロードします。最後に、クックブックソースとしてアップロードされたパッケージを使用するように Chef Linux 12 のスタックを変更します。Chef 12 でクックブックをパッケージ化する場合は、以下の相違点に注意してください。

1. ローカルコンピュータで、`chef` コマンドラインツールを使用してクックブックを作成します。

   ```
   chef generate cookbook "server-app"
   ```

   このコマンドによってクックブック、Berksfile、`metadata.rb` ファイル、およびレシピディレクトリが作成され、クックブックと同じ名前のフォルダに配置されます。次の例は、作成される項目の構造を示しています。

   ```
   server-app <-- the cookbook you've just created
       └── Berksfile
       ├── metadata.rb
       └── recipes
   ```

1. テキストエディタで Berksfile を編集し、`server-app` クックブックの依存先のクックブックを指定します。この例では `server-app` が Chef Supermarket の [https://supermarket.chef.io/cookbooks/java](https://supermarket.chef.io/cookbooks/java) クックブックに依存するように指定します。ここでは、バージョン 1.50.0 または以降の新しい マイナー バージョンを指定しますが、任意の発行済みバージョンを単一引用符で囲んで入力できます。変更内容を保存し、ファイルを閉じます。

   ```
   source 'https://supermarket.chef.io'
   cookbook 'java', '~> 1.50.0'
   ```

1. `metadata.rb` ファイルを編集して、依存関係を追加します。変更内容を保存し、ファイルを閉じます。

   ```
   depends 'java' , '~> 1.50.0'
   ```

1. Chef で作成された `server-app` クックブックのディレクトリに変更し、`package` コマンドを実行して、クックブックの `tar` ファイルを作成します。複数のクックブックをパッケージ化する場合は、このコマンドを、すべてのクックブックが保存されているルートディレクトリで実行します。1 つのクックブックをパッケージ化するには、このコマンドをクックブックディレクトリレベルで実行します。次の例では、このコマンドを `server-app` ディレクトリで実行します。

   ```
   berks package cookbooks.tar.gz
   ```

   出力は以下のようになります。`tar.gz` ファイルがローカルディレクトリに作成されます。

   ```
   Cookbook(s) packaged to /Users/username/tmp/berks/cookbooks.tar.gz
   ```

1. で AWS CLI、先ほど作成したパッケージを Amazon S3 にアップロードします。S3; にアップロードした後でクックブックパッケージの新しい URL を書き留めます。この URL は、スタックの設定で必要になります。

   ```
   aws s3 cp cookbooks.tar.gz s3://bucket-name/
   ```

   出力は以下のようになります。

   ```
   upload: ./cookbooks.tar.gz to s3://bucket-name/cookbooks.tar.gz
   ```

1.  OpsWorks スタックで、クックブックソースとしてアップロードしたパッケージを使用するように[スタックを変更します](https://docs.aws.amazon.com/opsworks/latest/userguide/workingcookbook-installingcustom-enable.html)。

   1. [**Use custom Chef cookbooks**] を [**Yes**] に設定します。

   1. [**Repository type**] を [**S3 Archive**] に設定します。

   1. [**Repository URL**] に、ステップ 5 でアップロードしたクックブックパッケージの URL を貼り付けます。

   スタックの変更を保存します。

## ローカルで 1 つのクックブックの依存関係をパッケージ化する
<a name="best-practices-packaging-cookbooks-locally-one"></a>

****

1. ローカルコンピュータで、以下の chef コマンドラインツールを使用してクックブックを作成します。

   ```
   chef generate cookbook "server-app"
   ```

   このコマンドによってクックブックと Berksfile が作成され、クックブックと同じ名前のフォルダに配置されます。

1.  Chef によって作成されたクックブックのディレクトリに変更し、以下のコマンドを実行して、その内容をすべてパッケージ化します。

   ```
   berks package cookbooks.tar.gz
   ```

   出力は次のようになります。

   ```
   Cookbook(s) packaged to /Users/username/tmp/berks/cookbooks.tar.gz
   ```

1.  で AWS CLI、先ほど作成したパッケージを Amazon S3 にアップロードします。

   ```
   aws s3 cp cookbooks.tar.gz s3://bucket-name/
   ```

   出力は次のようになります。

   ```
   upload: ./cookbooks.tar.gz to s3://bucket-name/cookbooks.tar.gz
   ```

1.  OpsWorks スタックで、クックブックソースとしてアップロードしたパッケージを使用するように[スタックを変更します](https://docs.aws.amazon.com/opsworks/latest/userguide/workingcookbook-installingcustom-enable.html)。

## ローカルで複数のクックブックの依存関係をパッケージ化する
<a name="best-practices-packaging-cookbooks-locally-multiple"></a>

この例では、2 つのクックブックを作成し、それらの依存関係をパッケージ化します。

1.  ローカルコンピュータで、以下の `chef` コマンドを実行して、2 つのクックブックを生成します。

   ```
   chef generate cookbook "server-app"
   chef generate cookbook "server-utils"
   ```

   この例では、server-app クックブックによって Java が設定されるため、Java への依存関係を追加する必要があります。

1.  コミュニティ Java クックブックへの依存関係を追加するように、`server-app/metadata.rb` を以下のように編集します。

   ```
   maintainer "The Authors"
   maintainer_email "you@example.com"
   license "all_rights"
   description "Installs/Configures server-app"
   long_description "Installs/Configures server-app"
   version "0.1.0"
   depends "java"
   ```

1.  Berkshelf にパッケージ化対象を指定するように、クックブックのルートディレクトリ内の Berksfile ファイルを以下のように編集します。

   ```
   source "https://supermarket.chef.io"
   cookbook "server-app", path: "./server-app"
   cookbook "server-utils", path: "./server-utils"
   ```

   ファイル構造は以下のようになります。

   ```
    .. 
       └── Berksfile
       ├── server-app
       └── server-utils
   ```

1.  最後に、zip パッケージを作成して Amazon S3 にアップロードし、新しいクックブックソースを使用するように OpsWorks スタックスタックを変更します。そのためには、「[ローカルで 1 つのクックブックの依存関係をパッケージ化する](#best-practices-packaging-cookbooks-locally-one)」の手順 2 ～ 4 に従います。

## その他のリソース
<a name="w2ab1c14c49c17c17"></a>

クックブックの依存関係のパッケージ化の詳細については、以下を参照してください。
+ AWS DevOps Blog の「[How to Package Cookbook Dependencies Locally with Berkshelf](https://aws.amazon.com/blogs/devops/how-to-package-cookbook-dependencies-locally-with-berkshelf/)」
+  OpsWorks フォーラムでの [Linux Chef 12 と Berkshelf](https://forums.aws.amazon.com/thread.jspa?threadID=221131) 
+  OpsWorks フォーラム[の Chef 12 の Berkshelf](https://forums.aws.amazon.com/message.jspa?messageID=694464) 
+ このガイドの「[カスタムクックブックのインストール](workingcookbook-installingcustom-enable.md)」
+ このガイドの「[クックブックリポジトリ](workingcookbook-installingcustom-repo.md)」