ablog

不器用で落着きのない技術者のメモ

AWS CLI 集

書式

  • タイムスタンプの指定方法
タイムゾーン 書式 サンプル
日本標準時(JST) yyyy-MM-ddTHH:mm:ss+0900 2014-10-10T13:50:40+09:00
協定世界時(UTC) yyyy-MM-ddTHH:mm:ssZ 2014-10-10T13:50:40Z

全般
$ aws configure set cli_timestamp_format iso8601 --profile default
$ aws configure get cli_timestamp_format --profile default
iso8601

cli_timestamp_format controls the format of timestamps displayed by the AWS CLI. The valid values of the cli_timestamp_format configuration varaible are:

  • none - Display the timestamp exactly as received from the HTTP response.
  • iso8601 - Reformat timestamp using iso8601 and your local timezone.
AWS CLI Configuration Variables — AWS CLI 1.19.62 Command Reference
$ aws ... --output json
$ aws ... --output text
$ aws ... --output table
CloudWatch
  • EC2 の NetworkIn メトリクスを取得する。
aws cloudwatch get-metric-statistics \
    --namespace AWS/EC2 \
    --dimensions Name=InstanceId,Value=<インスタンスID> \
    --metric-name NetworkIn \
    --statistics Average \
    --start-time 2018-01-02T18:29:00+0900 \
    --end-time 2018-01-02T19:00:00+0900 \
    --period 60|jq -r '.Datapoints[]|@text "\(.Timestamp)\t\(.Average)\t\(.Unit)"'|sort -k 1
  • EC2 の CPUUtilization メトリクスを取得する。
aws cloudwatch get-metric-statistics \
    --namespace AWS/EC2 \
    --dimensions Name=InstanceId,Value=i-0d7c71655a386f44d \
    --metric-name CPUUtilization \
    --statistics Average \
    --start-time 2018-01-02T18:29:00+0900 \
    --end-time 2018-01-02T19:00:00+0900 \
    --period 60|jq -r '.Datapoints[]|@text "\(.Timestamp)\t\(.Average)\t\(.Unit)"'|sort -k 1
  • AZを取得する*1
$ curl -s http://169.254.169.254/latest/meta-data/placement/availability-zone
ap-northeast-1a
$ curl http://169.254.169.254/latest/meta-data/instance-type
c4.large
RDS
  • RDS から指定した期間の CPU使用率を取得する。
    • --start-time/--end-time は "2017-07-24T00:00:00+0900" のように "+0900 "で日本標準時JST)を指定している
    • --dimensions Name=DBInstanceIdentifier,Value= はAWSマネジメントコンソールで表示されている "DB Instance" を指定する
    • --statistics は複数指定することができる
$ aws rds describe-db-instances|grep '"DBInstanceIdentifier' 
            "DBInstanceIdentifier": "ar1r9c7i*******"
$ aws cloudwatch get-metric-statistics --metric-name CPUUtilization --start-time 2017-07-24T00:00:00+0900 --end-time 2017-07-24T01:00:00+0900 --period 60 --namespace AWS/RDS --dimensions Name=DBInstanceIdentifier,Value=ar1r9c7i******* --statistics SampleCount Average Minimum Maximum Sum

{
    "Datapoints": [
        {
            "SampleCount": 1.0,
            "Timestamp": "2017-07-23T15:30:00Z",
            "Average": 0.66,
            "Maximum": 0.66,
            "Minimum": 0.66,
            "Sum": 0.66,
            "Unit": "Percent"
        },
(中略)
        {
            "SampleCount": 1.0,
            "Timestamp": "2017-07-23T15:35:00Z",
            "Average": 0.67,
            "Maximum": 0.67,
            "Minimum": 0.67,
            "Sum": 0.67,
            "Unit": "Percent"
        }
    ],
    "Label": "CPUUtilization"
}
  • リードレプリカのラグをJSTで絞って、TSV で表示する(タイムスタンプでソート)
$ aws cloudwatch get-metric-statistics \
    --namespace AWS/RDS \
    --dimensions Name=DBInstanceIdentifier,Value=pg-m4xlarge-xr3-7 \
    --metric-name ReplicaLag \
    --statistics Average \
    --start-time 2017-12-13T16:00:00+0900 \
    --end-time 2017-12-13T16:30:00+0900 \
    --period 60  | jq -r '.Datapoints[]|@text "\(.Timestamp)\t\(.Average)\t\(.Unit)"'|sort -k 1

2017-12-13T07:00:00+00:00	131	Seconds
2017-12-13T07:01:00+00:00	0	Seconds
2017-12-13T07:02:00+00:00	0	Seconds
  • WriteThroughputを確認する。
aws cloudwatch get-metric-statistics \ 
    --namespace AWS/RDS \
    --dimensions Name=DBInstanceIdentifier,Value=pg-m4xlarge-xr3-7 \
    --metric-name WriteThroughput \
    --statistics Average \
    --start-time 2017-12-16T19:10:00+0900 \
    --end-time 2017-12-16T19:45:00+0900 \
    --period 60|jq -r '.Datapoints[]|@text "\(.Timestamp)\t\(.Average)\t\(.Unit)"'|sort -k 1
  • ログファイル名でフイルタする
