カテゴリー別アーカイブ: EC2

Windows Chef ClientをChef Serverに自動で繋ぐ

 

Windows ServerのCofigurationをChefでやろうとした場合、

ssh + rsyncが必要なknife-soloは現実的ではないため、

効率的に管理しようと思ったらやっぱりChef Serverを使うのかなと思いチャレンジしています。

 

そんな中、Linux Chef ClientをChef Serverに繋ぐ例は、

いくつか見つけることができましたが、

やはりWindows ServerはさすがのGoogle先生もご存じないご様子だったので、

自力で頑張ってみました。

 

前提条件

  • Windows 2008 R2 or later
  • PowerShell 3.0 or higher
  • Chef Server側のenvironmentはあらかじめ作成しておく
    (これはWindowsに限らずですが…)
  • Amazon S3のPrivate Bucket
    (validatorキーの受け渡しに使います)

 

こんな感じです。

YOUR_*

な所は各々書き換えて使います。

validatorキー含め必要なものは全て外部から取るようにしているので、

まっさらなサーバから流すだけで接続させられます。

Chef Clientの起動スパンは5分毎、

WindowsのScheduledJobは「いつまで」を登録しなければならず、

ここは無限にはできない(PowerShell4.0~はできるらしいけど)ので、

とりあえず適当に大きい値8192日になっていますが、

特に起動スパン5分はあまり一般的ではないようなので用途に合わせて変えてください。

ここらへん↓

$SpanMinutes   = 5
$DurationDays  = 8192

 

EC2の場合

以下で囲んでUserDataから流し込めばRDPで繋ぐこと無く完全自動で繋がせることができます。

あらかじめroleを作っておいて、タグ情報からrun_listにそのroleが指定されたnodeのJSONファイルを生成する等すればそのまま即設定まで完了ですね。

<powershell></powershell>

 

ConfigurationまでChefで完璧にできるようになれば、

Wiondows Serverもログイン無しでセットアップできるとかだいぶ胸熱なので、

ちょっと頑張ってみたいと思いました。

 

 

 


CookbookのCIはkitchen-docker on SSDインスタンスRAID0で高速化(2014.04.17追記:しないかも…)

 

ChefのCookbookの開発保守効率向上のために、

Jenkinsによる自動テスト・CIを最近始めましたが、

色々やりながらちょっとずつ試して、

やっと「コレだ!」と思える構成とフローができました。

その全体像は別で述べたいと思いますが、

その中でやっている、テスト実行の高速化が上手くいったのでその話を。

 

Cookbookの開発で一番ネックになるのはやはりテストで、

  • テスト環境の立ち上げ
  • Cookbook適用
  • テスト実行

で、一回の実行にけっこう時間がかかる訳です。

 

git pushをJenkinsでフックして自動実行→終わったら通知

となって待たなくて良くなったとはいえ、できる限り早く結果は知りたい。

 

まず、Virtualbox仮想環境→コンテナ環境でテスト環境の立ち上げを高速化。

そもそも僕の場合はCI環境はEC2仮想サーバなので、

Virtualboxは使えないのですが、

LXCではなく、一応Macでも同じ方法でテストできるDockerを選択しました。

 

その上で、Dockerのコンテナ配置場所を

SSDインスタンスのエフェメラルディスクをRAID0で組んでマウントすることで、

さらに高速化することができました。

 

Dockerやtest-kitchen,kitchen-dockerのインストール方法及びAWSの操作は本筋とそれるので割愛します。

2014.04.17 /var/lib/docker/containers→/var/lib/dockerに修正しました。

/var/lib/docker/containersだと、

起動時にEBS領域から切り取られてコンテナ用のファイルシステムが作られてしまいます。

RAID組んでDockerのコンテナ配置場所にマウントするのはこんな感じです↓

# mdadm --create --verbose /dev/md0 --level=stripe --raid-devices=2 /dev/xvdb /dev/xvdc
# mkfs.ext4 /dev/md0
# mount /dev/md0 /var/lib/docker

※インスタンスタイプがc3.lergeの例なので、エフェメラルディスクは2つ
※HVM AMIを選択すること
※エフェメラルディスクは起動時に割り当てが必要

 

エフェメラルディスクのRAID設定はよく使いそうなので、

「それこそChefの出番だろ」と思ってコチラも作ってはみたのですが、

Stop→StartでRAIDの設定消えたり、

RebootではRAIDの設定は残るけど、RAIDデバイスの名前が変わったりで、

上手くいかない場合があって試行錯誤中です…

とりあえず試作品です。上手くいったらLWRPで手軽に使える感じにしたいです。

 

これをやることで、以下のような結果が得られました。

測定に使用したCookbookはコチラです。

 

EBS

Chef Client finished, 52/60 resources updated in 292.319082057 seconds
Kitchen is finished. (5m44.96s)

Ephemeral disk RAID0

Chef Client finished, 52/60 resources updated in 220.907645243 seconds
Kitchen is finished. (4m37.20s)

iMac(2011 mid)で10分以上、さくらVPS2GBプラン(個人ではAWSまだ高いw)で、

8分ほどかかる特別時間のかかるCookbook(wなので、

かなり良い結果と言えるのではないでしょうか:-)

 

2014.04.17 追記:

上述したように、/var/lib/docker/containersだと、

起動時にEBS領域から切り取られてコンテナ用のファイルシステムが作られてしまっていることが発覚しましたが、

変更してEphemeral disk上になるようにしても優位な結果が得られませんでした。

上の比較で優位な結果が出たのは、起動直後のEBSは性能が悪い聞いたことがあるので、

そういう類で差がついたものと思われます。

 

 

全然別件ですが、もしChefネタなので一応宣伝。

札幌に在住の方がもし居ましたら、

こんなんやりますので、ご興味あればどうぞ。

Chef Meetup Sapporo

 

 

 

 


シンプルなEC2の料金表作った

AWSの衝撃的な値下げ(4/1~)もあり、料金表を見直すことが多くなるわけですが、

最近、EC2の料金表が見づらいやら表示が遅いやらで、

かなりイライラすることが増えたので、

シンプルに見られる料金表のページを作った。

 

ちゃんとAWSのHPで使われてるデータソースと同じのを使っているので、

フォーマット変わったりしなければ更新が反映されるはず…?

 

ソース(っていってもhtmlとjsだけですが)はGithubで管理しているので、

何か変なところがあればIssue切るなりしてもらって結構です。

直してもらってpull reqでも良いですよ:)

だいぶ殴り書きっぽいソースはコチラ

 

たぶん、自分がよく使うのでブログのメニューに入れてみました。

コチラからどうぞ