aws memo

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

RHEL6 AMIでブート領域を拡張する

背景

RHEL6系のAMIからEC2を起動する際にブート用EBSのサイズを大きくしても、OSからは認識されない。(Amazon Linuxは起動時に自動的にサイズを合わせてくれる)

考察

パーティションがGPTになっている。かつ、起動時に対応してくれるようなスクリプトがAMIに仕込まれていない。

 

対処方法(サマリ)

 

  1. 該当インスタンスのBoot EBSを100GBに指定して起動
  2. 該当インスタンス( A)をstopして /dev/sda1 にアタッチされているEBSをデタッチ
  3. 作業用インスタンス(B)を別途起動し、上記EBSを/dev/sdb にアタッチ
  4. 作業用インスタンス(B)にて作業 ( パーティションサイズ変更※ & ファイルシステムサイズ拡張※)
  5. 上記EBSを作業用インスタンス(B)からデタッチし、該当インスタンス(A)の /dev/sda1にアタッチ
  6. 該当インスタンス(A)をstartする

 

 

対処方法(詳細)

肝はこちらに書いてあるが、gdiskを使った。

docs.aws.amazon.com

作業用インスタンス(B)にて

まずはgdiskをインストール

$ sudo yum -y install gdisk 

gdiskを使用して、まずはパーティション情報を表示させる。赤字はメモっとく。

$ sudo gdisk /dev/svdb

Command (? for help): p

Disk /dev/xvdb: 209715200 sectors, 100.0 GiB

Logical sector size: 512 bytes

Disk identifier (GUID): C0E76C1A-B601-48A7-A1E0-CC49DEFF6CB4

Partition table holds up to 128 entries

First usable sector is 34, last usable sector is 20971486

Partitions will be aligned on 2048-sector boundaries

Total free space is 2014 sectors (1007.0 KiB)

 

Number  Start (sector)    End (sector)  Size       Code  Name

   1            2048        20971486   10.0 GiB    EF00  Linux

パーティションを削除する

Command (? for help): o

This option deletes all partitions and creates a new protective MBR.

Proceed? (Y/N): Y

新しいパーティションを作成する

Command (? for help): n

Partition number (1-128, default 1): 1

First sector (34-209715166, default = 2048) or {+-}size{KMGTP}: 2048

Last sector (2048-209715166, default = 209715166) or {+-}size{KMGTP}:

Current type is 'Linux filesystem'

Hex code or GUID (L to show codes, Enter = 8300): EF00

Changed type of partition to 'EFI System'

Expert モードに入って、ディスクGUIDを元に戻す(最初に表示した時のやつ)

Command (? for help): x

Expert command (? for help): g

Enter the disk's unique GUID ('R' to randomize): C0E76C1A-B601-48A7-A1E0-CC49DEFF6CB4

The new disk GUID is C0E76C1A-B601-48A7-A1E0-CC49DEFF6CB4

変更をディスクに書き込む

Expert command (? for help): w

Final checks complete. About to write GPT data. THIS WILL OVERWRITE EXISTING

PARTITIONS!!

Do you want to proceed? (Y/N): y

OK; writing new GUID partition table (GPT) to /dev/xvdb.

The operation has completed successfully.

念の為、ファイスシステムのチェック。

$ sudo e2fsck -f /dev/xvdb1 

$ lsblk

NAME    MAJ:MIN RM  SIZE RO TYPE MOUNTPOINT

xvda    202:0    0   10G  0 disk

└─xvda1 202:1    0    6G  0 part /

xvdb    202:16   0  100G  0 disk

└─xvdb1 202:17   0  100G  0 part

lsblkの結果を見る限り、これだけだと、パーティションは拡張したがファイルシステムは拡張していないので、拡張しておく。

$ sudo resize2fs /dev/xvdb1

この、ファイルシステム拡張についてだけが、こっち↓に書いてあって、ハマるポイント。

docs.aws.amazon.com

うまくいったら、元のインスタンスの/dev/sda1 にアタッチする。

 

 

 

 

 

 

 

C4.8xlarge対応 HVM AMI ( SR-IOVも対応)

2015/8/15 CentOS6.7, RHEL6.7が出ているので、こちらのAMIは公開を取りやめます。

 

ーーー

C4.8xlargeでも起動するRHEL6.6とCentOS6.6を公開。

