2012年6月24日日曜日

"IAM roles for EC2 instances"で"AWS PHP SDK"を試してみる


スズキです。

下記の発表より、EC2上からAPIを実行する上で、アクセスキー、シークレットキーなど
を設定するのですが、それが、より、シンプルに、安全に実現できるようになりました。
【AWS発表】IAM roles for EC2 instances – シンプルに安全にEC2からAWSサービスのAPIにアクセス可能に
今までは、IAMからアクセスキー、シークレットキーを取得し、EC2上に
設定ファイルなどの形で配置して利用する方法が多かったと思います。
(より安全にするためS3に配置して利用する方法もあると思いますが)

それが上記の機能により、AWSがEC2のメタデータにキーを設定してくれるように
なりました。具体的には下記のように取得することができます。
# curl http://169.254.169.254/latest/meta-data/iam/security-credentials/ec2
{
  "Code"            : "Success",
  "LastUpdated"     : "2012-06-24T09:01:00Z",
  "Type"            : "AWS-HMAC",
  "AccessKeyId"     : "XXXXXXXX",
  "SecretAccessKey" : "YYYYYYYY",
  "Token"           : "ZZZZZZZZ",
  "Expiration"      : "2012-06-24T15:14:42Z"
}

この機能を利用することは、下記のような利点があると思います。
  • キーをEC2に配置しなくてよくなる → 安全性向上(今までも工夫すればできたが)
  • キーは1日に複数回自動でローテーション → 安全性向上(自分でやると大変)
  • EC2内でキーに依存した操作が不要(ロールの付け直しで対応) → より汎用的に 

ということで実際に試してみます。

まずはIAMのロール作成です。


ロールの名前をつけて、


ポリシーを選んで(ここではEC2のフルアクセス)、


ポリシーのJSONも確認して、


さらに最終的な確認もして、


ロールを作成します。


そして、EC2立ち上げ時に、ロールの設定(左下)が出来るようになっているので、
上記で作成したロールを選択します。


その後、起動したEC2で下記を実行すると、アクセスキー、シークレットキーを
取得することができます。(少し時間がかかりましたが...)

# curl http://169.254.169.254/latest/meta-data/iam/security-credentials/ec2
{
  "Code"            : "Success",
  "LastUpdated"     : "2012-06-24T09:01:00Z",
  "Type"            : "AWS-HMAC",
  "AccessKeyId"     : "XXXXXXXX",
  "SecretAccessKey" : "YYYYYYYY",
  "Token"           : "ZZZZZZZZ",
  "Expiration"      : "2012-06-24T15:14:42Z"
}

さらに"AWS PHP SDK"で利用してみます。
と言っても簡単に利用でき、下記のコードで実現できます。
# cat test 
<?php
require_once("/opt/aws/lib/php/default/sdk.class.php");
date_default_timezone_set("Asia/Tokyo");
$ec2 = new AmazonEC2(array("default_cache_config" => "/tmp"));
$ec2->set_region(AmazonEC2::REGION_APAC_NE1);
$response = $ec2->describe_instances();
var_dump($response->isOK());
?>
# ./test 
bool(true)
注意点として「"default_cache_config" => "/tmp"」を指定しないと エラーが発生して、処理が止まってしまいました。

ちなみに、上記で指定した"/tmp"以下を確認してみると、
# ls /tmp/
instance_profile_credentials.cache
のようなバイナリファイルが作成されていました。

s3cmdなどのアクセスキー、シークレットキーを指定するツールも早く対応してほしいなー...
(もう、してるかも!?)
--------
http://www.suz-lab.com

"/etc/profile.d/"にサーバ共通の環境変数を設定

スズキです。

サーバ共通(ユーザ共通)の環境変数の設定は、bashの場合は"/etc/profile"、"/etc/bashrc"で、
cshの場合は"/etc/csh.login"、"/etc/csh.cshrc"で設定すると思いますが、上記のスクリプトは
bashの場合は"/etc/profile.d/*.sh"、cshの場合は"/etc/profile.d/*.csh"を読みこむようにも
なっています。(CentOS 6.2で確認)

実際に"/etc/profile.d/"を見てみると下記のようになっており。
# cd /etc/profile.d/
# ls
colorls.csh  colorls.sh  glib2.csh  glib2.sh  lang.csh  lang.sh  less.csh  less.sh  which2.sh
アプリケーション毎の設定が行われています。

ということで、もし、"suz-lab"アプリに関する設定が必要な場合は、
下記のように、"/etc/profile.d/suz-lab.sh"、"/etc/profile.d/suz-lab.csh"を
作成する形になるのでは、と思います。
# cd /etc/profile.d/
# cat /etc/profile.d/suz-lab.sh 
export SUZ_LAB_VERSION=1
# cat /etc/profile.d/suz-lab.csh 
setenv SUZ_LAB_VERSION 1
実際にリブート後、下記のように確認すると、
# echo $SUZ_LAB_VERSION
1
ちゃんと環境変数が設定されていることがわかります。