$ aws rds describe-db-log-files --db-instance-identifier aurora-postgres-116-instance-1|jq -r '.DescribeDBLogFiles[]|select(.LogFileName|contains("2020-04-25"))'
{
  "LastWritten": 1587772801000,
  "LogFileName": "error/postgresql.log.2020-04-25-0000",
  "Size": 0
}
{
  "LastWritten": 1587776400000,
  "LogFileName": "error/postgresql.log.2020-04-25-0100",
  "Size": 0
}
{
  "LastWritten": 1587780000000,
  "LogFileName": "error/postgresql.log.2020-04-25-0200",
  "Size": 0
}
  • Aurora のストレージ使用量を表示する。
$ aws cloudwatch get-metric-statistics \
    --namespace AWS/RDS \
    --dimensions Name=DBClusterIdentifier,Value=aurora-mysql-57 \
    --metric-name VolumeBytesUsed \
    --statistics Average \
    --start-time 2020-12-16T16:00:00+0900 \
    --end-time 2020-12-16T16:30:00+0900 \
    --period 60|jq -r '.Datapoints[]|@text "\(.Timestamp)\t\(.Average)\t\(.Unit)"'

2020-12-16T07:05:00Z	62199136256	Bytes
2020-12-16T07:10:00Z	62199136256	Bytes
2020-12-16T07:15:00Z	62199136256	Bytes
2020-12-16T07:20:00Z	62199136256	Bytes
2020-12-16T07:25:00Z	62199136256	Bytes
2020-12-16T07:00:00Z	62199136256	Bytes
S3
aws s3 cp s3://yoheia-from-bucket/logs/ s3://yoheia-to-bucket/logs/ --recursive    
  • コピーを試したメモ
FROM=コピー元S3バケット名
TO=コピー先S3バケット名
aws s3 mb s3://$(FROM}
aws s3 mb s3://${TO}
time dd if=/dev/urandom of=1gb.dat bs=1M count=10240
aws s3 cp 10gb.dat s3://$(FROM}/1gb.dat
time aws s3 cp s3://${FROM}/10gb.dat s3://${TO}/
time seq -w 1 1000 | xargs -t -P20 -I{} aws s3 cp s3:/$(FROM}/1gb.dat s3://${TO}/{}.dat
time seq -w 1 1000 | xargs -t -P20 -I{} aws s3 cp s3://$(FROM}/{}.dat s3://${TO}/{}.dat
time aws s3 rm s3://${TO}/ --recursive
time aws s3 sync s3://$(FROM}/ s3://${TO}/
  • リスト表示する
aws s3 ls --recursive --summarize --human-readable s3://yoheia-foo/
% mkdir -p path/to/dir
% touch path/to/dir/{a,b,c}
% find .  
./path
./path/to
./path/to/dir
./path/to/dir/a
./path/to/dir/b
./path/to/dir/c
% tar zcfp - .| aws s3 cp - s3://az-to/test.tgz
% aws s3 cp s3://az-to/test.tgz -|tar tfz - 
./
./path/
./path/to/
./path/to/dir/
./path/to/dir/a
./path/to/dir/b
./path/to/dir/c
  • 複数バージョン存在するオブジェクトをリストアップする。
$ aws s3api list-object-versions --bucket az-test-datalake|jq -r '.Versions[].Key'|sort|uniq -c|perl -lane '$F[0] > 1 and print'
$ aws s3 rm --recursive --exclude 'year=*' s3://<bucket name>/ssbgz/lineorder_part/

EMR

  • マスターノードで自分のクラスターのステータスを確認する
aws emr describe-cluster --cluster-id $(cat /mnt/var/lib/info/job-flow.json|jq -r '.jobFlowId|@text') | jq -r '.Cluster.Status.State'

KMS

aws kms list-aliases | jq '.Aliases[] | select(.AliasName=="alias/rotation-test-key")'

SQS

  • SQSのキューを一括削除する
$ aws sqs list-queues|jq -r '.QueueUrls[]'|xargs -n 1 aws sqs  delete-queue --queue-url

AppFlow

  • 実行して、実行結果を確認する
$ aws appflow start-flow --flow-name account-ondemand
{
    "flowArn": "arn:aws:appflow:ap-northeast-1:123456789012:flow/account-ondemand",
    "flowStatus": "Active",
    "executionId": "6c6594bb-a6e0-4db3-b7e7-8b6a3e47f1ae"
}
$ aws appflow describe-flow-execution-records --flow-name account-ondemand|jq -r '.flowExecutions[]|select(.executionId=="6c6594bb-a6e0-4db3-b7e7-8b6a3e47f1ae")|@text "\(.executionStatus)"'
Successful

*1:AWS CLI ではないが