[新機能]AWS CLIにhistoryコマンドが追加されたので試してみた #reinvent

クラウドでコスト削減はこちら

こんにちは。サービスグループの武田です。

re:Inventのキーノートでは怒涛の新サービスラッシュにより、現地に送り込んだ弊社の精鋭もさすがにノックダウン寸前です。

その中で新サービスの影に隠れそうな新機能、AWS CLIのcli_historyというものが目に入ったので、さっそく試してみました。

公開直前に先を越されていたことに気がつきましたが、気にせず公開します。

一緒にこちらもどうぞ。

AWS CLIのバージョン

aws history1.13.0からサポートされました。

先ほどpipでアップデートしたところ1.14.0がインストールされたので、最新版にしておけば大丈夫です。

aws-cli/CHANGELOG.rst at 1.13.0 · aws/aws-cli · GitHub

cli_historyの有効化

デフォルトではcli_historyは使えません。

次のコマンドを実行して有効化しましょう。

1
2
3
4
5
6
7
$ aws configure set cli_history enabled
 
$ cat ~/.aws/config
[default]
output = json
region = ap-northeast-1
cli_history = enabled

configファイルにcli_history = enabledが追加されていればOKです。もちろん直接ファイルを修正しても大丈夫です。

試してみる

実際に履歴として記録されるのは、cli_historyを有効化して以降のコマンドとなります。そのため、有効化前に実行していたコマンドは履歴にはありません。

また現在cli_historyに有効なコマンドは次の2つです。

  • list
  • show

というわけで、適当にコマンドを実行して、履歴を増やしてみます。

1
2
3
4
$ aws iam list-account-aliases
$ aws iam list-access-keys
 
$ aws history list

そうすると次のように、履歴がペーシャで表示されました。

1
2
d1cb919a-0ee6-4201-903e-0f462b4e1bc1  2017-11-30 11:48:50 AM  iam list-access-keys
93a68531-3582-4987-9ed9-3bc545cb4dcf  2017-11-30 11:48:41 AM  iam list-account-aliases

コマンドID、日時、実行したコマンド、となっています。

続いてshowコマンドも試してみます。showコマンドはコマンドIDを指定しないと最後のコマンドの情報、指定すると指定したコマンドの情報が得られます。

1
$ aws history show
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
AWS CLI command entered
at time: 2017-11-30 11:48:50.570
with AWS CLI version: aws-cli/1.14.0 Python/3.6.3 Darwin/16.7.0 botocore/1.8.4
with arguments: ['iam', 'list-access-keys']
 
[0] API call made
at time: 2017-11-30 11:48:50.613
to service: iam
using operation: ListAccessKeys
with parameters: {}
 
[0] HTTP request sent
at time: 2017-11-30 11:48:50.615
with method: POST
with headers: {
    "Authorization": "AWS4-HMAC-SHA256 Credential=********************/20171130/us-east-1/iam/aws4_request, SignedHeaders=content-type;host;x-amz-date, Signature=****************************************************************",
    "Content-Length": "40",
    "Content-Type": "application/x-www-form-urlencoded; charset=utf-8",
    "User-Agent": "aws-cli/1.14.0 Python/3.6.3 Darwin/16.7.0 botocore/1.8.4",
    "X-Amz-Date": "20171130T024850Z"
}
with body: Action=ListAccessKeys&Version=2010-05-08
 
[0] HTTP response received
at time: 2017-11-30 11:48:51.394
with status code: 200
with headers: {
    "content-length": "565",
    "content-type": "text/xml",
    "date": "Thu, 30 Nov 2017 02:48:50 GMT",
    "x-amzn-requestid": "ff38e5dd-d578-11e7-92f7-b3ed884c3a04"
}
with body: <?xml version="1.0" ?>
<ListAccessKeysResponse xmlns="https://iam.amazonaws.com/doc/2010-05-08/">
    <ListAccessKeysResult>
        <IsTruncated>false</IsTruncated>
        <AccessKeyMetadata>
            <member>
                <AccessKeyId>********************</AccessKeyId>
                <UserName>cm-takeda.takashi</UserName>
                <Status>Active</Status>
                <CreateDate>2017-10-03T09:59:36Z</CreateDate>
            </member>
        </AccessKeyMetadata>
    </ListAccessKeysResult>
    <ResponseMetadata>
        <RequestId>ff38e5dd-d578-11e7-92f7-b3ed884c3a04</RequestId>
    </ResponseMetadata>
</ListAccessKeysResponse>
 
 
[0] HTTP response parsed
at time: 2017-11-30 11:48:51.396
parsed to: {
    "AccessKeyMetadata": [
        {
            "AccessKeyId": "********************",
            "CreateDate": "2017-10-03T09:59:36Z",
            "Status": "Active",
            "UserName": "cm-takeda.takashi"
        }
    ],
    "IsTruncated": false,
    "ResponseMetadata": {
        "HTTPHeaders": {
            "content-length": "565",
            "content-type": "text/xml",
            "date": "Thu, 30 Nov 2017 02:48:50 GMT",
            "x-amzn-requestid": "ff38e5dd-d578-11e7-92f7-b3ed884c3a04"
        },
        "HTTPStatusCode": 200,
        "RequestId": "ff38e5dd-d578-11e7-92f7-b3ed884c3a04"
    }
}
 
AWS CLI command exited
at time: 2017-11-30 11:48:51.400
with return code: 0

なんか思ってた以上に情報が取得できました(笑)。

コマンドIDを指定する場合は、showに続いてIDを指定すればOKです。

1
$ aws history show 93a68531-3582-4987-9ed9-3bc545cb4dcf

まとめ

地味ながら、コマンドが裏でやっているHTTPの情報などが見れるのがおもしろいと思いました!

事前の有効化は忘れずにやっておきましょう!!

Invent2017japan portal