カスタムのRHEL 6.4 HVM AMIを作る時の注意点
C3で、RHEL 6.4 HVM AMIにSR-IOVドライバを入れる手順はこちら
[HPC] C3.8xlarge のRHEL6.4 HVMで SR-IOVを有効にする - aws memo
で、ドライバが入った状態のカスタムAMIを作っておきたいと思うのが人情。
この時、create image する前に2つ注意点。(2013年 11月28日時点。RHEL AMIが改善されれば不要になるはず)
1. udev に注意
[症状]
作成したカスタム RHEL AMIで起動すると、 status checkがエラーになり、ssh接続もpingも通らない。
[原因]
/etc/udev/rules.d/70-persistend-net.rules が存在している状態でAMIを作ると、このファイルを持ったままになる。そのAMIで起動すると、本来 eth0として使いたいNICがeth1として認識してしまう。(rulesに書いてあるMACアドレスをeth0として確保しようとするため)
この状態になると
[対策]
AMIを作る前に、 このファイルをrmしておく。
sudo rm /etc/udev/rules.d/70-persistend-net.rules
2. rc.local に注意
[症状]
udevの対策をして作成したカスタムRHEL AMIで起動すると、 pingは通るが sshが通らない( connection refusedになる)
[原因]
/etc/rc.local のバグで、 /etc/ssh/sshd_config がおかしい状態でAMIを作ってしまう。
そのため、AMIから起動すると、sshdが起動しなくなる。こちらにも書いてある。
[対策]
/etc/rc.localを修正する。sshd_configをいじってるところをコメントアウト
$ diff rc.local /etc/rc.local 19,21c19,21 < #cat <> /etc/ssh/sshd_config < #UseDNS no < #PermitRootLogin without-password --- > cat < > /etc/ssh/sshd_config > UseDNS no > PermitRootLogin without-password
EC2の Top500 変遷まとめ
まとめてみた。
Flopsの向上はもちろんだが、年々、Efficiencyが上がっていることが読み取れる。特に、C3になってEnhanced NetworkとしてSR-IOVが使えるようになり、向上している。
cc1.4xlarge | cc2.8xlarge | c3.8xlarge | |
cores | 7,040 | 17.024 | 26,496 |
Linpak(Rmax) | 41.8TFlops | 240.1TFlops | 484.2TFlops |
Theoretical Peak(Rpeak) | 82.5TFlops | 354.1TFlops | 593.9TFlops |
Efficiency | 50.6% | 67.8% | 81.5% |
Date | 11/2010 | 11/2011 | 11/2013 |
Rank | 233 | 42 | 64 |
以下、Topp500の情報ソース
CC1.4xlarge
CC2.8xlarge
C3.8xlarge
[HPC] C3.8xlarge のRHEL6.4 HVMで SR-IOVを有効にする
CC2 (Sandy Bridge) の後継 C3 (Ivy Bridge)が追加された。
詳しくはこちらを参考のこと。
Amazon Web Services ブログ: 【AWS発表】 新世代の数値計算向けEC2インスタンス
HPCの観点から見ると、CC2.8xlarge の後継に当たるのは C3.8xlarge となる。
スベック比較は以下の通り
c3.8xlarge | cc2.8xlarge | cc1.4xlarge | |
vCPU数 | 32 | 32 | 16 |
総ECU | 108 | 88 | 33.5 |
RAM(GiB) | 60 | 60.5 | 23 |
インスタンス ストレージ |
2 x 320(SSD) | 4 x 840 | 2 x 840 |
CPU | Xeon E5-2680v2 (Ivy Bridge) |
Xeon E5-2670 (Sandy Bridge) |
Xeon X5570 (Nehalem) |
NIC | High | 10GbE | 10GbE |
その中でも特に注目すべき点は、ネットワークI/Oの改善( Enhanced Networking)で、C3はSR-IOVをサポートしている。
※SR-IOVについてはこちら。(PCI-SIG SR-IOV Primer: An Introduction to SR-IOV Technology )
SR-IOVを使うには、3つの条件が必要
- ・VPC内でHVM AMIをC3.8xlargeで起動する
- ・OS側で ixvgevf ドライバを有効にする
- ・インスタンスの属性 sriovNetSupport を有効にする(もしくは sriovNetSupportが有効になったHVM AMIで起動する)
1については割愛。2については、Amazon Linux 2013.9 では有効になっているので、気にしなくて良い。
以下、RHEL 6.4 HVM AMIで、SR-IOVを有効にする手順。
1. VPCで起動
$ ec2-run-instances ami-18a23f28 -t c3.8xlarge -s subnet-xxxxx \ -k id_rsa -g sg-xxxxxx --region us-west-2 --private-ip-address 172.16.11.204
2. OSでixvgevfドライバを入れる
ixvgevfドライバのビルドに必要な前処理
# sudo yum -y update # sudo yum -y install gcc make kernel-devel kernel-headers $sudo reboot
3.ドライバダウンロード、ビルド、インストール
$ wget "http://downloads.sourceforge.net/project/e1000/ixgbevf stable/2.11.3/ixgbevf-2.11.3.tar.gz" $ tar zxvf ixgbevf-2.11.3.tar.gz $ cd ixgbevf-2.11.3/src $ sudo make install $ sudo su - # echo "options ixgbevf InterruptThrottleRate=1,1,1,1,1,1,1,1" > /etc/modprobe.d/ixgbevf.conf # reboot
4.インスタンス停止,属性sriov変更,起動
$ ec2-stop-instances i-xxxxxx --region us-west-2
$ ec2-modify-instance-attribute --region us-west-2 --sriov simple i-xxxxxx
$ ec2-start-instances i-xxxxxx --region us-west-2
5.確認
$ /sbin/ethtool -i eth0 | grep driver driver: ixgbevf
注意
ixgbevf をセットアップする前に、 sriovNetSupportを有効にして起動してしまうと、NICが有効にならずにOSが起動してしまい、リモートからアクセスできなくなる。必ず、 上記3の手順をした後に 4をすること。
参考
Enabling Enhanced Networking on Linux Instances in a VPC - Amazon Elastic Compute Cloud
AWS CLIで Spot Instance の価格履歴を CloudWatchで見る
ということでこれ
Shell Script to bring EC2 SpotInstance Prices to CloudWatch.
やっていることは単純で、
・aws ec2 describe-spot-price-history
でヒストリを取得して、
・aws cloudwatch put-metric-data
で、CloudWatchにputしているだけ。
AWS CLIで上限を確認する
AWSには、各種の上限(ソフトリミット)があり、上限緩和申請で上限を上げることができる。
※ 詳しくはこちら AWS: サービスの各種上限( softlimit) と上限緩和申請 - aws memo
上限緩和を申請した結果、自分のアカウントの上限が今いくつになっているか?を確認するには、サポート(ビジネス・エンタープライズ)に入ると使える Trusted Advisor で確認できる。
こちら、AWS CLIでも一部確認可能になった。実行例は以下
$ aws ec2 describe-account-attributes --region ap-northeast-1 --output text vpc-max-security-groups-per-interface 5 max-instances 20 supported-platforms EC2 VPC default-vpc none max-elastic-ips 5 vpc-max-elastic-ips 5
個別の値を取得するには
$ aws ec2 describe-account-attributes --attribute-names max-instances --region ap-northeast-1 --output text
max-instances
20
今後増えていくと思われる。
AWS CLIでEC2を起動 (エフェメラルディスク付き)
AWS CLIで、 run-instances を実行する
リファレンスはこちら:
run-instances — AWS CLI 1.1.2 documentation
Using Amazon EC2 Instances - AWS Command Line Interface
RunInstances - Amazon Elastic Compute Cloud
ポイントは、--block-device-mappings オプションの JSON記述。
$ aws ec2 run-instances \ --region us-west-2 \ --image-id ami-0358ce33 \ --key-name id_rsa \ --security-group-ids sg-c20dfdad \ --subnet-id subnet-36b5ec5d \ --private-ip-address 10.100.1.10 \ --instance-type m1.large \ --ebs-optimized \ --block-device-mappings '[ {"DeviceName":"/dev/sdb","VirtualName":"ephemeral0"}, {"DeviceName":"/dev/sdc","VirtualName":"ephemeral1"}]'
JSONの部分を整形するとこんな感じ。
[ { "DeviceName":"/dev/sdb", "VirtualName":"ephemeral0" }, { "DeviceName":"/dev/sdc", "VirtualName":"ephemeral1" } ]
このJSONをファイルに書きだして、このように実行することも可能
$ aws ec2 run-instances \ --region us-west-2 \ --image-id ami-0358ce33 \ --key-name id_rsa \ --security-group-ids sg-c20dfdad \ --subnet-id subnet-36b5ec5d \ --private-ip-address 10.100.1.10 \ --instance-type m1.large \ --ebs-optimized \ --block-device-mappings file:////home/ec2-user/mapping.json
もしくは
$ aws ec2 run-instances \ --region us-west-2 \ --image-id ami-0358ce33 \ --key-name id_rsa \ --security-group-ids sg-c20dfdad \ --subnet-id subnet-36b5ec5d \ --private-ip-address 10.100.1.10 \ --instance-type m1.large \ --ebs-optimized \ --block-device-mappings http://mybucket.s3.amazonaws.com/mapping.json
参考 Specifying Parameter Values for the AWS Command Line Interface
ちなみに、従来の ec2-run-instances だとこんな感じ
ec2-run-instances \ ami-0358ce33 \ -k id_rsa \ -g sg-c20dfdad \ --region us-west-2 \ -s subnet-36b5ec5d \ --private-ip-address 10.100.1.12 \ --ebs-optimized \ -b "/dev/sdb=ephemeral0" \ -b "/dev/sdc=ephemeral1" \ -t m1.large \
ec2周りは、まだ api-toolsの方が少し便利かも。というか、botoの方が便利かも。
AWS CLIで CloudFormationを操作する
CloudFormationのドキュメントで、コマンドラインのところでもすでに(2013.10.18現在) AWS CLIを使うようになっている。
※ こっちでは、"The prior AWS CloudFormation CLI tools are still available, but not recommended. "と書いてある
※敢えて古い api toolsを使い始めるならこちら( CloudFormaion apitoolsをAmazon Linuxで使う)を参照。
AWS CLIのセットアップ
Amazon Linuxならデフォルトで入っていてPATHも通っているので、credential 関係だけ設定する。
$ vi ~/.awscredential $ cat ~/.awscredential AWSAccessKeyId=<<your AWS access ID>> AWSSecretKey=<<your AWS secret key> > $ vi ~/.bashrc $ cat ~/.bashrc export AWS_CREDENTIAL_FILE=~/.awcredential $ source ~/.bashrc
動作確認
スタック一覧
$ aws cloudformation list-stacks --region ap-northeast-1
スタック作成(S3にあるテンプレートの場合)
$ aws cloudformation create-stack--region ap-northeast-1 \ --stack-name test \ --template-url http://s3.amazonaws.com/sample/test.template \ --parameters ParameterKey=Param1,ParameterValue=value1
スタック作成(ローカルのテンプレートの場合)
$ aws cloudformation create-stack--region ap-northeast-1 \ --stack-name test \ --template-body file:////home/ec2-user/test.template \ --parameters ParameterKey=Param1,ParameterValue=value1
スタック詳細
$ aws cloudformation describe-stacks --region ap-northeast-1 \ --stack-name test
テンプレートのチェック
$ aws cloudformation validate-template --region ap-northeast-1 \ --template-body file:////home/ec2-user/test.template
コマンドリファレンス
http://docs.aws.amazon.com/cli/latest/reference/cloudformation/index.html