AWS CloudFormation で Amazon Athena Prepared Statement を管理する

CloudFormation

フェイス・ソリューション・テクノロジーズ株式会社 IS 本部 OS ユニットの Saki@猫好き です。AWS 活用していますか?

今日は、AWS CloudFormation を利用して、Amazon Athena Prepared Statement を管理する方法について書いてみたいと思います。

はじめに

Amazon Athena Prepared Statement とは?

Athena のパラメータ化されたクエリを使用して、実行時に同じクエリを異なるパラメータ値で再実行し、SQL インジェクション攻撃を防ぐことができます。Athena では、パラメータ化されたクエリは、任意の DML クエリまたは SQL プリペアドステートメントの実行パラメータの形式をとることができます。

https://docs.aws.amazon.com/ja_jp/athena/latest/ug/querying-with-prepared-statements.html

たとえば・・・

定期的に実行したいクエリがあるとします。SQL ステートメントの Where 句に「いつから」「いつまで」をパラメータとして渡すことで、クエリを実行することができるようになります。

PREPARE ステートメントを利用してクエリを作成
PREPARE my_test FROM
SELECT *
FROM my_table
WHERE date_from_to BETWEEN ? AND ?
作成した PREPARE ステートメントを利用
EXECUTE my_test USING '2023-01-01','2023-01-10'

Amazon Athena Prepared Statement の管理方法

Amazon Athena コンソールを利用

わかりやすいし簡単です。クエリを保存しておくことで、クエリの管理もできます。しかし、クエリの数が増えてくると、修正等の際に「保存したクエリ」タブでは手間がかかるようになります。

また、クエリを保存しなかった場合、Amazon Athena コンソールから登録されている Prepared Statement を確認する方法がありません。

AWS CLI を利用

aws athena create-prepared-statement 
--statement-name my_test
--query-statement "SELECT * FROM my_table WHERE date_from_to BETWEEN ? AND ?" 
--work-group primary

クエリが長くなったときに見にくいです。

AWS CLI では、list-prepared-statements と get-prepared-statement を利用することで、登録されている Prepared Statement を確認することができます。

AWS CloudFormation を利用

今回の本題。

過去、私は、コンソールでクエリを書いて、確認のために AWS CLI を利用する方法をとってきました。しかし、必要なときに必要なタイミングでクエリを確認したり修正したりするには、少々手間がかかります。

現在は、AWS CloudFormation を利用して、Code として管理しています。

CFn で Prepared Statement を書いてみた

結論

AWSTemplateFormatVersion: 2010-09-09
Description: myTest

Parameters:
###########################################################################
# Input Parameters
###########################################################################

  ProjectName:
    Description: Project name.
    Type: String
    ConstraintDescription: Please enter the project name.

###########################################################################
# Resources セクション
###########################################################################

Resources:

###########################################################################
# Athena Prepared作成
###########################################################################

  myTest:
    Type: AWS::Athena::PreparedStatement
    Properties:
      QueryStatement: !Sub |
                       SELECT *
                       FROM ${ProjectName}_table
                       WHERE date_from_to BETWEEN ? AND ?
      StatementName: !Sub "${ProjectName}_my_test"
      WorkGroup: "primary"

解説

複数の案件(プロジェクト)で、同じクエリを用いてデータ分析を行うことを想定しています。

そのため、案件(プロジェクト)ごとに、【案件(プロジェクト)名】_table というテーブルを用意しています。これを Athena コンソールや AWS CLI で行う場合、案件(プロジェクト)ごとに Prepared Statement を用意する必要があり、多変手間がかかります。

利用する際には、Athena コンソールや AWS CLI から EXECUTE しても良いですし、Lambda と Event Bridge を組み合わせて定期的に走らせることも可能です。(私は、Lambda と Event Bridge の組み合わせも CFn 化して利用しています。その話はいずれどこかで・・・)

最後に

今回は、CloudFormation で Athena Prepared Statement を管理する方法について書いてみました。

調査内容が増えたときに Prepared Statement を増やすとか、調査内容に修正が加わったときに Prepared Statement を修正するとか、コード化されたメリットを活用することで作業が効率化できています。

あまり情報がないので、需要があるのかないのか不安ではありますが、きっとやりたいと思っている人はいらっしゃるはず。ということで、どなたかの参考になれば幸いです。

引き続き、よろしくお願いいたします!

プロフィール
この記事を書いた人
saki@猫好き

フェイス・ソリューション・テクノロジーズ株式会社オペレーションサービスユニットのユニット長。
とにかく猫が好き。そして、キャンプが好き。休みの日は結構な割合でキャンプ場に出没します。
AWS 6 冠達成しています。
ITパスポート、基本情報技術者、応用情報技術者、取得済み。

saki@猫好きをフォローする
フェイスでは一緒に働く仲間を募集しています

フェイス・ソリューション・テクノロジーズ株式会社では、一緒に働いてくれる仲間を募集しています。
いろいろな案件があるので、いろいろなことに挑戦できる会社です。
「面白いこと」に積極的なので、あなたの「面白そうなことだからやってみたい」を形にできるチャンスがあります!

CloudFormation
フェイススタッフブログ

コメント

タイトルとURLをコピーしました