(もちろん、それ以外のHVM対応インスタンスタイプでも起動する。)

簡単な内容

(作成方法は別エントリ)

RHEL

RHEL6.6_maxcpus-32-20150113
RHEL6.6_HVM_SR-IOV_ixgbevf-2.16.1-maxcpus-18-20150113 

 

CentOS

CentOS6.6_maxcpus-32-20150114
CentOS6.6_HVM_SR-IOV_ixgbevf-2.16.1-maxcpus-18-20150114

   (ブートパラメータにmaxcpus=18 を記載しているので、c4.8xlargeを物理18コアで使える。c3.8xlarge, cc2.8xlargeでは 物理16コアで利用可能)

 

 注意

yum updateでカーネルアップデートして、SR-IOVドライバが読み込めなくなった時は、こちらを参照のこと。

SR-IOV対応版AMIでのカーネルアップデート時は注意 (自分用メモ) - matetsuだもんで

 

RHEL7.0, 6.5でタイムゾーン設定

忘れないようにメモ。

 こちらも参考に

実践でも役立つLPICドリル(8):Linux時刻管理の仕組みと設定 (1/4) - @IT

 

RHEL6.5 HVM AMI (RHEL-6.5_HVM_GA-x86_64-7-HVM-Hourly2 - ami-53641e52 Tokyo Region)の場合
$ ls -l /etc/localtime 
-rw-r--r--. 1 root root 3519  4月 21 15:49 2014 /etc/localtime
$ diff /etc/localtime  /usr/share/zoneinfo/America/New_York 
$ date
2014年  8月  5日 火曜日 21:32:29 EDT

と、/etc/localtime がシンボリックリンクではなく実体コピーとなっていてEDTとなる。

$ sudo ln -f -s /usr/share/zoneinfo/Asia/Tokyo /etc/localtime 
$ ls -l /etc/localtime 
lrwxrwxrwx. 1 root root 30  8月  6 10:34 2014 /etc/localtime -> /usr/share/zoneinfo/Asia/Tokyo
$ date
2014年  8月  6日 水曜日 10:34:27 JST

となる

 注意: /etc/adjtime にUTCと書いてあること(LOCALと書いていないこと)を確認する。EC2の物理マシンはUTCで設定されているので念の為。

RHEL7.0 HVM AMI (ami-87206d86 Tokyo Region)の場合
ls -l /etc/localtime
lrwxrwxrwx. 1 root root 38  5月 22 15:16 /etc/localtime -> ../usr/share/zoneinfo/America/New_York

となっているので、タイムゾーンは以下のようにEDTとなっている

$ date
2014年  8月  5日 火曜日 21:11:40 EDT

そこで

$ sudo timedatectl set-timezone Asia/Tokyo 

とすると、

$ ls -l /etc/localtime 
lrwxrwxrwx. 1 root root 32  8月  6 10:37 /etc/localtime -> ../usr/share/zoneinfo/Asia/Tokyo
$ date
2014年  8月  6日 水曜日 10:18:18 JST

となる

参考  Chapter 2. Configuring the Date and Time

 

t2.microでNATインスタンスを作る

2015/12/18追記

マネージドNATが出たので、わざわざNATを建てずにこちらをまず検討すると良いと思う。

Amazon Web Services ブログ: 【新機能】マネージドNATゲートウェイが利用可能に

ーーー

 

t2.microでNATインスタンスを建てようとするも、NAT用AMIは PVしかない(2014年7月11日時点)という理由で諦めてる人向けのメモ。

(NATインスタンスの建て方自体は、このページ末尾のSlideshareを参考に)

基本的にやることはPVもHVMも変わらず、

  • ip_forward有効にしているLinuxを起動
  • EC2の設定で src/dst checkをdisabledにしておく
  • routing tableを適切に設定しておく

これさえキチンとしていれば、たいていのLinuxで( Vyatta等を含む)動作するので、HVMかPVかはそもそも関係ない。(NAT用AMIは、ip_forwardが有効になっている Amazon Linuxでしかない)

 

ip_forwardを有効にするためにはこのスクリプトを流す。(動作確認は Amazon Linux AMI  2014.03.2 HVM で実施)

NAT Instances - Amazon Virtual Private Cloud

 

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

 

参考:別のPCから外したディスクのLVM ボリュームをマウントする方法