aws memo

AWS関連の備忘録 (※本ブログの内容は個人的見解であり、所属組織及び企業の意見を代弁するものではありません。1年以上古いエントリは疑ってかかってください)

カスタムの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が起動しなくなる。こちらにも書いてある。

linux - EC2 instance launched from AMI not reachable(ssh) after start/stop or reboot - Stack Overflow

[対策]

/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 

Amazon EC2 Cluster Compute Instances - Amazon EC2 Cluster, Xeon X5570 2.95 Ghz, 10G Ethernet | TOP500 Supercomputer Sites

CC2.8xlarge 

Amazon EC2 Cluster Compute Instances - Amazon EC2 Cluster, Xeon 8C 2.60GHz, 10G Ethernet | TOP500 Supercomputer Sites

C3.8xlarge 

Amazon EC2 C3 Instance cluster - Amazon EC2 Cluster, Intel Xeon E5-2670v2 10C 2.500GHz, 10G Ethernet | TOP500 Supercomputer Sites

[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つの条件が必要

  1. VPC内でHVM AMIをC3.8xlargeで起動する 
  2. ・OS側で ixvgevf ドライバを有効にする
  3. インスタンスの属性 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