この記事は公開されてから1年以上経過しています。情報が古い可能性がありますので、ご注意ください。
Amazon Athena初のCloudFormation対応ということで、Saved Queries(NamedQuery)にクエリーを登録を試してみました。Athenaはよく使うクエリーを事前に登録できる機能があり、そのクエリーのことをNamedQueryと呼びます。
クエリーの登録
構文
AWS CloudFormationテンプレートでこのエンティティを宣言するには、次の構文を使用します。
- JSON
{
"Type" : "AWS::Athena::NamedQuery",
"Properties" : {
"Description" : String,
"QueryString" : String,
"Database" : String,
"Name" : String
}
}
- YAML
Type: "AWS::Athena::NamedQuery"
Properties:
Description: String
QueryString: String
Database: String
Name: String
CloudFormationテンプレートの用意
今回は誰でも環境を再現できるように、全てのAWSユーザーにサンプルとして登録されているsampledbのelb_logsテーブルに対するクエリーを登録してみます。エスケープ文字などの考慮はしたくないので、CloudFormationテンプレートはYAMLで作成しました。
なお、登録するクエリーServerResponses
はELB毎かつレスポンスコード毎のカウント数を表示するクエリーです。
Resources:
AthenaNamedQuery:
Type: AWS::Athena::NamedQuery
Properties:
Database: "sampledb"
Description: "A query that selects responses aggregated data"
Name: "ServerResponses"
QueryString: >
SELECT elbname, backendresponsecode, count(*) AS num
FROM elb_logs
GROUP BY 2,1
ORDER BY 2,1
スタックの作成
テンプレートファイル(ServerResponses.template)を Amazon S3 にアップロードして、スタックを作成します。
スタックの名前はServerResponsesと設定しました。オプションは設定不要です。設定した内容は以下のとおりです。
1分以内に登録完了です。
確認
Athenaコンソールの Saved Queries の先頭に追加されていることが確認できます。
AWSCLIからも以下のように確認できます。
$ aws athena list-named-queries
{
"NamedQueryIds": [
"4f0c46de-e80e-462d-a83f-d2ba77f6a0e5",
"749f4ca9-92b2-4eed-9c71-3b2bfc6b4e75",
"fb829aa7-fc70-4f60-9831-230aefa09b87",
"5616ea97-1350-4a98-973b-71aa6802001a",
"35985ded-7546-4dc5-8bc8-75cb4c829f2b",
"ed65168c-a79c-47ec-a61a-70932ba30eb0",
"4d2e5479-46ac-451f-ac62-3179fe344533",
"115890c1-6002-44b8-9f98-ecab0515ba4d"
]
}
$ aws athena get-named-query --named-query-id 4f0c46de-e80e-462d-a83f-d2ba77f6a0e5
{
"NamedQuery": {
"Database": "sampledb",
"QueryString": "SELECT elbname, backendresponsecode, count(*) AS num FROM elb_logs GROUP BY 2,1 ORDER BY 2,1\n",
"Name": "ServerResponses",
"NamedQueryId": "4f0c46de-e80e-462d-a83f-d2ba77f6a0e5",
"Description": "A query that selects responses aggregated data"
}
}
最後に
SavedQueriesは、よく使うクエリーや雛形を事前に登録しておき、簡単に呼び出すことができます。これを一括で登録・更新・削除、またコード管理できるのは有効です。 他にもAPIが提供されているので順次CloudFormation対応が望まれます。