AWS CLIがAthena対応したので、試してみました。
(いや〜JDBC接続とかめんどかった・・・)
利用環境はMacです
AWS CLIをバージョンアップ
利用していたAWS CLIのバージョンは1.11.88でした
$ aws --version
aws-cli/1.11.88 Python/2.7.10 Darwin/15.6.0 botocore/1.5.51
$ aws help | grep athena
もちろんAthenaが入っていないのでバージョンアップします
--ignore-installed sixをつけないとバージョンアップできないのはなんとかならないかな・・・
$ sudo pip install --upgrade awscli --ignore-installed six
バージョンアップ完了
$ aws --version
aws-cli/1.11.89 Python/2.7.10 Darwin/15.6.0 botocore/1.5.52
$ aws help | grep athena
o athena
ドキュメントを眺める
コマンド一覧
- batch-get-named-query
- batch-get-query-execution
- create-named-query
- delete-named-query
- get-named-query
- get-query-execution
- get-query-results
- list-named-queries
- list-query-executions
- start-query-execution
- stop-query-execution
コマンド実行してみる
本日時点ではAthenaが東京リージョンに来てないので、コマンドに--region us-east-1(バージニアリージョン)を指定。(諸事情でprofileは使わない)
すでに、CloudFrontとCloudTrailのログをAthena上に配置
→Athenaを使ってAWSのログを集計する
start-query-execution
クエリを実行するコマンド。
必須パラメータ
--query-string:Stringでクエリを記述。FROM句にDB名は必須。
--result-configuration:結果を出力するS3バケットを指定
$ aws --region us-east-1 athena start-query-execution \
--query-string "SELECT * FROM aws_logs.cloudfront_log limit 10;" \
--result-configuration OutputLocation=s3://athena-output
{
"QueryExecutionId": "9d5f2f3a-e80f-4807-ab6c-35139924d374"
}
get-query-results
クエリの実行結果を見る
$ aws --region us-east-1 athena get-query-results \
--query-execution-id 9d5f2f3a-e80f-4807-ab6c-35139924d374
{
"ResultSet": {
"Rows": [
{
"Data": [
{
"VarCharValue": "date"
},
{
"VarCharValue": "time"
},
{
"VarCharValue": "xedgelocation"
},
{
"VarCharValue": "scbytes"
},
{
"VarCharValue": "cip"
},
{
"VarCharValue": "csmethod"
},
{
"VarCharValue": "cshost"
},
{
"VarCharValue": "csuristem"
},
{
"VarCharValue": "scstatus"
},
{
"VarCharValue": "csreferer"
},
{
"VarCharValue": "csuseragent"
},
{
"VarCharValue": "csuriquery"
},
{
"VarCharValue": "cscookie"
},
{
"VarCharValue": "xedgeresulttype"
},
{
"VarCharValue": "xedgerequestid"
},
{
"VarCharValue": "xhostheader"
},
{
"VarCharValue": "csprotocol"
},
{
"VarCharValue": "csbytes"
},
{
"VarCharValue": "timetaken"
},
{
"VarCharValue": "xforwardedfor"
},
{
"VarCharValue": "sslprotocol"
},
{
"VarCharValue": "sslcipher"
},
{
"VarCharValue": "xedgeresponseresulttype"
},
{
"VarCharValue": "csprotocolversion"
}
]
},
{
"Data": [
{
"VarCharValue": "2017-03-11"
},
{
"VarCharValue": "07:09:39"
},
{
"VarCharValue": "NRT20"
},
{
"VarCharValue": "485"
},
{
"VarCharValue": "182.251.62.172"
},
{
"VarCharValue": "GET"
},
{
"VarCharValue": "d296z2px268if9.cloudfront.net"
},
{
"VarCharValue": "/sample"
},
{
"VarCharValue": "200"
},
{
"VarCharValue": "-"
},
{
"VarCharValue": "curl/7.43.0"
},
{
"VarCharValue": "-"
},
{
"VarCharValue": "-"
},
{
"VarCharValue": "Miss"
},
{
"VarCharValue": "7_kRmqTCtndlAsdecditmwIL3kPgVKjsqBggBEFSu68_tsTGWAVK-g=="
},
{
"VarCharValue": "d296z2px268if9.cloudfront.net"
},
{
"VarCharValue": "https"
},
{
"VarCharValue": "99"
},
{},
{
"VarCharValue": "-"
},
{
"VarCharValue": "TLSv1.2"
},
{
"VarCharValue": "ECDHE-RSA-AES128-GCM-SHA256"
},
{
"VarCharValue": "Miss"
},
{
"VarCharValue": "HTTP/1.1"
}
]
},
・・・
これ使いにくい・・・
get-query-execution
クエリ実行結果(成功/失敗)等の情報を取得する
start-query-executionで実行した結果を取得
必須パラメータ
--query-execution-id:実行時に表示されるQueryExecutionIdを指定
$ aws --region us-east-1 athena get-query-execution \
--query-execution-id 9d5f2f3a-e80f-4807-ab6c-35139924d374
{
"QueryExecution": {
"Status": {
"SubmissionDateTime": 1495269759.131,
"State": "SUCCEEDED",
"CompletionDateTime": 1495269762.711
},
"Query": "SELECT * FROM aws_logs.cloudfront_log limit 10",
"Statistics": {
"DataScannedInBytes": 1454,
"EngineExecutionTimeInMillis": 3475
},
"ResultConfiguration": {
"OutputLocation": "s3://athena-output/3fbf61dd-866e-4de6-9ba4-56cfdb671964.csv"
},
"QueryExecutionId": "3fbf61dd-866e-4de6-9ba4-56cfdb671964"
}
}
StatusにSUCCEEDEDと表示されるので成功している
結果は実行時に指定したS3バケット内にCSVで保存される→OutputLocation
スクリプトを組むならこんな感じ?
#!/bin/bash
OutputBucket=athena-output # 出力バケット
# クエリ実行
queryId=$(aws --region us-east-1 athena start-query-execution \
--query-string "SELECT * FROM aws_logs.cloudfront_log limit 10;" \
--result-configuration OutputLocation=s3://$OutputBucket \
| jq -r '.QueryExecutionId')
# 結果の確認
status=$(aws --region us-east-1 athena get-query-execution \
--query-execution-id $queryId \
| jq -r '.QueryExecution.Status.State')
if [ "$status" == "SUCCEEDED" ]; then
aws s3 cp s3://${OutputBucket}/${queryId}.csv .
else
echo "Query Error!"
fi
cat ${queryId}.csv
まとめ
- 待望のAthenaがAWS CLIに対応しました。
- BigQueryはbqコマンドで実行できたので、足並み揃い始めた感じでしょうか
- もうすぐ東京リージョンに来そうな感じなので、期待大です(Comming Soonってなってるので、AWS Summit Tokyoで発表!?)
- 出力結果がもっといい感じに見れるといいですね