2015年8月18日火曜日

5 step で Chef Server 12 を構築する手順

以下の URL に記載がある手順に従って Chef Server 12 を構築する。
https://docs.chef.io/install_server.html

※ AWS で構築する場合は、t2.micro だとメモリ不足で起動しない。

1. packagecloud からリポジトリ設定のインポート


curl -s https://packagecloud.io/install/repositories/chef/stable/script.rpm.sh | sudo bash

2. chef-server-core パッケージのインストール

sudo yum install -y chef-server-core
   ...(snip)...
Installed:
  chef-server-core.x86_64 0:12.1.2-1.el6

Complete!

3. 以下のコマンドを実行して、各種サービスを開始

sudo chef-server-ctl reconfigure
..... たくさんメッセージが出力される。
いろいろなレシピが実行されるので結構時間がかかる。
 

4. 最初 chef-server ユーザーの作成

書式は以下の通り
chef-server-ctl user-create <ユーザ名> <名> <姓> <メールアドレス> <パスワード> --filename <RSA Private Key を保存するファイル名>
<実行例>
sudo chef-server-ctl user-create t_suzuki taro suzuki t_suzuki@example.com xxsecretxx --filename t_suzuki_chef.key

作成された、プライベートキーはワークステーションからのアクセスに
使用されるので別途保管しておく

登録されているユーザーの一覧は user-list サブコマンドで表示する。
$ sudo chef-server-ctl user-list
pivotal
t_suzuki

登録されているユーザーの詳細は user-show サブコマンドで表示する。
$ sudo chef-server-ctl user-show t_suzuki
display_name: taro suzuki
email:        t_suzuki@example.com
first_name:   taro
last_name:    suzuki
middle_name:
public_key:   -----BEGIN PUBLIC KEY-----
MIIBIjANBgkqhkiG9w0BAQEFAAOCAQ8AMIIBCgKCAQEAsgYZbeuev/FzT+kI9iqE
7ORU/w8BpZa33tOXs+bafFUhaMYslnVZ5azMbZSRBgobOdTX5Gn/qRUrVQw1czxC
TXx+0tDe68T88McnOFdRjEUTPF1WZh7x1QSgUXSeC1c0388UrdQbFXCcEi8AnPdk
P/YdpzMjJdOkZPFiJpUVZlbUyVs/TLMe5LbvU40x/LJ/8W3kWlHd42ixIjmEC6Ba
k1DkP9FIs9gvUQINgQRLvZK8XWF2AmnF1ew0Sgui5kDWja0VbSecKTW+1XgJib1y
ifxD08qgRTZQBNkog0mqBf5jeXN5dZgqbiKABZ6vPmQxHTZc8fywajj1TH+sOzNj
gQIDAQAB
-----END PUBLIC KEY-----

5. 最初の組織(会社やグループなど)の作成


書式は以下の通り
sudo chef-server-ctl org-create <組織の略称> "<組織のフルネーム>" --association_user <組織に関連付けるユーザ> --filename <RSA秘密鍵を保存するファイル>

実行例
sudo chef-server-ctl org-create example "example inc.," --association_user t_suzuki --filename example-validator.key

登録されている組織の一覧は org-list サブコマンドで表示する
$ sudo chef-server-ctl org-list
example

登録されている組織の詳細は org-show サブコマンドで表示する

$ sudo chef-server-ctl org-show example
full_name: example
guid:      56000f67fc6ce0626817b709ba191895
name:      example

これで最低限動作するはず。

2015年8月17日月曜日

chef 12 server のインストール で混乱したのでメモを残しておく

以下の公式サイトからダウンロードしようとすると、何か登録しないといけないようだが キャンセルしてもダウンロードはできてしまうので、登録は必須ではないらしい。
https://downloads.chef.io/chef-server/

配布自体は package cloud 経由で行われている。
https://packagecloud.io/chef/stable/install

以下のMLスレッドにある記事を見ると今後こっちが主流になるらしい。
http://lists.opscode.com/sympa/arc/chef/2014-12/msg00193.html


sha1 の結果は一緒だったので、簡単な方を選ぶ。
上記 packagecloud のインストラクションに従い以下のコマンドを実行する。

curl -s https://packagecloud.io/install/repositories/chef/stable/script.rpm.sh | sudo bash

実行すると、/etc/yum.repos.d/ 配下に chef_stable.repo というファイルが 作成され、普通に yum でインストールできるようになる。
438 MB と結構でかいので少しインストールに時間がかかる。

$ sudo yum install chef-server-core
Loaded plugins: priorities, update-motd, upgrade-helper
amzn-main/latest                                                                                                                               | 2.1 kB     00:00
amzn-updates/latest                                                                                                                            | 2.3 kB     00:00
Resolving Dependencies
--> Running transaction check
---> Package chef-server-core.x86_64 0:12.1.2-1.el6 will be installed
--> Finished Dependency Resolution

