AWS OpsWorks
ユーザーガイド (API バージョン 2013-02-18)

ローカルでのクックブックの依存関係のパッケージ化

Berkshelf を使用してローカルでクックブックの依存関係をパッケージ化し、Amazon S3 にパッケージをアップロードした後、Amazon S3 でそのパッケージをクックブックのソースとして使用するようにスタックを変更できます。Amazon S3 バケットに対して配信するコンテンツには、お客様のコンテンツが含まれる場合があります。機密データの削除の詳細については、「S3 バケットを空にする方法」または「S3 バケットを削除する方法」を参照してください。

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

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

Chef 12 での依存関係のローカルパッケージ化

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
  2. テキストエディタで Berksfile を編集し、server-app クックブックの依存先のクックブックを指定します。この例では server-app が Chef Supermarket の java クックブックに依存するように指定します。ここでは、バージョン 1.50.0 または以降の新しい マイナー バージョンを指定しますが、任意の発行済みバージョンを単一引用符で囲んで入力できます。変更内容を保存し、ファイルを閉じます。

    source 'https://supermarket.chef.io' cookbook 'java', '~> 1.50.0'
  3. metadata.rb ファイルを編集して、依存関係を追加します。変更内容を保存し、ファイルを閉じます。

    depends 'java' , '~> 1.50.0'
  4. 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
  5. 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
  6. AWS OpsWorks スタックで、アップロードしたパッケージをクックブックのソースとして使用するように、スタックを変更します。

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

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

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

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

ローカルで 1 つのクックブックの依存関係をパッケージ化する

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

    chef generate cookbook "server-app"

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

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

    berks package cookbooks.tar.gz

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

    Cookbook(s) packaged to /Users/username/tmp/berks/cookbooks.tar.gz
  3. AWS CLI で、先ほど作成したパッケージを Amazon S3 にアップロードします。

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

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

    upload: ./cookbooks.tar.gz to s3://bucket-name/cookbooks.tar.gz
  4. AWS OpsWorks スタックで、アップロードしたパッケージをクックブックのソースとして使用するように、スタックを変更します。

ローカルで複数のクックブックの依存関係をパッケージ化する

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

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

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

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

  2. コミュニティ 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"
  3. Berkshelf にパッケージ化対象を指定するように、クックブックのルートディレクトリ内の Berksfile ファイルを以下のように編集します。

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

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

    .. └── Berksfile ├── server-app └── server-utils
  4. 最後に、zip パッケージを作成して Amazon S3 にアップロードし、新しいクックブックのソースを使用するように AWS OpsWorks スタックのスタックを変更します。そのためには、「ローカルで 1 つのクックブックの依存関係をパッケージ化する」の手順 2 ~ 4 に従います。

その他のリソース

クックブックの依存関係のパッケージ化の詳細については、以下を参照してください。