awscli : AWS公式 CUIクライアント †
- AWS コマンドラインインターフェイス | アマゾン ウェブ サービス(AWS 日本語) Amazon製
- Python 2.6.3 or later
- CentOS6.x にインストール
yum install python python-setuptools
easy_install pip
pip install awscli
aws --profile default configure
AWS Access Key ID [None]: ****
AWS Secret Access Key [None]: ****
Default region name [None]: us-east-1
Default output format [None]: json, table, text から一つ選択
# ヘルプ
aws help
- CentOS5.x
yum install python26 python26-setuptools
easy_install-2.6 pip
pip2.6 install awscli
API Gateway連携で独自CLIコマンドを追加 †
長いARNを使う †
ECSを使う時に、以下のエラーが出る事がある。
昔はroot userのみだったが、今はIAM userでadmin権限があれば変更できる。
Long arn format must be enabled for ECS managed tags
- terraformではissueで提案されているが、専用リソースはまだない
--debug: デバッグ †
リージョン一覧 †
現在のIAM userの確認 †
設定済みprofileから各項目の取得 †
差分表示 †
補完 †
pricing: 価格を取得する †
canonical user ID(正式ID)の確認方法 †
AWS management consoleから、S3 bucketに別AWSアカウントへのアクセス権限を追加した場合に必要になる。
AWSアカウントIDとARNの確認 †
aws sts get-caller-identity --profile default
{
"Account": "1234567890",
"UserId": "AIDXXXXXX",
"Arn": "arn:aws:iam::1234567890:user/username"
}
~/.aws/config から ~/.aws/credentials を生成する †
/.aws/config にクレデンシャル等もまとめてある状態から ~/.aws/credentials を生成したい場合
cp ~/.aws/config ~/.aws/credentials
perl -p -i -e "s/profile\s+|^output.+[\r\n]|^region.+[\r\n]|^signature_version.+[\r\n]//g" ~/.aws/credentials
リザーブドインスタンスの価格一覧取得 †
- 何もオプションを付けないと大量のリスト取得のため、30秒以上レスポンスが返ってこない。
- EC2で m3.large インスタンス のリスト取得
aws ec2 describe-reserved-instances-offerings \
--profile default \ # AWS profile
--region ap-northeast-1 \ # 東京リージョン
--instance-tenancy default \ # デフォルトか、ハードウェア専用か
--offering-type "Partial Upfront" \ # 一部前払い(以前の重度利用)
--offering-class standard \ 3年の場合はConvertibleも選べる
--max-duration 31536000 \ # 1年
--filters "Name=product-description,Values=Linux/UNIX,Linux/UNIX (Amazon VPC)" "Name=scope,Values=Region" \ # Linuxのみ
--instance-type m3.large \
--output json
{
"ReservedInstancesOfferings": [
{
"OfferingClass": "standard",
"OfferingType": "Partial Upfront",
"ProductDescription": "Linux/UNIX",
"InstanceTenancy": "default",
"PricingDetails": [],
"UsagePrice": 0.0,
"RecurringCharges": [
{
"Amount": 0.058000000000000003,
"Frequency": "Hourly"
}
],
"Marketplace": false,
"CurrencyCode": "USD",
"FixedPrice": 463.0,
"Duration": 31536000,
"Scope": "Region",
"ReservedInstancesOfferingId": "7875a3da-c41e-40bc-8f81-7e155f5bab77",
"InstanceType": "m3.large"
},
{
"OfferingClass": "standard",
"OfferingType": "Partial Upfront",
"ProductDescription": "Linux/UNIX (Amazon VPC)",
"InstanceTenancy": "default",
"PricingDetails": [],
"UsagePrice": 0.0,
"RecurringCharges": [
{
"Amount": 0.058000000000000003,
"Frequency": "Hourly"
}
],
"Marketplace": false,
"CurrencyCode": "USD",
"FixedPrice": 463.0,
"Duration": 31536000,
"Scope": "Region",
"ReservedInstancesOfferingId": "fbc08497-fd12-4bb0-a03b-5e0955899527",
"InstanceType": "m3.large"
}
]
}
CloudFront †
SES †
EMR †
スケジュールイベントの取得 †
- 全リージョンのEC2, RDS, ElastiCacheイベントをjsonとして出力
AWS_PROFILE=default
for region in $(aws --profile $AWS_PROFILE ec2 describe-regions --query "Regions[].[RegionName]" --output text); do \
aws --profile $AWS_PROFILE --region $region ec2 describe-instance-status --filters "Name=event.code,Values=*" --query "InstanceStatuses[].{InstanceId:InstanceId, Events:Events}" --output json > $AWS_PROFILE.$region.ec2.events.json ; \
aws --profile $AWS_PROFILE --region $region rds describe-events > $AWS_PROFILE.$region.rds.events.json ; \
aws --profile $AWS_PROFILE --region $region elasticache describe-events > $AWS_PROFILE.$region.elasticache.events.json ; \
done
- RDSのイベントを表示
cat *.rds.events.json
EC2のスケジュールイベントをtsv形式で出力 †
- 全リージョンのEC2イベントをtsv形式でファイルに出力
- InstanceIDからInstane Tag:Nameの取得も行う
AWS_PROFILE=default
for region in $(aws --profile $AWS_PROFILE ec2 describe-regions --query "Regions[].[RegionName]" --output text); do \
export region AWS_PROFILE; \
aws ec2 describe-instance-status \
--region $region \
--profile $AWS_PROFILE \
--filters "Name=event.code,Values=*" --query 'sort_by(InstanceStatuses[].[InstanceId,Events[0].Code,Events[0].NotBefore,Events[0].NotAfter],&[2])' --output text \
| xargs -I{} bash -c 'line="{}"; \
id=$(echo $line|cut -d" " -f1); \
name=$(aws ec2 describe-instances --region $region --profile $AWS_PROFILE --instance-ids $id --query "Reservations[].Instances[].[Tags[?Key==\`Name\`].Value|[0]]" --output text); \
echo -e "$AWS_PROFILE\t$region\t$name\t$line\t"' | sort > $AWS_PROFILE.$region.ec2.events.tsv ; \
done
タグ付け †
リソース指定方法や、タグの書式が違う。
SSL証明書を管理 †
今ではACMを使った方が良い。
- IAMにアップロードされているSSL証明書の一覧
aws iam list-server-certificates
{
"ServerCertificateMetadataList": [
{
"Path": "/",
"Arn": "arn:aws:iam::000000000000:server-certificate/example.com",
"ServerCertificateId": "XXXXXXXXXXXXXXXXXXXXX",
"ServerCertificateName": "example.com",
"UploadDate": "2014-01-02T03:40:50Z"
}
]
}
- ELBのリスナーで使用されているSSL証明書の一覧
aws elb describe-load-balancers \
--query "LoadBalancerDescriptions[].[LoadBalancerName,ListenerDescriptions[].Listener[].SSLCertificateId]" \
--region us-east-1
[
[
"example.com",
[
"arn:aws:iam::000000000000:server-certificate/example.com"
]
]
]
- ELBにHTTPSリスナーを追加する場合
ARN="arn:aws:iam::012345678901:server-certificate/production/newCert"
aws --region ap-northeast-1 \
elb create-load-balancer-listeners \
--load-balancer-name elb01 \
--listeners Protocol=HTTPS,LoadBalancerPort=443,InstanceProtocol=HTTP,InstancePort=80,SSLCertificateId=$ARN
ec2 cliとaws cliの速度比較 †
- ec2 cliはjavaベースなので毎回JVMを起動する分遅いと思われる
- aws cliはpythonベース
--query : 要素の検索と出力項目指定 †
jqなしでもそれなりに使える。
- 配列内の値を出力。「|[0]」を使う。
# 通常
aws rds describe-reserved-db-instances-offerings \
--region ap-northeast-1 \
--duration 1 \
--max-items 1 \
--query 'ReservedDBInstancesOfferings[].[DBInstanceClass,RecurringCharges]'
[
[
"db.t1.micro",
[
{
"RecurringChargeAmount": 0.023,
"RecurringChargeFrequency": "Hourly"
}
]
]
]
# "|[0]" 指定
aws rds describe-reserved-db-instances-offerings \
--region ap-northeast-1 \
--duration 1 \
--max-items 1 \
--query 'ReservedDBInstancesOfferings[].[DBInstanceClass,RecurringCharges[].RecurringChargeAmount|[0]]'
[
[
"db.t1.micro",
0.023
]
]
- EC2からTag Name : my-host-01 のインスタンスIDを取得する
aws ec2 describe-instances --filters "Name=tag-key,Values=Name" \
"Name=tag-value,Values=my-host-01" \
--query "Reservations[*].Instances[*].InstanceId" \
--output table
-------------------
|DescribeInstances|
+-----------------+
| i-xxxxxxxx |
+-----------------+
- {...}でjson出力時のkeyの別名(alias)を指定できる。別名を使うときは出力する全てのキーに別名を付ける
- 例:VolumeIdにIDという別名を付ける
aws ec2 describe-volumes --query 'Volumes[*].{ID:VolumeId,AZ:AvailabilityZone,Size:Size}'
[
{
"AZ": "ap-northeast-1a",
"ID": "vol-xxxxxxxx",
"Size": 8
},
{
"AZ": "ap-northeast-1b",
"ID": "vol-xxxxxxxx",
"Size": 8
}
]
- 複数の項目を指定して列挙する
- 親階層の列挙時に、子階層のアイテムは参照できる。
- 子階層の列挙時に、親階層のアイテムは参照できない。
- 例:ELBを列挙して、DNSNameとInstanceIdを表示
aws elb describe-load-balancers \
--query "LoadBalancerDescriptions[].[DNSName,Instances[].InstanceId]"
[
[
"example1-0000000000.ap-northeast-1.elb.amazonaws.com",
[
"i-xxxxxxxx",
"i-xxxxxxxx"
]
],
[
"example2-0000000000.ap-northeast-1.elb.amazonaws.com",
[
"i-xxxxxxxx"
]
]
]
- 子階層の列挙時に、親階層のアイテム参照は値が取れずnullになる
aws elb describe-load-balancers \
--query "LoadBalancerDescriptions[].Instances[].[LoadBalancerDescriptions[].DNSName,InstanceId]"
[
[
null,
"i-xxxxxxxx"
],
[
null,
"i-xxxxxxxx"
]
]
- ELBでSSLCertificateIdを列挙。(SSL証明書更新時に、どのELBがSSL Listener持っているのかを調べる時など)
aws elb describe-load-balancers \
--query "LoadBalancerDescriptions[].[LoadBalancerName,ListenerDescriptions[].Listener[].SSLCertificateId]"
[
[
"example1",
[
"arn:aws:iam::000000000000:server-certificate/example.com"
]
]
]
複数のプロファイルを使い分ける †
/.aws/config
[default]
aws_access_key_id=AKIAIOSFODNN7EXAMPLE
aws_secret_access_key=wJalrXUtnFEMI/K7MDENG/bPxRfiCYEXAMPLEKEY
region=us-east-1
[profile test-user]
aws_access_key_id=AKIAI44QH8DHBEXAMPLE
aws_secret_access_key=je7MtGbClwBF/2Zp9Utk/h3yCo8nvbEXAMPLEKEY
region=us-west-2
- 実行
aws --profile test-user s3 ls s3://mybucket
keypairのフィンガープリント確認 †
AWS ManagementConsoleのkeypairとローカルファイル(pem)を比較する場合
openssl pkcs8 -in ~/.ssh/example.pem -inform PEM -outform DER -topk8 -nocrypt | openssl sha1 -c
legacy †
javaだったりruby製だったりした。
タグ付け †
- インスタンス、AMI、EBS等にタグを設定できる。「i-xxxxxxxx vol-xxxxxxxx」等複数同時に設定できる
|
|