// 下階層用テンプレート
#topicpath
----
//ここにコンテンツを記述します。


#contents


AWS CLIとは、AWSのCommand Line Interface つまりターミナルからAWSを操作するためのツール群です。
-[[AWS コマンドラインインターフェイス | AWS>https://aws.amazon.com/jp/cli/]]

 $ aws s3 ls s3://nu.mine.kino.hogebucket
 2016-11-10 12:46:26        700 hoge2.py

とかやってS3をターミナルから操作することが出来ます。便利です。。


**インストール [#z4c0879d]
あちなみにMacでやっててOSは El Capitanです
 $ sw_vers 
 ProductName:	Mac OS X
 ProductVersion:	10.11.6
 BuildVersion:	15G1108


 $ sudo easy_install pip
 $ sudo pip install awscli --upgrade --ignore-installed six
 $ sudo pip install boto3 --upgrade --ignore-installed six
 $ sudo aws --v
 $ which aws

どうもこのignoreオプションをつけないとエラーが出たっぽい、、。


**環境設定 [#bb785c5d]
クライアントにcredential情報を設定するためのコマンドを実行します。
AWS Access Key ID、AWS Secret Access Keyはマネジメントコンソールであらかじめ設定済みと仮定します。

参考
[[Amazon S3 再入門 – AWS IAMでアクセスしてみよう!>https://cloudpack.media/5726]]


 $ aws configure
 AWS Access Key ID [****************]: xxxxxxxxxxxxxx   ←あらかじめマネジメントコンソールで設定済みの値。
 AWS Secret Access Key [****************]: yyyyyyyyyy   ←あらかじめマネジメントコンソールで設定済みの値。
 Default region name [None]: ap-northeast-1  ← 東京
 Default output format [None]: json
 $
 $ ls -lrt ~/.aws/
 -rw-r--r--  1 masatomix  staff  118 11 10 12:41 credentials
 -rw-------  1 masatomix  staff   48 11 10 12:41 config
 $ cat  ~/.aws/config 
 [default]
 output = json
 region = ap-northeast-1
 $ cat  ~/.aws/credentials 
 [default]
 aws_access_key_id = xxxxxxxxxxxxxx
 aws_secret_access_key =  yyyyyyyyyy


インストール完了です。コマンドラインからAWSが操作できるようになりました。

**つかってみる。 [#tdfacf3e]

 $ aws s3 ls  ← Bucketの一覧表示
 2016-11-08 18:59:46 nu.mine.kino.hogebucket
 
 $ aws s3 ls s3://nu.mine.kino.hogebucket  --recursive ← 指定したBucketの中身を表示
 
 $ ls -lrt dir1
 total 8
 -rw-r--r--  1 masatomix  staff  13 11 12 10:31 file1.txt
 $ aws s3 sync dir1 s3://nu.mine.kino.hogebucket/dir2
 upload: dir1/file1.txt to s3://nu.mine.kino.hogebucket/dir2/file1.txt  ローカルのdir1ディレクトリと、Bucketのdir2ディレクトリを同期。
 $ aws s3 ls s3://nu.mine.kino.hogebucket/ --recursive
 2016-11-12 10:33:26         13 dir2/file1.txt


** EC2にもつなげる [#k83bfc7b]
 $ aws ec2 describe-instances
などで、EC2のインスタンス情報がJSON取得できます。jqなどで整形した情報をだしてみるとこんなかんじ。


 $ aws ec2 describe-instances | jq \
  '.Reservations[].Instances[] | .PublicDnsName, .State, .PublicIpAddress, .PrivateIpAddress,.PrivateDnsName'
 "ec2-xx-xxx-xxx-xx.ap-northeast-1.compute.amazonaws.com"
 {
   "Code": 16,
   "Name": "running"
 }
 "xx.xxx.xxx.xx"
 "yyy.yy.yy.yy"
 "ip-yyy-yy-yy-yy.ap-northeast-1.compute.internal"


 $ aws ec2 describe-instances | jq \
  '.Reservations[].Instances[] | .PublicDnsName, .State, .PublicIpAddress, .PrivateIpAddress,.PrivateDnsName'
の他に、

 $ aws ec2 describe-instances | jq \
  '.Reservations[].Instances[] | [.PublicDnsName, .State, .PublicIpAddress, .PrivateIpAddress, .PrivateDnsName]'
ってJSON配列で返したり、
 $ aws ec2 describe-instances | jq \
  '.Reservations[].Instances[] | {PublicDnsName, State, PublicIpAddress, PrivateIpAddress, PrivateDnsName}'
って新たなJSONで返すなんて事も可能。

-[[jqを活用してAPIレスポンス等から欲しい情報だけを抽出する【中級編】 | Developers.IO>http://dev.classmethod.jp/tool/road-to-jq-master-apprentice/]]

**Node.jsから使う。 [#w1297a6a]
 $ mkdir asw-sdk-node && cd $_
 $ npm init
 $ npm install --save aws-sdk
 $ npm install

SDKのインストールとかが完了しました。
 $ cat index.js
 "use strict";
 
 var AWS = require('aws-sdk');
 AWS.config.update({region: 'ap-northeast-1'});
 
 var ec2 = new AWS.EC2();
 ec2.describeInstances( function(err, data) {
   if (err) {
     console.log(err, err.stack);
   } else {
     for (var index = 0; index <  data.Reservations.length; index++){
       // var instances = data.Reservations[index].Instances;
       data.Reservations[index].Instances.forEach(
         function(instance){
           console.log("PublicDnsName: " + instance.PublicDnsName);
           console.log("State: " + JSON.stringify(instance.State));
           console.log("PublicIpAddress: " + instance.PublicIpAddress);
           console.log("PrivateIpAddress: " + instance.PrivateIpAddress);
           console.log("PrivateDnsName: " + instance.PrivateDnsName);
         }
       );
     }
   }
 });

と書いてみます。
 $ node index.js
で先のコマンドラインからとおなじ情報が得られます。


-[[Node.js 内の AWS SDK for JavaScript | AWS>https://aws.amazon.com/jp/sdk-for-node-js/]]

ちなみに、AWS_ACCESS_KEY_ID とか AWS_SECRET_ACCESS_KEY などのCredential情報を取得するにはいろいろ方法があります。環境変数からや、自前のJSONファイルから、もしくはCredentialファイル直接((~/.aws/credentials のこと)) などです。これらの方法は下記にまとまっていました。
-[[Setting Credentials in Node.js - AWS SDK for JavaScript>http://docs.aws.amazon.com/ja_jp/sdk-for-javascript/v2/developer-guide/setting-credentials-node.html]]

具体的には、こんな感じ。
 // 自分で環境変数を設定
 // $ export AWS_ACCESS_KEY_ID=xxxx
 // $ export AWS_SECRET_ACCESS_KEY=xxx
 // $ export AWS_DEFAULT_REGION=ap-northeast-1
 // $ export AWS_DEFAULT_OUTPUT=json
 // const ec2 = new AWS.EC2({region: 'ap-northeast-1'});

 // // AWSのCredentialsファイルから情報取得
 // const credentials = new AWS.SharedIniFileCredentials({profile: 'default'});
 // AWS.config.credentials = credentials;
 // const ec2 = new AWS.EC2({region: 'ap-northeast-1'});

 // // 設定ファイルから情報取得
 // AWS.config.loadFromPath('./config/config.json');
 // // $cat config/config.json
 // // { "accessKeyId": <YOUR_ACCESS_KEY_ID>,
 // //   "secretAccessKey": <YOUR_SECRET_ACCESS_KEY>,
 // //   "region": "ap-northeast-1"
 // // }
 // const ec2 = new AWS.EC2();

 // // もしくは直接指定
 // const ec2 = new AWS.EC2(
 //   {
 //     accessKeyId: 'xxx',
 //     secretAccessKey: 'xxxx',
 //     region: 'ap-northeast-1'
 //   }
 // );










** CoffeeScriptから使う [#bc048572]
Node.jsとほぼ同じなんですがHubotから使おうとして書いたコード。

 $ cat hubot-sample.coffee
 AWS = require('aws-sdk');
 
 module.exports = (robot) ->
   robot.respond /(サーバ情報)/i, (res) ->
 
     AWS.config.update {region: 'ap-northeast-1'}
     ec2 = new AWS.EC2()
 
     ec2.describeInstances (err,data) ->
       if err
         console.log err, err.stack
       else
         for reservation in data.Reservations
           for instance in reservation.Instances
             console.log "PublicDnsName: " + instance.PublicDnsName
             console.log "State: " + JSON.stringify(instance.State)
             console.log "PublicIpAddress: " + instance.PublicIpAddress
             console.log "PrivateIpAddress: " + instance.PrivateIpAddress
             console.log "PrivateDnsName: " + instance.PrivateDnsName
 
             message = ""
             message += "PublicDnsName: " + instance.PublicDnsName + '\n'
             message += "State: " + instance.State.Name + '\n'
             message += "PublicIpAddress: " + instance.PublicIpAddress + '\n'
             message += "PrivateIpAddress: " + instance.PrivateIpAddress + '\n'
             message += "PrivateDnsName: " + instance.PrivateDnsName + '\n'
             res.send message





**関連リンク [#h5cb69ca]
-[[【初心者向け】MacユーザがAWS CLIを最速で試す方法 | Developers.IO>http://dev.classmethod.jp/cloud/aws/mac-aws-cli/]] 参考になりました!
-[[Amazon S3 再入門 &#8211; AWS IAMでアクセスしてみよう!>https://cloudpack.media/5726]] IAMに権限をつける件。
-[[AWS CLIのS3コマンドまとめ - TASK NOTES>http://www.task-notes.com/entry/20150904/1441335600]]
-[[AWS CLI の設定 - AWS Command Line Interface>http://docs.aws.amazon.com/ja_jp/cli/latest/userguide/cli-chap-getting-started.html]]






----
この記事は
#vote(おもしろかった,そうでもない)
- Raspberry Piでやる場合はpipをpip3と読み替えればPython3系にインストールされるようです -- [[きの]] &new{2016-11-12 (土) 17:12:07};

#comment
#topicpath


SIZE(10){現在のアクセス:&counter;}

トップ   編集 差分 バックアップ 添付 複製 名前変更 リロード   新規 一覧 単語検索 最終更新   ヘルプ   最終更新のRSS