読者です 読者をやめる 読者になる 読者になる

うさがにっき

読書感想文とプログラムのこと書いてきます

AWS CLIを使ってコマンドラインからAWSを操作する

概要

AWSのサービスをAWS CLI(コマンドラインインタフェース)を使いコマンドラインから操作する

以下からコマンドラインから操作できるサービスが確認できる
AWS コマンドラインインターフェイス

詳細

AWS CLIのインストール、設定

Homebrewをインストール済みとする

$ sudo brew install pytho
$ sudo easy_install pip
$ sudo pip install awscli

$ aws --version
aws-cli/1.7.30 Python/2.7.6 Darwin/14.4.0

基本設定を行う
プロフィールの設定を行う

$ aws configure
AWS Access Key ID [None]: AKIA************
AWS Secret Access Key [None]: 6LUR******************
Default region name [None]: ap-northeast-1
Default output format [None]: text

AWS Access Key ID, AWS Secret Aceess KeyはIAMアカウントを作成した際にダウンロードしたものを使う

Default region nameはregionを選択する、Tokyoregionの場合は「ap-northeast-1」
Default output formatは出力結果形式を選択する「text」「json」「table」を選択できる

設定が完了したら、正常に動くか確認
EC2を利用する際にあらかじめ用意されているデフォルトセキュリティグループを表示してみる

$ aws ec2 describe-security-groups
SECURITYGROUPS  default VPC security group  sg-******* default 123823001885    vpc-93b079f6
IPPERMISSIONS   -1
USERIDGROUPPAIRS    sg-******ef 123823001885
IPPERMISSIONSEGRESS -1
IPRANGES    0.0.0.0/0
・・・

別のプロフィールも登録できる

$ aws configure --profile sample-user
AWS Access Key ID [None]: AKIA************
AWS Secret Access Key [None]: 6LUR******************
Default region name [None]: ap-northeast-1
Default output format [None]: text

このプロフィールを使って操作もできる

$ aws ec2 describe-security-groups --profile sample-user
SECURITYGROUPS  default VPC security group  sg-******* default 123823001885    vpc-93b079f6
IPPERMISSIONS   -1
USERIDGROUPPAIRS    sg-******ef 123823001885
IPPERMISSIONSEGRESS -1
IPRANGES    0.0.0.0/0
・・・

プロフィールは以下に保存されている

$ cd .aws
$ ls
config      credentials
$ cat config
[default]
output = text
region = ap-northeast-1
$ cat credentials 
[default]
aws_access_key_id = AKIA*********
aws_secret_access_key = 6LUR**************

configはDefault region name、Default output formatを保存
credentialsはAWS Access Key ID, AWS Secret Access Keyを保存している

AWS CLIの基本的な使用法

awsコマンドに続けて操作するサービス名とサービスに付随するリソース操作コマンドを入力する

$ aws <サービス名> <リソース操作コマンド>

例えば以下のようにやる

# EC2のデフォルトセキュリティグループを表示
$ aws ec2 describe-security-groups
# S3の一覧を表示
$ aws s3 ls
基本的なオプション
オプション 処理
--profile 設定したprofileを指定してコマンド実行
--region regionの指定
--output 出力形式の指定
--filters 検索条件を指定してフィルタリング
--query 結果を絞り込む
--region, --outputを使った例

出力形式をjsonに、usリージョンを見てみる

$ aws ec2 describe-security-groups --region us-east-1 --output json
{
    "SecurityGroups": [
        {
            "IpPermissionsEgress": [
                {
                    "IpProtocol": "-1", 
                    "IpRanges": [
                        {
                            "CidrIp": "0.0.0.0/0"
                        }
                    ], 
                    "UserIdGroupPairs": [], 
                    "PrefixListIds": []
                }
            ], 
            "Description": "default VPC security group", 
            ・・・
--filtersを使って例

指定できる--filtersオプションのフィルタ名は各サービス、リソースによって異なるのでリファレンスを参照する
AWS CLI — AWS CLI 1.7.30 documentation

$ aws <サービス名> <リソース操作コマンド> --filters "Name=<フィルタ名A>,Values=<条件A>" "Name=<フィルタ名B>,Values=<条件B>" ...


EC2インスタンスでt2.microタイプを取得する

$ aws ec2 describe-instances --filters "Name=instance-type,Values=t2.micro"

--queryを使った例

    • filtersと同じように、指定できる--queryオプションのフィルタ名は各サービス、リソースによって異なるのでリファレンスを参照する

AWS CLI — AWS CLI 1.7.30 documentation

$ aws <サービス名> <リソース操作コマンド> --query '<クエリー名(1階層目)>'


すべてのEC2インスタンスに対してインスタンスIDのみを参照する場合

$ aws ec2 describe-instances --query 'Reservations[].Instances[].InstanceId'
i-7945a88c  i-047599f1  i-ad896b58

条件も指定できる

$ aws ec2 describe-instances --query 'Reservations[].Instances[?InstanceId==`i-ad896b58`]'

感想

コマンドが複雑で覚えるのが大変。。。打ち間違えるし、オートコンプリートできないものか。。。
AWS コマンドラインインターフェイスのドキュメント | アマゾン ウェブ サービス(AWS 日本語)
を見ないととてもとても扱えない

参考

Amazon Web Services パターン別構築・運用ガイド

Amazon Web Services パターン別構築・運用ガイド