Dependencies Resolved

======================================================================================================================================================================
 Package                                     Arch                              Version                                   Repository                              Size
======================================================================================================================================================================
Installing:
 chef-server-core                            x86_64                            12.1.2-1.el6                              chef_stable                            438 M

Transaction Summary
======================================================================================================================================================================
Install  1 Package

Total download size: 438 M
Installed size: 1.2 G
Is this ok [y/d/N]: y
Downloading packages:
chef-server-core-12.1.2-1.el6.x86_64.rpm                                                                                                       | 438 MB     00:40
Running transaction check
Running transaction test
Transaction test succeeded
Running transaction
  Installing : chef-server-core-12.1.2-1.el6.x86_64                                                                                                               1/1
  Verifying  : chef-server-core-12.1.2-1.el6.x86_64                                                                                                               1/1

Installed:
  chef-server-core.x86_64 0:12.1.2-1.el6

Complete!

ちなみに yum search すると、chef-server と chef-server-core の二つが 表示されて、非常にややこしい。chef-server の方は以下のパッケージが インストールされる。

chef-server-11.1.7-1.el6.x86_64.rpm

こっちは chef 11 のサーバーなので要注意。他に以下のパッケージも 11 ってバージョンがついている。

chef-container-11.16.2-1.x86_64.rpm
private-chef-11.3.2-1.el6.x86_64.rpm

2015.8.18 追記
ちなみにこのリポジトリから取得できるパッケージは以下のとおりでした。
$ yum --disablerepo=* --enablerepo=chef_stable list available
Loaded plugins: priorities, update-motd, upgrade-helper
Available Packages
chef.x86_64                                         12.4.1-1.el6                                            chef_stable
chef-container.x86_64                               11.16.2-1                                               chef_stable
chef-ha.x86_64                                      1.0.0_rc.3-1                                            chef_stable
chef-marketplace.x86_64                             0.0.1-1.el6                                             chef_stable
chef-server.x86_64                                  11.1.7-1.el6                                            chef_stable
chef-server-core.x86_64                             12.1.2-1.el6                                            chef_stable
chef-sync.x86_64                                    1.0.0~rc.6-1.el5                                        chef_stable
chefdk.x86_64                                       0.7.0-1.el6                                             chef_stable
delivery.x86_64                                     0.3.210-1.el6                                           chef_stable
delivery-cli.x86_64                                 20150811030818+20150811030818-1.el6                     chef_stable
opscode-analytics.x86_64                            1.1.5-1.el6                                             chef_stable
opscode-manage.x86_64                               1.21.0-1.el6                                            chef_stable
opscode-push-jobs-client.x86_64                     1.1.5-1.el6                                             chef_stable
opscode-push-jobs-server.x86_64                     1.1.6-1                                                 chef_stable
opscode-reporting.x86_64                            1.5.1-1.el6                                             chef_stable
private-chef.x86_64                                 11.3.2-1.el6                                            chef_stable
supermarket.x86_64                                  2.0.0~alpha.0-1.el6                                     chef_stable

2015年7月21日火曜日

ほとんど何もないところから無理やり、S3 にでっかいファイルをアップロードしたメモ

gzip -c < verybigfile | split -b 100m -d -a 3 - verybigfile.gz.
for FF in verybigfile.gz.* ; do ./s3up.sh $FF ; done

$ cat s3up.sh
────────────────────────────────────
#!/bin/bash
file=$1
bucket=shellupload
resource="/${bucket}/${file}"
contentType="application/octet-stream"
dateValue=`date -R`
stringToSign="PUT\n\n${contentType}\n${dateValue}\n${resource}"
s3Key=XXXXXXXXXXXXXXXXXXXXXXXX
s3Secret=XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX
signature=`echo -en ${stringToSign} | openssl sha1 -hmac ${s3Secret} -binary | base64`
curl -v -L -X PUT -T "${file}" \
  -H "Host: ${bucket}.s3.amazonaws.com" \
  -H "Date: ${dateValue}" \
  -H "Content-Type: ${contentType}" \
  -H "Authorization: AWS ${s3Key}:${signature}" \
  https://${bucket}.s3.amazonaws.com/${file}
────────────────────────────────────

このシェルをどこから拾ったか忘れた。しくしく
多分ここからこぴって、適当になおした。

2015年6月19日金曜日

Amazon Elastic File System (EFS) を気づいたら使えるようになっていたので、早速起動してみた。

