KEMBAR78
Introduction of aws-cli | PDF
AWS Command Line Interface
 (aws-cli)をつかってみた
           #awspad
          2013-02-18

        ひろせ まさあき
自己紹介
• ひろせ まさあき @hirose31
 • インフラエンジニア :D
 • 『サーバ/インフラを支える技術』, 2008
• 最近の関心事
 • NATインスタンスの冗長化 (single subnet, multiAZ)
 • タダでELBを暖機する方法
 • サブネットとかVPCに名前つけたいですぅ
aws-cli?
aws-cli
• 2012-12公開
• 最新 0.5.3 (Developer Preview)
 • http://aws.amazon.com/cli/
 • https://github.com/aws/aws-cli
 • http://docs.aws.amazon.com/cli/latest/
    userguide/cli-chap-welcome.html
aws-cli
          VS
      EC2 API tool
• 1コマンドで複数サービスに対応
• Python (not Java)
• 結果がJSON (textも可)
• bash, zshの補完可能
AWS::CLIWrapper
  Perl module, wrapping aws-cli


use	
  AWS::CLIWrapper;
	
  
my	
  $aws	
  = AWS::CLIWrapper->new;
	
  
my	
  $res	
  = $aws->ec2('describe-instances', {
    instance_ids	
  => ['i-XXXXX', 'i-YYYYY'],
   });
	
  
使い方 / 環境設定
$ export AWS_ACCESS_KEY_ID=<access_key>
$ export AWS_SECRET_ACCESS_KEY=<secret_key>
$ export AWS_DEFAULT_REGION=us-west-2
                        or
$ export AWS_CONFIG_FILE=/path/to/config_file
使い方 / help

$ aws help
$ aws ec2 help
$ aws ec2 describe-instances help
使い方 / 引数
• string
   • そのまま文字列
• list
   •     --instance-ids 'i-AAA' 'i-BBB' (space separaed)
   ×     'i-AAA i-BBB' (NOT quoted as single string)
   ×     'i-AAA, i-BBB' (NOT comma separated)
   ×     '["i-AAA", "i-BBB"]' (NOT JSON)

• structure
   • JSON
• list + structure = space separated + JSON
   • --filters '{"name":"tag:Name","values": ["web*","db*"]}' '{"name"...}'
使い方 / 補完

bash
      $ complete -C aws_completer aws
zsh
      $ source bin/zsh_complete.sh
使い方 / jq
     • jq
      • lightweight and flexible command-line
            JSON processor
        • http://stedolan.github.com/jq/
$ aws ec2 describe-instances | 
  jq '.reservationSet[].instancesSet[] | {instanceId, instanceType}'
{
  "instanceType": "m2.2xlarge",
  "instanceId": "i-AAA"
}
{
  "instanceType": "c1.xlarge",
  "instanceId": "i-BBB"
}
...
おはまり
• AWS_DEFAULT_REGIONが効かない!!
 • 0.5.0で修正
 • https://github.com/aws/aws-cli/pull/36
おはまり
• ec2 create-tagsが動かない!!
 • 0.5.0で修正
 • https://github.com/aws/aws-cli/issues/33
おはまりかも?と思ったら
       aws --debug SERVICE COMMAND ...

$ aws --debug ec2 describe-instances --filters '{"name":"tag:Name","values":
["web*","db*"]}'
...
AWSAccessKeyId=XXX&Action=DescribeInstances&Filter.1.Name=tag%3AName&Filter.1.Value.
1=web%2A&Filter.1.Value.2=db
%2A&SignatureMethod=HmacSHA256&SignatureVersion=2&Timestamp=2013-02-17T15%3A47%3A36.
787450&Version=2012-12-01
...




       で、API リファレンスとにらめっこ
今後
• 対応サービスの追加
          EC2 VPC ELB
           Auto Scaling
           SQS SNS SES
Elastic Beanstalk CloudFormation
               IAM

           S3 RDS Route 53
    CloudFront ElastiCache SimpleDB
             CloudWatch...
今後
• あれ?おかしいな?と思ったら…
 • https://github.com/aws/aws-cli
 • issue
 • pull request
