翻訳は機械翻訳により提供されています。提供された翻訳内容と英語版の間で齟齬、不一致または矛盾がある場合、英語版が優先します。
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
インスタンスで外部クックブックを使用するには、それをインストールし、依存関係を管理する方法が必要です。最適なアプローチは、依存関係マネージャをサポートする、Berkshelf という名前のクックブックを実装することです。Berkshelf は、Amazon EC2 インスタンス (AWS OpsWorks スタックインスタンスを含む) で動作しますが、Test Kitchen および Vagrant でも動作するように設計されています。ただし、Vagrant での使用方法は AWS OpsWorks スタックでの使用方法とは少し異なるので、このトピックでは両方のプラットフォームの例を示しています。Berkshelf の使用方法の詳細については、「Berkshelf
Test Kitchen および Vagrant での Berkshelf の使用
この例では、Berkshelf を使用して getting-started コミュニティクックブックをインストールし、そのレシピを実行する方法を示します。このレシピは、短いテキストファイルをインスタンスのホームディレクトリにインストールします。
Berkshelf をインストールし、クックブックを初期化するには
-
ワークステーションで、Berkshelf gem を次のようにインストールします。
gem install berkshelf
ワークステーションによっては、このコマンドで
sudo
が必要になる場合があります。また、RVMなどの Ruby 環境マネージャを使用することもできます。Berkshelf が正常にインストールされたことを確認するには、 berks --version
を実行します。 -
このトピックのクックブックは、external_cookbook という名前です。以前のトピックで採用した手動のアプローチの代わりに、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
コマンドによって処理されます。 -
-
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 クックブックをインストールするには
-
デフォルト Berksfile を編集して、
metadata
宣言をcookbook
のgetting-started
宣言に置き換えます。内容は次のようになります。source "https://supermarket.chef.io" cookbook 'getting-started'
-
berks install
を実行すると、コミュニティクックブックリポジトリからワークステーションの Berkshelf ディレクトリ (通常は~/.berkshelf
) に getting-started クックブックがダウンロードされます。このディレクトリは、多くの場合、単に Berkshelf と呼ばれます。Berkshelf のcookbooks
ディレクトリを見ると、クックブックのディレクトリ (getting-started-0.4.0
getting-started- のような名前のディレクトリ) が表示されるはずです。 -
external_cookbook::default
実行リスト内の.kitchen.yml
をgetting-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:
-
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 つのクックブックが表示されます。 -
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 を作成する
-
AWS OpsWorks スタックコンソール
を開いて [Add Stack] をクリックします。 -
次の設定を指定し、その他の設定はデフォルト値を受け入れて、[Add Stack] をクリックします。
-
名前 – BerksTest
-
Default SSH key (デフォルト SSH キー) - Amazon EC2 キーペア
Amazon EC2 キーペアの作成が必要な場合は、「Amazon EC2 Key Pairs」(Amazon EC2 キーペア) を参照してください。キーペアがインスタンスと同じ AWS リージョンに属している必要があることに注意してください。この例では、デフォルトに米国西部(オレゴン) リージョンを使用します。
-
-
[Add a layer] をクリックし、次の設定を使用してスタックにカスタムレイヤーを追加します。
-
名前 – BerksTest
-
Short name (短縮名) – berkstest
この例では、実際には任意のレイヤータイプを使用できます。しかし、この例では他のレイヤーによってインストールされるパッケージは必要ないので、カスタムレイヤーが最もシンプルなアプローチです。
-
-
デフォルト設定で BerksTest レイヤーに 24/7 インスタンスを追加しますが、まだ起動しないでください。
AWS OpsWorks スタックでは、クックブックは標準ディレクトリ構造でリモートリポジトリにある必要があります。次に、AWS OpsWorks スタックにダウンロード情報を指定すると、起動時にスタックの各インスタンスにリポジトリが自動的にダウンロードされます。わかりやすいように、この例のリポジトリはパブリック Amazon S3 アーカイブですが、AWS OpsWorks スタックは HTTP アーカイブ、Git リポジトリ、および Subversion リポジトリもサポートしています。詳細については、「クックブックリポジトリ」を参照してください。
Amazon S3 バケットに配信されるコンテンツには、カスタマーコンテンツが含まれている場合があります。機密データの削除の詳細については、「S3 バケットを空にする方法」または「S3 バケットを削除する方法」を参照してください。
クックブックリポジトリを作成するには
-
opsworks_cookbooks
ディレクトリにberkstest_cookbooks
という名前のディレクトリを作成します。このディレクトリは、リポジトリにアップロードするため、都合のよい任意の場所に作成することもできます。 -
以下の内容で、Berksfile という名前のファイルを
berkstest_cookbooks
に追加します。source "https://supermarket.chef.io" cookbook 'getting-started'
このファイルは、getting-started クックブックの依存関係を宣言し、それをコミュニティクックブックサイトからダウンロードするように Berkshelf に指示します。
-
以下を含む
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
をコピーします。
-
-
berkstest_cookbooks
の.zip
アーカイブを作成して [アーカイブを Amazon S3 バケットにアップロードし、アーカイブを公開して、アーカイブの URL を記録しておきます。
これで、クックブックをインストールし、レシピを実行できるようになりました。
クックブックをインストールし、レシピを実行するには
-
カスタムクックブックを有効にするようにスタックを編集し、以下の設定を指定します。
-
Repository type (リポジトリタイプ) – Http Archive (Http アーカイブ)
-
Repository URL (リポジトリの URL) – 前の手順で記録したクックブックのアーカイブの URL
-
Manage Berkshelf (Berkshelf の管理) – Yes (はい)
最初の 2 つの設定は、インスタンスへのクックブックリポジトリのダウンロードに必要な情報を AWS OpsWorks スタックに提供しています。最後の設定は、Berkshelf サポートを有効にします。これによって、getting-started クックブックがインスタンスにダウンロードされます。その他の設定ではデフォルト値を受け入れ、[Save] をクリックしてスタック設定を更新します。
-
-
BerksTest レイヤーを編集して、レイヤーの Setup ライフサイクルイベントに次のレシピを追加します。
-
getting-started::default
-
createfile::default
-
-
インスタンスを起動します。Setup イベントは、インスタンスの起動の完了後に発生します。AWS OpsWorksスタックが次に、クックブックリポジトリをインストールし、Berkshelf を使用して getting-started クックブックをダウンロードして、
getting-started::default
やcreatefile::default
を含む、レイヤーのセットアップおよびデプロイレシピを実行します。 -
インスタンスがオンラインになったら、SSH を使用してログインします。次のように表示されます。
-
/srv/www/shared
にはexample_data.json
が含まれている必要があります。 -
/root
にはchef-getting-started.txt
が含まれている必要があります。AWS OpsWorks スタックはルートとしてレシピを実行するので、getting-started ではファイルがホームディレクトリではなく
/root
ディレクトリにインストールされます。
-