Amazon Elastic File System (EFS) を気づいたら使えるようになっていたので、早速起動してみた。 とりあえず起動してみただけなので、とりあえずファーストレビュー。

EFS は AWS が提供する、NFS v4 サーバ。ディスク容量が自動的に割り当てられるのと、サーバ自体がスケーラブルになっているとの触れ込み。

これまで、NFS のサイジングやディスク容量の管理に悩まされていたシステム管理者にとってまさにこれだけのために、AWSに移行したくなる素晴らしいソリューション。

また s3fs  の遅さやパーミッション設定の難しさに悩んでいた人にも朗報となるだろう。しかも料金はディスクを使用している分だけ。無駄にストレージに投資することもない。

マネージメントコンソールからEFSのアイコンをクリック。プレビューの申請が通っていないと申し込み画面に飛ばされる。現在は us-west-2 (Oregon) のみ使えるようになっていた。


クリックすると最初の案内画面に飛ばされる。迷わず "Create File System" をクリック。


VPC 、Subnet 、Security Group を AZ 毎に指定。実運用に回すときは、NACL や Security Group の設計に配慮が必要になるだろう。


IP アドレスは自分で指定することも自動的に割り当てることも可能。VPC 内なのでそれほどアドレスにこだわる必要もないと思うので、自動割り当て。可用性等を考慮するとどの道、DNS名での指定が有効だと思われる。



次はタグ付け。とりあえず Name タグだけつけておく。


最後に確認画面。特に変更がなければ "Create File System" をクリックして作成完了。

これで完了。



非常に簡単に高性能で可用性が高い共有ファイルシステムが使えるようになりました。

とは言え、万能の道具は無いのでいくつか注意事項はあると思います。
特にNFS 上の単一ファイルへの書き込み時排他制御には十分注意が必要です。

マニュアルにも明示的にロックの制限が記載されています。
詳細はマニュアルを確認していただくとして、ロックに関しては以下の制限があります。
  • 一つのファイルに対して、すべてのファイルシステムのユーザーに対して87 までしかロックがかけられません。複数のサーバにまたがっても87までです。
また Linux NFSv4 の制限として以下があります。
  • 一インスタンス当たり同時に128ユーザまでしか、ファイルを同時にオープンできません。
  • 一インスタンス当たり 32,768 ファイルまでしか同時にファイルを開けません。
  • 一マウント当たり、8192 ロックまでしか獲得できません。
  • 一マウント当たりユニークなファイルとプロセスの組み合わせは、256までです。例えば 1 プロセスならば、256ファイルのロックを取得できますが、8プロセスなら 32ファイルまでのロックを獲得できません。
まぁもともと NFS のロックはあてにしてはいけない(いつの話だよw)っていう話もありますし、同時実行性能の観点からはできるだけロックレスな構成にする必要もあります。

とは言え EFS の登場で、これまで オンプレから移行しづらかった案件やスケーラビリティに問題があったシステムでも、容易に拡張可能になるのではないでしょうか。



2015年1月9日金曜日

EC2スポットインスタンスのターミネート通知機能が利用できるようになったので、ちょっと試してみた。

AWS EC2 にはスポットインスタンスというちょっと変わった利用方法があります。
インスタンス起動時に価格を指定して起動することができます。通常オンデマンドより大幅に安い値段でインスタンスを起動できますが、スポット価格が指定した価格を上回った場合、突然インスタンスが停止してしまいます。

安く使えるのでいいのですが、突然止まってしまってあ゛っ!!!てなることがあります。そういう声も多いのか、インスタンスの停止を予告する機能が追加されました。

【AWS発表】EC2スポットインスタンスのターミネート通知機能

多分以下のような使い方をするのではないでしょうか?以下の例では、通知を受けたら自身のスナップショットを作成しています。他の使い方もあるかもしれません。

#!/bin/bash

#You Need Set Proper IAM Role
#GET REGION
REGION=`curl -s -f  http://169.254.169.254/latest/meta-data/placement/availability-zone | sed -e 's/.$//g'`

#Instance ID
InstanceID=`curl -s -f  http://169.254.169.254/latest/meta-data/instance-id`

#wait until the "temination-time" available
until curl -s -f  http://169.254.169.254/latest/meta-data/spot/termination-time
do
  sleep 5
done

#Warning all
wall "!!!!!!!!!!spot instance termination begin!!!!!!!!!"

#Wait a while for saving data etc.
sleep 30

#GET EBS
EBS=`aws ec2 describe-instances --region=${REGION} --output text --instance ${InstanceID} | awk '/^EBS/{print $5}'`

#GET snapshots
for II in $EBS ; do
  #the voodoo magic
  sync; sync; sync;
  aws ec2 create-snapshot --volume-id $II --region $REGION
done