Thanks :D

Introduction of aws-cli

  • 1.
    AWS Command LineInterface (aws-cli)をつかってみた #awspad 2013-02-18 ひろせ まさあき
  • 2.
    自己紹介 • ひろせ まさあき@hirose31 • インフラエンジニア :D • 『サーバ/インフラを支える技術』, 2008 • 最近の関心事 • NATインスタンスの冗長化 (single subnet, multiAZ) • タダでELBを暖機する方法 • サブネットとかVPCに名前つけたいですぅ
  • 3.
  • 4.
    aws-cli • 2012-12公開 • 最新0.5.3 (Developer Preview) • http://aws.amazon.com/cli/ • https://github.com/aws/aws-cli • http://docs.aws.amazon.com/cli/latest/ userguide/cli-chap-welcome.html
  • 5.
    aws-cli VS EC2 API tool • 1コマンドで複数サービスに対応 • Python (not Java) • 結果がJSON (textも可) • bash, zshの補完可能
  • 6.
    AWS::CLIWrapper Perlmodule, wrapping aws-cli use  AWS::CLIWrapper;   my  $aws  = AWS::CLIWrapper->new;   my  $res  = $aws->ec2('describe-instances', {     instance_ids  => ['i-XXXXX', 'i-YYYYY'],    });  
  • 7.
    使い方 / 環境設定 $export AWS_ACCESS_KEY_ID=<access_key> $ export AWS_SECRET_ACCESS_KEY=<secret_key> $ export AWS_DEFAULT_REGION=us-west-2 or $ export AWS_CONFIG_FILE=/path/to/config_file
  • 8.
    使い方 / help $aws help $ aws ec2 help $ aws ec2 describe-instances help
  • 9.
    使い方 / 引数 •string • そのまま文字列 • list • --instance-ids 'i-AAA' 'i-BBB' (space separaed) × 'i-AAA i-BBB' (NOT quoted as single string) × 'i-AAA, i-BBB' (NOT comma separated) × '["i-AAA", "i-BBB"]' (NOT JSON) • structure • JSON • list + structure = space separated + JSON • --filters '{"name":"tag:Name","values": ["web*","db*"]}' '{"name"...}'
  • 10.
    使い方 / 補完 bash $ complete -C aws_completer aws zsh $ source bin/zsh_complete.sh
  • 11.
    使い方 / jq • jq • lightweight and flexible command-line JSON processor • http://stedolan.github.com/jq/ $ aws ec2 describe-instances | jq '.reservationSet[].instancesSet[] | {instanceId, instanceType}' { "instanceType": "m2.2xlarge", "instanceId": "i-AAA" } { "instanceType": "c1.xlarge", "instanceId": "i-BBB" } ...
  • 12.
    おはまり • AWS_DEFAULT_REGIONが効かない!! •0.5.0で修正 • https://github.com/aws/aws-cli/pull/36
  • 13.
    おはまり • ec2 create-tagsが動かない!! • 0.5.0で修正 • https://github.com/aws/aws-cli/issues/33
  • 14.
    おはまりかも?と思ったら aws --debug SERVICE COMMAND ... $ aws --debug ec2 describe-instances --filters '{"name":"tag:Name","values": ["web*","db*"]}' ... AWSAccessKeyId=XXX&Action=DescribeInstances&Filter.1.Name=tag%3AName&Filter.1.Value. 1=web%2A&Filter.1.Value.2=db %2A&SignatureMethod=HmacSHA256&SignatureVersion=2&Timestamp=2013-02-17T15%3A47%3A36. 787450&Version=2012-12-01 ... で、API リファレンスとにらめっこ
  • 15.
    今後 • 対応サービスの追加 EC2 VPC ELB Auto Scaling SQS SNS SES Elastic Beanstalk CloudFormation IAM S3 RDS Route 53 CloudFront ElastiCache SimpleDB CloudWatch...
  • 16.
    今後 • あれ?おかしいな?と思ったら… •https://github.com/aws/aws-cli • issue • pull request
  • 17.