ログってなんぼ

日々のメモです

awscliでインスタンス起動→EIP付与→削除→EIP開放

https://github.com/aws/aws-cli

AWSの各種サービスをコマンドラインから使えるツール群「awscli」です。

python関連のセットアップは

忘れるためのメモ: CentOS 6.2 に Python 2.7.2をインストールする

参考になりました。

# python -V
Python 2.4.3

# yum install gcc zlib zlib-devel tk-devel tcl-devel sqlite-devel ncurses-devel gdbm-devel readline-devel bzip2-devel db4-devel openssl-devel

# wget http://python.org/ftp/python/2.7.5/Python-2.7.5.tgz

# tar zxfv Python-2.7.5.tgz

# cd Python-2.7.5

# ./configure --with-threads --enable-shared --prefix=/usr/local

# make && make install

# /usr/local/bin/python -V
/usr/local/bin/python: error while loading shared libraries: libpython2.7.so.1.0: cannot open shared object file: No such file or directory

# ln -s /usr/local/lib/libpython2.7.so.1.0 /lib64/

# /usr/local/bin/python -V
Python 2.7.5

# python -V
Python 2.7.5

# wget http://python-distribute.org/distribute_setup.py

# python distribute_setup.py

# easy_install-2.7 pip

# pip-2.7 install awscli

$ vi ~/.awscli
[default]
aws_access_key_id=XXXXXXXXXXXXXXX
aws_secret_access_key=XXXXXXXXXXXXXXXXXXXXXXXXXXXXXX
region=ap-northeast-1

$ export AWS_CONFIG_FILE=~/.awscli
$ complete -C aws_completer aws

$ aws
autoscaling         cloudsearch         directconnect       elasticache         elb                 importexport        redshift            s3api               sqs                 support
cloudformation      cloudwatch          dynamodb            elasticbeanstalk    emr                 opsworks            route53             ses                 storagegateway      swf
cloudfront          datapipeline        ec2                 elastictranscoder   iam                 rds                 s3                  sns                 sts

S3にためすぎちゃったログを全部消してみる

$ aws s3 rm s3://mybucket --recursive --include 2013-0*

ちゃんと動きました。

インスタンスを立ててみる

f:id:Okisanjp:20160712161753p:plain

何もない状態から

f:id:Okisanjp:20160712161759p:plain

Quick Launch WizardからAmazon Linux AMIを選んでContinue

f:id:Okisanjp:20160712161804p:plain

次の画面でAMIイメージのIDが出てくるのでこれを使ってインスタンスを起動します。

$ aws ec2 run-instances --image-id ami-39b23d38 --instance-type m1.small

m1.smallで立ち上げてみます。

f:id:Okisanjp:20160712161810p:plain

Management Consoleを見てみると、インスタンス起動中になっていました。

f:id:Okisanjp:20160712161815p:plain

少し待つとインスタンスが起動。簡単ですねえ。

インスタンスを確認

インスタンスが出来たので確認してみる。

コマンドラインからの応答はデフォルトではJSONデータで帰ってくるので(--output オプションでTABLEやTEXTにすることも可能)、jqが入ってると便利かもしれません。

ボクの環境にはjqが入ってるのでパイプで渡してちょっと見やすくしました。

$ aws ec2 describe-instances | jq "."
{
  "Reservations": [
    {
      "Instances": [
        {
          "AmiLaunchIndex": 0,
          "VirtualizationType": "paravirtual",
          "RootDeviceName": "/dev/sda1",
          "KernelId": "aki-44992845",
          "Architecture": "x86_64",
          "BlockDeviceMappings": [
            {
              "Ebs": {
.
.
.
.
(略)

先ほど建てたm1.smallインスタンスのデータが帰ってきました。jqがあれば強力なフィルタ機能で確認したいデータだけ取り出したりできるのでバッチ処理などに組み込むと便利かと思います。生JSONを普通にjq通して確認するだけでも整形されたり色がついたりして捗ります。

EIPをつけてみる

このままだとElasticIPが無いのでコマンドラインから取得して付与してみます

Instance IDのチェック

さっき起動したInstance IDを確認します。せっかくなので、上記JSONレスポンスに対してjqのフィルタを使ってみます。

$ aws ec2 describe-instances | jq ".Reservations[].Instances[].InstanceId"
"i-7ca54d79"

インスタンスIDがわかりましたので作業を続けます

$ aws ec2 allocate-address
{
    "PublicIp": "54.238.49.129",
    "Domain": "standard"
}

$ aws associate-address --instance-id i-7ca54d79 --public-ip 54.238.49.129
{
    "return": "true"
}

$ aws ec2 describe-instances | jq ".Reservations[].Instances[] | {InstanceId, PublicIpAddress}"
{
  "PublicIpAddress": "54.238.49.129",
  "InstanceId": "i-7ca54d79"
}

取得したEIPを指定のInstanceに付与できました。

f:id:Okisanjp:20160712161827p:plain

ちゃんとEIPがついてます。

インスタンスをTerminate

インスタンスを削除してみます。

$ aws ec2 terminate-instances --instance-ids i-7ca54d79 | jq "."
{
  "TerminatingInstances": [
    {
      "PreviousState": {
        "Name": "running",
        "Code": 16
      },
      "CurrentState": {
        "Name": "shutting-down",
        "Code": 32
      },
      "InstanceId": "i-7ca54d79"
    }
  ]
}

f:id:Okisanjp:20160712161835p:plain

シャットダウンが始まり、終了するとTerminateされます。

f:id:Okisanjp:20160712161843p:plain

めでたくTerminated。

EIPを開放

f:id:Okisanjp:20160712161849p:plain

InstanceをTerminateしても取得したEIPは残ります。 使っていないEIPをいつまでも持っていると課金されてしまいますのでこれも開放します。

$ aws ec2 describe-addresses | jq "."
{
  "Addresses": [
    {
      "Domain": "standard",
      "PublicIp": "54.238.49.129",
      "InstanceId": null
    }
  ]
}

$ aws ec2 release-address --public-ip 54.238.49.129
{
    "return": "true"
}

$ aws ec2 describe-addresses | jq "."
{
  "Addresses": []
}

f:id:Okisanjp:20160712161856p:plain

無事開放(Release)されました。

その他機能はこれから使う・・・