AWSコマンドラインツールの環境変数設定は、ここでやるといいかも。
--------
http://www.suz-lab.com

2012年6月10日日曜日

中身をそのままにEBSのサイズを増やす方法のまとめ

スズキです。

CDPネタです。今回の対象は「Ondemand Diskパターン」です。


このパターンの「実装」に
アタッチ後、使用しているファイルシステムのリサイズコマンド(例えばresize2fs)で新しい容量まで領域を拡張する。

といった記載があります。

その手の内容は、本ブログでもいろいろと紹介してきていたので、
今回は、再度、まとめ直してみました。


▼Linuxで拡張する場合

CDPでも紹介されている"resize2fs"を利用します。詳しくは下記が参考になります。
"resize2fs"でEBSの容量を増やす
ただし、EBSをパーティション分割している場合は、上記の方法だけではうまくいかず、
下記で紹介した方法も必要になります。
パーティション分割されたEBSを"resize2fs"で拡張
▼Windowsで拡張する場合

Windowsの場合は、ディスクの管理(コンピューターの管理)から可能です。
詳しくは下記が参考になります。
WindowsのEC2でCドライブのサイズを増やす
ちなみにルートディスク(Cドライブ)を拡張する場合も、当然、
EBSを一回デタッチして容量の大きなものに差し替えるのですが、
デタッチはEC2をストップ状態にしておく必要があります。

久しぶりのCDP...
--------
http://www.suz-lab.com/

2012年6月7日木曜日

NagiosでHTML内の文字列の監視

スズキです。

Nagiosの"check_http"というプラグインで可能です。

"-r"オプションを指定することで、その文字列がHTMLコンテンツに
含まれる場合はOK、含まれない場合はCRITICALとすることができます。

# /usr/lib/nagios/plugins/check_http -H blog.suz-lab.com -r suz-lab
HTTP OK: HTTP/1.1 200 OK - 149795 bytes in 0.553 second response time |time=0.552581s;;;0.000000 size=149795B;;;0

# /usr/lib/nagios/plugins/check_http -H blog.suz-lab.com -r suzuki
HTTP CRITICAL: HTTP/1.1 200 OK - pattern not found - 149795 bytes in 0.458 second response time |time=0.457688s;;;0.000000 size=149795B;;;0

結果を反対(文字列含まれる場合はNG、含まれない場合はOK)とする場合は
"--invert-regex"オプションもつけることで実現できます。

# /usr/lib/nagios/plugins/check_http -H blog.suz-lab.com --invert-regex -r suz-lab
HTTP CRITICAL: HTTP/1.1 200 OK - pattern found - 149795 bytes in 0.536 second response time |time=0.535726s;;;0.000000 size=149795B;;;0

# /usr/lib/nagios/plugins/check_http -H blog.suz-lab.com --invert-regex -r suzuki
HTTP OK: HTTP/1.1 200 OK - 149795 bytes in 0.738 second response time |time=0.738425s;;;0.000000 size=149795B;;;0

"check_http"、オプション多すぎ...
--------
http://www.suz-lab.com/

2012年6月4日月曜日

WindowsのEC2でCドライブのサイズを増やす

スズキです。

WindowsのEC2のCドライブは30GBですが、用途によっては
サイズを増やしたい場合があると思います。

この場合、下記のように、CドライブのEBSをよりサイズが大きなものに
差し替える方法で増やすことが可能です。

1. 適当なAMIからWindowsのEC2インスタンスを起動させます。


2. 起動したEC2を停止します。


3. 起動したEC2のCドライブに相当するEBSをデタッチします。
(EC2が停止状態だと可能です)


4. デタッチしたEC2のスナップショットを作成します。


5. デタッチしたEC2のスナップショットを作成します。


5. 作成したスナップショットからサイズを大きくしたEBSを新たに作成します。


6. 新たに作成したサイズの大きいEBSをEC2(Windows)に再度アタッチします。


7. アタッチするときにデバイスは"/dev/sda1"とします。


8. サイズの大きいEBSをアタッチした状態でEC2(Windows)を起動します。


9. ログインしてCドライブを確認すると、まだ昔のサイズ(30GB)です。


10. 「コンピューターの管理」から「ディスクの管理」を行います。


11. 「ディスクの管理」からCドライブを拡張します。


12. 無事、ディスクが40GBに拡張されました。


13. Cドライブとしても40GBに拡張されていることがわかります。


あとは、必要に応じてAMIにするだけです。(一回はやっておかないと...)
--------
http://www/suz-lab.com/