SESの 送信クオータについて
SESチームのブログが出ていた。
All about SES daily quota - Amazon SES Blog
項目だけメモ。
- なぜ送信クオータがあるのか?
- どのようにして自分のクオータを確認するのか?
- クオータとTPS制限に関係はあるのか?
- いつクオータはリセットされるのか?
- クオータを超えて送信するとどうなるのか?
- 同報送信の場合、1通とカウントされるのか?
- クオータの段階はあるのか?
- どうしたらクオータを増やせるのか?
参考資料
よくある質問 - Amazon SES(クラウドベースのメールサービス Amazon Simple Email Service) | アマゾン ウェブ サービス(AWS 日本語)
Amazon Web Services ブログ: 【AWS発表】Trusted Advisor アップデート - 新しいチェックと新しいCloudTrailのリージョン ( 2014/5/23 Daily quotaを確認できるようになった)
[AWSマイスターシリーズ] Amazon Simple Email Service
VM ImportしたCentOS6.5のAMIを作る前の手順
VM Importで持ってきたCentOS5.6のインスタンスからそのままAMIを作成してもよいが、いくつかEC2ぽくない部分があるので、AMI作成前にこれらを施す。
- key pairのpublickeyデプロイスクリプトを仕込む
- rootパスワードを起動時にランダム生成・セットするスクリプト
- udev で eth0のMACアドレスを保持しないようにする
- sshdで rootのパスワードログイン禁止、DNS checks無効化
- ホストキーペアを削除
- historyを削除
- ~/.ssh/ 以下を削除
- cloud-init の仕組みを入れる
- 別ユーザ(例: ec2-user)を作成し、rootログインを禁止する
参考 : http://docs.aws.amazon.com/AWSEC2/latest/UserGuide/building-shared-amis.html
手順
rootパスワードのランダム化を /etc/rc.d/rc.localに追記
# set a random pass on first boot if [ -f /root/firstrun ]; then dd if=/dev/urandom count=50|md5sum|passwd --stdin root passwd -l root rm /root/firstrun fi
このスクリプトを動作させるためにフラグファイルを作っておく
touch /root/firstrun
publickeyの埋め込み処理を、 /etc/rc.d/rc.localに追記
if [ ! -d /root/.ssh ]; then mkdir -m 0700 -p /root/.ssh restorecon /root/.ssh fi # Get the root ssh key setup ReTry=0 while [ ! -f /root/.ssh/authorized_keys ] && [ $ReTry -lt 5 ]; do sleep 2 curl -f http://169.254.169.254/latest/meta-data/public-keys/0/openssh-key > /root/.ssh/authorized_keys ReTry=$[Retry+1] done chmod 600 /root/.ssh/authorized_keys && restorecon /root/.ssh/authorized_keys
udevでのethX MACアドレス 自動保存の無効化
rm /etc/udev/rules.d/70-persistent-net.rules cp /lib/udev/rules.d/75-persistent-net-generator.rules ~ vi /lib/udev/rules.d/75-persistent-net-generator.rules diff /lib/udev/rules.d/75-persistent-net-generator.rules ~/75-persistent-net-generator.rules 93c93 < #DRIVERS=="?*", IMPORT{program}="write_net_rules" --- > DRIVERS=="?*", IMPORT{program}="write_net_rules" reboot
上記手順を終えて、create imageする
LVMなEBSを別インスタンスにアタッチして中身を見る
EC2インスタンスで、grubをいじったり、ドライバをいじったりしてrebootするとうまくいかない場合は、一旦インスタンスをstopし、/dev/sda1 にアタッチされているEBSをでタッチし、別インスタンスの/dev/sdf などにアタッチして、dmesgなどを確認することができる。
# mount /dev/sdf /mnt # cd /mnt/var/log/
古典的なパーティション・フォーマットであれば上記手順でよいが、 LVMなEBSの場合はデバイスがすぐに出てこないので、上記手順では参照できない。
# pvs PV VG Fmt Attr PSize PFree /dev/sdf2 VolGroup lvm2 a-- 7.51g 0 # lvs LV VG Attr LSize Pool Origin Data% Move Log Cpy%Sync Convert lv_root VolGroup -wi-ao---- 6.71g lv_swap VolGroup -wi------- 816.00m # ls /dev/VolGroup ls: cannot access /dev/VolGroup: No such file or directory
そこで、lvchange(8)を使う
### デバイスを有効にしてマウント # lvchange --available y /dev/VolGroup/lv_root # mount /dev/VolGroup/lv_root /mnt
# cd /mnt/var/log ### 作業が終了したらアンマウントしてデバイスを無効化 # umount /mnt # lvchange --available n /dev/VolGroup/lv_root
CentOS6.5 HVM インスタンスを SR-IOV化する
2016.01.25 dkmsが抜けている手順のためカーネルアップデート後に正常に起動しないはずです。実際にはdkms化も加えてください。(参照)
2016.01.25 CentOS6.7, RHEL6.7はカーネルにSR-IOVドライバが入っていますのでわざわざ6.5でこのような面倒なことは避けたほうがよいです。
ーーー
素のCentOS6.5 なHVM AMIの作成方法についてはこちら。
CentOS6.5を VM ImportでEC2にインポートする - aws memo
最近のインスタンスタイプでは、Enhanced Networking というSR-IOVによるネットワークの機能強化に対応している。(C3, I2, R3)
Enhanced Networkingを使うには、いくつかの条件を満たす必要がある。
- VPC内に起動した HVM インスタンスであること
- カーネル2.6.32以降であること
- SR-IOVドライバが組み込まれていること
- AMI もしくはインスタンスの attributeでSR-IOVが有効になっていること
ということで、素のCentOS6.5 HVM インスタンスを SR-IOV化する手順のメモ。
流れ
手順
まずは CentOS6.5 HVM AMIを、VPC内に起動し、sshログイン。
SR-IOVドライバを取得する。ドライバはこちらから取得する。(2014年4月時点では2.14.2が最新)
Intel Ethernet Drivers and Utilities - Browse /ixgbevf stable at SourceForge.net
ビルド・設定する。大枠の手順はこちら(
Enabling Enhanced Networking on Linux Instances in a VPC - Amazon Elastic Compute Cloud
)
yum -y update && sudo yum -y install gcc make kernel-devel kernel-headers yum -y install perl man pciutils reboot ---- tar zxvf ixgbevf-2.14.2.tar.gz cd ixgbevf-2.14.2/src make install echo "options ixgbevf InterruptThrottleRate=1,1,1,1,1,1,1,1" > /etc/modprobe.d/ixgbevf.conf
ここで、udevによる悪さ対策をしておく。(これをしないと、SR-IOVなNICがうまく認識されず、bootしてもsshログインできなくなる)
rm /etc/udev/rules.d/70-persistent-net.rules cp /lib/udev/rules.d/75-persistent-net-generator.rules ~ vi /lib/udev/rules.d/75-persistent-net-generator.rules diff /lib/udev/rules.d/75-persistent-net-generator.rules ~/75-persistent-net-generator.rules 93c93 < #DRIVERS=="?*", IMPORT{program}="write_net_rules" --- > DRIVERS=="?*", IMPORT{program}="write_net_rules" reboot
udevで新しいeth0を認識しても そのルールを /etc/udev/rules.d/に書かないようにすることと、既存の ルールを削除しておくことの2点。
参考: SIOS "OSSよろず" ブログ出張所: CentOS 6 系で NIC 交換すると eth0 と認識されない
次に、インスタンスをstopし、属性変更してSR-IOVを有効にする( on Mac OSX)
$ ec2-stop-instances --region us-west-2 i-xxxxxxx $ ec2-modify-instance-attribute --region us-west-2 --sriov simple i-xxxxxxx $ ec2-describe-instance-attribute --region us-west-2 --sriov i-xxxxxxx sriovNetSupport i-xxxxxxx simple $ ec2-start-instances --region us-west-2 i-xxxxxxx
その後sshでログインして確認。
# lsmod | grep ixgbevf ixgbevf 58629 0 # modinfo ixgbevf ilename: /lib/modules/2.6.32-431.11.2.el6.x86_64/kernel/drivers/net/ixgbevf/ixgbevf.ko version: 2.14.2 license: GPL description: Intel(R) 82599 Virtual Function Driver author: Intel Corporation, <linux.nics@intel.com> srcversion: 50CBF6F36B99FE70E56C95A alias: pci:v00008086d00001515sv*sd*bc*sc*i* alias: pci:v00008086d000010EDsv*sd*bc*sc*i* depends: vermagic: 2.6.32-431.11.2.el6.x86_64 SMP mod_unload modversions parm: InterruptThrottleRate:Maximum interrupts per second, per vector, (956-488281, 0=off, 1=dynamic), default 1 (array of int) # ethtool -i eth0 | grep driver driver: ixgbevf # dmesg | grep ixgbevf ixgbevf: Intel(R) 10 Gigabit PCI Express Virtual Function Network Driver - version 2.14.2 ixgbevf 0000:00:03.0: setting latency timer to 64 ixgbevf: eth%d: ixgbevf_check_options: dynamic interrupt throttling enabled ixgbevf 0000:00:03.0: irq 48 for MSI/MSI-X ixgbevf 0000:00:03.0: irq 49 for MSI/MSI-X ixgbevf 0000:00:03.0: irq 50 for MSI/MSI-X ixgbevf 0000:00:03.0: Multiqueue Enabled: Rx Queue count = 2, Tx Queue count = 2 ixgbevf: eth0: ixgbevf_probe: Intel(R) 82599 Virtual Function ixgbevf: eth0: ixgbevf_probe: GRO is enabled ixgbevf: eth0: ixgbevf_probe: Intel(R) 10 Gigabit PCI Express Virtual Function Network Driver ixgbevf 0000:00:03.0: NIC Link is Up 10 Gbps ixgbevf: eth0: ixgbevf_change_mtu: changing MTU from 1500 to 9001
ここでcreate imageでHVM AMIを作成すると、SR-IOV属性が付いたHVM AMIが作成される。作成したHVM AMIを、VPC内にC3で起動すると、同じようにixgbevfドライバになっているはず。C3/I2/R3以外のタイプで起動する、or VPC外で起動すると通常のvifドライバになることを確認する。
SR-IOV対応版CentOS6.5 HVM AMI 作成手順
SR-IOV対応版CentOS 5.6 HVM AMI を作ったので、その流れをメモ。
概要
VM Import/Export でHVM なインスタンスを作り、設定を行ってAMIを作るイメージ。
手順
- オンプレミスで 仮想マシンとしてCentOS5.6をセットアップする
- VMImport の機能で仮想マシンを EC2としてインポートする
- インポートしたEC2インスタンスからHVM AMIを作成する
- HVM AMIから起動したEC2インスタンスで、SR-IOV化を施す
- SR-IOV化したインスタンスから、公開用のAMIを作成する
1,2の手順はこちら。
CentOS6.5を VM ImportでEC2にインポートする - aws memo
3の手順はこちら。
VM ImportしたCentOS6.5のAMIを作る前の手順 - aws memo
4,5の手順はこちら。
CentOS6.5 HVM インスタンスを SR-IOV化する - aws memo
CentOS6.5 HVM AMI (SR-IOV対応)
作ったので公開。
2015/1/14追記: C4対応のCentOS6.6を公開したので、そちらを使ってください
C4.8xlarge対応 HVM AMI ( SR-IOVも対応) - aws memo
----
簡単な内容
(作成方法は別エントリ)
- CentOS-6.5-x86_64-minimal.iso ベース( 2.6.32-431.11.2.el6.x86_64)
- SR-IOV Driver ixgbevf-2.14.2 設定済み
- 追加パッケージ : gcc,make,kernel-deve,perl,man,pciutils
- ログインアカウント: root
- Cloud-init未対応
CentOS6.5_HVM_SR-IOV_ixgbevf-2.14.2
- Virginia: ami-0bc9d462
- Oregon: ami-4c85ee7c
- Tokyo: ami-7fa6fe7e
CentOS6.5_HVM_SR-IOV_ixgbevf-2.14.2_16cores_for_c3.8xlarge
- Virginia: ami-37c9d45e
- Oregon: ami-a499f294
- Tokyo: ami-e5f688e4
(ブートパラメータにmaxcpus=16 を記載しているので、c3.8xlargeを16コアで使う場合にはこちら)
2014.8.12追記
yum updateでカーネルアップデートすると、ドライバが読み込めなくなった時は、こちらを参照のこと。
SR-IOV対応版AMIでのカーネルアップデート時は注意 (自分用メモ) - matetsuだもんで
Spotインスタンスで Private IPを指定して起動する
VPC内でspot requestする際、Management Consoleでは Private IP を指定する項目が無いため、指定したサブネット内の空きアドレスが自動で振られることになる。(正確には、サブネット内の空きアドレスの一つからENIが作られ割り振られる)
コマンドラインでは、既存ENIを指定することが可能。なので、まずは事前にspotで使いそうな数だけENIを作っておく。
# 例オレゴンリージョンのVPCの サブネットsubnet-a5b991d1 に、 # 172.16.1.101〜108のENIを作成する $ for i in {101..108} ; do ec2-create-network-interface --region us-west-2 --private-ip-address 172.16.1.$i subnet-a5b991d1; done
その上で、起動時には
# 172.16.1.102 のeni-idを取得する $ ENIID=`ec2-describe-network-interfaces --region us-west-2 | grep 172.16.1.102 | grep eni | awk '{print $2;}'` # eniをeth0としてスポットリクエスト発行 $ ec2-request-spot-instances ami-f8f297c8 --region us-west-2 \ --instance-type c3.8xlarge --k id_rsa \ --network-attachment $ENIID:0 \ -p 2.0
ちなみに、通常のオンデマンドインスタンス起動でもこのテクニックは利用可能。コマンドが異なるだけで、オプションはほぼ一緒である(値段指定が無いくらい)ことがわかる。
# 172.16.1.102 のeni-idを取得する $ ENIID=`ec2-describe-network-interfaces --region us-west-2 | grep 172.16.1.102 | grep eni | awk '{print $2;}'` # eniをeth0として起動 $ ec2-run-instances ami-f8f297c8 --region us-west-2 \ --instance-type c3.8xlarge --k id_rsa \ --network-attachment $ENIID:0
これをうまくスクリプト化しておくと便利。