前提

端末からAWSのapiを使ってec2を操作してみました。
今回はec2 api toolsを使ってインスタンスを
作成、起動、停止、削除まで試してみました。
ちなみに作成するインスタンスはCentOS6系で、検証環境はOSX 10.8です。

手順

  • API Toolsをamazonの以下リンクからダウンロード
    http://aws.amazon.com/developertools/351
  • 適当な場所に展開(今回は/usr/local/opt)
  • 扱いやすいようにシンボリックリンクを貼っておく

    cd /usr/local/opt
    ln -s ec2-api-tools-1.6.12.2 ec2-api-tools
    
  • 環境変数をセットする(.bash_profileの編集)

    vi ~/.bash_profile
    #以下を追加する
    
    JAVA_HOME=/System/Library/Java/JavaVirtualMachines/1.6.0.jdk/Contents/Home
    EC2_HOME=/usr/local/opt/ec2-api-tools
    EC2_CERT=/Users/xxx/work/amazon_work/cert.pem
    EC2_PRIVATE_KEY=/Users/xxx/work/amazon_work/pk.pem
    PATH=$PATH:$EC2_HOME/bin
    export JAVA_HOME EC2_HOME EC2_CERT EC2_PRIVATE_KEY PATH
    # 東京リージョンにする場合は以下を設定
    export EC2_URL=https://ec2.ap-northeast-1.amazonaws.com
    
  • 動作確認してみる(使用可能なリージョン一覧を表示されます)

    ec2-describe-regions
    # SYNOPSIS : ec2dre
    
  • awsに登録しているkeypairを確認する

    ec2-describe-keypairs
    # SYNOPSIS : ec2dkey
    # KEYPAIR   [登録済みkeypair名]  xx:xx:xx のように表示されていればOK
    
  • セキュリティグループの作成

    ec2-add-group first_group --description 'first security group'
    # GROUP sg-3b3e133a first_group first security group
    
  • 作成したセキュリティグループのinbound設定をする

    ec2-authorize first_group --protocol tcp --port-range 22 --cidr '0.0.0.0/0'
    ec2-authorize first_group --protocol tcp --port-range 80 --cidr '0.0.0.0/0'
    
  • EC2インスタンスを作成する

    ec2-run-instancesコマンドで作成する。
    とりあえず最低限の前準備が出来たのでec2のインスタンスを作成してみる。
    パラメータが多いので以下簡単に概要

    AMI識別子(ブートイメージ)
    --group セキュリティグループ(複数指定可能)
    --key 使用するkeypair
    --instance-count 起動するインスタンスの数
    --instance-type インスタンスタイプ(マイクロとかラージとか)
    --availability-zone AZ。指定しない場合、適当に場所が選択されてしまうようなので設定する
    --disable-api-termination TerminationProtectionの設定
    --instance-initiated-shutdown-behavior シャットダウン時の挙動(stop/terminate)
    

    よく使いそうなインスタンスタイプ(2014/02時点)

    t1.micro    1   変数  0.615   EBS のみ  $0.020 /1 時間
    m1.small    1   1   1.7 1 x 160 $0.060 /1 時間
    m1.medium   1   2   3.75    1 x 410 $0.120 /1 時間
    m1.large    2   4   7.5 2 x 420 $0.240 /1 時間
    m3.xlarge   4   13  15  2 x 40 SSD  $0.450 /1 時間
    m3.2xlarge  8   26  30  2 x 80 SSD  $0.900 /1 時間
    

    AMI識別子を調べる為にami一覧を取得する。
    今回はCentOSの公式インスタンス(64bit版)を探す為にこんなコマンドで探した。

    ec2-describe-images -o 'aws-marketplace' --filter "name=CentOS-6-x86_64*"
    # 結果の中に[ami-xxxx]みたいな感じで出力されるのがAMI識別子
    

    コマンドはこんな感じ

    ec2-run-instances ami-31e86030 --group first_group --key xxxx --instance-count 1 --instance-type t1.micro --availability-zone ap-northeast-1a --disable-api-termination --instance-initiated-shutdown-behavior stop
    
    # ディスクの拡張やエフェラメルディスクをマウントする場合のオプション
    # ルートデバイスのサイズを30Gに変更する
    -b /dev/sda=:30
    # エフェメラルディスクもマウントする
    -b /dev/sdb=ephemeral0
    
  • 作成したインスタンスを確認してみる

    ec2-describe-instances
    # SYNOPSIS: ec2din
    
    # RESERVATION r-097bbd0e  708359476534    first_group INSTANCE    i-1e136319  ami-31e86030    ec2-54-199-101-205.ap-northeast-1.compute.amazonaws.com ip-10-160-131-243.ap-northeast-1.compute.internal   running django_aws  0   [marketplace: aacglxeowvn5hy8sznltowyqe]    t1.micro    2014-01-24T03:15:10+0000    ap-northeast-1a aki-44992845            monitoring-disabled 54.199.101.205  10.160.131.243          ebs paravirtual xen     sg-3b3e133a default false   BLOCKDEVICE /dev/sda    vol-d34db9d9    2014-01-24T03:15:13.000Z    false
    
  • sshで接続してみる

    ssh -i xxx.pem root@ec2-xx-xx-xx-xx.ap-northeast-1.compute.amazonaws.com
    
  • ※ディスクを拡張している場合

    # 現状のディスクの状況を確認
    fdisk -l
    # 拡張する(デバイス名は適宜変更)
    resize2fs /dev/xvde
    
  • EC2を停止する

    ec2-stop-instances i-47951940
    # SYNOPSIS: ec2stop
    
  • TerminationProtectionを解除する

    ec2-modify-instance-attribute i-47951940 --disable-api-termination false
    # SYNOPSIS : ec2minatt
    
  • EC2インスタンスをterminateする

    ec2-terminate-instances i-47951940
    # SYNOPSIS : ec2kill
    
  • 不要になったVolumesを削除する

    # 現在のvolume一覧を取得する(削除するvolumeのIDを確認)
    ec2-describe-volumes
    # volumeIDを指定して削除
    ec2-delete-volume vol-c9b641c3
    

まとめ

とりあえずこれでec2インスタンスの
作成、起動、停止、削除のサイクルが出来ました。
ちなみに各コマンドの詳細な使い方は
それぞれのコマンドに-hオプションをつけると見れます。
次回はスナップショット取ったり、そこからリストアしたりとかしてみる予定です。