AWS OpsWorksで速攻でカスタムChefレシピによるEC2へのプロビジョニング + Chefのおさらい
OpsWorksの実行
カスタムChefレシピの作成
定義ファイルの作成
mkdir -p ops-works-base/base/recipes
vim ops-works-base/base/recipes/install.rb
mkdir -p ops-works-base/base/recipes
vim ops-works-base/base/recipes/install.rb
PHPによるWebサーバ構築する簡単なレシピは例えば以下のようになる。
package "vim-enhanced" do
action :install
end
%w{php mysql-server httpd}.each do |p|
package p do
action :install
end
end
service "httpd" do
action [:start, :enable]
end
GutHubのレポジトリに置く
GitHub中にレポジトリを作成し、そちらに直下にbaseディレクトリが来るように先ほど作成したファイルを配置する。
ここではops-works-base
というレポジトリ名とする。
OpsWorksの設定
1.マネジメントコンソールから[OpsWorks]を選択
2.[Add stack]を選択
3.以下の4つを設定する。Default SSH keyやRepository URLは適宜自分の使っているSSH Keyの物に置き換える。
Stack name: SampleStack
Default SSH key:aws-test
Use custom Chef cookbooks: Yes
Repository URL: https://github.com/xxxxxxx/ops-works-base.git
それ以外のVPCの設定などはデフォルトのまま進める。
4.[Add stack]を選択
5.[Add a layer]を選択
Name: Sample Web Server
Short name: sample
6.[Add layer]を選択
7.Layersの画面になるので、作成したlayerに対して、[Add instance]を選択
8.[New]のタブから、必要事項を入力する。
ここでは、Hostnameは記入して、Sizeをt2microに変更して、残りはデフォルトの設定にする。SSH keyは適当なものになっているか確認しておく。
Hostname: sample
Size: t2.micro
9.作成したhostに対して、[start]を選択。
10.起動したインスタンスのStatusがOnlineになったら、[Stack]を選択して[Run command]を選択。
Command: Execute Recipes
Recipes to execute: basic::install
になっていることを確認して実行する。ここでは、残り全てデフォルトの設定で行う。
上記の実行結果が成功すれば完了。Chefbookでの設定内容がサーバに反映されているか確認してみてください。
注意点
Chef単体とOpsWorksにおける違い
- Cookbooksファイル以外のファイル(solo.json,solo.rb等)はGitHubのレポジトリに含める必要がない。
- Chefではrecipeファイルを
knife cookbook create
を用いて作成するが、OpsWorksでは必要なrubyファイルを作成して適切なディレクトリ中に配置する形でGitHubのレポジトリにおけば良い。
Chef 要点おさらい
knife cookbook create
を用いて作成するが、OpsWorksでは必要なrubyファイルを作成して適切なディレクトリ中に配置する形でGitHubのレポジトリにおけば良い。Chefには以下の2種類による方法がある。
- スタンドアロン構成
- クライアント/サーバ構成(Chef Server)
ここでは、スタンドアロン構成としてchef-soloによる方法を取り上げる。
なお、chef-soloがdepricatedな予定なので、代わりにChef Client Local Modeを使うことが推奨されている。
https://blog.chef.io/2014/06/24/from-solo-to-zero-migrating-to-chef-client-local-mode/
chef-soloによるプロビジョニング
最低、recipeファイルとsolo.rb,solo,jsonの3つのファイルを編集することでプロビジョニングが可能になる。
Chefのインストール
curl -L https://www.opscode.com/chef/install.sh | sudo bash
Cookbook作成
basicという名前のCookbookの作成
knife cookbook create basic -o /opt/chef-test/
Chef ファイル構成
$ tree /opt/chef-test/
/opt/chef-test/
├── basic
│ ├── CHANGELOG.md
│ ├── README.md
│ ├── attributes
│ ├── definitions
│ ├── files
│ │ └── default
│ ├── libraries
│ ├── metadata.rb
│ ├── providers
│ ├── recipes
│ │ ├── default.rb
│ │ └── install.rb
│ ├── resources
│ └── templates
│ └── default
├── solo.json
└── solo.rb
18 directories, 16 files
files: ソースファイル
temlates: 設定ファイル
attributes: レシピ、設定ファイルの値
PHP Webサーバ構築
vim /opt/chef-test/basic/recipes/install.rb
package "vim-enhanced" do
action :install
end
%w{php mysql-server httpd}.each do |p|
package p do
action :install
end
end
service "httpd" do
action [:start, :enable]
end
chef-soloの設定ファイル作成
vim /opt/chef-test/solo.rb
base = File.expand_path('..', __FILE__)
cookbook_path [base]
※注意点
cookbook_pathは/opt/chef-test
にCookbookを置くのであれば、このまま絶対パスで書く必要がある。
絶対パスを直書きしても良いが汎用性が下がるので、ここではFile.expand_path()を使用している。
cookbook_path['/opt/chef-test/']
のように記述しても良い。
実行するRecipeを指定するJSONの作成
vim /opt/chef-test/solo.json
{
"run_list" : [
"recipe[basic::install]"
]
}
$ cd /opt/chef-test
$ sudo chef-solo -c solo.rb -j solo.json
[2016-09-13T02:03:21+00:00] INFO: Started chef-zero at chefzero://localhost:8889 with repository at /opt/chef-test
One version per cookbook
[2016-09-13T02:03:21+00:00] INFO: Forking chef instance to converge...
[2016-09-13T02:03:21+00:00] INFO: *** Chef 12.13.37 ***
[2016-09-13T02:03:21+00:00] INFO: Platform: x86_64-linux
[2016-09-13T02:03:21+00:00] INFO: Chef-client pid: 26603
[2016-09-13T02:03:23+00:00] INFO: HTTP Request Returned 404 Not Found: Object not found: chefzero://localhost:8889/nodes/test1.localdomain
[2016-09-13T02:03:23+00:00] INFO: Setting the run_list to ["recipe[basic::install]"] from CLI options
[2016-09-13T02:03:23+00:00] INFO: Run List is [recipe[basic::install]]
[2016-09-13T02:03:23+00:00] INFO: Run List expands to [basic::install]
[2016-09-13T02:03:23+00:00] INFO: Starting Chef Run for test1.localdomain
[2016-09-13T02:03:23+00:00] INFO: Running start handlers
[2016-09-13T02:03:23+00:00] INFO: Start handlers complete.
[2016-09-13T02:03:23+00:00] INFO: HTTP Request Returned 404 Not Found: Object not found:
[2016-09-13T02:03:23+00:00] WARN: Cookbook 'local-mode-cache' is empty or entirely chefignored at /home/ec2-user/local-mode-cache
[2016-09-13T02:03:23+00:00] INFO: Loading cookbooks [[email protected]]
[2016-09-13T02:03:23+00:00] INFO: Storing updated cookbooks/basic/CHANGELOG.md in the cache.
[2016-09-13T02:03:23+00:00] INFO: Storing updated cookbooks/basic/metadata.rb in the cache.
[2016-09-13T02:03:23+00:00] INFO: Storing updated cookbooks/basic/recipes/install.rb in the cache.
[2016-09-13T02:03:23+00:00] INFO: Storing updated cookbooks/basic/recipes/default.rb in the cache.
[2016-09-13T02:03:23+00:00] INFO: Storing updated cookbooks/basic/README.md in the cache.
[2016-09-13T02:03:23+00:00] INFO: Processing yum_package[vim-enhanced] action install (basic::install line 1)
[2016-09-13T02:03:24+00:00] INFO: Processing yum_package[php] action install (basic::install line 6)
[2016-09-13T02:03:24+00:00] INFO: Processing yum_package[mysql-server] action install (basic::install line 6)
[2016-09-13T02:03:24+00:00] INFO: Processing yum_package[httpd] action install (basic::install line 6)
[2016-09-13T02:03:24+00:00] INFO: Processing service[httpd] action start (basic::install line 11)
[2016-09-13T02:03:24+00:00] INFO: Processing service[httpd] action enable (basic::install line 11)
[2016-09-13T02:03:24+00:00] INFO: Chef Run complete in 1.189445961 seconds
[2016-09-13T02:03:24+00:00] INFO: Running report handlers
[2016-09-13T02:03:24+00:00] INFO: Report handlers complete
設定ファイルの取り込み
設定ファイルの取り込み方について、template
とcookbook_file
のそれぞれによる方法を取り上げる。両者の違いは、template
が静的ファイルを対象としているのに対して、cookbook_file
は.erb
のファイルを読み込み可能で動的な設定が可能である。
予め用意しておいたhttpd.confを用いる場合 by template
用意したhttpd.conf
をhttp.conf.erb
としておき、templates/default以下に置く。また、recipeファイル中の定義ファイルでhttpdをインストールしてから、読み込む宣言の前にtemplateを用いて、以下を追記する。
template '/etc/httpd/conf/httpd.conf' do
source 'httpd.conf.erb'
action :create
end
PHPの各種モジュールをインストールしてphp.iniの内容をWebサーバに反映 by cookbook_file
httpdがインストールされた後に以下をrecipeファイル中の定義ファイルに定義する。
%w[php php-devel php-mbstring gd-devel php-gd php-mysql].each do |pkg|
yum_package pkg do
action :install
end
end
cookbook_file "/etc/php.ini" do
mode 0644
notifies :reload, 'service[httpd]'
end
参考
公式ドキュメント
https://aws.amazon.com/jp/opsworks/
AWS OpsWorksでカスタムChefレシピを実行をする方法
http://aws.typepad.com/sajp/2014/05/opsworks-custom-recipe.html
Chefでサーバを構築する方法 入門編 [httpd,php,mysqlを一発で入れる]
http://tkoyama1988.hatenablog.com/entry/2015/01/05/144656
Chefレシピ逆引きメモ
http://qiita.com/makoto_kw/items/53a84380559c087eb8fb
Author And Source
この問題について(AWS OpsWorksで速攻でカスタムChefレシピによるEC2へのプロビジョニング + Chefのおさらい), 我々は、より多くの情報をここで見つけました https://qiita.com/hayashier/items/508cc027189d7f862f8c著者帰属:元の著者の情報は、元のURLに含まれています。著作権は原作者に属する。
Content is automatically searched and collected through network algorithms . If there is a violation . Please contact us . We will adjust (correct author information ,or delete content ) as soon as possible .