<?xml version="1.0" encoding="UTF-8"?>
<rss version="2.0"
	xmlns:content="http://purl.org/rss/1.0/modules/content/"
	xmlns:wfw="http://wellformedweb.org/CommentAPI/"
	xmlns:dc="http://purl.org/dc/elements/1.1/"
	xmlns:atom="http://www.w3.org/2005/Atom"
	xmlns:sy="http://purl.org/rss/1.0/modules/syndication/"
	xmlns:slash="http://purl.org/rss/1.0/modules/slash/"
	>

<channel>
	<title>Creationline</title>
	<atom:link href="http://www.creationline.com/feed" rel="self" type="application/rss+xml" />
	<link>http://www.creationline.com</link>
	<description>Creatinline</description>
	<lastBuildDate>Tue, 08 May 2012 10:18:12 +0000</lastBuildDate>
	<language>ja</language>
	<sy:updatePeriod>hourly</sy:updatePeriod>
	<sy:updateFrequency>1</sy:updateFrequency>
	<generator>http://wordpress.org/?v=3.1.3</generator>
		<item>
		<title>enStratus日本語解説[2]:初期環境設定</title>
		<link>http://www.creationline.com/lab/1771</link>
		<comments>http://www.creationline.com/lab/1771#comments</comments>
		<pubDate>Tue, 08 May 2012 09:49:08 +0000</pubDate>
		<dc:creator>admin</dc:creator>
				<category><![CDATA[CL Lab]]></category>

		<guid isPermaLink="false">http://www.creationline.com/?p=1771</guid>
		<description><![CDATA[enStratusは、エンタープライズ向けのクラウド管理ツールであるだけに、様々なリッチな機能を提供しています。但し、そのような機能を利用するためには、それに相応しい初期環境設定が必要です。今回は、そのなかでも予算コード設定やユーザ管理など必須的な環境設定を解説します。 ちなみに、enStratusにサインインした直後では、システム操作のために必要な最低限のデフォルトの設定が行われているだけの状態です。 [Topics] ・予算 ・ロール ・グループ ・ユーザ ・ネットワーク 1.予算設定(Budget) http://docs.enstratus.com/budget/budget.html 1.1.予算とは 予算とは、enStratusのなかで適用するクラウドリソースの使用枠（金額）です。予算は、ソフトクォータ(soft quota)とハードクォータ（hard quota）の2段階に分かれています。 ・soft quota（警告レベル） 1ヶ月以内でグループの総クラウドリソース使用金額がソフトクォータに達すると警告を行います。但し、この段階では追加のリソースの獲得は可能です。 ・hard quota（制限レベル） 1ヶ月以内でグループの総クラウドリソース使用金額がハードクォータに達すると警告を行うと同時に、新しいリソースが開始できなくなります。但し、稼動中のリソースを中止したりはしません。 予算は、アカウント（部門）やグループ、ユーザとは独立しています。つまり、他アカウントに属するユーザ間でも予算を共有することができます。なお、一人のユーザが複数の予算を持つことも可能です。 1.2.予算コードの作成 ・予算コードの作成 [enStratus]→[会社設定] →[予算]→[＋予算コードの追加]をクリックして下さい。 名前 My Budget1。予算コードの名称を定義する 財部コード BUDG1。財部コード（予算コード）。18文字以内の英数字で任意のコードを定義する ソフトクォータ 財部コードを使って実行しているリソースの全体の使用金額がソフトクォータに到達するとユーザに警告のメールを送る。但し、追加のリソースの獲得は可能である ハードクォータ 財部コードを使って実行しているリソースの全体の使用金額がハードクォータに到達すると、ユーザに警告のメールを送ると同時に、それ以上新しいリソース取得が出来なくなる。但し、稼動中のリソースを強制終了したりはしない 1.3.予算一覧 作成した予算一覧を確認してみましょう。 実行レート(Run Rate) 同予算コードを使っているすべてのインフラストラクチャーの時間当たりのコスト 現在の使用状況(Current Usage) 予算コードに対して計上されている当月の現在までのコスト集計。例えば、現在が10日であれば、金額は1/３位になっているかもしれない 予測利用状況(Project Usage) 現在の実行レートに基づいて計算した月間の予測コスト 予算フラグ(Budget) GREEN:ソフトクォータを越えていない YELLOW：ソフトクェータを越えている RED：ハードクェータを越えている 予算は、[会社設定]→[会社プロファイル]で地域通貨(円）にすることができます。 1.4.予算の変更 予算の変更は、[予算一覧]→[アクション]→[編集]から行います。 1.5.予算編成・執行について 予算編成・執行は、基本的にenStratusを導入するカスタマー側のポリシーに依存します。例えば、部門別やプロジェクトなど、使用状況に応じて適用できます。 2. [...]]]></description>
			<content:encoded><![CDATA[<p>enStratusは、エンタープライズ向けのクラウド管理ツールであるだけに、様々なリッチな機能を提供しています。但し、そのような機能を利用するためには、それに相応しい初期環境設定が必要です。今回は、そのなかでも予算コード設定やユーザ管理など必須的な環境設定を解説します。<br />
ちなみに、enStratusにサインインした直後では、システム操作のために必要な最低限のデフォルトの設定が行われているだけの状態です。</p>
<p>[Topics]<br />
・予算<br />
・ロール<br />
・グループ<br />
・ユーザ<br />
・ネットワーク</p>
<hr />
<p><strong>1.予算設定(Budget)</strong><br />
<a href="http://docs.enstratus.com/budget/budget.html">http://docs.enstratus.com/budget/budget.html</a></p>
<p><strong>1.1.予算とは</strong><br />
予算とは、enStratusのなかで適用するクラウドリソースの使用枠（金額）です。予算は、ソフトクォータ(soft quota)とハードクォータ（hard quota）の2段階に分かれています。</p>
<p><strong>・soft quota（警告レベル）</strong><br />
1ヶ月以内でグループの総クラウドリソース使用金額がソフトクォータに達すると警告を行います。但し、この段階では追加のリソースの獲得は可能です。</p>
<p><strong>・hard quota（制限レベル）</strong><br />
1ヶ月以内でグループの総クラウドリソース使用金額がハードクォータに達すると警告を行うと同時に、新しいリソースが開始できなくなります。但し、稼動中のリソースを中止したりはしません。<br />
予算は、アカウント（部門）やグループ、ユーザとは独立しています。つまり、他アカウントに属するユーザ間でも予算を共有することができます。なお、一人のユーザが複数の予算を持つことも可能です。</p>
<p><a href="http://www.creationline.com/wp-content/uploads/2012/04/budget-11.png"><img class="size-full wp-image-1783 alignnone" title="予算設定" src="http://www.creationline.com/wp-content/uploads/2012/04/budget-11.png" alt="" width="325" height="198" /></a><br />
</p>
<p><strong>1.2.予算コードの作成</strong></p>
<p><strong>・予算コードの作成</strong><br />
[enStratus]→[会社設定] →[予算]→[＋予算コードの追加]をクリックして下さい。</p>
<p><a href="http://www.creationline.com/wp-content/uploads/2012/04/budget-2.png"><img class="size-full wp-image-1782 alignnone" title="予算コード作成" src="http://www.creationline.com/wp-content/uploads/2012/04/budget-2.png" alt="" width="308" height="240" /></a></p>
<table style="border-color: #C0C0C0; border-width: 1px; border-collapse: collapse; border-top: 1px solid #000; border-left: 1px solid #000;" frame="box">
<tbody>
<tr>
<td style="border-color: #C0C0C0; border-width: 1px; border-collapse: collapse; border-bottom: 1px solid #000; border-right: 1px solid #000;" width="100">名前</td>
<td style="border-color: #C0C0C0; border-width: 1px; border-collapse: collapse; border-bottom: 1px solid #000; border-right: 1px solid #000;">My Budget1。予算コードの名称を定義する</td>
</tr>
<tr>
<td style="border-color: #C0C0C0; border-width: 1px; border-collapse: collapse; border-bottom: 1px solid #000; border-right: 1px solid #000;">財部コード</td>
<td style="border-color: #C0C0C0; border-width: 1px; border-collapse: collapse; border-bottom: 1px solid #000; border-right: 1px solid #000;">BUDG1。財部コード（予算コード）。18文字以内の英数字で任意のコードを定義する</td>
</tr>
<tr>
<td style="border-color: #C0C0C0; border-width: 1px; border-collapse: collapse; border-bottom: 1px solid #000; border-right: 1px solid #000;">ソフトクォータ</td>
<td style="border-color: #C0C0C0; border-width: 1px; border-collapse: collapse; border-bottom: 1px solid #000; border-right: 1px solid #000;">財部コードを使って実行しているリソースの全体の使用金額がソフトクォータに到達するとユーザに警告のメールを送る。但し、追加のリソースの獲得は可能である</td>
</tr>
<tr>
<td style="border-color: #C0C0C0; border-width: 1px; border-collapse: collapse; border-bottom: 1px solid #000; border-right: 1px solid #000;">ハードクォータ</td>
<td style="border-color: #C0C0C0; border-width: 1px; border-collapse: collapse; border-bottom: 1px solid #000; border-right: 1px solid #000;">財部コードを使って実行しているリソースの全体の使用金額がハードクォータに到達すると、ユーザに警告のメールを送ると同時に、それ以上新しいリソース取得が出来なくなる。但し、稼動中のリソースを強制終了したりはしない</td>
</tr>
</tbody>
</table>
<p></p>
<p><strong>1.3.予算一覧</strong><br />
作成した予算一覧を確認してみましょう。<br />
<a href="http://www.creationline.com/wp-content/uploads/2012/04/budget-3.png"><img class="size-full wp-image-1802 alignnone" title="予算一覧" src="http://www.creationline.com/wp-content/uploads/2012/04/budget-3.png" alt="" width="611" height="76" /></a></p>
<table style="border-color: #C0C0C0; border-width: 1px; border-collapse: collapse; border-top: 1px solid #000; border-left: 1px solid #000;" frame="box">
<tbody>
<tr>
<td style="border-color: #C0C0C0; border-width: 1px; border-collapse: collapse; border-bottom: 1px solid #000; border-right: 1px solid #000;">実行レート(Run Rate)</td>
<td style="border-color: #C0C0C0; border-width: 1px; border-collapse: collapse; border-bottom: 1px solid #000; border-right: 1px solid #000;">同予算コードを使っているすべてのインフラストラクチャーの時間当たりのコスト</td>
</tr>
<tr>
<td style="border-color: #C0C0C0; border-width: 1px; border-collapse: collapse; border-bottom: 1px solid #000; border-right: 1px solid #000;">現在の使用状況(Current Usage)</td>
<td style="border-color: #C0C0C0; border-width: 1px; border-collapse: collapse; border-bottom: 1px solid #000; border-right: 1px solid #000;">予算コードに対して計上されている当月の現在までのコスト集計。例えば、現在が10日であれば、金額は1/３位になっているかもしれない</td>
</tr>
<tr>
<td style="border-color: #C0C0C0; border-width: 1px; border-collapse: collapse; border-bottom: 1px solid #000; border-right: 1px solid #000;">予測利用状況(Project Usage)</td>
<td style="border-color: #C0C0C0; border-width: 1px; border-collapse: collapse; border-bottom: 1px solid #000; border-right: 1px solid #000;">現在の実行レートに基づいて計算した月間の予測コスト</td>
</tr>
<tr>
<td style="border-color: #C0C0C0; border-width: 1px; border-collapse: collapse; border-bottom: 1px solid #000; border-right: 1px solid #000;">予算フラグ(Budget)</td>
<td style="border-color: #C0C0C0; border-width: 1px; border-collapse: collapse; border-bottom: 1px solid #000; border-right: 1px solid #000;">GREEN:ソフトクォータを越えていない<br />
YELLOW：ソフトクェータを越えている<br />
RED：ハードクェータを越えている</td>
</tr>
</tbody>
</table>
<p>予算は、[会社設定]→[会社プロファイル]で地域通貨(円）にすることができます。</p>
<p><a href="http://www.creationline.com/wp-content/uploads/2012/04/budget-4.png"><img class="size-full wp-image-1805 alignnone" title="通貨設定" src="http://www.creationline.com/wp-content/uploads/2012/04/budget-4.png" alt="" width="355" height="304" /></a><br />
</p>
<p><strong>1.4.予算の変更</strong><br />
予算の変更は、[予算一覧]→[アクション]→[編集]から行います。<br />
<a href="http://www.creationline.com/wp-content/uploads/2012/04/budget-5.png"><img class="size-full wp-image-1806 alignnone" title="予算の変更" src="http://www.creationline.com/wp-content/uploads/2012/04/budget-5.png" alt="" width="308" height="236" /></a><br />
</p>
<p><strong>1.5.予算編成・執行について</strong><br />
予算編成・執行は、基本的にenStratusを導入するカスタマー側のポリシーに依存します。例えば、部門別やプロジェクトなど、使用状況に応じて適用できます。</p>
<p><strong>2.	ロール(Role)の設定<br />
</strong><a href="http://docs.enstratus.com/users/users.html">http://docs.enstratus.com/users/users.html</a><br />
<strong>2.1.ロールとは</strong><br />
ロールとは、ユーザがenStratusのコンソール、あるいはAPIでどのような操作が出来るかを制限するものであり、enStratusの様々なリソースへのアクセス権限を束ねる単位です。<br />
enStratusでロールの付与は、ユーザを束ねる単位であるグループに対して与えます。ロールとグループの関係は1対1です。そしてグループのなかのユーザは、グループに付与しているロールを継承します。<br />
enStratusのアカウントを取得した直後では、デフォルトのAdminロールが1つ存在しています。<br />
</p>
<p><strong>2.2.ロールの構成</strong><br />
ロールは、「RESOURCE/ACTION/QUALIFIER」の3の要素で構成されています。</p>
<p><strong>・RESOURCE</strong><br />
enStratusのコンソールのなかの各ページ、リンクそしてアクションは、少なくとも１つのリソースによって制御されます。大部分の場合、リソースはコンソールの各ページと一致します。例えば、[計算(compute)]→[サーバ]、[計算(compute)]→[マシンイメージ]のようなサブメニューは、それぞれ「サーバリソース」、「イメージリソース」です。</p>
<p><a href="http://www.creationline.com/wp-content/uploads/2012/04/role-1.png"><img class="size-full wp-image-1807 alignnone" title="リソース" src="http://www.creationline.com/wp-content/uploads/2012/04/role-1.png" alt="" width="601" height="139" /></a></p>
<p>enStratusでリソースは、次のように多様な種類があります。<br />
<a href="http://www.creationline.com/wp-content/uploads/2012/04/role-2.png"><img class="size-full wp-image-1808 alignnone" title="リソースの種類" src="http://www.creationline.com/wp-content/uploads/2012/04/role-2.png" alt="" width="453" height="302" /></a></p>
<p><strong>・ACTION</strong><br />
アクションは、リソース毎の具体的な行為を意味しています。ロールを構成するときは、リソースを選んで、そのリソースに対してやってもらいたいことを関連付けます。例えば、リソースのなかのすべてのアクションが使えるようにしたい場合は「ANY」を選びます。</p>
<p><a href="http://www.creationline.com/wp-content/uploads/2012/04/role-3.png"><img class="size-full wp-image-1809 alignnone" title="アクションの種類" src="http://www.creationline.com/wp-content/uploads/2012/04/role-3.png" alt="" width="456" height="196" /></a><br />
<strong><br />
・QUALIFIER</strong><br />
クオリファイヤーは、サーバやマシンのようなリソースのオーナシップを誰が持つのかを指定するものです。クオリファイヤーは、｢ANY, GROUP, THIS GROUP, BILLING、MINE ｣の5つで構成されています。</p>
<p><a href="http://www.creationline.com/wp-content/uploads/2012/04/role-4.png"><img class="size-full wp-image-1810 alignnone" title="クオリファイヤーの種類" src="http://www.creationline.com/wp-content/uploads/2012/04/role-4.png" alt="" width="453" height="175" /></a></p>
<p>以下では、実際にロールを作成してみます。<br />
</p>
<p><strong>2.3.Adminロールの作成</strong><br />
ここでは、Adminロールを1つ追加してみます。Adminロールは、enStratusコンソールに対するすべての権限を持つロールの例です。</p>
<p><strong>・ロール名の作成</strong><br />
[enStratusコンソール]→[ユーザ]→[ロール]→[＋ロールの追加]をクリックし、ロール名を作成します。</p>
<p><a href="http://www.creationline.com/wp-content/uploads/2012/04/role-5.png"><img class="size-full wp-image-1811 alignnone" title="ロール名作成" src="http://www.creationline.com/wp-content/uploads/2012/04/role-5.png" alt="" width="254" height="191" /></a></p>
<p><strong>・アクセス権限の設定</strong><br />
MyAdminロールから[アクション]→[アクセス権]をクリックし、権限を追加します。<br />
<a href="http://www.creationline.com/wp-content/uploads/2012/04/role-6.png"><img class="size-full wp-image-1812 alignnone" title="アクセス権限の追加" src="http://www.creationline.com/wp-content/uploads/2012/04/role-6.png" alt="" width="390" height="82" /></a></p>
<p>Access Right:<br />
ANY &#8211; ANY &#8211; ANY<br />
</p>
<p><strong>2.4.CloudManagerロールの作成</strong><br />
CloudManagerは、enStratusのクラウドインフラ及びリソースに対するすべての権限を持つロールの例です。但し、「会社設定、アカウント設定、ユーザ設定、財務設定」にアクセスする権限は持っていません。</p>
<p><strong>・ロール名の作成</strong><br />
[enStratusコンソール]→[ユーザ]→[ロール]→[＋ロールの追加]でロール名を作成します。</p>
<p><a href="http://www.creationline.com/wp-content/uploads/2012/04/role-7.png"><img class="size-full wp-image-1813 alignnone" title="ロール名の作成" src="http://www.creationline.com/wp-content/uploads/2012/04/role-7.png" alt="" width="253" height="168" /></a><br />
<strong><br />
・アクセス権限の設定</strong><br />
MyCloudManagerロールから[アクション]→[アクセス権]をクリックし、権限を追加します。<br />
<a href="http://www.creationline.com/wp-content/uploads/2012/04/role-8.png"><img class="size-full wp-image-1814 alignnone" title="アクセス権限の追加" src="http://www.creationline.com/wp-content/uploads/2012/04/role-8.png" alt="" width="470" height="247" /></a></p>
<p>Access Rights:<br />
CONSOLE &#8211; Access &#8211; ANY<br />
DISTRIBUTION &#8211; ANY &#8211; ANY<br />
DNS &#8211; ANY &#8211; ANY<br />
FILES &#8211; ANY &#8211; ANY<br />
FIREWALL &#8211; ANY &#8211; ANY<br />
IMAGE &#8211; ANY &#8211; ANY<br />
IP &#8211; ANY &#8211; ANY<br />
KVDB &#8211; ANY &#8211; ANY<br />
LB &#8211; ANY &#8211; ANY<br />
NETWORK &#8211; ANY &#8211; ANY<br />
RDBMS &#8211; ANY &#8211; ANY<br />
SCRIPT &#8211; ANY &#8211; ANY<br />
SERVER &#8211; ANY &#8211; ANY<br />
SNAPSHOT &#8211; ANY &#8211; ANY<br />
SUBNET &#8211; ANY &#8211; ANY<br />
TOPIC &#8211; ANY &#8211; ANY<br />
VOLUME &#8211; ANY &#8211; ANY<br />
VPN &#8211; ANY &#8211; ANY<br />
</p>
<p><strong>2.5.	Configurator(ResourceManamger)ロールの作成</strong><br />
Configurator(ResourceManger)は、enStratusクラウド管理フラットフォームの財務的な側面を管理するためのロールの例です。</p>
<p><strong>・ロール名の作成</strong><br />
[enStratusコンソール]→[ユーザ]→[ロール]→[＋ロールの追加]をクリックし、ロール名を作成します。<br />
<a href="http://www.creationline.com/wp-content/uploads/2012/04/role-9.png"><img class="size-full wp-image-1815 alignnone" title="ロール名の作成" src="http://www.creationline.com/wp-content/uploads/2012/04/role-9.png" alt="" width="254" height="173" /></a></p>
<p><strong>・アクセス権限の作成</strong><br />
MyCoufiguratorロールから[アクション]→[アクセス権]をクリックし、権限を追加します。<br />
<a href="http://www.creationline.com/wp-content/uploads/2012/04/role-10.png"><img class="size-full wp-image-1817 alignnone" title="アクセス権限の追加" src="http://www.creationline.com/wp-content/uploads/2012/04/role-10.png" alt="" width="495" height="241" /></a></p>
<p>Access Rights:<br />
ACCOUNT &#8211; Manage Billing &#8211; ANY<br />
ACCOUNT &#8211; View Invoices &#8211; ANY<br />
COMPANY &#8211; View Billing &#8211; ANY<br />
CONSOLE &#8211; Access &#8211; ANY<br />
CONSOLE &#8211; Edit Bliiling &#8211; ANY<br />
CONSOLE &#8211; Manage Users &#8211; ANY<br />
CONSOLE &#8211; View Invoices &#8211; ANY<br />
FINANCE &#8211; Any- ANY<br />
USER &#8211; ANY &#8211; ANY</p>
<p><strong>3.グループ(Group)</strong><br />
<a href="http://docs.enstratus.com/users/users.html">http://docs.enstratus.com/users/users.html</a></p>
<p><strong>3.1.グループとは</strong><br />
enStratusのなかでクループは、ユーザを束ねる単位であり、ロールとは1対1の関係です。<br />
</p>
<p><strong>3.2.Adminグループの作成</strong></p>
<p><strong>・グループ名の作成</strong><br />
[enStratusコンソール]→[ユーザ]→[グループ]→[＋ユーザグループの追加]をクリックしてグループ名を作成します。</p>
<p><a href="http://www.creationline.com/wp-content/uploads/2012/04/group-1.png"><img class="size-full wp-image-1818 alignnone" title="グループ名の作成" src="http://www.creationline.com/wp-content/uploads/2012/04/group-1.png" alt="" width="256" height="176" /></a></p>
<p><strong>・ロールの設定</strong><br />
MyAdminグループから[アクション]→[ロールの設定]をクリックし、ロールを設定します。<br />
<a href="http://www.creationline.com/wp-content/uploads/2012/04/group-2.png"><img class="size-full wp-image-1819 alignnone" title="ロールの設定" src="http://www.creationline.com/wp-content/uploads/2012/04/group-2.png" alt="" width="258" height="154" /></a><br />
</p>
<p><strong>3.3.CloudManagerグループの作成</strong></p>
<p><strong>・グループ名の作成</strong><br />
[enStratusコンソール]→[ユーザ]→[グループ]→[＋ユーザグループの追加]をクリックし、グループ名を作成します。</p>
<p><a href="http://www.creationline.com/wp-content/uploads/2012/04/group-3.png"><img class="size-full wp-image-1820 alignnone" title="グループ名の作成" src="http://www.creationline.com/wp-content/uploads/2012/04/group-3.png" alt="" width="254" height="174" /></a></p>
<p><strong>・ロールの設定</strong><br />
MyCloudManagerグループから[アクション]→[ロールの設定]をクリックし、ロールを設定します。</p>
<p><a href="http://www.creationline.com/wp-content/uploads/2012/04/group-4.png"><img class="size-full wp-image-1821 alignnone" title="ロールの設定" src="http://www.creationline.com/wp-content/uploads/2012/04/group-4.png" alt="" width="254" height="140" /></a><br />
</p>
<p><strong>3.4.Configuratorグループの作成</strong></p>
<p><strong>・グループ名の作成</strong><br />
[enStratusコンソール]→[ユーザ]→[グループ]→[＋ユーザグループの追加]をクリックし、グループ名を作成します。</p>
<p><a href="http://www.creationline.com/wp-content/uploads/2012/04/group-5.png"><img class="size-full wp-image-1822 alignnone" title="グループ名の作成" src="http://www.creationline.com/wp-content/uploads/2012/04/group-5.png" alt="" width="256" height="169" /></a></p>
<p><strong>・ロールの設定</strong><br />
My Configuratorグループから[アクション]→[ロールの設定]をクリックし、ロールを設定します。</p>
<p><a href="http://www.creationline.com/wp-content/uploads/2012/04/group-6.png"><img class="size-full wp-image-1823 alignnone" title="ロールの設定" src="http://www.creationline.com/wp-content/uploads/2012/04/group-6.png" alt="" width="253" height="152" /></a></p>
<p><strong>4.	ユーザ(User)</strong><br />
<strong>4.1.ユーザとは</strong><br />
enStratusでユーザは、必ず1つ以上のグループ所属し、1つ以上の予算を持ち、ロールの制限の下でenStratusコンソール及びクラウドリソース（例えば、サーバやネットワーク、ストレージ）を使う当事者です。<br />
はじめてenStratusのアカウントを取得し、ログインした時のユーザはデフォルトユーザです。デフォルトユーザのIDとセキュリティ証明書は、enStratusのアカウントを取得時に入力したメールアドレスとパスワードです。<br />
デフォルトユーザは、enStratusが提供するデフォルトのAdminXXXグループに所属しています。そしてenStratusの全権限を持つデフォルトのAdminXXXロールを持ち、デフォルトの予算コードを持っています。<br />
</p>
<p><strong>4.2.ユーザの作成</strong><br />
[enStratusコンソール]→[ユーザ管理]→[ユーザ]をクリックし、 ユーザを作成します。</p>
<p><a href="http://www.creationline.com/wp-content/uploads/2012/04/user-1.png"><img class="size-full wp-image-1824 alignnone" title="ユーザの追加" src="http://www.creationline.com/wp-content/uploads/2012/04/user-1.png" alt="" width="502" height="407" /></a></p>
<table style="border-color: #C0C0C0; border-width: 1px; border-collapse: collapse; border-top: 1px solid #000; border-left: 1px solid #000;" frame="box">
<tbody>
<tr>
<td style="border-color: #C0C0C0; border-width: 1px; border-collapse: collapse; border-bottom: 1px solid #000; border-right: 1px solid #000;" width="100">電子メール</td>
<td style="border-color: #C0C0C0; border-width: 1px; border-collapse: collapse; border-bottom: 1px solid #000; border-right: 1px solid #000;">メールアドレスは、enStratusのなかでユニークであること</td>
</tr>
<tr>
<td style="border-color: #C0C0C0; border-width: 1px; border-collapse: collapse; border-bottom: 1px solid #000; border-right: 1px solid #000;">グループ</td>
<td style="border-color: #C0C0C0; border-width: 1px; border-collapse: collapse; border-bottom: 1px solid #000; border-right: 1px solid #000;">MyAdmin。複数選択できる(Ctrl+クリック)</td>
</tr>
<tr>
<td style="border-color: #C0C0C0; border-width: 1px; border-collapse: collapse; border-bottom: 1px solid #000; border-right: 1px solid #000;">予算コード</td>
<td style="border-color: #C0C0C0; border-width: 1px; border-collapse: collapse; border-bottom: 1px solid #000; border-right: 1px solid #000;">MyBudget 1 + Default。複数選択できる(Ctrl+クリック)</td>
</tr>
<tr>
<td style="border-color: #C0C0C0; border-width: 1px; border-collapse: collapse; border-bottom: 1px solid #000; border-right: 1px solid #000;">生成されたパスワード</td>
<td style="border-color: #C0C0C0; border-width: 1px; border-collapse: collapse; border-bottom: 1px solid #000; border-right: 1px solid #000;">パスワードを生成して控えておく。原則的にユーザ登録を行ってからパスワードは変更できないので要注意（パスワードのリセットはenStratusのシステム管理者の確認が必要）</td>
</tr>
</tbody>
</table>
<p></p>
<p><strong>4.3.新しいユーザでログイン</strong><br />
では、早速新しいユーザでログインしてみましょう。</p>
<p><strong>・デフォルトユーザからログアウト</strong><br />
[アカウントの姓名]→[ログアウト]をクリックしてデフォルトユーザからログアウトします。</p>
<p><a href="http://www.creationline.com/wp-content/uploads/2012/04/user-2.png"><img class="size-full wp-image-1825 alignnone" title="ログアウト" src="http://www.creationline.com/wp-content/uploads/2012/04/user-2.png" alt="" width="281" height="98" /></a></p>
<p><strong>・デフォルトユーザからログアウトした直後</strong></p>
<p>ログアウト直後は、デフォルトユーザのログイン画面となっています。ここで[別ユーザとしてログイン]をクリックします。</p>
<p><a href="http://www.creationline.com/wp-content/uploads/2012/04/user-3.png"><img class="size-full wp-image-1826 alignnone" title="デフォルトユーザからログアウトした直後" src="http://www.creationline.com/wp-content/uploads/2012/04/user-3.png" alt="" width="276" height="300" /></a></p>
<p><strong>・新しいユーザのメールアドレス(ID)提出</strong></p>
<p>新しいユーザのメールアドレスを入力して[次へ]をクリックします。<br />
<a href="http://www.creationline.com/wp-content/uploads/2012/04/user-5.png"><img class="size-full wp-image-1827 alignnone" title="新しいユーザ提出" src="http://www.creationline.com/wp-content/uploads/2012/04/user-5.png" alt="" width="274" height="297" /></a></p>
<p><strong>・新しいユーザとしてログイン</strong><br />
新しいのユーザのパスワードを入力して[送信]をクリックします。</p>
<p><a href="http://www.creationline.com/wp-content/uploads/2012/04/user-51.png"><img class="size-full wp-image-1828 alignnone" title="新しいユーザでログイン" src="http://www.creationline.com/wp-content/uploads/2012/04/user-51.png" alt="" width="274" height="297" /></a></p>
<p><strong>・enStratusコンソールのトップページ</strong></p>
<p>次のようなenStratusコンソールのトップページが表示されると新しいユーザとしてログインは成功です。</p>
<p><a href="http://www.creationline.com/wp-content/uploads/2012/04/user-6.png"><img class="size-full wp-image-1829 alignnone" title="enStratusコンソールのトップページ" src="http://www.creationline.com/wp-content/uploads/2012/04/user-6.png" alt="" width="542" height="58" /></a><br />
</p>
<p><strong>4.4.ユーザプロファイルの作成</strong></p>
<p>ユーザプロファイルは、ユーザの一般情報とセキュリティ証明書を管理するページです。例えば、WindowsサーバへアクセスするためのRDPパスワードとLinuxサーバにアクセスするためのPublic SSH Keyを事前にユーザプロファイルへ登録しておきます。</p>
<p><strong>・ユーザプロファイルの編集</strong><br />
[ユーザの姓名]→[自分のプロファイル編集]をクリックします。ユーザプロファイルは、次のように「一般情報/セキュリティ資格情報/警告の基本設定」に分かれています。</p>
<p><a href="http://www.creationline.com/wp-content/uploads/2012/04/user-7.png"><img class="size-full wp-image-1830 alignnone" title="自分のプロファイルの編集" src="http://www.creationline.com/wp-content/uploads/2012/04/user-7.png" alt="" width="254" height="172" /></a></p>
<p><strong>・一般情報</strong><br />
<a href="http://www.creationline.com/wp-content/uploads/2012/04/user-8.png"><img class="size-full wp-image-1831 alignnone" title="一般情報" src="http://www.creationline.com/wp-content/uploads/2012/04/user-8.png" alt="" width="539" height="237" /></a></p>
<table style="border-color: #C0C0C0; border-width: 1px; border-collapse: collapse; border-top: 1px solid #000; border-left: 1px solid #000;" frame="box">
<tbody>
<tr>
<td style="border-color: #C0C0C0; border-width: 1px; border-collapse: collapse; border-bottom: 1px solid #000; border-right: 1px solid #000;" width="100">SMS番号</td>
<td style="border-color: #C0C0C0; border-width: 1px; border-collapse: collapse; border-bottom: 1px solid #000; border-right: 1px solid #000;">国番号から指定する</td>
</tr>
</tbody>
</table>
<p><strong>・セキュリティ資格情報</strong><br />
起動したサーバにログインするためには、セキュリティ資格情報の設定が必要です。<br />
<a href="http://www.creationline.com/wp-content/uploads/2012/04/user-9.png"><img class="size-full wp-image-1832 alignnone" title="セキュリティ資格情報" src="http://www.creationline.com/wp-content/uploads/2012/04/user-9.png" alt="" width="539" height="207" /></a></p>
<table style="border-color: #C0C0C0; border-width: 1px; border-collapse: collapse; border-top: 1px solid #000; border-left: 1px solid #000;" frame="box">
<tbody>
<tr>
<td style="border-color: #C0C0C0; border-width: 1px; border-collapse: collapse; border-bottom: 1px solid #000; border-right: 1px solid #000;" width="100">RDBパスワード</td>
<td style="border-color: #C0C0C0; border-width: 1px; border-collapse: collapse; border-bottom: 1px solid #000; border-right: 1px solid #000;">enStratusで起動したWindowsサーバにアクセスするためのパスワード。但し、Machine ImageにenStratusのエージェントが入っている必要がある</td>
</tr>
<tr>
<td style="border-color: #C0C0C0; border-width: 1px; border-collapse: collapse; border-bottom: 1px solid #000; border-right: 1px solid #000;">SSH公開キー</td>
<td style="border-color: #C0C0C0; border-width: 1px; border-collapse: collapse; border-bottom: 1px solid #000; border-right: 1px solid #000;">enStratusで起動したLinuxサーバにアクセスするためのキー。但し、Machine ImageにenStratusのエージェントが入っている必要がある</td>
</tr>
</tbody>
</table>
<p>もし、RSAキーの作成方法が分からない読者は、とりあえず、次のURLからダウンロードして下さい。RSAキーの作成方法は、次回に解説します。</p>
<p><a href="http://cl-file-server.s3.amazonaws.com/enStratus/Key/id_rsa">http://cl-file-server.s3.amazonaws.com/enStratus/Key/id_rsa</a><br />
<a href="http://cl-file-server.s3.amazonaws.com/enStratus/Key/id_rsa.pub">http://cl-file-server.s3.amazonaws.com/enStratus/Key/id_rsa.pub</a></p>
<p><strong>・警告の基本情報</strong><br />
enStratusのアラートレベルを設定します。<br />
enStratusのアラートは、クラウドアカウントで起きたイベントに関してユーザに警告します。そして警告は、通常、メールで通知し、enStratusコンソールでも閲覧できます。<br />
<a href="http://www.creationline.com/wp-content/uploads/2012/04/user-10.png"><img class="size-full wp-image-1834 alignnone" title="アラートレベルの設定" src="http://www.creationline.com/wp-content/uploads/2012/04/user-10.png" alt="" width="538" height="122" /></a></p>
<table style="border-color: #C0C0C0; border-width: 1px; border-collapse: collapse; border-top: 1px solid #000; border-left: 1px solid #000;" frame="box">
<tbody>
<tr>
<td style="border-color: #C0C0C0; border-width: 1px; border-collapse: collapse; border-bottom: 1px solid #000; border-right: 1px solid #000;">警告しきい値</td>
<td style="border-color: #C0C0C0; border-width: 1px; border-collapse: collapse; border-bottom: 1px solid #000; border-right: 1px solid #000;">すべてor 1-10</td>
</tr>
<tr>
<td style="border-color: #C0C0C0; border-width: 1px; border-collapse: collapse; border-bottom: 1px solid #000; border-right: 1px solid #000;">警告メール送信先</td>
<td style="border-color: #C0C0C0; border-width: 1px; border-collapse: collapse; border-bottom: 1px solid #000; border-right: 1px solid #000;">有効なメールアドレス</td>
</tr>
</tbody>
</table>
<table style="border-color: #C0C0C0; border-width: 1px; border-collapse: collapse; border-top: 1px solid #000; border-left: 1px solid #000;" frame="box">
<caption>[警告しきい値]</caption>
<tbody>
<tr>
<td style="border-color: #C0C0C0; border-width: 1px; border-collapse: collapse; border-bottom: 1px solid #000; border-right: 1px solid #000;">アラートレベル</td>
<td style="border-color: #C0C0C0; border-width: 1px; border-collapse: collapse; border-bottom: 1px solid #000; border-right: 1px solid #000;">評価値</td>
</tr>
<tr>
<td style="border-color: #C0C0C0; border-width: 1px; border-collapse: collapse; border-bottom: 1px solid #000; border-right: 1px solid #000;">1-3</td>
<td style="border-color: #C0C0C0; border-width: 1px; border-collapse: collapse; border-bottom: 1px solid #000; border-right: 1px solid #000;">LOW</td>
</tr>
<tr>
<td style="border-color: #C0C0C0; border-width: 1px; border-collapse: collapse; border-bottom: 1px solid #000; border-right: 1px solid #000;">4-6</td>
<td style="border-color: #C0C0C0; border-width: 1px; border-collapse: collapse; border-bottom: 1px solid #000; border-right: 1px solid #000;">MEDIUM</td>
</tr>
<tr>
<td style="border-color: #C0C0C0; border-width: 1px; border-collapse: collapse; border-bottom: 1px solid #000; border-right: 1px solid #000;">7-10</td>
<td style="border-color: #C0C0C0; border-width: 1px; border-collapse: collapse; border-bottom: 1px solid #000; border-right: 1px solid #000;">HIGH</td>
</tr>
</tbody>
</table>
<p><strong>5.ネットワーク設定</strong><br />
<strong>5.1.ファイアウォール作成</strong><br />
新規のファイアウォールを作成してみましょう。ファイアウォールは、サーバにアクセス可能なプロトコールとポートの制限を行います。<br />
[ネットワーク]→[ファイアウォール]→[+ファイアウォールの作成]をクリックします。</p>
<p><a href="http://www.creationline.com/wp-content/uploads/2012/04/network-1.png"><img class="size-full wp-image-1835 alignnone" title="ファイアウォールの設定" src="http://www.creationline.com/wp-content/uploads/2012/04/network-1.png" alt="" width="417" height="195" /></a><br />
ラベル色を設定しておくと、直感的にリソースを見分けることができます。予算コードとユーザグループは、とりあえずDefault/Adminを選びます。<br />
</p>
<p><strong>5.2.セキュリティルールの変更</strong><br />
既存のファイアウォールのセキュリティルールを変更してみましょう。<br />
ここでデフォールトを選んで[アクション]→[ルールの編集]をクリックします。<br />
<a href="http://www.creationline.com/wp-content/uploads/2012/04/network-2.png"><img class="size-full wp-image-1836 alignnone" title="セキュリティルールの設定" src="http://www.creationline.com/wp-content/uploads/2012/04/network-2.png" alt="" width="287" height="64" /></a></p>
<p>上記のようにファイアウォールが編集できる状態であることを確認します。<br />
そして [+ルールの更新追加]をクリックし、追加を行います。</p>
<p><a href="http://www.creationline.com/wp-content/uploads/2012/04/network-3.png"><img class="size-full wp-image-1837 alignnone" title="ポート設定" src="http://www.creationline.com/wp-content/uploads/2012/04/network-3.png" alt="" width="417" height="290" /></a></p>
<p></strong></p>
<table style="border-color: #C0C0C0; border-width: 1px; border-collapse: collapse; border-top: 1px solid #000; border-left: 1px solid #000;" frame="box">
<tbody>
<tr>
<td style="border-color: #C0C0C0; border-width: 1px; border-collapse: collapse; border-bottom: 1px solid #000; border-right: 1px solid #000;">ソース</td>
<td style="border-color: #C0C0C0; border-width: 1px; border-collapse: collapse; border-bottom: 1px solid #000; border-right: 1px solid #000;">CIDR</td>
<td style="border-color: #C0C0C0; border-width: 1px; border-collapse: collapse; border-bottom: 1px solid #000; border-right: 1px solid #000;">方法</td>
<td style="border-color: #C0C0C0; border-width: 1px; border-collapse: collapse; border-bottom: 1px solid #000; border-right: 1px solid #000;">プロトコール</td>
<td style="border-color: #C0C0C0; border-width: 1px; border-collapse: collapse; border-bottom: 1px solid #000; border-right: 1px solid #000;">開始ポート</td>
<td style="border-color: #C0C0C0; border-width: 1px; border-collapse: collapse; border-bottom: 1px solid #000; border-right: 1px solid #000;">エンドポート</td>
</tr>
<tr>
<td style="border-color: #C0C0C0; border-width: 1px; border-collapse: collapse; border-bottom: 1px solid #000; border-right: 1px solid #000;">Any</td>
<td style="border-color: #C0C0C0; border-width: 1px; border-collapse: collapse; border-bottom: 1px solid #000; border-right: 1px solid #000;">0.0.0.0/0</td>
<td style="border-color: #C0C0C0; border-width: 1px; border-collapse: collapse; border-bottom: 1px solid #000; border-right: 1px solid #000;">SSH</td>
<td style="border-color: #C0C0C0; border-width: 1px; border-collapse: collapse; border-bottom: 1px solid #000; border-right: 1px solid #000;">TCP</td>
<td style="border-color: #C0C0C0; border-width: 1px; border-collapse: collapse; border-bottom: 1px solid #000; border-right: 1px solid #000;">22</td>
<td style="border-color: #C0C0C0; border-width: 1px; border-collapse: collapse; border-bottom: 1px solid #000; border-right: 1px solid #000;">22</td>
</tr>
<tr>
<td style="border-color: #C0C0C0; border-width: 1px; border-collapse: collapse; border-bottom: 1px solid #000; border-right: 1px solid #000;">Any</td>
<td style="border-color: #C0C0C0; border-width: 1px; border-collapse: collapse; border-bottom: 1px solid #000; border-right: 1px solid #000;">0.0.0.0/0</td>
<td style="border-color: #C0C0C0; border-width: 1px; border-collapse: collapse; border-bottom: 1px solid #000; border-right: 1px solid #000;">RDP</td>
<td style="border-color: #C0C0C0; border-width: 1px; border-collapse: collapse; border-bottom: 1px solid #000; border-right: 1px solid #000;">TCP</td>
<td style="border-color: #C0C0C0; border-width: 1px; border-collapse: collapse; border-bottom: 1px solid #000; border-right: 1px solid #000;">3389</td>
<td style="border-color: #C0C0C0; border-width: 1px; border-collapse: collapse; border-bottom: 1px solid #000; border-right: 1px solid #000;">3389</td>
</tr>
<tr>
<td style="border-color: #C0C0C0; border-width: 1px; border-collapse: collapse; border-bottom: 1px solid #000; border-right: 1px solid #000;">Any</td>
<td style="border-color: #C0C0C0; border-width: 1px; border-collapse: collapse; border-bottom: 1px solid #000; border-right: 1px solid #000;">0.0.0.0/0</td>
<td style="border-color: #C0C0C0; border-width: 1px; border-collapse: collapse; border-bottom: 1px solid #000; border-right: 1px solid #000;">HTTP</td>
<td style="border-color: #C0C0C0; border-width: 1px; border-collapse: collapse; border-bottom: 1px solid #000; border-right: 1px solid #000;">TCP</td>
<td style="border-color: #C0C0C0; border-width: 1px; border-collapse: collapse; border-bottom: 1px solid #000; border-right: 1px solid #000;">80</td>
<td style="border-color: #C0C0C0; border-width: 1px; border-collapse: collapse; border-bottom: 1px solid #000; border-right: 1px solid #000;">80</td>
</tr>
<tr>
<td style="border-color: #C0C0C0; border-width: 1px; border-collapse: collapse; border-bottom: 1px solid #000; border-right: 1px solid #000;">Any</td>
<td style="border-color: #C0C0C0; border-width: 1px; border-collapse: collapse; border-bottom: 1px solid #000; border-right: 1px solid #000;">0.0.0.0/0</td>
<td style="border-color: #C0C0C0; border-width: 1px; border-collapse: collapse; border-bottom: 1px solid #000; border-right: 1px solid #000;">Ping</td>
<td style="border-color: #C0C0C0; border-width: 1px; border-collapse: collapse; border-bottom: 1px solid #000; border-right: 1px solid #000;">ICMP</td>
<td style="border-color: #C0C0C0; border-width: 1px; border-collapse: collapse; border-bottom: 1px solid #000; border-right: 1px solid #000;">-1</td>
<td style="border-color: #C0C0C0; border-width: 1px; border-collapse: collapse; border-bottom: 1px solid #000; border-right: 1px solid #000;">-1</td>
</tr>
<tr>
<td style="border-color: #C0C0C0; border-width: 1px; border-collapse: collapse; border-bottom: 1px solid #000; border-right: 1px solid #000;">enStratus</td>
<td style="border-color: #C0C0C0; border-width: 1px; border-collapse: collapse; border-bottom: 1px solid #000; border-right: 1px solid #000;">209.240.80.5/32</td>
<td style="border-color: #C0C0C0; border-width: 1px; border-collapse: collapse; border-bottom: 1px solid #000; border-right: 1px solid #000;">enStratus</td>
<td style="border-color: #C0C0C0; border-width: 1px; border-collapse: collapse; border-bottom: 1px solid #000; border-right: 1px solid #000;">TCP</td>
<td style="border-color: #C0C0C0; border-width: 1px; border-collapse: collapse; border-bottom: 1px solid #000; border-right: 1px solid #000;">2003</td>
<td style="border-color: #C0C0C0; border-width: 1px; border-collapse: collapse; border-bottom: 1px solid #000; border-right: 1px solid #000;">2003</td>
</tr>
</tbody>
</table>
<hr />
ここまでで、本格的なエンターフライズ向けのクラウド管理ツールであるenStratusの初期環境設定が一通り終わりました。次回では、ここまでの環境設定に基づいてサーバを起動し、ログインする方法を解説したいと思います。enStratusのサーバへのログイン方法は、よりセキュリティを強固にするため、通常の方法とは若干異なります。</p>
]]></content:encoded>
			<wfw:commentRss>http://www.creationline.com/lab/1771/feed</wfw:commentRss>
		<slash:comments>0</slash:comments>
		</item>
		<item>
		<title>Chef Soloの実例〜CloudFoundryインストーラ [2]</title>
		<link>http://www.creationline.com/lab/1841</link>
		<comments>http://www.creationline.com/lab/1841#comments</comments>
		<pubDate>Sat, 28 Apr 2012 13:31:19 +0000</pubDate>
		<dc:creator>higuchi</dc:creator>
				<category><![CDATA[CL Lab]]></category>

		<guid isPermaLink="false">http://www.creationline.com/?p=1841</guid>
		<description><![CDATA[Chef Soloを用いたCloud Foundryのコンポーネントごとインストール 前回同様、Chef Soloを内部で用いているCloud Foundryのインストールを行います。今回は、単一のホストにCloud FoundryすべてをインストールするAll-in-One形式ではなく、コンポーネントごとに個別のホストにインストールを行います。 Scalrが提供しているCloud Foundryでは、 cf-all-in-one: Cloud Foundryのすべてのコンポーネント cf-dea: DEA cf-router: Router cf-cchm: Cloud ControllerとHealth Managerなどのコアコンポーネント のように、用途別のイメージを提供しています。 2012年4月現在のCloud Foundryのインストーラは、そのまま起動するとAll-in-One形式のインストールが行われますが、設定ファイルを与えてやることでコンポーネントごとのインストールを行えるようになっています。 コンポーネントごとのインストールはChefのRoleを利用して実現されています。Roleとは、AttributesとRun Listで構成されており、Nodeに対して複数のRecipeを適用するために用いられます。 Cloud FoundryのインストーラにはRolesとCookbooksが含まれており、これらを元にインストールが行われます。 イメージの事前準備 元となるイメージをubuntu server 10.04.4 (amd64)で準備します。このイメージは、コンポーネントごとの個別ホストにコピーして利用することになります。 ubuntu server 10.04.4 (amd64)のインストールが完了したら、curlをインストールします。 cf@ubuntu:~$ sudo aptitude install curl : cf@ubuntu:~$ 次に、Cloud Foundryのインストールスクリプトを取得します。 cf@ubuntu:~$ wget https://github.com/cloudfoundry/vcap/raw/master/dev_setup/bin/vcap_dev_setup : cf@ubuntu:~$ 取得したインストールスクリプトのchefsolo_launch.rbを起動している部分をコメントアウトします。これにより、初期設定、Chefのインストール、Cloud Foundryのgitレポジトリのクローンまでが行われます。 cf@ubuntu:~$ cp -a [...]]]></description>
			<content:encoded><![CDATA[<h2>Chef Soloを用いたCloud Foundryのコンポーネントごとインストール</h2>
<p>前回同様、Chef Soloを内部で用いている<a href="https://github.com/cloudfoundry/vcap">Cloud Foundryのインストール</a>を行います。今回は、単一のホストにCloud FoundryすべてをインストールするAll-in-One形式ではなく、コンポーネントごとに個別のホストにインストールを行います。</p>
<p><a href="http://wiki.scalr.net/Reference_Guide/Roles/CloudFoundry">Scalrが提供しているCloud Foundry</a>では、</p>
<ul>
<li>cf-all-in-one: Cloud Foundryのすべてのコンポーネント</li>
<li>cf-dea: DEA</li>
<li>cf-router: Router</li>
<li>cf-cchm: Cloud ControllerとHealth Managerなどのコアコンポーネント</li>
</ul>
<p>のように、用途別のイメージを提供しています。</p>
<p>2012年4月現在の<a href="https://github.com/cloudfoundry/vcap/tree/master/dev_setup">Cloud Foundryのインストーラ</a>は、そのまま起動するとAll-in-One形式のインストールが行われますが、設定ファイルを与えてやることでコンポーネントごとのインストールを行えるようになっています。</p>
<p>コンポーネントごとのインストールは<a href="http://wiki.opscode.com/display/chef/Roles">ChefのRole</a>を利用して実現されています。Roleとは、<a href="http://wiki.opscode.com/display/chef/Cookbook+Attributes">Attributes</a>とRun Listで構成されており、Nodeに対して複数のRecipeを適用するために用いられます。</p>
<p>Cloud Foundryのインストーラには<a href="https://github.com/cloudfoundry/vcap/tree/master/dev_setup/roles">Roles</a>と<a href="https://github.com/cloudfoundry/vcap/tree/master/dev_setup/cookbooks">Cookbooks</a>が含まれており、これらを元にインストールが行われます。</p>
<h3>イメージの事前準備</h3>
<p>元となるイメージをubuntu server 10.04.4 (amd64)で準備します。このイメージは、コンポーネントごとの個別ホストにコピーして利用することになります。</p>
<p>ubuntu server 10.04.4 (amd64)のインストールが完了したら、curlをインストールします。</p>
<pre>cf@ubuntu:~$ sudo aptitude install curl
	:
cf@ubuntu:~$</pre>
<p>次に、Cloud Foundryのインストールスクリプトを取得します。</p>
<pre>cf@ubuntu:~$ wget https://github.com/cloudfoundry/vcap/raw/master/dev_setup/bin/vcap_dev_setup
	:
cf@ubuntu:~$</pre>
<p>取得したインストールスクリプトのchefsolo_launch.rbを起動している部分をコメントアウトします。これにより、初期設定、Chefのインストール、Cloud Foundryのgitレポジトリのクローンまでが行われます。</p>
<pre>cf@ubuntu:~$ cp -a vcap_dev_setup vcap_dev_setup.orig
cf@ubuntu:~$ cp -a vcap_dev_setup vcap_dev_setup-no-chefsolo
cf@ubuntu:~$ vi vcap_dev_setup-no-chefsolo
cf@ubuntu:~$ diff -u vcap_dev_setup.orig vcap_dev_setup-no-chefsolo
--- vcap_dev_setup.orig 2012-04-24 09:58:46.634198516 +0900
+++ vcap_dev_setup-no-chefsolo  2012-04-24 10:00:49.084222703 +0900
@@ -154,4 +154,4 @@
   ARGS="$ARGS -c $CONFIG_FILE"
 fi

-$CLOUDFOUNDRY_HOME/vcap/dev_setup/lib/chefsolo_launch.rb $ARGS
+#$CLOUDFOUNDRY_HOME/vcap/dev_setup/lib/chefsolo_launch.rb $ARGS
cf@ubuntu:~$</pre>
<p>変更したインストールスクリプトを実行します。</p>
<pre>cf@ubuntu:~$ bash &lt; ./vcap_dev_setup-no-chefsolo
	:
deb http://apt.opscode.com/ lucid-0.10 main
	:
以下のパッケージが新たにインストールされます:
  chef irb1.8 libabstract-ruby1.8 libbunny-ruby libbunny-ruby1.8 liberubis-ruby
	:
Initialized empty Git repository in /home/cf/cloudfoundry/vcap/.git/
	:
Already on 'master'
cf@ubuntu:~$</pre>
<p>以降はこのイメージを、インストールするコンポーネントごとにコピーして使います。</p>
<h3>コンポーネントごとの分割方針</h3>
<p>今回は4台のホストに分割を行います。</p>
<table>
<tbody>
<tr>
<th>ホスト名</th>
<th>IPアドレス</th>
<th>コンポーネント</th>
</tr>
<tr>
<td>cchm</td>
<td>192.168.122.230</td>
<td>Cloud Controller, CCDB, Health Manager, NATS server, 各サービスのGateway</td>
</tr>
<tr>
<td>service0</td>
<td>192.168.122.220</td>
<td>MySQL, MongoDB, Redis, Neo4j, RabbitMQ</td>
</tr>
<tr>
<td>dea0</td>
<td>192.168.122.210</td>
<td>Dea</td>
</tr>
<tr>
<td>router0</td>
<td>192.168.122.200</td>
<td>Router, Nginx</td>
</tr>
</tbody>
</table>
<p>分割の仕方は<a href="https://github.com/cloudfoundry/vcap/tree/master/dev_setup/deployments">deployments/README</a>に簡単に記載されており、<a href="https://github.com/cloudfoundry/vcap/tree/master/dev_setup/deployments/sample">deployments/sample</a>に実例がいくつか用意されています。これらを参考に設定ファイルを作成し、個々のホストにインストールしていきます。</p>
<h3>cchmのインストール</h3>
<p>cchm.ymlファイルを以下の通り作成します。Cloud Controller, CCDB, Health Manager, NATS server, 各サービスのGatewayをインストールするものとします。</p>
<pre>---
# cchm
deployment:
  name: "cchm"
  domain: "example.jp"
jobs:
  install:
    - cloud_controller:
        builtin_services:
          - mysql
          - mongodb
          - redis
          - neo4j
          - rabbitmq
    - ccdb
    - health_manager
    - nats_server
    - mysql_gateway
    - mongodb_gateway
    - redis_gateway
    - neo4j_gateway
    - rabbitmq_gateway</pre>
<p>この設定ファイルを、インストールスクリプトに-cオプションで与えます。この設定ファイルのYAML形式のリストはChef用のRun Listに展開され、必要なRecipeの実行が行われます。All-in-One形式と異なり、各サービスそのものやDea、RouterなどはRun Listに含まれておらず、一切インストールされないことを確認します。</p>
<pre>cf@cchm:~$ ./cloudfoundry/vcap/dev_setup/bin/vcap_dev_setup -c cchm.yml
[sudo] password for cf:
	:
Installing deployment cchm, cloudfoundry home dir is /home/cf/cloudfoundry
[Thu, 26 Apr 2012 11:35:49 +0900] INFO: *** Chef 0.10.8 ***
[Thu, 26 Apr 2012 11:35:49 +0900] INFO: Setting the run_list to ["role[cloudfoundry]", "role[nats_server]", "role[ccdb]", "role[cloud_controller]", "role[mongodb_gateway]", "role[rabbitmq_gateway]", "role[neo4j_gateway]", "role[mysql_gateway]", "role[health_manager]", "role[redis_gateway]"] from JSON
[Thu, 26 Apr 2012 11:35:49 +0900] INFO: Run List is [role[cloudfoundry], role[nats_server], role[ccdb], role[cloud_controller], role[mongodb_gateway], role[rabbitmq_gateway], role[neo4j_gateway], role[mysql_gateway], role[health_manager], role[redis_gateway]]
[Thu, 26 Apr 2012 11:35:49 +0900] INFO: Run List expands to [deployment, essentials, ruby, cloudfoundry, nats_server, postgresql, ccdb, ruby::ruby18, cloud_controller, mongodb::gateway, rabbitmq::gateway, neo4j::gateway, mysql::gateway, health_manager, redis::gateway]
[Thu, 26 Apr 2012 11:35:49 +0900] INFO: Starting Chef Run for cchm
[Thu, 26 Apr 2012 11:35:49 +0900] INFO: Running start handlers
[Thu, 26 Apr 2012 11:35:49 +0900] INFO: Start handlers complete.
	:
[Thu, 26 Apr 2012 11:50:00 +0900] INFO: Chef Run complete in 851.163901 seconds
[Thu, 26 Apr 2012 11:50:00 +0900] INFO: Running report handlers
[Thu, 26 Apr 2012 11:50:00 +0900] INFO: Report handlers complete

Deployment Info
***************
* Status: Success
* Config files: /home/cf/cloudfoundry/.deployments/cchm/config
* Deployment name: cchm
* Note:
  * If you want to run ruby/vmc please source the profile /home/cf/.cloudfoundry_deployment_profile
  * If you want to run cloudfoundry components by hand please source the profile /home/cf/.cloudfoundry_deployment_local
* Command to run cloudfoundry: /home/cf/cloudfoundry/vcap/dev_setup/bin/vcap_dev -n cchm start
cf@cchm:~$</pre>
<p>インストールが完了したら、指示通りにコンポーネントの起動を行います。</p>
<pre>cf@cchm:~$ source /home/cf/.cloudfoundry_deployment_local
cf@cchm:~$ /home/cf/cloudfoundry/vcap/dev_setup/bin/vcap_dev -n cchm start
Targeting deployment "cchm" with cloudfoundry home ""
Setting up cloud controller environment
Using cloudfoundry config from /home/cf/cloudfoundry/.deployments/cchm/config
Executing /home/cf/cloudfoundry/.deployments/cchm/deploy/rubies/ruby-1.9.2-p180/bin/ruby /home/cf/cloudfoundry/vcap/dev_setup/bin/vcap start cloud_controller mongodb_gateway neo4j_gateway rabbitmq_gateway mysql_gateway health_manager redis_gateway -c /home/cf/cloudfoundry/.deployments/cchm/config -v /home/cf/cloudfoundry/vcap/bin -l /home/cf/cloudfoundry/.deployments/cchm/log
cloud_controller    :    RUNNING
mongodb_gateway     :    RUNNING
neo4j_gateway       :    RUNNING
rabbitmq_gateway    :    RUNNING
mysql_gateway       :    RUNNING
health_manager      :    RUNNING
redis_gateway       :    RUNNING
cf@cchm:~$</pre>
<p>このように、必要なコンポーネントの起動のみが行われます。なお、CCDBで用いられるPostgreSQLとNATS serverは別途起動しています。</p>
<pre>cf@cchm:~$ ps auxwwwf | grep "[ p]ostgres"
postgres 24109  0.0  0.3 101596  7000 ?        S    11:44   0:00 /usr/lib/postgre ql/8.4/bin/postgres -D /var/lib/postgresql/8.4/main -c config_file=/etc/postgresql/8.4/main/postgresql.conf
postgres 24111  0.0  0.1 101716  3196 ?        Ss   11:44   0:00  \_ postgres: writer process
postgres 24112  0.0  0.0 101596  1724 ?        Ss   11:44   0:00  \_ postgres: wal writer process
postgres 24113  0.0  0.0 101732  2028 ?        Ss   11:44   0:00  \_ postgres: autovacuum launcher process
postgres 24114  0.0  0.0  73136  1632 ?        Ss   11:44   0:00  \_ postgres: stats collector process
postgres  3527  0.0  0.3 104660  7420 ?        Ss   11:52   0:00  \_ postgres: root cloud_controller 192.168.122.230(60541) idle
postgres  3610  0.0  0.3 104616  7604 ?        Ss   11:53   0:00  \_ postgres: root cloud_controller 192.168.122.230(60548) idle
cf@cchm:~$

cf@cchm:~$ ps auxwwwf | grep "[ n]ats"
root      3430  0.1  0.9  65940 19676 ?        Sl   11:50   0:00 nats-server
cf@cchm:~$</pre>
<h3>service0のインストール</h3>
<p>service0.ymlファイルを以下の通り作成します。各サービスにはindexを振ります。今後service1などホストを増やした場合、indexを増やしていきます。また、NATS serverとして、既にインストール済のcchmホストを指定します。</p>
<pre>---
# service0
deployment:
  name: "service0"
  domain: "example.jp"
jobs:
  install:
    - mysql_node:
        index: "0"
    - mongodb_node:
        index: "0"
    - redis_node:
        index: "0"
    - neo4j_node:
        index: "0"
    - rabbitmq_node:
        index: "0"
  installed:
    - nats_server:
        host: "192.168.122.230"
        port: "4222"
        user: "nats"
        password: "nats"</pre>
<p>cchm同様、この設定ファイルをインストールスクリプトに-cオプションで与えます。</p>
<pre>cf@service0:~$ ./cloudfoundry/vcap/dev_setup/bin/vcap_dev_setup -c service0.yml
[sudo] password for cf:
	:
[Thu, 26 Apr 2012 11:58:49 +0900] INFO: *** Chef 0.10.8 ***
[Thu, 26 Apr 2012 11:58:49 +0900] INFO: Setting the run_list to ["role[cloudfoundry]", "role[neo4j_node]", "role[mysql_node]", "role[redis_node]", "role[rabbitmq_node]", "role[mongodb_node]"] from JSON
[Thu, 26 Apr 2012 11:58:49 +0900] INFO: Run List is [role[cloudfoundry], role[neo4j_node], role[mysql_node], role[redis_node], role[rabbitmq_node], role[mongodb_node]]
[Thu, 26 Apr 2012 11:58:49 +0900] INFO: Run List expands to [deployment, essentials, ruby, cloudfoundry, neo4j, neo4j::node, mysql, mysql::node, redis, redis::node, rabbitmq, rabbitmq::node, mongodb, mongodb::node]
[Thu, 26 Apr 2012 11:58:49 +0900] INFO: Starting Chef Run for service0
[Thu, 26 Apr 2012 11:58:49 +0900] INFO: Running start handlers
[Thu, 26 Apr 2012 11:58:49 +0900] INFO: Start handlers complete.
	:
[Thu, 26 Apr 2012 12:10:03 +0900] INFO: Chef Run complete in 673.710487 seconds
[Thu, 26 Apr 2012 12:10:03 +0900] INFO: Running report handlers
[Thu, 26 Apr 2012 12:10:03 +0900] INFO: Report handlers complete

Deployment Info
***************
* Status: Success
* Config files: /home/cf/cloudfoundry/.deployments/service0/config
* Deployment name: service0
* Note:
  * If you want to run ruby/vmc please source the profile /home/cf/.cloudfoundry_deployment_profile
  * If you want to run cloudfoundry components by hand please source the profile /home/cf/.cloudfoundry_deployment_local
* Command to run cloudfoundry: /home/cf/cloudfoundry/vcap/dev_setup/bin/vcap_dev -n service0 start
cf@service0:~$</pre>
<p>インストールが完了したら、指示通りにコンポーネントの起動を行います。</p>
<pre>cf@service0:~$ source /home/cf/.cloudfoundry_deployment_local
cf@service0:~$ /home/cf/cloudfoundry/vcap/dev_setup/bin/vcap_dev -n service0 start
Targeting deployment "service0" with cloudfoundry home ""
Using cloudfoundry config from /home/cf/cloudfoundry/.deployments/service0/config
Executing /home/cf/cloudfoundry/.deployments/service0/deploy/rubies/ruby-1.9.2-p180/bin/ruby /home/cf/cloudfoundry/vcap/dev_setup/bin/vcap start neo4j_node mysql_node redis_node rabbitmq_node mongodb_node -c /home/cf/cloudfoundry/.deployments/service0/config -v /home/cf/cloudfoundry/vcap/bin -l /home/cf/cloudfoundry/.deployments/service0/log
neo4j_node          :    RUNNING
mysql_node          :    RUNNING
redis_node          :    RUNNING
rabbitmq_node       :    RUNNING
mongodb_node        :    RUNNING
cf@service0:~$</pre>
<p>サービスの起動のみが行われました。</p>
<h3>dea0のインストール</h3>
<p>dea0.ymlファイルを以下の通り作成します。service0.yml同様、NATS serverはcchmホストを指定します。</p>
<pre>---
# dea0
deployment:
  name: "dea0"
  domain: "example.jp"
jobs:
  install:
    - dea
  installed:
    - nats_server:
        host: "192.168.122.230"
        port: "4222"
        user: "nats"
        password: "nats"</pre>
<p>これまで同様、この設定ファイルをインストールスクリプトに-cオプションで与えます。</p>
<pre>cf@dea0:~$ ./cloudfoundry/vcap/dev_setup/bin/vcap_dev_setup -c dea0.yml
[sudo] password for cf:
	:
Installing deployment dea0, cloudfoundry home dir is /home/cf/cloudfoundry
[Thu, 26 Apr 2012 12:14:03 +0900] INFO: *** Chef 0.10.8 ***
[Thu, 26 Apr 2012 12:14:03 +0900] INFO: Setting the run_list to ["role[cloudfoundry]", "role[dea]"] from JSON
[Thu, 26 Apr 2012 12:14:03 +0900] INFO: Run List is [role[cloudfoundry], role[dea]]
[Thu, 26 Apr 2012 12:14:03 +0900] INFO: Run List expands to [deployment, essentials, ruby, cloudfoundry, dea]
[Thu, 26 Apr 2012 12:14:03 +0900] INFO: Starting Chef Run for dea0
[Thu, 26 Apr 2012 12:14:03 +0900] INFO: Running start handlers
[Thu, 26 Apr 2012 12:14:03 +0900] INFO: Start handlers complete.
	:
[Thu, 26 Apr 2012 12:42:20 +0900] INFO: Chef Run complete in 1697.303422 seconds
[Thu, 26 Apr 2012 12:42:20 +0900] INFO: Running report handlers
[Thu, 26 Apr 2012 12:42:20 +0900] INFO: Report handlers complete

Deployment Info
***************
* Status: Success
* Config files: /home/cf/cloudfoundry/.deployments/dea0/config
* Deployment name: dea0
* Note:
  * If you want to run ruby/vmc please source the profile /home/cf/.cloudfoundry_deployment_profile
  * If you want to run cloudfoundry components by hand please source the profile /home/cf/.cloudfoundry_deployment_local
* Command to run cloudfoundry: /home/cf/cloudfoundry/vcap/dev_setup/bin/vcap_dev -n dea0 start
cf@dea0:~$</pre>
<p>インストールが完了したら、指示通りにコンポーネントの起動を行います。</p>
<pre>cf@dea0:~$ source /home/cf/.cloudfoundry_deployment_local
cf@dea0:~$ /home/cf/cloudfoundry/vcap/dev_setup/bin/vcap_dev -n dea0 start
Targeting deployment "dea0" with cloudfoundry home ""
Using cloudfoundry config from /home/cf/cloudfoundry/.deployments/dea0/config
Executing /home/cf/cloudfoundry/.deployments/dea0/deploy/rubies/ruby-1.9.2-p180/bin/ruby /home/cf/cloudfoundry/vcap/dev_setup/bin/vcap start dea -c /home/cf/cloudfoundry/.deployments/dea0/config -v /home/cf/cloudfoundry/vcap/bin -l /home/cf/cloudfoundry/.deployments/dea0/log
dea                 :    RUNNING
cf@dea0:~$</pre>
<p>RUNNINGと出ていますが、実際は動作していません。</p>
<pre>cf@dea0:~$ /home/cf/cloudfoundry/vcap/dev_setup/bin/vcap_dev -n dea0 status
Targeting deployment "dea0" with cloudfoundry home ""
Using cloudfoundry config from /home/cf/cloudfoundry/.deployments/dea0/config
Executing /home/cf/cloudfoundry/.deployments/dea0/deploy/rubies/ruby-1.9.2-p180/bin/ruby /home/cf/cloudfoundry/vcap/dev_setup/bin/vcap status dea -c /home/cf/cloudfoundry/.deployments/dea0/config -v /home/cf/cloudfoundry/vcap/bin -l /home/cf/cloudfoundry/.deployments/dea0/log
dea                 :    STOPPED
cf@dea0:~$</pre>
<p>ログを確認してみます。</p>
<pre>cf@dea0:~$ lv /home/cf/cloudfoundry/.deployments/dea0/log/dea.log
	:
[2012-04-26 12:43:27.172843] dea - pid=6011 tid=c9c0 fid=890f   INFO -- Using directory: /var/vcap.local/dea/
/home/cf/cloudfoundry/vcap/dea/lib/dea/agent.rb:1766:in `block in update_droplet_fs_usage': Failed parsing df output: Filesystem           1K-ブロック    使用   使用可 使用% マウント位置 (RuntimeError)
/dev/vda1              9833300   3727516   5606280  40% /
        from /home/cf/cloudfoundry/vcap/dea/lib/dea/agent.rb:1773:in `call'
	:</pre>
<p>このように、dfコマンドの出力に日本語が含まれているため、パースに失敗しているようです。そこで、起動スクリプトに環境変数 LANG=C LC_ALL=C を与えて起動し直します。</p>
<pre>cf@dea0:~$ LANG=C LC_ALL=C /home/cf/cloudfoundry/vcap/dev_setup/bin/vcap_dev -n de
a0 start
Targeting deployment "dea0" with cloudfoundry home ""
Using cloudfoundry config from /home/cf/cloudfoundry/.deployments/dea0/config
Executing /home/cf/cloudfoundry/.deployments/dea0/deploy/rubies/ruby-1.9.2-p180/bin/ruby /home/cf/cloudfoundry/vcap/dev_setup/bin/vcap start dea -c /home/cf/cloudfoundry/.deployments/dea0/config -v /home/cf/cloudfoundry/vcap/bin -l /home/cf/cloudfoundry/.deployments/dea0/log
dea                 :    RUNNING
cf@dea0:~$

cf@dea0:~$ /home/cf/cloudfoundry/vcap/dev_setup/bin/vcap_dev -n dea0 status
Targeting deployment "dea0" with cloudfoundry home ""
Using cloudfoundry config from /home/cf/cloudfoundry/.deployments/dea0/config
Executing /home/cf/cloudfoundry/.deployments/dea0/deploy/rubies/ruby-1.9.2-p180/bin/ruby /home/cf/cloudfoundry/vcap/dev_setup/bin/vcap status dea -c /home/cf/cloudfoundry/.deployments/dea0/config -v /home/cf/cloudfoundry/vcap/bin -l /home/cf/cloudfoundry/.deployments/dea0/log
dea                 :    RUNNING
cf@dea0:~$</pre>
<p>今度はこのように起動に成功しました。</p>
<h3>router0のインストール</h3>
<p>router0.ymlファイルを以下の通り作成します。やはり、NATS serverはcchmホストを指定します。</p>
<pre>---
# router0
deployment:
  name: "router0"
  domain: "example.jp"
jobs:
  install:
    - router
  installed:
    - nats_server:
        host: "192.168.122.230"
        port: "4222"
        user: "nats"
        password: "nats"</pre>
<p>同様に、この設定ファイルをインストールスクリプトに-cオプションで与えます。</p>
<pre>cf@router0:~$ ./cloudfoundry/vcap/dev_setup/bin/vcap_dev_setup -c router0.yml
[sudo] password for cf:
	:
Installing deployment router0, cloudfoundry home dir is /home/cf/cloudfoundry
[Thu, 26 Apr 2012 12:48:44 +0900] INFO: *** Chef 0.10.8 ***
[Thu, 26 Apr 2012 12:48:45 +0900] INFO: Setting the run_list to ["role[cloudfoundry]", "role[router]"] from JSON
[Thu, 26 Apr 2012 12:48:45 +0900] INFO: Run List is [role[cloudfoundry], role[router]]
[Thu, 26 Apr 2012 12:48:45 +0900] INFO: Run List expands to [deployment, essentials, ruby, cloudfoundry, nginx, router]
[Thu, 26 Apr 2012 12:48:45 +0900] INFO: Starting Chef Run for router0
[Thu, 26 Apr 2012 12:48:45 +0900] INFO: Running start handlers
[Thu, 26 Apr 2012 12:48:45 +0900] INFO: Start handlers complete.
	:
[Thu, 26 Apr 2012 12:56:08 +0900] INFO: Chef Run complete in 443.2477 seconds
[Thu, 26 Apr 2012 12:56:08 +0900] INFO: Running report handlers
[Thu, 26 Apr 2012 12:56:08 +0900] INFO: Report handlers complete

Deployment Info
***************
* Status: Success
* Config files: /home/cf/cloudfoundry/.deployments/router0/config
* Deployment name: router0
* Note:
  * If you want to run ruby/vmc please source the profile /home/cf/.cloudfoundry_deployment_profile
  * If you want to run cloudfoundry components by hand please source the profile /home/cf/.cloudfoundry_deployment_local
* Command to run cloudfoundry: /home/cf/cloudfoundry/vcap/dev_setup/bin/vcap_dev -n router0 start
cf@router0:~$</pre>
<p>インストールが完了したら、指示通りにコンポーネントの起動を行います。</p>
<pre>cf@router0:~$ source /home/cf/.cloudfoundry_deployment_local
cf@router0:~$ /home/cf/cloudfoundry/vcap/dev_setup/bin/vcap_dev -n router0 start
Targeting deployment "router0" with cloudfoundry home ""
Using cloudfoundry config from /home/cf/cloudfoundry/.deployments/router0/config
Executing /home/cf/cloudfoundry/.deployments/router0/deploy/rubies/ruby-1.9.2-p180/bin/ruby /home/cf/cloudfoundry/vcap/dev_setup/bin/vcap start router -c /home/cf/cloudfoundry/.deployments/router0/config -v /home/cf/cloudfoundry/vcap/bin -l /home/cf/cloudfoundry/.deployments/router0/log
router              :    RUNNING
cf@router0:~$</pre>
<p>以上で、すべてのコンポーネントごとのインストールが完了しました。</p>
<h3>動作テスト</h3>
<p>これらのホストとは別のホストから、vmcコマンドを用いて動作の確認を行います。まず、vmcコマンドを実行するホストの/etc/hostsに、router0ホストを指すエントリを追加します。</p>
<pre>192.168.122.200	api.example.jp</pre>
<p>このホストをターゲットに指定します。</p>
<pre>cf@worker:~$ vmc target api.example.jp
Successfully targeted to [http://api.example.jp]

cf@worker:~$</pre>
<p>ターゲットとして指定することに成功しました。次に、ユーザ登録を行います。</p>
<pre>cf@worker:~$ vmc register --email cf@example.jp --passwd example
Creating New User: OK
Attempting login to [http://api.example.jp]
Successfully logged into [http://api.example.jp]

cf@worker:~$</pre>
<p>ユーザ登録に成功しました。ここでcchmのログを確認してみます。</p>
<pre>cf@cchm:~$ tail cloudfoundry/.deployments/cchm/log/cloud_controller.log
	:
[2012-04-26 13:24:20.458470] cc_events - pid=1087 tid=99c8 fid=ac2b   INFO -- [2012-04-26 13:24:20 +0900, :USER, "N/A", "POST:/users", "cf@example.jp", :SUCCEEDED]
[2012-04-26 13:24:20.463739] cc - pid=1087 tid=99c8 fid=ac2b  DEBUG -- Login request from cf@example.jp
[2012-04-26 13:24:20.536121] cc - pid=1087 tid=99c8 fid=ac2b  DEBUG -- Login request from cf@example.jp token #
[2012-04-26 13:24:20.537255] cc_events - pid=1087 tid=99c8 fid=ac2b   INFO -- [2012-04-26 13:24:20 +0900, :USER, "N/A", "POST:/users/cf@example.jp/tokens", :SUCCEEDED]
cf@cchm:~$</pre>
<p>ユーザ登録が成功したことが確認できます。</p>
<p>では、サンプルアプリの作成し、pushします。</p>
<pre>cf@worker:/tmp$ mkdir env
cf@worker:/tmp$ cd env/
cf@worker:/tmp/env$ cat &gt; env.rb
require 'rubygems'
require 'sinatra'

get '/' do
  host = ENV['VMC_APP_HOST']
  port = ENV['VMC_APP_PORT']
  "&lt;h1&gt;Hello from the Cloud! via: #{host}:#{port}&lt;/h1&gt;"
end
cf@worker:/tmp/env$

cf@worker:/tmp/env$ vmc push env --instances 4 --mem 64M --url env.example.jp -n
Creating Application: OK
Uploading Application:
  Checking for available resources: OK
  Packing application: OK
  Uploading (0K): OK
Push Status: OK
Staging Application: OK
Starting Application: OK

cf@worker:/tmp/env$</pre>
<p>pushに成功しました。cchmのログとdea0のログを確認してみます。</p>
<pre>cf@cchm:~$ lv cloudfoundry/.deployments/cchm/log/cloud_controller.log
	:
[2012-04-26 13:27:31.829169] cc_events - pid=1087 tid=99c8 fid=ac2b   INFO -- [2012-04-26 13:27:31 +0900, :USER, "cf@example.jp", "PUT:/apps/env", "env", :SUCCEEDED]
[2012-04-26 13:27:31.833380] cc - pid=1087 tid=99c8 fid=2a44  DEBUG -- Received "{\"id\":\"ed2f8644b67154419b22c64cc3e43000\",\"ip\":\"192.168.122.210\",\"port\":12345,\"version\":0.99}" in response to dea.discover request
[2012-04-26 13:27:31.833543] cc - pid=1087 tid=99c8 fid=2a44  DEBUG -- Sending start message {"droplet":1,"name":"env","uris":["env.example.jp"],"runtime":"ruby18","framework":"sinatra","sha1":"8312ab833f0724ae4e88a4ea558192f87f0a8671","executableFile":"/var/vcap/shared/droplets/8312ab833f0724ae4e88a4ea558192f87f0a8671","executableUri":"http://192.168.122.230:9022/staged_droplets/1/8312ab833f0724ae4e88a4ea558192f87f0a8671","version":"8312ab833f0724ae4e88a4ea558192f87f0a8671-1","services":[],"limits":{"mem":64,"disk":2048,"fds":256},"env":[],"users":["cf@example.jp"],"debug":null,"console":null,"index":0} to DEA ed2f8644b67154419b22c64cc3e43000
[2012-04-26 13:27:31.847439] cc_events - pid=1087 tid=99c8 fid=ac2b   INFO -- [2012-04-26 13:27:31 +0900, :USER, "N/A", "GET:/staged_droplets/1/8312ab833f0724ae4e88a4ea558192f87f0a8671", :SUCCEEDED]
[2012-04-26 13:27:31.888304] cc - pid=1087 tid=99c8 fid=2a44  DEBUG -- Received "{\"id\":\"ed2f8644b67154419b22c64cc3e43000\",\"ip\":\"192.168.122.210\",\"port\":12345,\"version\":0.99}" in response to dea.discover request
	:
cf@cchm:~$</pre>
<pre>cf@dea0:~$ lv cloudfoundry/.deployments/dea0/log/dea.log
	:
[2012-04-26 13:27:31.828489] dea - pid=1023 tid=7aa6 fid=17b0  DEBUG -- DEA received discovery message: {"droplet":1,"limits":{"mem":64,"disk":2048,"fds":256},"name":"env","runtime":"ruby18","sha":"8312ab833f0724ae4e88a4ea558192f87f0a8671"}
[2012-04-26 13:27:31.831843] dea - pid=1023 tid=7aa6 fid=17b0  DEBUG -- DEA received start message: {"droplet":1,"name":"env","uris":["env.example.jp"],"runtime":"ruby18","framework":"sinatra","sha1":"8312ab833f0724ae4e88a4ea558192f87f0a8671","executableFile":"/var/vcap/shared/droplets/8312ab833f0724ae4e88a4ea558192f87f0a8671","executableUri":"http://192.168.122.230:9022/staged_droplets/1/8312ab833f0724ae4e88a4ea558192f87f0a8671","version":"8312ab833f0724ae4e88a4ea558192f87f0a8671-1","services":[],"limits":{"mem":64,"disk":2048,"fds":256},"env":[],"users":["cf@example.jp"],"debug":null,"console":null,"index":0}
[2012-04-26 13:27:31.831954] dea - pid=1023 tid=7aa6 fid=17b0  DEBUG -- Requested Limits: mem=64M, fds=256, disk=2048M
[2012-04-26 13:27:31.832076] dea - pid=1023 tid=7aa6 fid=17b0  DEBUG -- reserved_mem = 64 MB, max_memory = 4096 MB
[2012-04-26 13:27:31.832173] dea - pid=1023 tid=7aa6 fid=1e60  DEBUG -- Need to download app bits from http://192.168.122.230:9022/staged_droplets/1/8312ab833f0724ae4e88a4ea558192f87f0a8671
[2012-04-26 13:27:31.833006] dea - pid=1023 tid=7aa6 fid=17b0  DEBUG -- DEA received discovery message: {"droplet":1,"limits":{"mem":64,"disk":2048,"fds":256},"name":"env","runtime":"ruby18","sha":"8312ab833f0724ae4e88a4ea558192f87f0a8671"}
[2012-04-26 13:27:31.846515] dea - pid=1023 tid=7aa6 fid=1e60  DEBUG -- Took 0.014 323594 to download and write file
	:</pre>
<p>デプロイに成功したので、アクセスしてみます。</p>
<pre>cf@worker:~$ telnet 192.168.122.200 80
Trying 192.168.122.200...
Connected to 192.168.122.200.
Escape character is '^]'.
GET / HTTP/1.1
Host: env.example.jp
Connection: close

HTTP/1.1 200 OK
Server: nginx/0.7.65
Date: Thu, 26 Apr 2012 04:33:54 GMT
Content-Type: text/html;charset=utf-8
Connection: close
X-Frame-Options: sameorigin
X-XSS-Protection: 1; mode=block
Content-Length: 57

&lt;h1&gt;Hello from the Cloud! via: 192.168.122.210:51435&lt;/h1&gt;
Connection closed by foreign host.
cf@worker:~$</pre>
<p>このサンプルアプリではservice0は用いていませんが、少なくともcchm、router0、dea0のコンポーネントごとのホストが協調し、正常に動作していることが確認できました。</p>
]]></content:encoded>
			<wfw:commentRss>http://www.creationline.com/lab/1841/feed</wfw:commentRss>
		<slash:comments>0</slash:comments>
		</item>
		<item>
		<title>Chef Soloの実例〜CloudFoundryインストーラ [1]</title>
		<link>http://www.creationline.com/lab/1755</link>
		<comments>http://www.creationline.com/lab/1755#comments</comments>
		<pubDate>Sat, 28 Apr 2012 13:31:01 +0000</pubDate>
		<dc:creator>higuchi</dc:creator>
				<category><![CDATA[CL Lab]]></category>

		<guid isPermaLink="false">http://www.creationline.com/?p=1755</guid>
		<description><![CDATA[Chef Soloを用いたCloud Foundryのインストール 2012/4現在、Cloud FoundryのインストールはChef Soloを用いるようになっています。Chef Soloが使われていることを意識する場面はありませんが、このような使い方も可能という一例と言えるでしょう。 インストール対象にはUbuntu Server 10.04.3 (64bit)を用います。なお、より新しいUbuntu Server 11.10では、ruby1.8用のrakeパッケージが自動的にインストールされず、libreadline5-devパッケージが存在していないためインストールに失敗します。また、インストール全体で1時間程度の時間がかかります。 まず、手順に従いcurlパッケージをインストールし、インストールスクリプトを起動します。 cf@ubuntu:~$ sudo aptitude install curl : cf@ubuntu:~$ bash &#60; &#60;(curl -s -k -B https://raw.github.com/cloudfoundry/vcap/master/dev_setup/bin/vcap_dev_setup) : まず、Opscode社のaptレポジトリからchefパッケージがインストールされます。 : deb http://apt.opscode.com/ lucid-0.10 main : 以下のパッケージが新たにインストールされます: chef irb1.8 libabstract-ruby1.8 libbunny-ruby libbunny-ruby1.8 liberubis-ruby : 次にgitパッケージがインストールされ、Cloud Foundryがgithubから取得されます。 : 以下のパッケージが新たにインストールされます: git-core libdigest-sha1-perl liberror-perl : Initialized empty Git [...]]]></description>
			<content:encoded><![CDATA[<h2>Chef Soloを用いたCloud Foundryのインストール</h2>
<p>2012/4現在、<a href="https://github.com/cloudfoundry/vcap">Cloud Foundryのインストール</a>はChef Soloを用いるようになっています。Chef Soloが使われていることを意識する場面はありませんが、このような使い方も可能という一例と言えるでしょう。</p>
<p>インストール対象にはUbuntu Server 10.04.3 (64bit)を用います。なお、より新しいUbuntu Server 11.10では、ruby1.8用のrakeパッケージが自動的にインストールされず、libreadline5-devパッケージが存在していないためインストールに失敗します。また、インストール全体で1時間程度の時間がかかります。</p>
<p>まず、手順に従いcurlパッケージをインストールし、インストールスクリプトを起動します。</p>
<pre>cf@ubuntu:~$ sudo aptitude install curl
	:
cf@ubuntu:~$ bash &lt; &lt;(curl -s -k -B https://raw.github.com/cloudfoundry/vcap/master/dev_setup/bin/vcap_dev_setup)
	:</pre>
<p>まず、Opscode社のaptレポジトリからchefパッケージがインストールされます。</p>
<pre>	:
deb http://apt.opscode.com/ lucid-0.10 main
	:
以下のパッケージが新たにインストールされます:
  chef irb1.8 libabstract-ruby1.8 libbunny-ruby libbunny-ruby1.8 liberubis-ruby
	:</pre>
<p>次にgitパッケージがインストールされ、Cloud Foundryがgithubから取得されます。</p>
<pre>	:
以下のパッケージが新たにインストールされます:
  git-core libdigest-sha1-perl liberror-perl
	:
Initialized empty Git repository in /home/cf/cloudfoundry/vcap/.git/
	:</pre>
<p>ここからがChef Soloの出番となります。<a href="https://github.com/cloudfoundry/vcap/blob/master/dev_setup/lib/chefsolo_launch.rb">chefsolo_launch.rb</a>スクリプトによって、各種設定が行われた後に<a href="https://github.com/cloudfoundry/vcap/tree/master/dev_setup/cookbooks">ローカルに取得したCookbooks</a>を用いてCloud Foundryのインストールが行われます。この際、必要なソフトウェアも同時にインストールが行われます。</p>
<pre>	:
Installing deployment devbox, cloudfoundry home dir is /home/cf/cloudfoundry
[Fri, 20 Apr 2012 11:51:06 +0900] INFO: *** Chef 0.10.8 ***
[Fri, 20 Apr 2012 11:51:07 +0900] INFO: Setting the run_list to ["role[nats_server]", "role[cloudfoundry]", "role[router]", "role[ccdb]", "role[cloud_controller]", "role[health_manager]", "role[dea]", "role[uaa]", "role[uaadb]", "role[redis_node]", "role[mysql_node]", "role[mongodb_node]", "role[neo4j_node]", "role[rabbitmq_node]", "role[redis_gateway]", "role[mysql_gateway]", "role[mongodb_gateway]", "role[neo4j_gateway]", "role[rabbitmq_gateway]"] from JSON
[Fri, 20 Apr 2012 11:51:07 +0900] INFO: Run List is [role[nats_server], role[cloudfoundry], role[router], role[ccdb], role[cloud_controller], role[health_manager], role[dea], role[uaa], role[uaadb], role[redis_node], role[mysql_node], role[mongodb_node], role[neo4j_node], role[rabbitmq_node], role[redis_gateway], role[mysql_gateway], role[mongodb_gateway], role[neo4j_gateway], role[rabbitmq_gateway]]
[Fri, 20 Apr 2012 11:51:07 +0900] INFO: Run List expands to [deployment, essentials, ruby, nats_server, cloudfoundry, nginx, router, postgresql, ccdb, ruby::ruby18, cloud_controller, health_manager, dea, java, maven, uaa, uaadb, redis, redis::node, mysql, mysql::node, mongodb, mongodb::node, neo4j, neo4j::node, rabbitmq, rabbitmq::node, redis::gateway, mysql::gateway, mongodb::gateway, neo4j::gateway, rabbitmq::gateway]
[Fri, 20 Apr 2012 11:51:07 +0900] INFO: Starting Chef Run for ubuntu
[Fri, 20 Apr 2012 11:51:07 +0900] INFO: Running start handlers
[Fri, 20 Apr 2012 11:51:07 +0900] INFO: Start handlers complete.
	:
	:
	:
[Fri, 20 Apr 2012 12:35:57 +0900] INFO: Chef Run complete in 2690.027714 seconds
[Fri, 20 Apr 2012 12:35:57 +0900] INFO: Running report handlers
[Fri, 20 Apr 2012 12:35:57 +0900] INFO: Report handlers complete

Deployment Info
***************
* Status: Success
* Config files: /home/cf/cloudfoundry/.deployments/devbox/config
* Deployment name: devbox
* Note:
  * If you want to run ruby/vmc please source the profile /home/cf/.cloudfoundry_deployment_profile
  * If you want to run cloudfoundry components by hand please source the profile /home/cf/.cloudfoundry_deployment_local
* Command to run cloudfoundry: /home/cf/cloudfoundry/vcap/dev_setup/bin/vcap_dev start
cf@ubuntu:~$</pre>
<p>インストールが成功したら、指示通りにCloud Foundryを起動してみます。起動には少し時間がかかります。</p>
<pre>cf@ubuntu:~$ source /home/cf/.cloudfoundry_deployment_profile
cf@ubuntu:~$

cf@ubuntu:~$ /home/cf/cloudfoundry/vcap/dev_setup/bin/vcap_dev start
Targeting deployment "devbox" with cloudfoundry home "/home/cf/cloudfoundry"
Setting up cloud controller environment
Using cloudfoundry config from /home/cf/cloudfoundry/.deployments/devbox/config
Executing /home/cf/cloudfoundry/.deployments/devbox/deploy/rubies/ruby-1.9.2-p180/bin/ruby /home/cf/cloudfoundry/vcap/dev_setup/bin/vcap start cloud_controller uaa mysql_gateway rabbitmq_node mysql_node dea redis_gateway rabbitmq_gateway neo4j_gateway mongodb_gateway mongodb_node neo4j_node redis_node health_manager router -c /home/cf/cloudfoundry/.deployments/devbox/config -v /home/cf/cloudfoundry/vcap/bin -l /home/cf/cloudfoundry/.deployments/devbox/log
cloud_controller    :       RUNNING
uaa                 :    RUNNING
mysql_gateway       :    RUNNING
rabbitmq_node       :    RUNNING
mysql_node          :    RUNNING
dea                 :    RUNNING
redis_gateway       :    RUNNING
rabbitmq_gateway    :    RUNNING
neo4j_gateway       :    RUNNING
mongodb_gateway     :    RUNNING
mongodb_node        :    RUNNING
neo4j_node          :    RUNNING
redis_node          :    RUNNING
health_manager      :    RUNNING
router              :    RUNNING
cf@ubuntu:~$</pre>
<p>無事に起動しました。</p>
<pre>root     25191  0.0  0.0  27996   900 ?        Ss   11:58   0:00 nginx: master process /usr/sbin/nginx
www-data 25193  0.0  0.1  28792  2196 ?        S    11:58   0:00  \_ nginx: worker process
postgres 12274  0.0  0.3 101596  6996 ?        S    12:30   0:00 /usr/lib/postgresql/8.4/bin/postgres -D /var/lib/postgresql/8.4/main -c config_file=/etc/postgresql/8.4/main/postgresql.conf
postgres 12277  0.0  0.1 101720  2132 ?        Ss   12:31   0:00  \_ postgres: writer process
postgres 12278  0.0  0.0 101596  1732 ?        Ss   12:31   0:00  \_ postgres: wal writer process
postgres 12279  0.0  0.0 101868  2056 ?        Ss   12:31   0:00  \_ postgres: autovacuum launcher process
postgres 12280  0.0  0.0  73136  1660 ?        Ss   12:31   0:00  \_ postgres: stats collector process
postgres  8897  0.0  0.3 105240  7888 ?        Ss   13:08   0:00  \_ postgres: root cloud_controller 192.168.122.9(33725) idle
postgres  9296  0.0  0.3 105080  7756 ?        Ss   13:08   0:00  \_ postgres: root cloud_controller 192.168.122.9(33851) idle
root      8360  0.1  0.9  65956 19704 ?        Sl   12:35   0:02 nats-server
mysql     8412  0.0  1.2 189708 24716 ?        Ssl  12:35   0:00 /usr/sbin/mysqld
cf        8799  5.7  3.5 248680 73736 pts/0    Sl   13:08   0:04 ruby /home/cf/cloudfoundry/vcap/bin/cloud_controller -c /home/cf/cloudfoundry/.deployments/devbox/config/cloud_controller.yml
cf        8816  0.8  1.1  92984 24264 pts/0    Sl   13:08   0:00 ruby /home/cf/cloudfoundry/vcap/uaa/bin/uaa -c /home/cf/cloudfoundry/.deployments/devbox/config/uaa.yml
cf        8822  7.2  4.4 934308 92120 pts/0    Sl   13:08   0:04  \_ /usr/lib/jvm/java-6-openjdk/bin/java -DPID=8822 -Xmx512m -Dspring.profiles.active=postgresql -Dvarz.username=edc214724e1bacf5ac0b7d552a72e2ca -Dvarz.password=c284eb2c858a094f493c26ed8916b77e -classpath /home/cf/cloudfoundry/.deployments/devbox/deploy/maven/apache-maven-3.0.4/boot/plexus-classworlds-2.4.jar -Dclassworlds.conf=/home/cf/cloudfoundry/.deployments/devbox/deploy/maven/apache-maven-3.0.4/bin/m2.conf -Dmaven.home=/home/cf/cloudfoundry/.deployments/devbox/deploy/maven/apache-maven-3.0.4 org.codehaus.plexus.classworlds.launcher.Launcher tomcat:run -P vcap
cf        8851  2.4  2.2 183772 46308 pts/0    Sl   13:08   0:01 ruby /home/cf/cloudfoundry/vcap/services/mysql/bin/mysql_gateway -c /home/cf/cloudfoundry/.deployments/devbox/config/mysql_gateway.yml
cf        8871  2.8  2.3 222728 49008 pts/0    Sl   13:08   0:01 ruby /home/cf/cloudfoundry/vcap/services/rabbit/bin/rabbit_node -c /home/cf/cloudfoundry/.deployments/devbox/config/rabbitmq_node.yml
cf        8917  2.8  2.3 228776 47468 pts/0    Sl   13:08   0:01 ruby /home/cf/cloudfoundry/vcap/services/mysql/bin/mysql_node -c /home/cf/cloudfoundry/.deployments/devbox/config/mysql_node.yml
cf        8986  2.8  2.2 175364 45960 pts/0    Sl   13:08   0:01 ruby /home/cf/cloudfoundry/vcap/services/redis/bin/redis_gateway -c /home/cf/cloudfoundry/.deployments/devbox/config/redis_gateway.yml
cf        9070  2.9  2.2 175396 45840 pts/0    Sl   13:08   0:01 ruby /home/cf/cloudfoundry/vcap/services/rabbit/bin/rabbit_gateway -c /home/cf/cloudfoundry/.deployments/devbox/config/rabbitmq_gateway.yml
cf        9120  3.0  2.2 175308 45872 pts/0    Sl   13:08   0:01 ruby /home/cf/cloudfoundry/vcap/services/neo4j/bin/neo4j_gateway -c /home/cf/cloudfoundry/.deployments/devbox/config/neo4j_gateway.yml
cf        9145  3.4  2.2 178720 47052 pts/0    Sl   13:08   0:01 ruby /home/cf/cloudfoundry/vcap/services/mongodb/bin/mongodb_gateway -c /home/cf/cloudfoundry/.deployments/devbox/config/mongodb_gateway.yml
cf        9168  3.7  2.3 225208 49356 pts/0    Sl   13:08   0:01 ruby /home/cf/cloudfoundry/vcap/services/mongodb/bin/mongodb_node -c /home/cf/cloudfoundry/.deployments/devbox/config/mongodb_node.yml
cf        9190  3.9  2.3 221548 47752 pts/0    Sl   13:08   0:01 ruby /home/cf/cloudfoundry/vcap/services/neo4j/bin/neo4j_node -c /home/cf/cloudfoundry/.deployments/devbox/config/neo4j_node.yml
cf        9213  3.9  2.2 221080 47292 pts/0    Sl   13:08   0:01 ruby /home/cf/cloudfoundry/vcap/services/redis/bin/redis_node -c /home/cf/cloudfoundry/.deployments/devbox/config/redis_node.yml
cf        9247  5.0  2.4 193984 51432 pts/0    Sl   13:08   0:01 ruby /home/cf/cloudfoundry/vcap/health_manager/bin/health_manager -c /home/cf/cloudfoundry/.deployments/devbox/config/health_manager.yml
cf        9292  1.7  1.2  94128 24992 pts/0    Sl   13:08   0:00 ruby /home/cf/cloudfoundry/vcap/router/bin/router -c /home/cf/cloudfoundry/.deployments/devbox/config/router.yml
cf@ubuntu:~$</pre>
<pre>cf@ubuntu:~$ vmc target

[http://api.vcap.me]

cf@ubuntu:~$ vmc info

VMware's Cloud Application Platform
For support visit http://support.cloudfoundry.com

Target:   http://api.vcap.me (v0.999)
Client:   v0.3.15

cf@ubuntu:~$</pre>
]]></content:encoded>
			<wfw:commentRss>http://www.creationline.com/lab/1755/feed</wfw:commentRss>
		<slash:comments>0</slash:comments>
		</item>
		<item>
		<title>Chefを使ってみよう [4]</title>
		<link>http://www.creationline.com/lab/1753</link>
		<comments>http://www.creationline.com/lab/1753#comments</comments>
		<pubDate>Sat, 28 Apr 2012 12:26:59 +0000</pubDate>
		<dc:creator>higuchi</dc:creator>
				<category><![CDATA[CL Lab]]></category>

		<guid isPermaLink="false">http://www.creationline.com/?p=1753</guid>
		<description><![CDATA[Cookbookの各要素の確認 CookbookはRecipeなどの設定情報をひとまとめにしたものですが、ここでは各要素がどのようなものなのか、apache2のCookbookを例に確認してみます。 Attributes Nodeの保持している、あるいはNodeに与えるデータです。 IPアドレス ホスト名 OS 読み込まれた kernel モジュール システムで利用できるプログラム言語のヴァージョン などはOhaiによって判定されるAutomatic Attributesとして保持され、さらに独自に指定することもできます。 apache2のAttributeでは、プラットフォームによって設定するファイル名やプロセス名などを切り替えるように記述されています。 Definitions 既存のResourceを結びつけ、再利用可能な新しいResourceを定義することができます。 apache2のDefinitionsでは、:apache_confというResourceを定義しています。これはUbuntuの場合であれば、 templates/mods/モジュール.conf.erb をテンプレートとして値を置換して /etc/apache2/mods-available/モジュール.conf ファイルを生成、ファイルモード 0644 で配置し、apache2 サービスを再起動する。 というResourceとなります。 Files これによって指定されたファイルは、Nodeに配置するために転送することができます。 Libraries 任意の Ruby コードを含めることができ、Chef の言語を拡張したり、独自のクラスを実装したりできます。 Metadata ChefにRecipeや依存関係、ヴァージョン制約、サポートするプラットフォームなどを伝えるのに用いられます。この情報はChef Serverに対し、CookbookをどのNodeに適用するべきかのヒントとして用いられます。将来的に、Cookbookを発見したりインストールしたりする自動化システムに不可欠となります。 Providers Resourceを受けて、ResourceとNodeの現在の状態を比較し、Resource中の動作を行います。これによって単一のResourceで、Chefがサポートするいろいろなプラットフォーム上でのResourceの動作を可能とします。 Recipes Recipeは、Nodeを設定するために、定義された順番で実行されるResourceの集まりをカプセル化したものです。 apache2のRecipeは、パッケージのインストール、各種ディレクトリの作成、各種設定ファイルの生成、起動などを行います。 Resources ResourceはChefの基本的な単位で、RecipeやDefinitionに記述されたシステム設定の個々の要素で、Nodeに適用されるものです。Resourceは通常、設定しようとするホストに対してクロスプラットフォームであるように記述されます。例えば、パッケージをインストールするにはapt、yum、BSD portsなどさまざまですが、package Resourceはその差を気にせずに実行するよう記述されています。 Templates マークアップ言語を記述したファイルにより、変数や、より複雑なロジックに基き、最終的なファイルを動的に生成できます。 apache2のTemplateでは、Definitionによって呼び出され、Attributeの値に置換されるようになっています。 chef-soloで実際にapache2 Cookbookを実行 まず、gitコマンドでapache2 Cookbookを取得します。 root@chef-solo:~# cd /root/chef-solo/cookbooks root@chef-solo:/root/chef-solo/cookbooks# [...]]]></description>
			<content:encoded><![CDATA[<h2>Cookbookの各要素の確認</h2>
<p>CookbookはRecipeなどの<a href="http://wiki.opscode.com/display/chef/Chef+Essentials">設定情報</a>をひとまとめにしたものですが、ここでは各要素がどのようなものなのか、<a href="http://community.opscode.com/cookbooks/apache2">apache2のCookbook</a>を例に確認してみます。</p>
<h3><a href="http://wiki.opscode.com/display/chef/Cookbook+Attributes">Attributes</a></h3>
<p>Nodeの保持している、あるいはNodeに与えるデータです。</p>
<ul>
<li>IPアドレス</li>
<li>ホスト名</li>
<li>OS</li>
<li>読み込まれた kernel モジュール</li>
<li>システムで利用できるプログラム言語のヴァージョン</li>
</ul>
<p>などは<a href="http://wiki.opscode.com/display/chef/Ohai">Ohai</a>によって判定される<a href="http://wiki.opscode.com/display/chef/Automatic+Attributes">Automatic Attributes</a>として保持され、さらに独自に指定することもできます。</p>
<p><a href="https://github.com/opscode-cookbooks/apache2/blob/master/attributes/default.rb">apache2のAttribute</a>では、プラットフォームによって設定するファイル名やプロセス名などを切り替えるように記述されています。</p>
<h3><a href="http://wiki.opscode.com/display/chef/Definitions">Definitions</a></h3>
<p>既存のResourceを結びつけ、再利用可能な新しいResourceを定義することができます。</p>
<p><a href="https://github.com/opscode-cookbooks/apache2/blob/master/definitions/apache_conf.rb">apache2のDefinitions</a>では、:apache_confというResourceを定義しています。これはUbuntuの場合であれば、</p>
<blockquote><p>templates/mods/<strong>モジュール</strong>.conf.erb をテンプレートとして値を置換して /etc/apache2/mods-available/<strong>モジュール</strong>.conf ファイルを生成、ファイルモード 0644 で配置し、apache2 サービスを再起動する。</p></blockquote>
<p>というResourceとなります。</p>
<h3><a href="http://wiki.opscode.com/display/chef/File+Distribution">Files</a></h3>
<p>これによって指定されたファイルは、Nodeに配置するために転送することができます。</p>
<h3><a href="http://wiki.opscode.com/display/chef/Libraries">Libraries</a></h3>
<p>任意の Ruby コードを含めることができ、Chef の言語を拡張したり、独自のクラスを実装したりできます。</p>
<h3><a href="http://wiki.opscode.com/display/chef/Metadata">Metadata</a></h3>
<p>ChefにRecipeや依存関係、ヴァージョン制約、サポートするプラットフォームなどを伝えるのに用いられます。この情報はChef Serverに対し、CookbookをどのNodeに適用するべきかのヒントとして用いられます。将来的に、Cookbookを発見したりインストールしたりする自動化システムに不可欠となります。</p>
<h3><a href="http://wiki.opscode.com/display/chef/Providers">Providers</a></h3>
<p>Resourceを受けて、ResourceとNodeの現在の状態を比較し、Resource中の動作を行います。これによって単一のResourceで、Chefがサポートするいろいろなプラットフォーム上でのResourceの動作を可能とします。</p>
<h3><a href="http://wiki.opscode.com/display/chef/Recipes">Recipes</a></h3>
<p>Recipeは、Nodeを設定するために、定義された順番で実行されるResourceの集まりをカプセル化したものです。</p>
<p><a href="https://github.com/opscode-cookbooks/apache2/blob/master/recipes/default.rb">apache2のRecipe</a>は、パッケージのインストール、各種ディレクトリの作成、各種設定ファイルの生成、起動などを行います。</p>
<h3><a href="http://wiki.opscode.com/display/chef/Resources">Resources</a></h3>
<p>ResourceはChefの基本的な単位で、RecipeやDefinitionに記述されたシステム設定の個々の要素で、Nodeに適用されるものです。Resourceは通常、設定しようとするホストに対してクロスプラットフォームであるように記述されます。例えば、パッケージをインストールするにはapt、yum、BSD portsなどさまざまですが、package Resourceはその差を気にせずに実行するよう記述されています。</p>
<h3><a href="http://wiki.opscode.com/display/chef/Templates">Templates</a></h3>
<p>マークアップ言語を記述したファイルにより、変数や、より複雑なロジックに基き、最終的なファイルを動的に生成できます。</p>
<p><a href="https://github.com/opscode-cookbooks/apache2/blob/master/templates/default/mods/alias.conf.erb">apache2のTemplate</a>では、Definitionによって呼び出され、Attributeの値に置換されるようになっています。</p>
<h2>chef-soloで実際にapache2 Cookbookを実行</h2>
<p>まず、gitコマンドでapache2 Cookbookを取得します。</p>
<pre>root@chef-solo:~# cd /root/chef-solo/cookbooks
root@chef-solo:/root/chef-solo/cookbooks# git clone git://github.com/opscode-cookbooks/apache2.git
Cloning into apache2...
remote: Counting objects: 1157, done.
remote: Compressing objects: 100% (410/410), done.
remote: Total 1157 (delta 765), reused 1064 (delta 672)
Receiving objects: 100% (1157/1157), 166.26 KiB | 101 KiB/s, done.
Resolving deltas: 100% (765/765), done.
root@chef-solo:/root/chef-solo/cookbooks# ls -la apache2/
合計 84
drwxr-xr-x 8 root root  4096 2012-04-19 20:52 .
drwxr-xr-x 4 root root  4096 2012-04-19 20:52 ..
drwxr-xr-x 8 root root  4096 2012-04-19 20:52 .git
-rw-r--r-- 1 root root  2208 2012-04-19 20:52 CHANGELOG.md
-rw-r--r-- 1 root root  1233 2012-04-19 20:52 CONTRIBUTING
-rw-r--r-- 1 root root 10850 2012-04-19 20:52 LICENSE
-rw-r--r-- 1 root root 17675 2012-04-19 20:52 README.md
drwxr-xr-x 2 root root  4096 2012-04-19 20:52 attributes
drwxr-xr-x 2 root root  4096 2012-04-19 20:52 definitions
drwxr-xr-x 3 root root  4096 2012-04-19 20:52 files
-rw-r--r-- 1 root root  8615 2012-04-19 20:52 metadata.rb
drwxr-xr-x 2 root root  4096 2012-04-19 20:52 recipes
drwxr-xr-x 3 root root  4096 2012-04-19 20:52 templates
root@chef-solo:/root/chef-solo/cookbooks#</pre>
<p>実行するRecipeをJSON形式で定義します。</p>
<pre>root@chef-solo:~# cat &gt; apache2.json
{
	"run_list": [ "recipe[apache2]" ]
}
root@chef-solo:~#</pre>
<p>事前にapache2パッケージがインストールされていないことを確認します。</p>
<pre>root@chef-solo:~# dpkg -l apache2
apache2 に一致するパッケージが見つかりません。
root@chef-solo:~#</pre>
<p>chef-soloを実行します。</p>
<pre>root@chef-solo:~# chef-solo -j apache2.json
[Thu, 19 Apr 2012 20:53:20 +0900] INFO: *** Chef 0.10.8 ***
[Thu, 19 Apr 2012 20:53:20 +0900] INFO: Setting the run_list to ["recipe[apache2]"] from JSON
[Thu, 19 Apr 2012 20:53:20 +0900] INFO: Run List is [recipe[apache2]]
[Thu, 19 Apr 2012 20:53:20 +0900] INFO: Run List expands to [apache2]
[Thu, 19 Apr 2012 20:53:20 +0900] INFO: Starting Chef Run for chef-solo
[Thu, 19 Apr 2012 20:53:20 +0900] INFO: Running start handlers
[Thu, 19 Apr 2012 20:53:20 +0900] INFO: Start handlers complete.
[Thu, 19 Apr 2012 20:53:20 +0900] INFO: Processing package[apache2] action install (apache2::default line 20)
[Thu, 19 Apr 2012 20:53:43 +0900] INFO: package[apache2] installed version 2.2.20-1ubuntu1.2
[Thu, 19 Apr 2012 20:53:43 +0900] INFO: Processing service[apache2] action enable (apache2::default line 25)
[Thu, 19 Apr 2012 20:53:43 +0900] INFO: Processing directory[/etc/apache2/ssl] action create (apache2::default line 135)
[Thu, 19 Apr 2012 20:53:43 +0900] INFO: directory[/etc/apache2/ssl] created directory /etc/apache2/ssl
[Thu, 19 Apr 2012 20:53:43 +0900] INFO: directory[/etc/apache2/ssl] owner changed to 0
[Thu, 19 Apr 2012 20:53:43 +0900] INFO: directory[/etc/apache2/ssl] group changed to 0
[Thu, 19 Apr 2012 20:53:43 +0900] INFO: directory[/etc/apache2/ssl] mode changed to 755
[Thu, 19 Apr 2012 20:53:43 +0900] INFO: Processing directory[/etc/apache2/conf.d] action create (apache2::default line 142)
[Thu, 19 Apr 2012 20:53:43 +0900] INFO: Processing directory[/var/cache/apache2] action create (apache2::default line 149)
[Thu, 19 Apr 2012 20:53:43 +0900] INFO: directory[/var/cache/apache2] owner changed to 0
[Thu, 19 Apr 2012 20:53:43 +0900] INFO: directory[/var/cache/apache2] group changed to 0
[Thu, 19 Apr 2012 20:53:43 +0900] INFO: Processing template[apache2.conf] action create (apache2::default line 156)
[Thu, 19 Apr 2012 20:53:43 +0900] INFO: template[apache2.conf] backed up to /var/chef/backup/etc/apache2/apache2.conf.chef-20120419205343
[Thu, 19 Apr 2012 20:53:43 +0900] INFO: template[apache2.conf] mode changed to 644
[Thu, 19 Apr 2012 20:53:43 +0900] INFO: template[apache2.conf] updated content
[Thu, 19 Apr 2012 20:53:43 +0900] INFO: Processing template[security] action create (apache2::default line 172)
[Thu, 19 Apr 2012 20:53:43 +0900] INFO: template[security] mode changed to 644
[Thu, 19 Apr 2012 20:53:43 +0900] INFO: template[security] updated content
[Thu, 19 Apr 2012 20:53:43 +0900] INFO: template[security] not queuing delayed action restart on service[apache2] (delayed), as it's already been queued
[Thu, 19 Apr 2012 20:53:43 +0900] INFO: Processing template[charset] action create (apache2::default line 182)
[Thu, 19 Apr 2012 20:53:43 +0900] INFO: Processing template[/etc/apache2/ports.conf] action create (apache2::default line 192)
[Thu, 19 Apr 2012 20:53:43 +0900] INFO: template[/etc/apache2/ports.conf] backed up to /var/chef/backup/etc/apache2/ports.conf.chef-20120419205343
[Thu, 19 Apr 2012 20:53:43 +0900] INFO: template[/etc/apache2/ports.conf] mode changed to 644
[Thu, 19 Apr 2012 20:53:43 +0900] INFO: template[/etc/apache2/ports.conf] updated content
[Thu, 19 Apr 2012 20:53:43 +0900] INFO: template[/etc/apache2/ports.conf] not queuing delayed action restart on service[apache2] (delayed), as it's already been queued
[Thu, 19 Apr 2012 20:53:43 +0900] INFO: Processing template[/etc/apache2/sites-available/default] action create (apache2::default line 201)
[Thu, 19 Apr 2012 20:53:43 +0900] INFO: template[/etc/apache2/sites-available/default] backed up to /var/chef/backup/etc/apache2/sites-available/default.chef-20120419205343
[Thu, 19 Apr 2012 20:53:43 +0900] INFO: template[/etc/apache2/sites-available/default] mode changed to 644
[Thu, 19 Apr 2012 20:53:43 +0900] INFO: template[/etc/apache2/sites-available/default] updated content
[Thu, 19 Apr 2012 20:53:43 +0900] INFO: template[/etc/apache2/sites-available/default] not queuing delayed action restart on service[apache2] (delayed), as it's already been queued
[Thu, 19 Apr 2012 20:53:43 +0900] INFO: Processing template[/etc/apache2/mods-available/status.conf] action create (apache2::mod_status line 21)
[Thu, 19 Apr 2012 20:53:43 +0900] INFO: template[/etc/apache2/mods-available/status.conf] backed up to /var/chef/backup/etc/apache2/mods-available/status.conf.chef-20120419205343
[Thu, 19 Apr 2012 20:53:43 +0900] INFO: template[/etc/apache2/mods-available/status.conf] mode changed to 644
[Thu, 19 Apr 2012 20:53:43 +0900] INFO: template[/etc/apache2/mods-available/status.conf] updated content
[Thu, 19 Apr 2012 20:53:43 +0900] INFO: template[/etc/apache2/mods-available/status.conf] not queuing delayed action restart on service[apache2] (delayed), as it's already been queued
[Thu, 19 Apr 2012 20:53:43 +0900] INFO: Processing execute[a2enmod status] action run (apache2::mod_status line 38)
[Thu, 19 Apr 2012 20:53:43 +0900] INFO: Processing template[/etc/apache2/mods-available/alias.conf] action create (apache2::mod_alias line 21)
[Thu, 19 Apr 2012 20:53:43 +0900] INFO: Processing execute[a2enmod alias] action run (apache2::mod_alias line 38)
[Thu, 19 Apr 2012 20:53:43 +0900] INFO: Processing execute[a2enmod auth_basic] action run (apache2::mod_auth_basic line 38)
[Thu, 19 Apr 2012 20:53:43 +0900] INFO: Processing execute[a2enmod authn_file] action run (apache2::mod_authn_file line 38)
[Thu, 19 Apr 2012 20:53:43 +0900] INFO: Processing execute[a2enmod authz_default] action run (apache2::mod_authz_default line 38)
[Thu, 19 Apr 2012 20:53:43 +0900] INFO: Processing execute[a2enmod authz_groupfile] action run (apache2::mod_authz_groupfile line 38)
[Thu, 19 Apr 2012 20:53:43 +0900] INFO: Processing execute[a2enmod authz_host] action run (apache2::mod_authz_host line 38)
[Thu, 19 Apr 2012 20:53:43 +0900] INFO: Processing execute[a2enmod authz_user] action run (apache2::mod_authz_user line 38)
[Thu, 19 Apr 2012 20:53:43 +0900] INFO: Processing template[/etc/apache2/mods-available/autoindex.conf] action create (apache2::mod_autoindex line 21)
[Thu, 19 Apr 2012 20:53:43 +0900] INFO: Processing execute[a2enmod autoindex] action run (apache2::mod_autoindex line 38)
[Thu, 19 Apr 2012 20:53:43 +0900] INFO: Processing template[/etc/apache2/mods-available/dir.conf] action create (apache2::mod_dir line 21)
[Thu, 19 Apr 2012 20:53:43 +0900] INFO: Processing execute[a2enmod dir] action run (apache2::mod_dir line 38)
[Thu, 19 Apr 2012 20:53:43 +0900] INFO: Processing execute[a2enmod env] action run (apache2::mod_env line 38)
[Thu, 19 Apr 2012 20:53:43 +0900] INFO: Processing template[/etc/apache2/mods-available/mime.conf] action create (apache2::mod_mime line 21)
[Thu, 19 Apr 2012 20:53:43 +0900] INFO: template[/etc/apache2/mods-available/mime.conf] backed up to /var/chef/backup/etc/apache2/mods-available/mime.conf.chef-20120419205343
[Thu, 19 Apr 2012 20:53:43 +0900] INFO: template[/etc/apache2/mods-available/mime.conf] mode changed to 644
[Thu, 19 Apr 2012 20:53:43 +0900] INFO: template[/etc/apache2/mods-available/mime.conf] updated content
[Thu, 19 Apr 2012 20:53:43 +0900] INFO: template[/etc/apache2/mods-available/mime.conf] not queuing delayed action restart on service[apache2] (delayed), as it's already been queued
[Thu, 19 Apr 2012 20:53:43 +0900] INFO: Processing execute[a2enmod mime] action run (apache2::mod_mime line 38)
[Thu, 19 Apr 2012 20:53:43 +0900] INFO: Processing template[/etc/apache2/mods-available/negotiation.conf] action create (apache2::mod_negotiation line 21)
[Thu, 19 Apr 2012 20:53:43 +0900] INFO: Processing execute[a2enmod negotiation] action run (apache2::mod_negotiation line 38)
[Thu, 19 Apr 2012 20:53:43 +0900] INFO: Processing template[/etc/apache2/mods-available/setenvif.conf] action create (apache2::mod_setenvif line 21)
[Thu, 19 Apr 2012 20:53:43 +0900] INFO: template[/etc/apache2/mods-available/setenvif.conf] backed up to /var/chef/backup/etc/apache2/mods-available/setenvif.conf.chef-20120419205343
[Thu, 19 Apr 2012 20:53:43 +0900] INFO: template[/etc/apache2/mods-available/setenvif.conf] mode changed to 644
[Thu, 19 Apr 2012 20:53:43 +0900] INFO: template[/etc/apache2/mods-available/setenvif.conf] updated content
[Thu, 19 Apr 2012 20:53:43 +0900] INFO: template[/etc/apache2/mods-available/setenvif.conf] not queuing delayed action restart on service[apache2] (delayed), as it's already been queued
[Thu, 19 Apr 2012 20:53:43 +0900] INFO: Processing execute[a2enmod setenvif] action run (apache2::mod_setenvif line 38)
[Thu, 19 Apr 2012 20:53:43 +0900] INFO: Processing service[apache2] action start (apache2::default line 216)
[Thu, 19 Apr 2012 20:53:43 +0900] INFO: template[apache2.conf] sending restart action to service[apache2] (delayed)
[Thu, 19 Apr 2012 20:53:43 +0900] INFO: Processing service[apache2] action restart (apache2::default line 25)
[Thu, 19 Apr 2012 20:53:47 +0900] INFO: service[apache2] restarted
[Thu, 19 Apr 2012 20:53:47 +0900] INFO: Chef Run complete in 26.607405 seconds
[Thu, 19 Apr 2012 20:53:47 +0900] INFO: Running report handlers
[Thu, 19 Apr 2012 20:53:47 +0900] INFO: Report handlers complete
root@chef-solo:~#</pre>
<p>apache2パッケージがインストールされ、</p>
<pre>root@chef-solo:~# dpkg -l apache2
要望=(U)不明/(I)インストール/(R)削除/(P)完全削除/(H)維持
| 状態=(N)無/(I)インストール済/(C)設定/(U)展開/(F)設定失敗/(H)半インストール/(W)トリガ待ち/(T)トリガ保留
|/ エラー?=(空欄)無/(R)要再インストール (状態,エラーの大文字=異常)
||/ 名前         バージョ   説明
+++-==============-==============-============================================
ii  apache2        2.2.20-1ubuntu Apache HTTP Server metapackage
root@chef-solo:~#</pre>
<p>各種設定が自動的に行われ、</p>
<pre>root@chef-solo:~# head /etc/apache2/apache2.conf
#
# Generated by Chef
#
# Based on the Ubuntu apache2.conf

ServerRoot "/etc/apache2"

#
# The accept serialization lock file MUST BE STORED ON A LOCAL DISK.
#
root@chef-solo:~# 

root@chef-solo:~# head /etc/apache2/ports.conf
#This file generated via template by Chef.
Listen 80
NameVirtualHost *:80

Listen 443
NameVirtualHost *:443

root@chef-solo:~#</pre>
<p>apacheプロセスが起動されました。</p>
<pre>root@chef-solo:~# ps auxwwwf | grep "[ a]pache"
root      4765  0.0  0.1  69620  2804 ?        Ss   20:53   0:00 /usr/sbin/apache2 -k start
www-data  4768  0.0  0.0  69352  1940 ?        S    20:53   0:00  \_ /usr/sbin/apache2 -k start
www-data  4769  0.0  0.1 612692  2704 ?        Sl   20:53   0:00  \_ /usr/sbin/apache2 -k start
www-data  4770  0.0  0.1 612692  2704 ?        Sl   20:53   0:00  \_ /usr/sbin/apache2 -k start
www-data  4771  0.0  0.1 612692  2704 ?        Sl   20:53   0:00  \_ /usr/sbin/apache2 -k start
root@chef-solo:~#</pre>
]]></content:encoded>
			<wfw:commentRss>http://www.creationline.com/lab/1753/feed</wfw:commentRss>
		<slash:comments>0</slash:comments>
		</item>
		<item>
		<title>Cloud Foundryを使ってみよう[8]</title>
		<link>http://www.creationline.com/lab/1684</link>
		<comments>http://www.creationline.com/lab/1684#comments</comments>
		<pubDate>Sat, 28 Apr 2012 12:24:36 +0000</pubDate>
		<dc:creator>higuchi</dc:creator>
				<category><![CDATA[CL Lab]]></category>

		<guid isPermaLink="false">http://www.creationline.com/?p=1684</guid>
		<description><![CDATA[複数の DEA を起動する Cloud Foundry の各プロセスは、メッセージングシステムであるNATS (nats-server) を通してメッセージのやりとりを行っています。初期設定ではすべてのプロセスは localhost を NATS として指定していますが、理論上は NATS をハブとして各プロセスを分散して配置することができるはずです。 本項では、DEA (Droplet Execution Agent。Droplet とは、Cloud Foundry に push した、アプリケーション等をアーカイブしたもの)を複数起動することができるかの確認を行います。 cf@ubuntu:~$ ./cloudfoundry/vcap/dea/bin/dea -h Usage: dea [OPTIONS] -c, --config [ARG] Configuration File -s, --secure Secure Application Environment --disable_dir_cleanup Don't cleanup App directories -h, --help Help cf@ubuntu:~$ DEA の起動オプションで設定ファイルを指定することができます。指定がなければ cloudfoundry/vcap/dea/config/dea.yml を読み込むようになっています。また、最初から cloudfoundry/vcap/dea/config/dea2.yml が用意されているので、別途そちらを指定して、もう1つの DEA [...]]]></description>
			<content:encoded><![CDATA[<h2>複数の DEA を起動する</h2>
<p>Cloud Foundry の各プロセスは、メッセージングシステムであるNATS (nats-server) を通してメッセージのやりとりを行っています。初期設定ではすべてのプロセスは localhost を NATS として指定していますが、理論上は NATS をハブとして各プロセスを分散して配置することができるはずです。</p>
<p>本項では、DEA (Droplet Execution Agent。Droplet とは、Cloud Foundry に push した、アプリケーション等をアーカイブしたもの)を複数起動することができるかの確認を行います。</p>
<pre>cf@ubuntu:~$ ./cloudfoundry/vcap/dea/bin/dea -h
Usage: dea [OPTIONS]
    -c, --config [ARG]               Configuration File
    -s, --secure                     Secure Application Environment
        --disable_dir_cleanup        Don't cleanup App directories
    -h, --help                       Help
cf@ubuntu:~$</pre>
<p>DEA の起動オプションで設定ファイルを指定することができます。指定がなければ cloudfoundry/vcap/dea/config/dea.yml を読み込むようになっています。また、最初から cloudfoundry/vcap/dea/config/dea2.yml が用意されているので、別途そちらを指定して、もう1つの DEA を起動することができるようです。</p>
<p>dea.yml と dea2.yml の主な差異は、次の通りです。</p>
<p>dea.yml</p>
<pre>base_dir: /var/vcap.local/dea
filer_port: 12345
pid: /var/vcap/sys/run/dea.pid</pre>
<p>dea2.yml</p>
<pre>base_dir:  /var/vcap.local/dea2
filer_port: 12346
pid: /var/vcap/sys/run/dea2.pid</pre>
<p>まず、vcap start で起動した1つ目の DEA のプロセスを確認します。</p>
<pre>cf@ubuntu:~/cloudfoundry/vcap/bin$ ps axuwwwf | awk '$2="";$3="";$4="";$5="";$6="";$7="";$8="";$9="";$10="";{print}' | grep "[ d]ea"
cf          ruby /home/cf/cloudfoundry/vcap/dea/bin/dea
cf@ubuntu:~/cloudfoundry/vcap/bin$</pre>
<p>次に、dea2.yml を指定して、2つ目の DEA を起動します。</p>
<pre>cf@ubuntu:~$ cd cloudfoundry/vcap/dea
Using /home/cf/.rvm/gems/ruby-1.9.2-p180
cf@ubuntu:~/cloudfoundry/vcap/dea$ ./bin/dea -c config/dea2.yml
[2012-02-03 23:00:34] dea - 2449 d617 6646   INFO -- Starting VCAP DEA (0.99)
[2012-02-03 23:00:34] dea - 2449 d617 6646   INFO -- Pid file: /var/vcap/sys/run/dea2.pid
[2012-02-03 23:00:34] dea - 2449 d617 6646   INFO -- Using ruby @ /home/cf/.rvm/rubies/ruby-1.9.2-p180/bin/ruby
[2012-02-03 23:00:34] dea - 2449 d617 6646   INFO -- Checking runtimes:
[2012-02-03 23:00:34] dea - 2449 d617 6646   INFO --   ruby18:    OK
[2012-02-03 23:00:34] dea - 2449 d617 6646   INFO --   ruby19:    OK
[2012-02-03 23:00:34] dea - 2449 d617 6646   INFO --   node:      OK
[2012-02-03 23:00:34] dea - 2449 d617 6646   INFO --   java:      OK
[2012-02-03 23:00:34] dea - 2449 d617 6646   INFO -- Using network: 127.0.0.1
[2012-02-03 23:00:34] dea - 2449 d617 6646   INFO -- Socket Limit:1024
[2012-02-03 23:00:34] dea - 2449 d617 6646   INFO -- Max Memory set to 4.0G
[2012-02-03 23:00:34] dea - 2449 d617 6646   INFO -- Utilizing 1 cpu cores
[2012-02-03 23:00:34] dea - 2449 d617 6646   INFO -- Allowing multi-tenancy
[2012-02-03 23:00:34] dea - 2449 d617 6646   INFO -- Using directory: /var/vcap.local/dea2/
[2012-02-03 23:00:34] dea - 2449 d617 6646   INFO -- File service started on port: 12346
	:</pre>
<p>これで合計 2つの DEA が起動しました。</p>
<p>この状態で、テストアプリケーションを push します。インスタンスを 2つに指定し、自動起動しないようにしておきます。</p>
<pre>cf@ubuntu:~/env$ vmc push env --instances 2 --mem 32M --url env.vcap.me -n --no-start
Creating Application: OK
Uploading Application:
  Checking for available resources: OK
  Packing application: OK
  Uploading (0K): OK
Push Status: OK

cf@ubuntu:~/env$ 

cf@ubuntu:~/env$ vmc apps

+-------------+----+---------+-------------+----------+
| Application | #  | Health  | URLS        | Services |
+-------------+----+---------+-------------+----------+
| env         | 2  | STOPPED | env.vcap.me |          |
+-------------+----+---------+-------------+----------+

cf@ubuntu:~/env$</pre>
<p>テストアプリケーションを起動します。</p>
<pre>cf@ubuntu:~/env$ vmc start env
Staging Application: OK
Starting Application: OK                                                        

cf@ubuntu:~/env$</pre>
<p>2つの DEA に、それぞれ 1つずつインスタンスが割り当てられました。</p>
<pre>cf@ubuntu:~/env$ ps auxwwwf  | grep -C 3 "[d]ea" | awk '$2="";$3="";$4="";$5="";$6="";$7="";$8="";$9="";$10="";{print}'
root          \_ sshd: cf [priv]
cf          \_ sshd: cf@pts/1
cf          \_ -bash
cf          \_ ruby ./bin/dea -c config/dea2.yml
cf          \_ /bin/sh
cf          \_ /bin/bash ./startup -p 34415
cf          \_ /usr/bin/ruby env.rb -p 34415
--
cf          /usr/bin/redis-server /home/cf/cloudfoundry/vcap/bin/config/redis-server.conf
cf          ruby /home/cf/cloudfoundry/vcap/router/bin/router
cf          ruby ./cloud_controller
cf          ruby /home/cf/cloudfoundry/vcap/dea/bin/dea
cf          \_ /bin/sh
cf          \_ /bin/bash ./startup -p 55662
cf          \_ /usr/bin/ruby env.rb -p 55662
cf@ubuntu:~/env$</pre>
<p>テストアプリケーションにアクセスしてみると、DEA 2つにそれぞれ適当に振り分けられている様子がわかります。</p>
<pre>cf@ubuntu:~/env$ w3m -dump env.vcap.me
XXXXX Hello from the Cloud! via: 127.0.0.1:55662

cf@ubuntu:~/env$ w3m -dump env.vcap.me
XXXXX Hello from the Cloud! via: 127.0.0.1:34415

cf@ubuntu:~/env$ w3m -dump env.vcap.me
XXXXX Hello from the Cloud! via: 127.0.0.1:55662

cf@ubuntu:~/env$ w3m -dump env.vcap.me
XXXXX Hello from the Cloud! via: 127.0.0.1:34415

cf@ubuntu:~/env$ w3m -dump env.vcap.me
XXXXX Hello from the Cloud! via: 127.0.0.1:55662

cf@ubuntu:~/env$</pre>
<p>この状態で、片方の DEA を kill してみます。</p>
<pre>cf@ubuntu:~/env$ ps auxwwwf | grep "[ d]ea" | awk '$3="";$4="";$5="";$6="";$7="";$8="";$9="";$10="";{print}'
cf 2449         \_ ruby ./bin/dea -c config/dea2.yml
cf 1441         ruby /home/cf/cloudfoundry/vcap/dea/bin/dea
cf@ubuntu:~/env$ 

cf@ubuntu:~/env$ kill 1441
cf@ubuntu:~/env$ 

cf@ubuntu:~/env$ ps auxwwwf | grep "[ d]ea" | awk '$3="";$4="";$5="";$6="";$7="";$8="";$9="";$10="";{print}'
cf 2449         \_ ruby ./bin/dea -c config/dea2.yml
cf@ubuntu:~/env$</pre>
<p>kill された DEA で起動していたインスタンスが消滅し、もう片方の DEA で同じポートで起動されました。</p>
<pre>cf@ubuntu:~/env$ ps auxwwwf | grep -C 5 "[ d]ea" | awk '$3="";$4="";$5="";$6="";$7="";$8="";$9="";$10="";{print}'
cf 4685         | \_ grep --color=auto -C 5 [ d]ea
cf 4686         | \_ awk $3="";$4="";$5="";$6="";$7="";$8="";$9="";$10="";{print}
root 1987         \_ sshd: cf [priv]
cf 2065         \_ sshd: cf@pts/1
cf 2066         \_ -bash
cf 2449         \_ ruby ./bin/dea -c config/dea2.yml
cf 3181         \_ /bin/sh
cf 3189         | \_ /bin/bash ./startup -p 34415
cf 3191         | \_ /usr/bin/ruby env.rb -p 34415
cf 4542         \_ /bin/sh
cf 4544         \_ /bin/bash ./startup -p 56183
cf@ubuntu:~/env$</pre>
<pre>cf@ubuntu:~/env$ w3m -dump env.vcap.me
XXXXX Hello from the Cloud! via: 127.0.0.1:56183

cf@ubuntu:~/env$ w3m -dump env.vcap.me
XXXXX Hello from the Cloud! via: 127.0.0.1:34415

cf@ubuntu:~/env$ w3m -dump env.vcap.me
XXXXX Hello from the Cloud! via: 127.0.0.1:56183

cf@ubuntu:~/env$ w3m -dump env.vcap.me
XXXXX Hello from the Cloud! via: 127.0.0.1:34415

cf@ubuntu:~/env$ w3m -dump env.vcap.me
XXXXX Hello from the Cloud! via: 127.0.0.1:56183

cf@ubuntu:~/env$</pre>
<p>なお、kill した DEA を再度起動しても、そちらにインスタンスが移動することはありません。</p>
<pre>cf@ubuntu:~$ cd cloudfoundry/vcap/dea
Using /home/cf/.rvm/gems/ruby-1.9.2-p180
cf@ubuntu:~/cloudfoundry/vcap/dea$ ./bin/dea
[2012-02-03 23:15:04] dea - 5283 b7c1 c148   INFO -- Starting VCAP DEA (0.99)
[2012-02-03 23:15:04] dea - 5283 b7c1 c148   INFO -- Pid file: /var/vcap/sys/run/dea.pid
[2012-02-03 23:15:04] dea - 5283 b7c1 c148   INFO -- Using ruby @ /home/cf/.rvm/rubies/ruby-1.9.2-p180/bin/ruby
[2012-02-03 23:15:04] dea - 5283 b7c1 c148   INFO -- Checking runtimes:
[2012-02-03 23:15:04] dea - 5283 b7c1 c148   INFO --   ruby18:    OK
[2012-02-03 23:15:04] dea - 5283 b7c1 c148   INFO --   ruby19:    OK
[2012-02-03 23:15:04] dea - 5283 b7c1 c148   INFO --   node:      OK
[2012-02-03 23:15:04] dea - 5283 b7c1 c148   INFO --   java:      OK
[2012-02-03 23:15:04] dea - 5283 b7c1 c148   INFO --   php:       OK
[2012-02-03 23:15:04] dea - 5283 b7c1 c148   INFO --   erlangR14B02: OK
[2012-02-03 23:15:04] dea - 5283 b7c1 c148   INFO --   python26:  OK
[2012-02-03 23:15:04] dea - 5283 b7c1 c148   INFO -- Using network: 127.0.0.1
[2012-02-03 23:15:04] dea - 5283 b7c1 c148   INFO -- Socket Limit:1024
[2012-02-03 23:15:04] dea - 5283 b7c1 c148   INFO -- Max Memory set to 4.0G
[2012-02-03 23:15:04] dea - 5283 b7c1 c148   INFO -- Utilizing 1 cpu cores
[2012-02-03 23:15:04] dea - 5283 b7c1 c148   INFO -- Allowing multi-tenancy
[2012-02-03 23:15:04] dea - 5283 b7c1 c148   INFO -- Using directory: /var/vcap.local/dea/
[2012-02-03 23:15:04] dea - 5283 b7c1 c148   INFO -- File service started on port: 12345
[2012-02-03 23:15:04] dea - 5283 b7c1 c148  DEBUG -- Took 0.000407542 to snapshot application state.</pre>
<p>インスタンスを 2つ持った DEA を kill すると、2つのインスタンスはもう片方の DEA で起動し直されます。</p>
<pre>cf@ubuntu:~/env$ ps auxwwwf | grep -C 5 "[ d]ea" | awk '$3="";$4="";$5="";$6="";$7="";$8="";$9="";$10="";{print}'
cf 2065         | \_ sshd: cf@pts/1
cf 2066         | \_ -bash
root 4940         \_ sshd: cf [priv]
cf 5022         \_ sshd: cf@pts/2
cf 5023         \_ -bash
cf 5283         \_ ruby ./bin/dea
cf 5539         \_ /bin/sh
cf 5552         | \_ /bin/bash ./startup -p 58021
cf 5555         | \_ /usr/bin/ruby env.rb -p 58021
cf 5564         \_ /bin/sh
cf 5566         \_ /bin/bash ./startup -p 33825
cf@ubuntu:~/env$</pre>
]]></content:encoded>
			<wfw:commentRss>http://www.creationline.com/lab/1684/feed</wfw:commentRss>
		<slash:comments>0</slash:comments>
		</item>
		<item>
		<title>シトリックスとクリエーションラインがクラウド事業において提携</title>
		<link>http://www.creationline.com/news/press/1764</link>
		<comments>http://www.creationline.com/news/press/1764#comments</comments>
		<pubDate>Tue, 24 Apr 2012 01:10:49 +0000</pubDate>
		<dc:creator>admin</dc:creator>
				<category><![CDATA[PRESS]]></category>

		<guid isPermaLink="false">http://www.creationline.com/?p=1764</guid>
		<description><![CDATA[2012年4月24日 シトリックスとクリエーションラインがクラウド事業において提携 CloudStackとNetScalerを熟知したシトリックス認定技術者を倍増し お客様に最良なクラウドサービスソリューションを提供 シトリックス・システムズ・ジャパン株式会社（東京都千代田区、代表取締役社長：マイケル キング）とクリエーションライン株式会社（東京都千代田区、代表取締役社長：安田 忠弘）は、本日、クラウド市場の急激な拡大を見据え、クラウド事業において提携したことを発表しました。 今回の提携に基づきクリエーションラインは、シトリックスが提供するクラウド管理ソフトウェアであるCitrix® CloudStack™、アプリケーションやクラウドサービスの配信を最適化するCitrix NetScaler®の両方を熟知したシトリックス認定技術者を2012年中に倍増し、通信事業者、データセンターおよびシトリックス製品を取り扱うシステムインテグレーターなどとのビジネス支援を通じて、クラウドソリューションの普及を強力にサポートしていきます。 シトリックスは、クラウドや管理システムの構築に豊富なインテグレーション実績を有するクリエーションラインとの連携を強化し、CloudStackとNetScalerを中核に据えたクラウドソリューションの設計、構築、運用保守およびコンサルティングまでを包含した統合的なクラウドサービスソリューションを提供します。 ・両社からのコメント PCの時代からクラウドの時代へと、ITの活用は急激に移行している今、CloudStackの設計、構築に豊富な実績を持つクリエーションライン社との提携は、不可欠でした。CloudStackとNetScalerを中核に据え、さまざまなサービスを包含したクラウドサービスソリューションの提供を通じて、クラウドの活用を積極的に推進して参ります。 シトリックス・システムズ・ジャパン株式会社 代表取締役社長 マイケル キング 今回の事業提携を大変嬉しく思っております。先日CloudStackが、Apache Software Foundationに寄贈されるなど、クラウド業界におけるシトリックス社の位置付けは世界的にも非常に重要になっております。今回の事業提携は弊社のこれまで行なってきた活動が、高く評価されたものと考えており、発表されたようにシトリックス技術者を増員し、総合的なクラウドサービスソリューションを展開していきたいと考えております。 クリエーションライン株式会社 代表取締役社長 安田 忠弘 Citrix®、Citrix NetScaler®、CloudStack™は、Citrix Systems, Inc.またはその子会社の商標であり、米国特許商標局およびその他の国において登録されている可能性があります。その他の社名、商品名は各所有者の商標または登録商標です。 Citrix Systems, Incについて Citrix Systems, Inc.（NASDAQ:CTXS）は、クラウドの時代においてどのように人々が働き、ビジネスを拡大し、ITシステムと協調するかを変革する企業です。市場をリードするクラウド、コラボレーション、ネットワーキングおよび仮想化技術に基づき、シトリックスはテレワークによるワークスタイルやクラウドサービスの原動力として、26万社のお客様のITシステムを簡素化し、より利用しやすいものに変革しています。シトリックスの製品とサービスは全インターネットユーザーの75パーセントが毎日利用しており、100か国、1万社を超える企業とパートナー関係を結んでいます。2011年度の年間売上高は22億1,000万ドルでした。シトリックスの詳細についてはwww.citrix.comをご覧ください。 クリエーションラインについて クリエーションラインは、CloudStackに関する設計・構築を請け負った数多くの実績を有しています。また、enStratus、Scalrの国内唯一のパートナーでもあり、クラウドインテグレーションを提供する高度な技術者集団です。 経済産業省「平成23年度医療・介護等関連分野における規制改革・産業創出調査研究事業（医療・介護周辺サービス産業創出調査事業）」や独立行政法人情報処理推進機構（IPA）からの受託事業として「クラウド運用管理ツールの基本機能、性能、信頼性評価」を実施した実績を持っています。 以上 ■本件に関する報道関係問合せ先 シトリックス・システムズ・ジャパン株式会社 広報 担当：新井原 TEL：03-4577-5893 E-mail：pr_mktg@citrix.co.jp ヒルアンドノウルトン株式会社（広報代理） 担当：南宮・藤芳 TEL：03-4520-5812 E-mail：citrix.pr@hillandknowlton.co.jp クリエーションライン株式会社 担当：上村 TEL：03-5829-8355 E-mail：info@creationline.com]]></description>
			<content:encoded><![CDATA[<p>2012年4月24日</p>
<p><strong>シトリックスとクリエーションラインがクラウド事業において提携<br />
</strong><br />
CloudStackとNetScalerを熟知したシトリックス認定技術者を倍増し<br />
お客様に最良なクラウドサービスソリューションを提供</p>
<p><a href="http://www.citrix.co.jp/" target=”_blank”>シトリックス・システムズ・ジャパン株式会社</a>（東京都千代田区、代表取締役社長：マイケル キング）とクリエーションライン株式会社（東京都千代田区、代表取締役社長：安田 忠弘）は、本日、クラウド市場の急激な拡大を見据え、クラウド事業において提携したことを発表しました。</p>
<p>今回の提携に基づきクリエーションラインは、シトリックスが提供するクラウド管理ソフトウェアであるCitrix® CloudStack™、アプリケーションやクラウドサービスの配信を最適化するCitrix NetScaler®の両方を熟知したシトリックス認定技術者を2012年中に倍増し、通信事業者、データセンターおよびシトリックス製品を取り扱うシステムインテグレーターなどとのビジネス支援を通じて、クラウドソリューションの普及を強力にサポートしていきます。</p>
<p>シトリックスは、クラウドや管理システムの構築に豊富なインテグレーション実績を有するクリエーションラインとの連携を強化し、CloudStackとNetScalerを中核に据えたクラウドソリューションの設計、構築、運用保守およびコンサルティングまでを包含した統合的なクラウドサービスソリューションを提供します。</p>
<p>・両社からのコメント<br />
PCの時代からクラウドの時代へと、ITの活用は急激に移行している今、CloudStackの設計、構築に豊富な実績を持つクリエーションライン社との提携は、不可欠でした。CloudStackとNetScalerを中核に据え、さまざまなサービスを包含したクラウドサービスソリューションの提供を通じて、クラウドの活用を積極的に推進して参ります。<br />
シトリックス・システムズ・ジャパン株式会社 代表取締役社長 マイケル キング</p>
<p>今回の事業提携を大変嬉しく思っております。先日CloudStackが、Apache Software Foundationに寄贈されるなど、クラウド業界におけるシトリックス社の位置付けは世界的にも非常に重要になっております。今回の事業提携は弊社のこれまで行なってきた活動が、高く評価されたものと考えており、発表されたようにシトリックス技術者を増員し、総合的なクラウドサービスソリューションを展開していきたいと考えております。<br />
クリエーションライン株式会社 代表取締役社長 安田 忠弘</p>
<p>Citrix®、Citrix NetScaler®、CloudStack™は、Citrix Systems, Inc.またはその子会社の商標であり、米国特許商標局およびその他の国において登録されている可能性があります。その他の社名、商品名は各所有者の商標または登録商標です。</p>
<p><strong>Citrix Systems, Incについて<br />
</strong>Citrix Systems, Inc.（NASDAQ:CTXS）は、クラウドの時代においてどのように人々が働き、ビジネスを拡大し、ITシステムと協調するかを変革する企業です。市場をリードするクラウド、コラボレーション、ネットワーキングおよび仮想化技術に基づき、シトリックスはテレワークによるワークスタイルやクラウドサービスの原動力として、26万社のお客様のITシステムを簡素化し、より利用しやすいものに変革しています。シトリックスの製品とサービスは全インターネットユーザーの75パーセントが毎日利用しており、100か国、1万社を超える企業とパートナー関係を結んでいます。2011年度の年間売上高は22億1,000万ドルでした。シトリックスの詳細についてはwww.citrix.comをご覧ください。</p>
<p><strong>クリエーションラインについて<br />
</strong>クリエーションラインは、CloudStackに関する設計・構築を請け負った数多くの実績を有しています。また、enStratus、Scalrの国内唯一のパートナーでもあり、クラウドインテグレーションを提供する高度な技術者集団です。<br />
経済産業省「平成23年度医療・介護等関連分野における規制改革・産業創出調査研究事業（医療・介護周辺サービス産業創出調査事業）」や独立行政法人情報処理推進機構（IPA）からの受託事業として「クラウド運用管理ツールの基本機能、性能、信頼性評価」を実施した実績を持っています。</p>
<p>以上</p>
<p>■本件に関する報道関係問合せ先</p>
<p>シトリックス・システムズ・ジャパン株式会社<br />
広報 担当：新井原<br />
TEL：03-4577-5893<br />
E-mail：pr_mktg@citrix.co.jp</p>
<p>ヒルアンドノウルトン株式会社（広報代理）<br />
担当：南宮・藤芳<br />
TEL：03-4520-5812<br />
E-mail：citrix.pr@hillandknowlton.co.jp</p>
<p>クリエーションライン株式会社<br />
 担当：上村<br />
TEL：03-5829-8355<br />
E-mail：info@creationline.com</p>
]]></content:encoded>
			<wfw:commentRss>http://www.creationline.com/news/press/1764/feed</wfw:commentRss>
		<slash:comments>0</slash:comments>
		</item>
		<item>
		<title>Chefを使ってみよう [3]</title>
		<link>http://www.creationline.com/lab/1751</link>
		<comments>http://www.creationline.com/lab/1751#comments</comments>
		<pubDate>Sun, 22 Apr 2012 06:07:49 +0000</pubDate>
		<dc:creator>higuchi</dc:creator>
				<category><![CDATA[CL Lab]]></category>

		<guid isPermaLink="false">http://www.creationline.com/?p=1751</guid>
		<description><![CDATA[Chef Soloを使ってみよう Chef SoloとはChef ServerなしでCookbookを利用するためのツールです。インストールや管理に手間のかかるChef Serverを準備する必要がなく、単一のホストでChefを利用することが可能になります。その反面、Chef Soloを実行するホスト上にChefを利用するための情報を揃えておく必要があります。 chef-soloホストの準備 Chef Soloを実行するホストをchef-soloホストとします。これまで同様、chef-soloホストは新規にUbuntu Server 11.10をインストールし、Opscode社のaptレポジトリの設定までを行います。 chef-soloコマンドはchefパッケージに入っているのでインストールします。 root@chef-solo:~# aptitude install chef The following NEW packages will be installed: chef libabstract-ruby1.8{a} libbunny-ruby{a} libbunny-ruby1.8{a} liberubis-ruby{a} liberubis-ruby1.8{a} libhighline-ruby{a} libjson-ruby{a} libmixlib-authentication-ruby{a} libmixlib-authentication-ruby1.8{a} libmixlib-cli-ruby{a} libmixlib-cli-ruby1.8{a} libmixlib-config-ruby{a} libmixlib-config-ruby1.8{a} libmixlib-log-ruby{a} libmixlib-log-ruby1.8{a} libmoneta-ruby{a} libmoneta-ruby1.8{a} libnet-ssh-multi-ruby{a} libnet-ssh2-ruby{a} libohai-ruby{a} libohai-ruby1.8{a} libpolyglot-ruby{a} libreadline5{a} librestclient-ruby{a} libruby1.8{a} libsystemu-ruby1.8{a} libtreetop-ruby{a} libuuidtools-ruby{a} libuuidtools-ruby1.8{a} libyajl-ruby{a} [...]]]></description>
			<content:encoded><![CDATA[<h2>Chef Soloを使ってみよう</h2>
<p>Chef SoloとはChef ServerなしでCookbookを利用するためのツールです。インストールや管理に手間のかかるChef Serverを準備する必要がなく、単一のホストでChefを利用することが可能になります。その反面、Chef Soloを実行するホスト上にChefを利用するための情報を揃えておく必要があります。</p>
<h2>chef-soloホストの準備</h2>
<p>Chef Soloを実行するホストをchef-soloホストとします。これまで同様、chef-soloホストは新規にUbuntu Server 11.10をインストールし、Opscode社のaptレポジトリの設定までを行います。</p>
<p>chef-soloコマンドはchefパッケージに入っているのでインストールします。</p>
<pre>root@chef-solo:~# aptitude install chef
The following NEW packages will be installed:
  chef libabstract-ruby1.8{a} libbunny-ruby{a} libbunny-ruby1.8{a}
  liberubis-ruby{a} liberubis-ruby1.8{a} libhighline-ruby{a}
  libjson-ruby{a} libmixlib-authentication-ruby{a}
  libmixlib-authentication-ruby1.8{a} libmixlib-cli-ruby{a}
  libmixlib-cli-ruby1.8{a} libmixlib-config-ruby{a}
  libmixlib-config-ruby1.8{a} libmixlib-log-ruby{a}
  libmixlib-log-ruby1.8{a} libmoneta-ruby{a} libmoneta-ruby1.8{a}
  libnet-ssh-multi-ruby{a} libnet-ssh2-ruby{a} libohai-ruby{a}
  libohai-ruby1.8{a} libpolyglot-ruby{a} libreadline5{a}
  librestclient-ruby{a} libruby1.8{a} libsystemu-ruby1.8{a}
  libtreetop-ruby{a} libuuidtools-ruby{a} libuuidtools-ruby1.8{a}
  libyajl-ruby{a} ohai{a} ruby-highline{a} ruby-ipaddress{a} ruby-json{a}
  ruby-mime-types{a} ruby-net-ssh{a} ruby-net-ssh-gateway{a}
  ruby-net-ssh-multi{a} ruby-rest-client{a} ruby1.8{a} ruby1.8-dev{a}
  rubygems{a}
0 packages upgraded, 43 newly installed, 0 to remove and 0 not upgraded.
Need to get 0 B/3,932 kB of archives. After unpacking 22.3 MB will be used.
Do you want to continue? [Y/n/?] y
	:
	:
	:
root@chef-solo:~#</pre>
<pre>This is the full URI that clients will use to connect to the
server.
.
This will be used in /etc/chef/client.rb as 'chef_server_url'.
URL of Chef Server (e.g., http://chef.example.com:4000):</pre>
<p>chef-soloコマンドはChef Serverを利用しないので、chef_server_urlの設定は空欄のままにします。</p>
<pre>root@chef-solo:~# ls -laR /etc/chef
/etc/chef:
合計 8
drwxr-xr-x  2 root root 4096 2012-04-16 22:01 .
drwxr-xr-x 82 root root 4096 2012-04-16 22:01 ..
-rw-r-----  1 root root    0 2012-04-16 22:01 client.rb
root@chef-solo:~#</pre>
<p>このようにchef-clientプロセスの設定ファイルは空ですが、chef-clientプロセスが起動しているので停止しておきます。</p>
<pre>root@chef-solo:~# ps auxwwwf | grep '[ c]hef'
root      3995  0.0  1.3  95376 26736 ?        S    22:01   0:00 /usr/bin/ruby1.8 /usr/bin/chef-client -d -P /var/run/chef/client.pid -L /var/log/chef/client.log -c /etc/chef/client.rb -i 1800 -s 20
root@chef-solo:~#</pre>
<pre>root@chef-solo:~# /etc/init.d/chef-client stop
 * Stopping chef-client chef-client
   ...done.
root@chef-solo:~#</pre>
<p>さらに、自動起動しないように設定します。</p>
<pre>root@chef-solo:~# ls -l /etc/rc*/*chef-client
lrwxrwxrwx 1 root root 21 2012-04-16 22:01 /etc/rc0.d/K02chef-client -&gt; ../init.d/chef-client
lrwxrwxrwx 1 root root 21 2012-04-16 22:01 /etc/rc1.d/K02chef-client -&gt; ../init.d/chef-client
lrwxrwxrwx 1 root root 21 2012-04-16 22:01 /etc/rc2.d/S99chef-client -&gt; ../init.d/chef-client
lrwxrwxrwx 1 root root 21 2012-04-16 22:01 /etc/rc3.d/S99chef-client -&gt; ../init.d/chef-client
lrwxrwxrwx 1 root root 21 2012-04-16 22:01 /etc/rc4.d/S99chef-client -&gt; ../init.d/chef-client
lrwxrwxrwx 1 root root 21 2012-04-16 22:01 /etc/rc5.d/S99chef-client -&gt; ../init.d/chef-client
lrwxrwxrwx 1 root root 21 2012-04-16 22:01 /etc/rc6.d/K02chef-client -&gt; ../init.d/chef-client
root@chef-solo:~#</pre>
<pre>root@chef-solo:~# update-rc.d -f chef-client remove
 Removing any system startup links for /etc/init.d/chef-client ...
   /etc/rc0.d/K02chef-client
   /etc/rc1.d/K02chef-client
   /etc/rc2.d/S99chef-client
   /etc/rc3.d/S99chef-client
   /etc/rc4.d/S99chef-client
   /etc/rc5.d/S99chef-client
   /etc/rc6.d/K02chef-client
root@chef-solo:~#</pre>
<h2>chef-soloコマンドの設定</h2>
<p>chef-soloコマンド用の設定ファイルを準備します。</p>
<pre>root@chef-solo:~# cat &gt; /etc/chef/solo.rb
file_cache_path "/tmp"
cookbook_path "/root/chef-solo/cookbooks"
root@chef-solo:~#</pre>
<p>Cookbookを格納するディレクトリを設定ファイルに記載した位置に作成します。</p>
<pre>root@chef-solo:~# mkdir -p /root/chef-solo/cookbooks
root@chef-solo:~#</pre>
<p>設定を行っていませんがknifeコマンドは使用できるので、Cookbookの雛形を作成します。</p>
<pre>root@chef-solo:~# knife cookbook create sample_solo -o /root/chef-solo/cookbooks
WARNING: No knife configuration file found
** Creating cookbook sample_solo
** Creating README for cookbook: sample_solo
** Creating metadata for cookbook: sample_solo
root@chef-solo:~#</pre>
<p>/tmpにファイルを書き出すRecipeを作成します。</p>
<pre>root@chef-solo:~# vi /root/chef-solo/cookbooks/sample_solo/recipes/default.rb
#
# Cookbook Name:: sample_solo
# Recipe:: default
#

template '/tmp/chef_solo-test' do
  source 'chef_solo-test.erb'
  mode 0644
end
root@chef-solo:~#</pre>
<pre>root@chef-solo:~# vi /root/chef-solo/cookbooks/sample_solo/templates/default/chef_solo-test.erb
Welcome to Chef Solo!

CPU   :&lt;%= node[:cpu][:"0"][:model_name] %&gt;
Memory:&lt;%= node[:memory][:total] %&gt;
OS    :&lt;%= node[:platform] %&gt; &lt;%= node[:platform_version] %&gt;
root@chef-solo:~#</pre>
<p>Chef Serverがある場合は、実行するRecipeとChef Nodeをknifeコマンドによって結びつけていましたが、Chef Soloの場合は実行するRecipeをJSON形式のファイルで定義します。</p>
<pre>root@chef-solo:~# cat &gt; /root/chef-solo/chef-solo.json
{
	"run_list": [ "recipe[sample_solo]" ]
}
root@chef-solo:~#</pre>
<h2>chef-soloコマンドの実行</h2>
<p>準備ができたところでchef-soloコマンドを実行します。-jオプションで実行するRecipeを定義したJSONファイルを与えます。また、Cookbookへのパスは先に作成した/etc/chef/solo.rbでの設定が用いられます。</p>
<pre>root@chef-solo:~# chef-solo -j /root/chef-solo/chef-solo.json
[Mon, 16 Apr 2012 22:31:24 +0900] INFO: *** Chef 0.10.8 ***
[Mon, 16 Apr 2012 22:31:24 +0900] INFO: Setting the run_list to ["recipe[sample_solo]"] from JSON
[Mon, 16 Apr 2012 22:31:24 +0900] INFO: Run List is [recipe[sample_solo]]
[Mon, 16 Apr 2012 22:31:24 +0900] INFO: Run List expands to [sample_solo]
[Mon, 16 Apr 2012 22:31:24 +0900] INFO: Starting Chef Run for chef-solo
[Mon, 16 Apr 2012 22:31:24 +0900] INFO: Running start handlers
[Mon, 16 Apr 2012 22:31:24 +0900] INFO: Start handlers complete.
[Mon, 16 Apr 2012 22:31:24 +0900] INFO: Processing template[/tmp/chef_solo-test] action create (sample_solo::default line 6)
[Mon, 16 Apr 2012 22:31:24 +0900] INFO: template[/tmp/chef_solo-test] mode changed to 644
[Mon, 16 Apr 2012 22:31:24 +0900] INFO: template[/tmp/chef_solo-test] updated content
[Mon, 16 Apr 2012 22:31:24 +0900] INFO: Chef Run complete in 0.00459 seconds
[Mon, 16 Apr 2012 22:31:24 +0900] INFO: Running report handlers
[Mon, 16 Apr 2012 22:31:24 +0900] INFO: Report handlers complete
root@chef-solo:~#</pre>
<p>このようにRecipeが実行され、/tmpにファイルが生成されました。</p>
<pre>root@chef-solo:~# ls -la /tmp/
合計 12
drwxrwxrwt  2 root root 4096 2012-04-16 22:31 .
drwxr-xr-x 23 root root 4096 2012-04-02 21:29 ..
-rw-r--r--  1 root root   96 2012-04-16 22:31 chef_solo-test
root@chef-solo:~# cat /tmp/chef_solo-test
Welcome to Chef Solo!

CPU   :QEMU Virtual CPU version 1.0
Memory:2056408kB
OS    :ubuntu 11.10
root@chef-solo:~#</pre>
<p>なお、chef-soloコマンドはデーモンプロセスとして起動することや、遠隔のCookbookを参照することも可能です。詳細はman pageやOpscode社のドキュメントを参照してください。</p>
]]></content:encoded>
			<wfw:commentRss>http://www.creationline.com/lab/1751/feed</wfw:commentRss>
		<slash:comments>0</slash:comments>
		</item>
		<item>
		<title>Chefを使ってみよう [2]</title>
		<link>http://www.creationline.com/lab/1742</link>
		<comments>http://www.creationline.com/lab/1742#comments</comments>
		<pubDate>Mon, 16 Apr 2012 02:40:24 +0000</pubDate>
		<dc:creator>higuchi</dc:creator>
				<category><![CDATA[CL Lab]]></category>

		<guid isPermaLink="false">http://www.creationline.com/?p=1742</guid>
		<description><![CDATA[Server, Node, Workstationの3台構成 前回はchef-allホスト1台ですべての役割を負っていましたが、今回はServer, Node, Workstationの役割をそれぞれ1台に分割します。 ホスト名 IPアドレス 一般ユーザ chef-server 192.168.24.210 admin chef-node 192.168.24.211 nodeuser chef-workstation 192.168.24.212 worker chef-serverホストは前回のchef-allホストを改名してそのまま利用します。 chef-nodeホストとchef-workstationホストは新規にUbuntu Server 11.10をインストールし、Opscode社のaptレポジトリの設定までを行います。 chef-nodeホストの準備 chef-nodeホストにChefのClientをインストールします。 root@chef-node:~# aptitude install chef The following NEW packages will be installed: chef libabstract-ruby1.8{a} libbunny-ruby{a} libbunny-ruby1.8{a} liberubis-ruby{a} liberubis-ruby1.8{a} libhighline-ruby{a} libjson-ruby{a} libmixlib-authentication-ruby{a} libmixlib-authentication-ruby1.8{a} libmixlib-cli-ruby{a} libmixlib-cli-ruby1.8{a} libmixlib-config-ruby{a} libmixlib-config-ruby1.8{a} libmixlib-log-ruby{a} libmixlib-log-ruby1.8{a} libmoneta-ruby{a} libmoneta-ruby1.8{a} libnet-ssh-multi-ruby{a} libnet-ssh2-ruby{a} [...]]]></description>
			<content:encoded><![CDATA[<h2>Server, Node, Workstationの3台構成</h2>
<p>前回はchef-allホスト1台ですべての役割を負っていましたが、今回はServer, Node, Workstationの役割をそれぞれ1台に分割します。</p>
<table>
<tbody>
<tr>
<td>ホスト名</td>
<td>IPアドレス</td>
<td>一般ユーザ</td>
</tr>
<tr>
<td>chef-server</td>
<td>192.168.24.210</td>
<td>admin</td>
</tr>
<tr>
<td>chef-node</td>
<td>192.168.24.211</td>
<td>nodeuser</td>
</tr>
<tr>
<td>chef-workstation</td>
<td>192.168.24.212</td>
<td>worker</td>
</tr>
</tbody>
</table>
<p>chef-serverホストは前回のchef-allホストを改名してそのまま利用します。</p>
<p>chef-nodeホストとchef-workstationホストは新規にUbuntu Server 11.10をインストールし、Opscode社のaptレポジトリの設定までを行います。</p>
<h2>chef-nodeホストの準備</h2>
<p>chef-nodeホストにChefのClientをインストールします。</p>
<pre>root@chef-node:~# aptitude install chef
The following NEW packages will be installed:
  chef libabstract-ruby1.8{a} libbunny-ruby{a} libbunny-ruby1.8{a}
  liberubis-ruby{a} liberubis-ruby1.8{a} libhighline-ruby{a}
  libjson-ruby{a} libmixlib-authentication-ruby{a}
  libmixlib-authentication-ruby1.8{a} libmixlib-cli-ruby{a}
  libmixlib-cli-ruby1.8{a} libmixlib-config-ruby{a}
  libmixlib-config-ruby1.8{a} libmixlib-log-ruby{a}
  libmixlib-log-ruby1.8{a} libmoneta-ruby{a} libmoneta-ruby1.8{a}
  libnet-ssh-multi-ruby{a} libnet-ssh2-ruby{a} libohai-ruby{a}
  libohai-ruby1.8{a} libpolyglot-ruby{a} libreadline5{a}
  librestclient-ruby{a} libruby1.8{a} libsystemu-ruby1.8{a}
  libtreetop-ruby{a} libuuidtools-ruby{a} libuuidtools-ruby1.8{a}
  libyajl-ruby{a} ohai{a} ruby-highline{a} ruby-ipaddress{a} ruby-json{a}
  ruby-mime-types{a} ruby-net-ssh{a} ruby-net-ssh-gateway{a}
  ruby-net-ssh-multi{a} ruby-rest-client{a} ruby1.8{a} ruby1.8-dev{a}
  rubygems{a}
0 packages upgraded, 43 newly installed, 0 to remove and 0 not upgraded.
Need to get 0 B/3,932 kB of archives. After unpacking 22.3 MB will be used.
Do you want to continue? [Y/n/?] y
	:</pre>
<pre>This is the full URI that clients will use to connect to the
server.
.
This will be used in /etc/chef/client.rb as 'chef_server_url'.
URL of Chef Server (e.g., http://chef.example.com:4000):</pre>
<p>には http://192.168.24.210:4000 と入力し、Chef Serverとしてchef-serverホストに接続するように設定します。</p>
<p>ただし、この状態ではchef-clientプロセスはchef-serverホストに接続することはできません。chef-clientプロセスのログを確認してみます。</p>
<pre>root@chef-node:~# cat /var/log/chef/client.log
[Sat, 14 Apr 2012 14:49:27 +0900] INFO: Daemonizing..
[Sat, 14 Apr 2012 14:49:27 +0900] INFO: Forked, in 732. Priveleges: 0 0
[Sat, 14 Apr 2012 14:49:46 +0900] INFO: *** Chef 0.10.8 ***
[Sat, 14 Apr 2012 14:49:46 +0900] INFO: Client key /etc/chef/client.pem is not present - registering
[Sat, 14 Apr 2012 14:49:46 +0900] WARN: Failed to read the private key /etc/chef/validation.pem: #
[Sat, 14 Apr 2012 14:49:46 +0900] ERROR: Chef::Exceptions::PrivateKeyMissing: I cannot read /etc/chef/validation.pem, which you told me to use to sign requests!
[Sat, 14 Apr 2012 14:49:46 +0900] FATAL: Stacktrace dumped to /var/cache/chef/chef-stacktrace.out
[Sat, 14 Apr 2012 14:49:46 +0900] ERROR: Sleeping for 1800 seconds before trying again</pre>
<p>このようにCehf Serverの秘密鍵がないためです。よって、chef-serverホストの秘密鍵をchef-nodeホストにコピーします。</p>
<pre>root@chef-node:~# cat &gt; /etc/chef/validation.pem
	:
	(chef-server の /etc/chef/validation.pem をコピーします)
	:
root@chef-node:~# cat &gt; /etc/chef/webui.pem
	:
	(chef-server の /etc/chef/webui.pem をコピーします)
	:
root@chef-node:~# chmod 600 /etc/chef/*.pem
root@chef-node:~# chown root.root /etc/chef/*.pem
root@chef-node:~#</pre>
<p>chef-clientプロセスを再起動します。</p>
<pre>root@chef-node:~# /etc/init.d/chef-client restart
 * Restarting chef-client chef-client
   ...done.
root@chef-node:~#</pre>
<p>再度ログを確認します。</p>
<pre>root@chef-node:~# cat /var/log/chef/client.log
[Sat, 14 Apr 2012 15:01:39 +0900] INFO: Daemonizing..
[Sat, 14 Apr 2012 15:01:39 +0900] INFO: Forked, in 1215. Priveleges: 0 0
[Sat, 14 Apr 2012 15:01:52 +0900] INFO: *** Chef 0.10.8 ***
[Sat, 14 Apr 2012 15:01:52 +0900] INFO: Client key /etc/chef/client.pem is not present - registering
[Sat, 14 Apr 2012 15:01:52 +0900] INFO: HTTP Request Returned 404 Not Found: Cannot load node chef-node
[Sat, 14 Apr 2012 15:01:52 +0900] INFO: Run List is []
[Sat, 14 Apr 2012 15:01:52 +0900] INFO: Run List expands to []
[Sat, 14 Apr 2012 15:01:52 +0900] INFO: Starting Chef Run for chef-node
[Sat, 14 Apr 2012 15:01:52 +0900] INFO: Running start handlers
[Sat, 14 Apr 2012 15:01:52 +0900] INFO: Start handlers complete.
[Sat, 14 Apr 2012 15:01:52 +0900] INFO: Loading cookbooks []
[Sat, 14 Apr 2012 15:01:52 +0900] WARN: Node chef-node has an empty run list.
[Sat, 14 Apr 2012 15:01:52 +0900] INFO: Chef Run complete in 0.109309 seconds
[Sat, 14 Apr 2012 15:01:52 +0900] INFO: Running report handlers
[Sat, 14 Apr 2012 15:01:52 +0900] INFO: Report handlers complete</pre>
<p>これでchef-nodeホストのchef-clientプロセスはchef-serverホストに定期的に問い合わせを行えるようになりました。現時点ではrecipeが登録されていないため、何も行いません。</p>
<h2>chef-serverホストの準備</h2>
<p>次にchef-serverホストに、遠隔ホストから操作するためのユーザを作成します。ここで遠隔ホストはchef-workstationホスト、操作ユーザはworkerとします。 まず、現在Chef Serverに登録されているユーザを確認します。</p>
<pre>admin@chef-server:~$ knife client list
  admin
  cf
  chef-node
  chef-server
  chef-validator
  chef-webui
admin@chef-server:~$</pre>
<p>workerユーザを作成します。-aオプションで管理ユーザとして作成し、-fオプションで秘密鍵のファイル名を指定します。</p>
<pre>admin@chef-server:~$ knife client create worker -a -f worker.pem
Created client[worker]
admin@chef-server:~$</pre>
<p>workerユーザが作成できたことを確認します。</p>
<pre>admin@chef-server:~$ knife client list
  admin
  cf
  chef-node
  chef-server
  chef-validator
  chef-webui
  worker
admin@chef-server:~$</pre>
<h2>chef-workstationホストの準備</h2>
<p>chef-workstationホストにもchef-nodeホストと同様に、ChefのClientをインストールします。</p>
<pre>root@chef-workstation:~# aptitude install chef
The following NEW packages will be installed:
  chef libabstract-ruby1.8{a} libbunny-ruby{a} libbunny-ruby1.8{a}
	:</pre>
<p>chef-serverホストの/home/admin/.chef/validation.pemと/home/admin/worker.pemをchef-workstationホストの/home/worker/.chef/ディレクトリにコピーします。</p>
<pre>worker@chef-workstation:~$ mkdir .chef
worker@chef-workstation:~$ chmod 700 .chef
worker@chef-workstation:~$ cat &gt; .chef/worker.pem
	:
	(chef-serverホストの/home/admin/worker.pemをコピーします)
	:
worker@chef-workstation:~$ cat &gt; .chef/validation.pem
	:
	(chef-serverホストの/home/admin/.chef/validation.pemをコピーします)
	:
worker@chef-workstation:~$ chmod 600 .chef/*.pem
worker@chef-workstation:~$</pre>
<p>knife コマンドで設定を行います。Chef Server URLと秘密鍵のパス以外はエンターキーを押すだけです。</p>
<pre>worker@chef-workstation:~$ knife configure
WARNING: No knife configuration file found
Where should I put the config file? [~/.chef/knife.rb]
Please enter the chef server URL: [http://chef-workstation:4000] <strong>http://192.168.24.210:4000</strong>
Please enter an existing username or clientname for the API: [worker]
Please enter the validation clientname: [chef-validator]
Please enter the location of the validation key: [/etc/chef/validation.pem] <strong>/home/worker/.chef/validation.pem</strong>
Please enter the path to a chef repository (or leave blank):
*****

You must place your client key in:
  /home/worker/.chef/worker.pem
Before running commands with Knife!

*****

You must place your validation key in:
  /home/worker/.chef/validation.pem
Before generating instance data with Knife!

*****
Configuration file written to /home/worker/.chef/knife.rb
worker@chef-workstation:~$</pre>
<p>chef-workstationホストからchef-serverホストにあるChef Serverの情報が取得できるか確認します。</p>
<pre>worker@chef-workstation:~$ knife client list
  admin
  cf
  chef-node
  chef-server
  chef-validator
  chef-webui
  worker
worker@chef-workstation:~$ 

worker@chef-workstation:~$ knife status
22 minutes ago, chef-node, chef-node, 192.168.24.211, ubuntu 11.10.
2 minutes ago, chef-server, chef-server, 192.168.24.210, ubuntu 11.10.
worker@chef-workstation:~$</pre>
<p>このように、chef-serverホストにいちいちログインせずともChef環境の状況を確認できるようになりました。</p>
<h2>chef-workstationホストからChef環境の操作</h2>
<p>chef-workstationホスト上でcookbookを作成します。</p>
<pre>worker@chef-workstation:~$ knife cookbook create sample3 -o .
** Creating cookbook sample3
** Creating README for cookbook: sample3
** Creating metadata for cookbook: sample3
worker@chef-workstation:~$ ls -l
合計 4
drwxrwxr-x 10 worker worker 4096 2012-04-14 15:27 sample3
worker@chef-workstation:~$</pre>
<p>/tmpにファイルを書き出すrecipeを作成します。</p>
<pre>worker@chef-workstation:~$ vi sample3/recipes/default.rb
#
# Cookbook Name:: sample3
# Recipe:: default
#

template '/tmp/chef-test3' do
  source 'chef-test3.erb'
  mode 0644
end
worker@chef-workstation:~$ 

worker@chef-workstation:~$ vi sample3/templates/default/chef-test3.erb
Welcome to Chef! (3)

CPU   :&lt;%= node[:cpu][:"0"][:model_name] %&gt;
Memory:&lt;%= node[:memory][:total] %&gt;
OS    :&lt;%= node[:platform] %&gt; &lt;%= node[:platform_version] %&gt;
worker@chef-workstation:~$</pre>
<p>chef-workstationホストからchef-serverホストにcookbookを登録します。</p>
<pre>worker@chef-workstation:~$ knife cookbook upload sample3 -o .
Uploading sample3             [0.0.1]
upload complete
worker@chef-workstation:~$</pre>
<p>cookbookが登録できたことを確認します。</p>
<pre>worker@chef-workstation:~$ knife cookbook list
  sample    0.0.1
  sample3   0.0.1
worker@chef-workstation:~$ knife recipe list
sample:
  0.0.1:  default
sample3:
  0.0.1:  default
worker@chef-workstation:~$</pre>
<p>chef-workstationホストから、chef-nodeホストにrecipeを追加するようにchef-serverホストを操作します。</p>
<pre>worker@chef-workstation:~$ knife node show chef-node
Node Name:   chef-node
Environment: _default
FQDN:        chef-node
IP:          192.168.24.211
Run List:
Roles:
Recipes:
Platform:    ubuntu 11.10
worker@chef-workstation:~$ 

worker@chef-workstation:~$ knife node run_list add chef-node 'recipe[sample3]'
run_list:  recipe[sample3]
worker@chef-workstation:~$ 

worker@chef-workstation:~$ knife node show chef-node
Node Name:   chef-node
Environment: _default
FQDN:        chef-node
IP:          192.168.24.211
Run List:    recipe[sample3]
Roles:
Recipes:
Platform:    ubuntu 11.10
worker@chef-workstation:~$</pre>
<p>登録しただけではrecipeは実行されません。chef-nodeホスト上のchef-clientプロセスがchef-serverホストに問い合わせを行う必要があります。今はそれを待たずに、chef-nodeホストにログインし、手動でchef-clientコマンドを実行してみます。</p>
<pre>nodeuser@chef-node:~$ ls -l /tmp/
合計 0
nodeuser@chef-node:~$ 

nodeuser@chef-node:~$ sudo /usr/bin/chef-client
[sudo] password for nodeuser:
[Sat, 14 Apr 2012 15:34:53 +0900] INFO: *** Chef 0.10.8 ***
[Sat, 14 Apr 2012 15:34:53 +0900] INFO: Run List is [recipe[sample3]]
[Sat, 14 Apr 2012 15:34:53 +0900] INFO: Run List expands to [sample3]
[Sat, 14 Apr 2012 15:34:53 +0900] INFO: Starting Chef Run for chef-node
[Sat, 14 Apr 2012 15:34:53 +0900] INFO: Running start handlers
[Sat, 14 Apr 2012 15:34:53 +0900] INFO: Start handlers complete.
[Sat, 14 Apr 2012 15:34:53 +0900] INFO: Loading cookbooks [sample3]
[Sat, 14 Apr 2012 15:34:53 +0900] INFO: Storing updated cookbooks/sample3/recipes/default.rb in the cache.
[Sat, 14 Apr 2012 15:34:53 +0900] INFO: Storing updated cookbooks/sample3/README.md in the cache.
[Sat, 14 Apr 2012 15:34:53 +0900] INFO: Storing updated cookbooks/sample3/metadata.rb in the cache.
[Sat, 14 Apr 2012 15:34:53 +0900] INFO: Processing template[/tmp/chef-test3] action create (sample3::default line 6)
[Sat, 14 Apr 2012 15:34:53 +0900] INFO: template[/tmp/chef-test3] mode changed to 644
[Sat, 14 Apr 2012 15:34:53 +0900] INFO: template[/tmp/chef-test3] updated content
[Sat, 14 Apr 2012 15:34:53 +0900] INFO: Chef Run complete in 0.163047 seconds
[Sat, 14 Apr 2012 15:34:53 +0900] INFO: Running report handlers
[Sat, 14 Apr 2012 15:34:53 +0900] INFO: Report handlers complete
nodeuser@chef-node:~$</pre>
<p>recipeが実行され、ファイルが作成されたことを確認します。</p>
<pre>nodeuser@chef-node:~$ ls -l /tmp/
合計 4
-rw-r--r-- 1 root root 95 2012-04-14 15:34 chef-test3
nodeuser@chef-node:~$ 

nodeuser@chef-node:~$ cat /tmp/chef-test3
Welcome to Chef! (3)

CPU   :QEMU Virtual CPU version 1.0
Memory:1022172kB
OS    :ubuntu 11.10
nodeuser@chef-node:~$</pre>
<p>次は、chef-clientプロセスによる定期問い合わせでrecipeが実行されるかどうか、ファイルを削除して待ってみます。</p>
<pre>root@chef-node:~# rm /tmp/chef-test3
root@chef-node:~#</pre>
<p>およそ30分後に recipe が実行されました。</p>
<pre>[Sat, 14 Apr 2012 15:31:53 +0900] INFO: Report handlers complete

[Sat, 14 Apr 2012 16:02:12 +0900] INFO: *** Chef 0.10.8 ***
[Sat, 14 Apr 2012 16:02:12 +0900] INFO: Run List is [recipe[sample3]]
[Sat, 14 Apr 2012 16:02:12 +0900] INFO: Run List expands to [sample3]
[Sat, 14 Apr 2012 16:02:12 +0900] INFO: Starting Chef Run for chef-node
[Sat, 14 Apr 2012 16:02:12 +0900] INFO: Running start handlers
[Sat, 14 Apr 2012 16:02:12 +0900] INFO: Start handlers complete.
[Sat, 14 Apr 2012 16:02:12 +0900] INFO: Loading cookbooks [sample3]
[Sat, 14 Apr 2012 16:02:12 +0900] INFO: Processing template[/tmp/chef-test3] action create (sample3::default line 6)
[Sat, 14 Apr 2012 16:02:12 +0900] INFO: template[/tmp/chef-test3] mode changed to 644
[Sat, 14 Apr 2012 16:02:12 +0900] INFO: template[/tmp/chef-test3] updated content
[Sat, 14 Apr 2012 16:02:12 +0900] INFO: Chef Run complete in 0.120727 seconds
[Sat, 14 Apr 2012 16:02:12 +0900] INFO: Running report handlers
[Sat, 14 Apr 2012 16:02:12 +0900] INFO: Report handlers complete</pre>
<pre>root@chef-node:~# ls -l /tmp
合計 4
-rw-r--r-- 1 root root 95 2012-04-14 16:02 chef-test3
root@chef-node:~#

root@chef-node:~# cat /tmp/chef-test3
Welcome to Chef! (3)

CPU   :QEMU Virtual CPU version 1.0
Memory:1022172kB
OS    :ubuntu 11.10
root@chef-node:~#</pre>
]]></content:encoded>
			<wfw:commentRss>http://www.creationline.com/lab/1742/feed</wfw:commentRss>
		<slash:comments>0</slash:comments>
		</item>
		<item>
		<title>Chefを使ってみよう [1]</title>
		<link>http://www.creationline.com/lab/1737</link>
		<comments>http://www.creationline.com/lab/1737#comments</comments>
		<pubDate>Mon, 16 Apr 2012 02:40:07 +0000</pubDate>
		<dc:creator>higuchi</dc:creator>
				<category><![CDATA[CL Lab]]></category>

		<guid isPermaLink="false">http://www.creationline.com/?p=1737</guid>
		<description><![CDATA[Chefとは Chefは米Opscode社が提供するオープンソースのサーバ設定管理ツールです。同様のツールではPuppetがよく知られていますが、ここ最近はChefが知名度を伸ばしてきているようです。 ChefそのものはRubyで書かれているほか、設定書であるRecipe(レシピ)もRubyで記述します。クライアント・サーバモデルで動作するほか、サーバを必要とせず単体で動作するツールも備えています。 Chefの基本的な用語 Chefでは多数の一般的な語が用いられているため、少々混乱を招きやすい点があります。そこで、まずはじめによく用いられる基本的な用語を確認しておきます。 Server 設定情報をはじめ、各種情報を集中管理するホストを指します。WebUIやREST APIを備えており、それを用いて各種クライアントと通信します。バックエンドにRabbitMQ, CouchDBを用いています。 Client Chef Serverに接続して情報をやりとりするツールやホストを指します。非常に間違えやすいのですが、Chefで管理するホストのことではないので注意が必要です。 Node Chefで管理するホストを指します。NodeはClientの一種ですが、ClientのすべてがNodeというわけではありません。 Workstation Chefを管理するホストを指します。NodeではないClientの一例で、次項のKnifeを実行するホストになります。 Knife Chefを管理するコマンドラインツールです。NodeではないClientの一例で、Knifeを実行するホストが前項のWorkstationです。 Cookbook Recipeなどの設定情報をひとまとめにしたものです。 Recipe Rubyで記述する設定情報の定義です。 Chefのインストール 今回は単一のホスト chef-all (10.0.2.15) にChef Server、Chef Node、Chef Workstationのすべての役割を与えてChefの動作確認を行います。 まず、Installing Chef Server on Debian or Ubuntu using Packages を参考に、Ubuntu Server 11.10にChef Server 0.10.xをインストールします。依存関係により、Chef Node、Chef Workstationに必要なパッケージもすべてインストールされます。 まず、Opscode社が準備しているChef用のapt-lineを追加します。 root@chef-all:~# echo "deb http://apt.opscode.com/ `lsb_release -cs`-0.10 main" &#124; [...]]]></description>
			<content:encoded><![CDATA[<h2>Chefとは</h2>
<p>Chefは米Opscode社が提供するオープンソースのサーバ設定管理ツールです。同様のツールではPuppetがよく知られていますが、ここ最近はChefが知名度を伸ばしてきているようです。</p>
<p>ChefそのものはRubyで書かれているほか、設定書であるRecipe(レシピ)もRubyで記述します。クライアント・サーバモデルで動作するほか、サーバを必要とせず単体で動作するツールも備えています。</p>
<h2>Chefの基本的な用語</h2>
<p>Chefでは多数の一般的な語が用いられているため、少々混乱を招きやすい点があります。そこで、まずはじめによく用いられる基本的な用語を確認しておきます。</p>
<h3>Server</h3>
<p>設定情報をはじめ、各種情報を集中管理するホストを指します。WebUIやREST APIを備えており、それを用いて各種クライアントと通信します。バックエンドにRabbitMQ, CouchDBを用いています。</p>
<h3>Client</h3>
<p>Chef Serverに接続して情報をやりとりするツールやホストを指します。非常に間違えやすいのですが、Chefで管理するホストのこと<strong><em>ではない</em></strong>ので注意が必要です。</p>
<h3>Node</h3>
<p>Chefで管理するホストを指します。NodeはClientの一種ですが、ClientのすべてがNodeというわけではありません。</p>
<h3>Workstation</h3>
<p>Chefを管理するホストを指します。NodeではないClientの一例で、次項のKnifeを実行するホストになります。</p>
<h3>Knife</h3>
<p>Chefを管理するコマンドラインツールです。NodeではないClientの一例で、Knifeを実行するホストが前項のWorkstationです。</p>
<h3>Cookbook</h3>
<p>Recipeなどの設定情報をひとまとめにしたものです。</p>
<h3>Recipe</h3>
<p>Rubyで記述する設定情報の定義です。</p>
<h2>Chefのインストール</h2>
<p>今回は単一のホスト chef-all (10.0.2.15) にChef Server、Chef Node、Chef Workstationのすべての役割を与えてChefの動作確認を行います。</p>
<p>まず、<a href="http://wiki.opscode.com/display/chef/Installing+Chef+Server+on+Debian+or+Ubuntu+using+Packages">Installing Chef Server on Debian or Ubuntu using Packages</a> を参考に、Ubuntu Server 11.10にChef Server 0.10.xをインストールします。依存関係により、Chef Node、Chef Workstationに必要なパッケージもすべてインストールされます。</p>
<p>まず、Opscode社が準備しているChef用のapt-lineを追加します。</p>
<pre>root@chef-all:~# echo "deb http://apt.opscode.com/ `lsb_release -cs`-0.10 main" | sudo tee /etc/apt/sources.list.d/opscode.list
deb http://apt.opscode.com/ oneiric-0.10 main
root@chef-all:~# 

root@chef-all:~# cat /etc/apt/sources.list.d/opscode.list
deb http://apt.opscode.com/ oneiric-0.10 main
root@chef-all:~#</pre>
<p>aptレポジトリ用のGPG鍵を取得し、追加します。</p>
<pre>root@chef-all:~# gpg --keyserver keys.gnupg.net --recv-keys 83EF826A
gpg: ディレクトリー「/home/admin/.gnupg」ができました
gpg: 新しい構成ファイル「/home/admin/.gnupg/gpg.conf」ができました
gpg: 警告: 「/home/admin/.gnupg/gpg.conf」のオプションは起動している間、有効になりません
gpg: 鍵輪「/home/admin/.gnupg/secring.gpg」ができました
gpg: 鍵輪「/home/admin/.gnupg/pubring.gpg」ができました
gpg: 鍵83EF826Aをhkpからサーバーkeys.gnupg.netに要求
gpg: /home/admin/.gnupg/trustdb.gpg: 信用データベースができました
gpg: 鍵83EF826A: 公開鍵“Opscode Packages &lt;packages@opscode.com&gt;”を読み込みました
gpg: 処理数の合計: 1
gpg:               読込み: 1
root@chef-all:~# 

root@chef-all:~# gpg --export packages@opscode.com | tee /etc/apt/trusted.gpg.d/opscode-keyring.gpg &gt; /dev/null
root@chef-all:~# 

root@chef-all:~# aptitude update
	:
root@chef-all:~# aptitude install opscode-keyring
	:
root@chef-all:~#</pre>
<p>Opscode社のaptレポジトリからChef Serverをインストールします。前述の通り、Chef Node、Chef Workstationに必要なパッケージもすべてインストールされます。パッケージの数が大変多いため、しばらく時間がかかります。</p>
<pre>root@chef-all:~# aptitude install chef-server
The following NEW packages will be installed:
  ant{a} ant-optional{a} apache2-utils{a} binutils{a} build-essential{a}
  ca-certificates-java{a} chef chef-expander{a} chef-server
  chef-server-api{a} chef-server-webui{a} chef-solr{a} couchdb{a}
  couchdb-bin{a} cpp{a} cpp-4.6{a} default-jre-headless{a} dpkg-dev{a}
  erlang-asn1{a} erlang-base{a} erlang-corba{a} erlang-crypto{a}
  erlang-dev{a} erlang-docbuilder{a} erlang-edoc{a} erlang-erl-docgen{a}
  erlang-eunit{a} erlang-ic{a} erlang-inets{a} erlang-inviso{a}
  erlang-mnesia{a} erlang-nox{a} erlang-odbc{a} erlang-os-mon{a}
  erlang-parsetools{a} erlang-percept{a} erlang-public-key{a}
  erlang-runtime-tools{a} erlang-snmp{a} erlang-ssh{a} erlang-ssl{a}
  erlang-syntax-tools{a} erlang-tools{a} erlang-webtool{a} erlang-xmerl{a}
  fakeroot{a} fontconfig{a} g++{a} g++-4.6{a} gcc{a} gcc-4.6{a}
  gcj-4.6-base{a} gcj-4.6-jre-lib{a} glassfish-mail{a}
  icedtea-6-jre-cacao{a} icedtea-6-jre-jamvm{a} java-common{a} jetty{a}
  jsvc{a} libabstract-ruby1.8{a} libaddressable-ruby{a}
  libalgorithm-diff-perl{a} libalgorithm-diff-xs-perl{a}
  libalgorithm-merge-perl{a} libamqp-ruby{a} libapr1{a} libaprutil1{a}
  libasound2{a} libaudio2{a} libavahi-client3{a} libavahi-common-data{a}
  libavahi-common3{a} libbcel-java{a} libboost-dev{a} libboost1.46-dev{a}
  libbunny-ruby{a} libbunny-ruby1.8{a} libc-dev-bin{a} libc6-dev{a}
  libcap2{a} libcoderay-ruby{a} libcoderay-ruby1.8{a}
  libcommons-beanutils-java{a} libcommons-codec-java{a}
  libcommons-collections3-java{a} libcommons-compress-java{a}
  libcommons-csv-java{a} libcommons-daemon-java{a} libcommons-dbcp-java{a}
  libcommons-digester-java{a} libcommons-fileupload-java{a}
  libcommons-httpclient-java{a} libcommons-io-java{a}
  libcommons-logging-java{a} libcommons-pool-java{a} libcups2{a}
  libcurl3{a} libdaemons-ruby1.8{a} libdb-java{a} libdb-je-java{a}
  libdb5.1-java{a} libdb5.1-java-gcj{a} libdep-selector-ruby{a}
  libdpkg-perl{a} libdrm-dev{a} libecj-java{a} libem-http-request-ruby{a}
  liberubis-ruby{a} liberubis-ruby1.8{a} libescape-utils-ruby{a}
  libeventmachine-ruby{a} libeventmachine-ruby1.8{a} libextlib-ruby{a}
  libextlib-ruby1.8{a} libfast-xs-ruby{a} libffi-ruby1.8{a}
  libfssm-ruby1.8{a} libgcj-bc{a} libgcj-common{a} libgcj12{a}
  libgecode-dev{a} libgecode27{a} libgeronimo-jta-1.0.1b-spec-java{a}
  libgl1-mesa-dev{a} libgl1-mesa-dri{a} libgl1-mesa-glx{a} libglapi-mesa{a}
  libglu1-mesa{a} libglu1-mesa-dev{a} libgnuinet-java{a} libgnujaf-java{a}
  libgnumail-java{a} libgomp1{a} libgstreamer-plugins-base0.10-0{a}
  libgstreamer0.10-0{a} libhaml-ruby1.8{a} libhighline-ruby{a}
  libhmac-ruby1.8{a} libice6{a} libicu44{a} libicu4j-java{a}
  libinotify-ruby1.8{a} libjaxp1.3-java{a} libjetty-extra{a}
  libjetty-extra-java{a} libjetty-java{a} libjline-java{a} libjpeg62{a}
  libjson-ruby{a} libjson-ruby1.8{a} libjtidy-java{a} libkms1{a}
  liblcms1{a} libllvm2.9{a} liblog4j1.2-java{a} libltdl7{a}
  liblucene2-java{a} libmerb-assets-ruby{a} libmerb-assets-ruby1.8{a}
  libmerb-core-ruby1.8{a} libmerb-haml-ruby{a} libmerb-haml-ruby1.8{a}
  libmerb-helpers-ruby{a} libmerb-helpers-ruby1.8{a}
  libmerb-param-protection-ruby{a} libmerb-param-protection-ruby1.8{a}
  libmixlib-authentication-ruby{a} libmixlib-authentication-ruby1.8{a}
  libmixlib-cli-ruby{a} libmixlib-cli-ruby1.8{a} libmixlib-config-ruby{a}
  libmixlib-config-ruby1.8{a} libmixlib-log-ruby{a}
  libmixlib-log-ruby1.8{a} libmng1{a} libmoneta-ruby{a}
  libmoneta-ruby1.8{a} libmozjs185-1.0{a} libmpc2{a} libmpfr4{a}
  libmx4j-java{a} libmysqlclient16{a} libnet-ssh-multi-ruby{a}
  libnet-ssh2-ruby{a} libnspr4{a} libnss3{a} libnss3-1d{a} libohai-ruby{a}
  libohai-ruby1.8{a} libopenid-ruby{a} libopenid-ruby1.8{a}
  libpolyglot-ruby{a} libportlet-api-2.0-spec-java{a} libpthread-stubs0{a}
  libpthread-stubs0-dev{a} libqt4-dbus{a} libqt4-declarative{a}
  libqt4-designer{a} libqt4-dev{a} libqt4-help{a} libqt4-network{a}
  libqt4-opengl{a} libqt4-opengl-dev{a} libqt4-qt3support{a}
  libqt4-script{a} libqt4-scripttools{a} libqt4-sql{a} libqt4-sql-mysql{a}
  libqt4-svg{a} libqt4-test{a} libqt4-xml{a} libqt4-xmlpatterns{a}
  libqtcore4{a} libqtgui4{a} libqtwebkit-dev{a} libqtwebkit4{a}
  libquadmath0{a} librack-ruby{a} librack-ruby1.8{a}
  librb-inotify-ruby1.8{a} libreadline5{a} libregexp-java{a}
  librestclient-ruby{a} libruby1.8{a} libsctp1{a} libservlet2.5-java{a}
  libslf4j-java{a} libsm6{a} libstdc++6-4.6-dev{a} libsystemu-ruby1.8{a}
  libtiff4{a} libtomcat6-java{a} libtreetop-ruby{a} libuuidtools-ruby{a}
  libuuidtools-ruby1.8{a} libx11-dev{a} libxau-dev{a} libxcb1-dev{a}
  libxdamage1{a} libxdmcp-dev{a} libxerces2-java{a} libxext-dev{a}
  libxfixes3{a} libxi6{a} libxml-commons-external-java{a} libxml-ruby1.8{a}
  libxt6{a} libxxf86vm1{a} libyajl-ruby{a} linux-libc-dev{a}
  lksctp-tools{a} make{a} manpages-dev{a} merb-core{a} mesa-common-dev{a}
  mysql-common{a} odbcinst{a} odbcinst1debian2{a} ohai{a}
  openjdk-6-jre-headless{a} openjdk-6-jre-lib{a} qdbus{a}
  qt4-linguist-tools{a} qt4-qmake{a} rabbitmq-server{a} rake{a}
  ruby-addressable{a} ruby-daemons{a} ruby-highline{a} ruby-hmac{a}
  ruby-ipaddress{a} ruby-json{a} ruby-mime-types{a} ruby-net-ssh{a}
  ruby-net-ssh-gateway{a} ruby-net-ssh-multi{a} ruby-rest-client{a}
  ruby1.8{a} ruby1.8-dev{a} rubygems{a} solr-common{a} solr-jetty{a}
  thin{a} thin1.8{a} tzdata-java{a} unixodbc{a} unzip{a} x11-common{a}
  x11proto-core-dev{a} x11proto-input-dev{a} x11proto-kb-dev{a}
  x11proto-xext-dev{a} xorg-sgml-doctools{a} xtrans-dev{a} zip{a}
0 packages upgraded, 295 newly installed, 0 to remove and 0 not upgraded.
Need to get 213 MB of archives. After unpacking 691 MB will be used.
Do you want to continue? [Y/n/?] y
	:</pre>
<p>インストール中、以下の質問が表示されます。</p>
<pre>This is the full URI that clients will use to connect to the
server.
.
This will be used in /etc/chef/client.rb as 'chef_server_url'.
URL of Chef Server (e.g., http://chef.example.com:4000):</pre>
<p>Chef Client(Chef NodeおよびChef Workstation)がデフォルトで接続するChef Serverを指定します。今回はChef ClientもChef Serverも同一のホストなので、デフォルトで自分自身に接続するようにします。このホストは chef-all (10.0.2.15) なので、http://chef-all:4000 とします。もちろんIPアドレスで指定してもかまいません。</p>
<pre>New password for the 'chef' AMQP user in the RabbitMQ vhost "/chef":</pre>
<p>RabbitMQのchefユーザのパスワードを設定します。</p>
<pre>New password for the 'admin' user in the Chef Server WebUI:</pre>
<p>Chef ServerのWebUIのパスワードを設定します。</p>
<p>以上でChefのインストールは完了します。プロセスを確認してみます。</p>
<pre>root@chef-all:~# ps auxwwwf
	:
root     11478  0.0  1.3  95352 26748 ?        S    22:00   0:00 /usr/bin/ruby1.8 /usr/bin/chef-client -d -P /var/run/chef/client.pid -L /var/log/chef/client.log -c /etc/chef/client.rb -i 1800 -s 20
couchdb  11588  0.0  0.0   4272   680 ?        S    22:00   0:00 /bin/sh -e /usr/bin/couchdb -a /etc/couchdb/default.ini -a /etc/couchdb/local.ini -b -r 5 -p /var/run/couchdb/couchdb.pid -o /dev/null -e /dev/null -R
couchdb  11595  0.0  0.0   4272   352 ?        S    22:00   0:00  \_ /bin/sh -e /usr/bin/couchdb -a /etc/couchdb/default.ini -a /etc/couchdb/local.ini -b -r 5 -p /var/run/couchdb/couchdb.pid -o /dev/null -e /dev/null -R
couchdb  11596  0.3  0.7  73844 15528 ?        Sl   22:00   0:00      \_ /usr/lib/erlang/erts-5.8.3/bin/beam -Bd -K true -A 4 -- -root /usr/lib/erlang -progname erl -- -home /var/lib/couchdb -- -noshell -noinput -sasl errlog_type error -couch_ini /etc/couchdb/default.ini /etc/couchdb/local.ini /etc/couchdb/default.ini /etc/couchdb/local.ini -s couch -pidfile /var/run/couchdb/couchdb.pid -heart
couchdb  11604  0.0  0.0   4036   324 ?        Ss   22:00   0:00          \_ heart -pid 11596 -ht 11
couchdb  13162  0.0  0.3  92380  6844 ?        Ssl  22:01   0:00          \_ /usr/lib/couchdb/bin/couchjs /usr/share/couchdb/server/main.js
rabbitmq 12532  0.0  0.0   6808   320 ?        S    22:00   0:00 /usr/lib/erlang/erts-5.8.3/bin/epmd -daemon
root     12537  0.0  0.0   4272   584 ?        Ss   22:00   0:00 sh -c /usr/sbin/rabbitmq-server &gt; /var/log/rabbitmq/startup_log             2&gt; /var/log/rabbitmq/startup_err
root     12540  0.0  0.0   4272   584 ?        S    22:00   0:00  \_ /bin/sh /usr/sbin/rabbitmq-server
rabbitmq 12543  0.0  0.0  41628  1364 ?        S    22:00   0:00      \_ su rabbitmq -s /bin/sh -c /usr/lib/rabbitmq/bin/rabbitmq-server
rabbitmq 12545  0.0  0.0   4272   584 ?        S    22:00   0:00          \_ sh -c /usr/lib/rabbitmq/bin/rabbitmq-server
rabbitmq 12546  3.0  3.0 103036 62464 ?        Sl   22:00   0:01              \_ /usr/lib/erlang/erts-5.8.3/bin/beam -W w -K true -A30 -P 1048576 -- -root /usr/lib/erlang -progname erl -- -home /var/lib/rabbitmq -- -noshell -noinput -sname rabbit@chef-all -boot /var/lib/rabbitmq/mnesia/rabbit@chef-server-plugins-expand/rabbit -kernel inet_default_connect_options [{nodelay,true}] -sasl errlog_type error -kernel error_logger {file,"/var/log/rabbitmq/rabbit@chef-server.log"} -sasl sasl_error_logger {file,"/var/log/rabbitmq/rabbit@chef-server-sasl.log"} -os_mon start_cpu_sup true -os_mon start_disksup false -os_mon start_memsup false -mnesia dir "/var/lib/rabbitmq/mnesia/rabbit@chef-server"
rabbitmq 12621  0.0  0.0   4164   324 ?        Ss   22:00   0:00                  \_ /usr/lib/erlang/lib/os_mon-2.2.5/priv/bin/cpu_sup
rabbitmq 12622  0.0  0.0   6776   344 ?        Ss   22:00   0:00                  \_ inet_gethost 4
rabbitmq 12623  0.0  0.0   8876   632 ?        S    22:00   0:00                      \_ inet_gethost 4
chef     12890  2.4  5.1 581660 106392 ?       Sl   22:00   0:01 java -Xmx256M -Xms256M -Dsolr.data.dir=/var/cache/chef/solr/data -Dsolr.solr.home=/var/lib/chef/solr -DSTART=/var/lib/chef/solr/solr-jetty/etc/start.config -jar /var/lib/chef/solr/solr-jetty/start.jar
root     12952  0.0  0.7  81420 15244 ?        S    22:00   0:00 /usr/bin/ruby1.8 /usr/bin/chef-expander -d -c /etc/chef/solr.rb -P /var/run/chef/expander.pid -L /var/log/chef/expander.log -n 1 -i 1
root     12953  1.5  1.8 104984 37736 ?        S    22:00   0:00  \_ chef-expander worker #1 (vnodes 0-1023)
chef     13111  2.0  2.7 165216 57052 ?        Sl   22:01   0:00 merb : chef-server (api) : worker (port 4000)
chef     13276  1.9  2.5 135376 52568 ?        Sl   22:01   0:00 merb : chef-server-webui : worker (port 4040)
root@chef-all:~#</pre>
<h2>Chef Clientの設定</h2>
<p>Chef Serverに接続するための、Chef Clientとして操作を行う、Linuxユーザの設定を行います。ここではその操作ユーザを admin とします。</p>
<p>まず、Chef Serverに接続するために生成された秘密鍵を操作ユーザの~/.chef/ディレクトリにコピーします。鍵ファイルの所有者は操作ユーザに変更し、パーミッションは600である必要があります。</p>
<pre>admin@chef-all:~$ mkdir ~/.chef
admin@chef-all:~$ sudo cp /etc/chef/validation.pem /etc/chef/webui.pem ~/.chef
admin@chef-all:~$ sudo chown -R admin ~/.chef/
admin@chef-all:~$ 

admin@chef-all:~$ ls -al .chef/
合計 16
drwxrwxr-x 2 admin admin   4096 2012-04-02 22:30 .
drwxr-xr-x 5 admin admin   4096 2012-04-02 22:30 ..
-rw------- 1 admin root    1679 2012-04-02 22:30 validation.pem
-rw------- 1 admin root    1679 2012-04-02 22:30 webui.pem
admin@chef-all:~$</pre>
<p>knifeコマンドを実行して、操作ユーザの初期設定を行います。</p>
<p>対話的に設定を行うことができます。ほとんどはそのままエンターキーで進んで問題ありませんが、鍵ファイルの位置が /etc/chef になっているので、操作ユーザの ~/.chef/ に変更してください。</p>
<pre>admin@chef-all:~$ knife configure -i
WARNING: No knife configuration file found
Where should I put the config file? [~/.chef/knife.rb]
Please enter the chef server URL: [http://chef-all:4000]
Please enter a clientname for the new client: [admin]
Please enter the existing admin clientname: [chef-webui]
Please enter the location of the existing admin client's private key: [/etc/chef/webui.pem] <strong>/home/admin/.chef/webui.pem</strong>
Please enter the validation clientname: [chef-validator]
Please enter the location of the validation key: [/etc/chef/validation.pem] <strong>/home/admin/.chef/validation.pem</strong>
Please enter the path to a chef repository (or leave blank):
Creating initial API user...
Created client[admin]
Configuration file written to /home/admin/.chef/knife.rb
admin@chef-all:~$</pre>
<p>設定ファイルが生成されたことを確認します。</p>
<pre>admin@chef-all:~$ ls -la .chef/
合計 24
drwxrwxr-x 2 admin admin   4096 2012-04-02 22:42 .
drwxr-xr-x 5 admin admin   4096 2012-04-02 22:30 ..
-rw-rw-r-- 1 admin admin   1679 2012-04-02 22:42 admin.pem
-rw-rw-r-- 1 admin admin    382 2012-04-02 22:42 knife.rb
-rw------- 1 admin root    1679 2012-04-02 22:30 validation.pem
-rw------- 1 admin root    1679 2012-04-02 22:30 webui.pem
admin@chef-all:~$ 

admin@chef-all:~$ cat .chef/knife.rb
log_level                :info
log_location             STDOUT
node_name                'admin'
client_key               '/home/admin/.chef/admin.pem'
validation_client_name   'chef-validator'
validation_key           '/home/admin/.chef/validation.pem'
chef_server_url          'http://chef-all:4000'
cache_type               'BasicFile'
cache_options( :path =&gt; '/home/admin/.chef/checksums' )
admin@chef-all:~$</pre>
<p>knifeコマンドを実行することでも設定の確認が行えます。</p>
<pre>admin@chef-all:~$ knife client show admin
_rev:        1-18aa9cce3066b3e8950903b08a4b378d
admin:       true
chef_type:   client
json_class:  Chef::ApiClient
name:        admin
public_key:  -----BEGIN RSA PUBLIC KEY-----
             MIIBCgKCAQEAv2dp0peH1cOLLSnjvwsrdS2eMI+dCKT2PlnlKbxz/xhp4glXXDC+
		:
		:
		:
		:
             EBhuS+biDxALHfnZaFojflEBXa4BOPJcqwIDAQAB
             -----END RSA PUBLIC KEY-----
admin@chef-all:~$</pre>
<h2>Cookbookの作成</h2>
<p>では、簡単なRecipeを持つCookbookを作成してみます。knifeコマンドでCookbookの雛形を生成することができます。ここではsampleという名前のCookbookを作成します。</p>
<pre>admin@chef-all:~$ knife cookbook create sample
** Creating cookbook sample
** Creating README for cookbook: sample
** Creating metadata for cookbook: sample
admin@chef-all:~$</pre>
<p>Cookbookは/var/chef/cookbooks/に生成されます。なお、-oオプションで作成先のディレクトリを指定することができます。</p>
<pre>admin@chef-all:~$ ls -laR /var/chef/cookbooks/sample/
/var/chef/cookbooks/sample/:
合計 48
drwxrwxr-x 10 admin admin 4096 2012-04-03 21:23 .
drwxrwxr-x  3 admin admin 4096 2012-04-03 21:23 ..
-rw-rw-r--  1 admin admin   88 2012-04-03 21:23 README.md
drwxrwxr-x  2 admin admin 4096 2012-04-03 21:23 attributes
drwxrwxr-x  2 admin admin 4096 2012-04-03 21:23 definitions
drwxrwxr-x  3 admin admin 4096 2012-04-03 21:23 files
drwxrwxr-x  2 admin admin 4096 2012-04-03 21:23 libraries
-rw-rw-r--  1 admin admin  250 2012-04-03 21:23 metadata.rb
drwxrwxr-x  2 admin admin 4096 2012-04-03 21:23 providers
drwxrwxr-x  2 admin admin 4096 2012-04-03 21:23 recipes
drwxrwxr-x  2 admin admin 4096 2012-04-03 21:23 resources
drwxrwxr-x  3 admin admin 4096 2012-04-03 21:23 templates

/var/chef/cookbooks/sample/attributes:
合計 8
drwxrwxr-x  2 admin admin 4096 2012-04-03 21:23 .
drwxrwxr-x 10 admin admin 4096 2012-04-03 21:23 ..

/var/chef/cookbooks/sample/definitions:
合計 8
drwxrwxr-x  2 admin admin 4096 2012-04-03 21:23 .
drwxrwxr-x 10 admin admin 4096 2012-04-03 21:23 ..

/var/chef/cookbooks/sample/files:
合計 12
drwxrwxr-x  3 admin admin 4096 2012-04-03 21:23 .
drwxrwxr-x 10 admin admin 4096 2012-04-03 21:23 ..
drwxrwxr-x  2 admin admin 4096 2012-04-03 21:23 default

/var/chef/cookbooks/sample/files/default:
合計 8
drwxrwxr-x 2 admin admin 4096 2012-04-03 21:23 .
drwxrwxr-x 3 admin admin 4096 2012-04-03 21:23 ..

/var/chef/cookbooks/sample/libraries:
合計 8
drwxrwxr-x  2 admin admin 4096 2012-04-03 21:23 .
drwxrwxr-x 10 admin admin 4096 2012-04-03 21:23 ..

/var/chef/cookbooks/sample/providers:
合計 8
drwxrwxr-x  2 admin admin 4096 2012-04-03 21:23 .
drwxrwxr-x 10 admin admin 4096 2012-04-03 21:23 ..

/var/chef/cookbooks/sample/recipes:
合計 12
drwxrwxr-x  2 admin admin 4096 2012-04-03 21:23 .
drwxrwxr-x 10 admin admin 4096 2012-04-03 21:23 ..
-rw-rw-r--  1 admin admin  132 2012-04-03 21:23 default.rb

/var/chef/cookbooks/sample/resources:
合計 8
drwxrwxr-x  2 admin admin 4096 2012-04-03 21:23 .
drwxrwxr-x 10 admin admin 4096 2012-04-03 21:23 ..

/var/chef/cookbooks/sample/templates:
合計 12
drwxrwxr-x  3 admin admin 4096 2012-04-03 21:23 .
drwxrwxr-x 10 admin admin 4096 2012-04-03 21:23 ..
drwxrwxr-x  2 admin admin 4096 2012-04-03 21:23 default

/var/chef/cookbooks/sample/templates/default:
合計 8
drwxrwxr-x 2 admin admin 4096 2012-04-03 21:23 .
drwxrwxr-x 3 admin admin 4096 2012-04-03 21:23 ..
admin@chef-all:~$</pre>
<p><a href="http://matetsu.hatenablog.com/entry/2012/01/11/201609">Chefを試す</a>で紹介されているCookbookを頂きます。</p>
<pre>admin@chef-all:~$ vi /var/chef/cookbooks/sample/recipes/default.rb
#
# Cookbook Name:: sample
# Recipe:: default
#

template '/tmp/chef-test' do
  source 'chef-test.erb'
  mode 0644
end
admin@chef-all:~$</pre>
<p>これは/tmp/chef-testファイルをパーミッション0644で生成し、Templateとしてchef-test.erbファイルを用いるというRecipeです。</p>
<pre>admin@chef-all:~$ vi /var/chef/cookbooks/sample/templates/default/chef-test.erb
Welcome to Chef!

CPU   :&lt;%= node[:cpu][:"0"][:model_name] %&gt;
Memory:&lt;%= node[:memory][:total] %&gt;
OS    :&lt;%= node[:platform] %&gt; &lt;%= node[:platform_version] %&gt;
admin@chef-all:~$</pre>
<p>これはNodeの情報を表示するTemplateです。今回はファイル内容の詳細については省略します。</p>
<p>knifeコマンドでこのsample CookbookをChef Serverに登録します。</p>
<pre>admin@chef-all:~$ knife cookbook upload sample
Uploading sample             [0.0.1]
upload complete
admin@chef-all:~$</pre>
<p>knifeコマンドでsample CookbookがChef Serverに登録されたことを確認します。</p>
<pre>admin@chef-all:~$ knife cookbook list
sample   0.0.1
admin@chef-all:~$ knife recipe list
sample:
  0.0.1:  default
admin@chef-all:~$</pre>
<h2>NodeへRecipeの適用</h2>
<p>では、sample CookbookをChef Nodeに適用します。今回はChef NodeはChef Serverと同一ホストであるchef-allとします。</p>
<p>knifeコマンドで、chef-allのNodeとしての状態を確認します。</p>
<pre>admin@chef-all:~$ knife node show chef-all
Node Name:   chef-all
Environment: _default
FQDN:        chef-all
IP:          10.0.2.15
Run List:
Roles:
Recipes:
Platform:    ubuntu 11.10
admin@chef-all:~$</pre>
<p>knifeコマンドで、Nodeであるchef-allにsample Recipeを追加します。</p>
<pre>admin@chef-all:~$ knife node run_list add chef-all 'recipe[sample]'
run_list:  recipe[sample]
admin@chef-all:~$</pre>
<p>knifeコマンドで、Nodeであるchef-allにsample Recipeが追加されたことを確認します。</p>
<pre>admin@chef-all:~$ knife node show chef-all
Node Name:   chef-all
Environment: _default
FQDN:        chef-all
IP:          10.0.2.15
Run List:    recipe[sample]
Roles:
Recipes:
Platform:    ubuntu 11.10
admin@chef-all:~$</pre>
<p>/var/log/chef/client.log を確認します。</p>
<pre>[Tue, 03 Apr 2012 21:38:09 +0900] INFO: *** Chef 0.10.8 ***
[Tue, 03 Apr 2012 21:38:09 +0900] INFO: Run List is [recipe[sample]]
[Tue, 03 Apr 2012 21:38:09 +0900] INFO: Run List expands to [sample]
[Tue, 03 Apr 2012 21:38:09 +0900] INFO: Starting Chef Run for chef-all
[Tue, 03 Apr 2012 21:38:09 +0900] INFO: Running start handlers
[Tue, 03 Apr 2012 21:38:09 +0900] INFO: Start handlers complete.
[Tue, 03 Apr 2012 21:38:09 +0900] INFO: Loading cookbooks [sample]
[Tue, 03 Apr 2012 21:38:09 +0900] INFO: Storing updated cookbooks/sample/recipes/default.rb in the cache.
[Tue, 03 Apr 2012 21:38:09 +0900] INFO: Storing updated cookbooks/sample/metadata.rb in the cache.
[Tue, 03 Apr 2012 21:38:09 +0900] INFO: Storing updated cookbooks/sample/README.md in the cache.
[Tue, 03 Apr 2012 21:38:09 +0900] INFO: Processing template[/tmp/chef-test] action create (sample::default line 6)
[Tue, 03 Apr 2012 21:38:09 +0900] INFO: template[/tmp/chef-test] mode changed to 644
[Tue, 03 Apr 2012 21:38:09 +0900] INFO: template[/tmp/chef-test] updated content
[Tue, 03 Apr 2012 21:38:10 +0900] INFO: Chef Run complete in 0.172887 seconds
[Tue, 03 Apr 2012 21:38:10 +0900] INFO: Running report handlers
[Tue, 03 Apr 2012 21:38:10 +0900] INFO: Report handlers complete</pre>
<p>このように、Recipeが実行されたことがわかります。/tmp/chef-testが生成されたことを確認します。</p>
<pre>admin@chef-all:~$ ls -l /tmp/chef-test
-rw-r--r-- 1 root root 91 2012-04-03 21:38 /tmp/chef-test
admin@chef-all:~$ cat /tmp/chef-test
Welcome to Chef!

CPU   :QEMU Virtual CPU version 1.0
Memory:2056408kB
OS    :ubuntu 11.10
admin@chef-all:~$</pre>
<p>このファイルを削除してみます。</p>
<pre>admin@chef-all:~$ sudo rm /tmp/chef-test
admin@chef-all:~$</pre>
<p>これですぐ生成し直されるか、というとそうではありません。Chef NodeがChef Serverに問い合わせを行って始めてRecipeが再実行されます。</p>
<p>デフォルトでは、Chef Serverに定期的に問い合わせを行うchef-client というデーモンプロセスが起動しています。</p>
<pre>admin@chef-all:~$ ps auxwwwf | grep '[ c]hef-client'
root      2659  0.0  1.4 108104 29820 ?        S    21:38   0:00 /usr/bin/ruby1.8 /usr/bin/chef-client -d -P /var/run/chef/client.pid -L /var/log/chef/client.log -c /etc/chef/client.rb -i 1800 -s 20
admin@chef-all:~$</pre>
<p>chef-clientデーモンはデフォルトでは -i 1800 -s 20 (インターバル 1800 秒 + 0〜20 秒) の間隔でChef Serverに問い合わせを行っています。そこで、問い合わせが行われるまでしばらく待ってみます。</p>
<pre>[Tue, 03 Apr 2012 22:08:25 +0900] INFO: *** Chef 0.10.8 ***
[Tue, 03 Apr 2012 22:08:25 +0900] INFO: Run List is [recipe[sample]]
[Tue, 03 Apr 2012 22:08:25 +0900] INFO: Run List expands to [sample]
[Tue, 03 Apr 2012 22:08:25 +0900] INFO: Starting Chef Run for chef-all
[Tue, 03 Apr 2012 22:08:25 +0900] INFO: Running start handlers
[Tue, 03 Apr 2012 22:08:25 +0900] INFO: Start handlers complete.
[Tue, 03 Apr 2012 22:08:25 +0900] INFO: Loading cookbooks [sample]
[Tue, 03 Apr 2012 22:08:25 +0900] INFO: Processing template[/tmp/chef-test] action create (sample::default line 6)
[Tue, 03 Apr 2012 22:08:25 +0900] INFO: template[/tmp/chef-test] mode changed to 644
[Tue, 03 Apr 2012 22:08:25 +0900] INFO: template[/tmp/chef-test] updated content
[Tue, 03 Apr 2012 22:08:25 +0900] INFO: Chef Run complete in 0.116057 seconds
[Tue, 03 Apr 2012 22:08:25 +0900] INFO: Running report handlers
[Tue, 03 Apr 2012 22:08:25 +0900] INFO: Report handlers complete</pre>
<p>このように、30分程度の経過後に問い合わせが行われ、Recipeが実行されました。/tmp/chef-testが生成されたことを確認します。</p>
<pre>admin@chef-all:~$ ls -l /tmp/chef-test
-rw-r--r-- 1 root root 91 2012-04-03 22:08 /tmp/chef-test
admin@chef-all:~$ cat /tmp/chef-test
Welcome to Chef!

CPU   :QEMU Virtual CPU version 1.0
Memory:2056408kB
OS    :ubuntu 11.10
admin@chef-all:~$</pre>
<p>再度、このファイルを削除します。</p>
<pre>admin@chef-all:~$ sudo rm /tmp/chef-test
admin@chef-all:~$</pre>
<p>すぐにRecipeを反映したい場合はchef-clientコマンドをNode上で直接実行します。</p>
<pre>admin@chef-all:~$ sudo chef-client
[Tue, 03 Apr 2012 22:11:07 +0900] INFO: *** Chef 0.10.8 ***
[Tue, 03 Apr 2012 22:11:07 +0900] INFO: Run List is [recipe[sample]]
[Tue, 03 Apr 2012 22:11:07 +0900] INFO: Run List expands to [sample]
[Tue, 03 Apr 2012 22:11:07 +0900] INFO: Starting Chef Run for chef-all
[Tue, 03 Apr 2012 22:11:07 +0900] INFO: Running start handlers
[Tue, 03 Apr 2012 22:11:07 +0900] INFO: Start handlers complete.
[Tue, 03 Apr 2012 22:11:07 +0900] INFO: Loading cookbooks [sample]
[Tue, 03 Apr 2012 22:11:07 +0900] INFO: Processing template[/tmp/chef-test] action create (sample::default line 6)
[Tue, 03 Apr 2012 22:11:07 +0900] INFO: template[/tmp/chef-test] mode changed to 644
[Tue, 03 Apr 2012 22:11:07 +0900] INFO: template[/tmp/chef-test] updated content
[Tue, 03 Apr 2012 22:11:07 +0900] INFO: Chef Run complete in 0.112569 seconds
[Tue, 03 Apr 2012 22:11:07 +0900] INFO: Running report handlers
[Tue, 03 Apr 2012 22:11:07 +0900] INFO: Report handlers complete
admin@chef-all:~$</pre>
<p>そうすると即座にChef Serverに問い合わせが行われ、Recipeが実行されます。</p>
<pre>admin@chef-all:~$ ls -l /tmp/chef-test
-rw-r--r-- 1 root root 91 2012-04-03 22:11 /tmp/chef-test
admin@chef-all:~$ cat /tmp/chef-test
Welcome to Chef!

CPU   :QEMU Virtual CPU version 1.0
Memory:2056408kB
OS    :ubuntu 11.10
admin@chef-all:~$</pre>
]]></content:encoded>
			<wfw:commentRss>http://www.creationline.com/lab/1737/feed</wfw:commentRss>
		<slash:comments>0</slash:comments>
		</item>
		<item>
		<title>cumulusバナー</title>
		<link>http://www.creationline.com/banner/1732</link>
		<comments>http://www.creationline.com/banner/1732#comments</comments>
		<pubDate>Thu, 05 Apr 2012 09:09:16 +0000</pubDate>
		<dc:creator>admin</dc:creator>
				<category><![CDATA[バナー掲載用カテゴリ]]></category>

		<guid isPermaLink="false">http://www.creationline.com/?p=1732</guid>
		<description><![CDATA[]]></description>
			<content:encoded><![CDATA[]]></content:encoded>
			<wfw:commentRss>http://www.creationline.com/banner/1732/feed</wfw:commentRss>
		<slash:comments>0</slash:comments>
		</item>
	</channel>
</rss>

