Athenaのインテグレーション

AthenaをRetoolに接続します。

1. AWS資格情報の取得

AWSアクセス・キーAWSシークレット・キーは、AWSアカウント管理者が安全な場所に保管しているはずです。もし見つからない場合は、AWSコンソールを使用してMy Security Credentialsセクションでこれらのキーを新たに作成することができます。このセクションにアクセスするには、右上に表示されている名前の横のドロップダウンをクリックします。

AWS Console > My Security Credentials > Access Keys > Create New Access Key

このアクセス・キーの作成中に、このユーザーに対するポリシーをアタッチするようにプロンプトが表示されます。AWS管理ポリシー「AthenaFullAccess」を使用することができます。または、新しいポリシーを作成するための開始点としてこのテンプレートを使用することもできます。

{
    "Version": "2012-10-17",
    "Statement": [
        {
            "Sid": "この文は必須です。Resourceを変更してRetoolがアスクセスするAthenaのリソースを制限できます。また、どのアクションでRetoolがアクセスするかも変更できますが、クエリーが期待どおりに動作するかは保障されていません。ドキュメントはこちら: https://docs.aws.amazon.com/athena/latest/ug/security-iam-athena.html",
            "Effect": "Allow",
            "Action": [
                "athena:*"
            ],
            "Resource": [
                "*"
            ]
        },
        {
            "Sid": "この文は、AWS Glueに対して、文のメタデータを読み書きするパーミッションを与えます。パーミッションのここでの範囲はかなり広く、読み取り専用のアクションを含めても問題ありません。ドキュメントはこちら: https://docs.aws.amazon.com/athena/latest/ug/glue-athena.html",
            "Effect": "Allow",
            "Action": [
                "glue:CreateDatabase",
                "glue:DeleteDatabase",
                "glue:GetDatabase",
                "glue:GetDatabases",
                "glue:UpdateDatabase",
                "glue:CreateTable",
                "glue:DeleteTable",
                "glue:BatchDeleteTable",
                "glue:UpdateTable",
                "glue:GetTable",
                "glue:GetTables",
                "glue:BatchCreatePartition",
                "glue:CreatePartition",
                "glue:DeletePartition",
                "glue:BatchDeletePartition",
                "glue:UpdatePartition",
                "glue:GetPartition",
                "glue:GetPartitions",
                "glue:BatchGetPartition"
            ],
            "Resource": [
                "*"
            ]
        },
        {
            "Sid": "この文は、Athenaからの結果を関連するS3バケットに書き込むパーミッションを与えます。関連するS3のリソースに対する'Resource'キーを設定する必要があります。Athenaが任意の名前のファイルをS3バケットに書き込むので、Resource ARNの最後の'*'が必須になります。",
            "Effect": "Allow",
            "Action": [
                "s3:GetBucketLocation",
                "s3:GetObject",
                "s3:ListBucket",
                "s3:ListBucketMultipartUploads",
                "s3:ListMultipartUploadParts",
                "s3:AbortMultipartUpload",
                "s3:CreateBucket",
                "s3:PutObject"
            ],
            "Resource": [
                "arn:aws:s3:::bucket-name-where-athena-results-are-written-to*"
            ]
        },
        {
            "Sid": "この文はオプションです。Retoolはこれらのパーミッションを将来的にスキーマ・ブラウザーを表示するために使用するかもしれませんが、現在は使用されていません。",
            "Effect": "Allow",
            "Action": [
                "s3:ListBucket",
                "s3:GetBucketLocation",
                "s3:ListAllMyBuckets"
            ],
            "Resource": [
                "*"
            ]
        },
        {
            "Sid": "この文はオプションです。Athenaにクエリーの実行についてリアルタイムの通知を受信させたい場合に必須となります。ドキュメントはこちら: https://docs.aws.amazon.com/athena/latest/ug/athena-cloudwatch-events.html",
            "Effect": "Allow",
            "Action": [
                "sns:ListTopics",
                "sns:GetTopicAttributes"
            ],
            "Resource": [
                "*"
            ]
        },
        {
            "Sid": "この文はオプションです。AthenaにCloudWatchへのメトリクスを発行させたい場合に必須となります。ドキュメントはこちら: https://docs.aws.amazon.com/athena/latest/ug/query-metrics-viewing.html",
            "Effect": "Allow",
            "Action": [
                "cloudwatch:PutMetricAlarm",
                "cloudwatch:DescribeAlarms",
                "cloudwatch:DeleteAlarms"
            ],
            "Resource": [
                "*"
            ]
        },
        {
            "Sid": "この文はオプションです。AWS Lake Formationのデータを照会する場合に必須となります。ドキュメントはこちら: https://docs.aws.amazon.com/athena/latest/ug/security-athena-lake-formation.html",
            "Effect": "Allow",
            "Action": [
                "lakeformation:GetDataAccess"
            ],
            "Resource": [
                "*"
            ]
        }
    ]
}

2. Athenaの詳細情報の確認

RetoolをAthenaに接続するには、Query result locationを確認しておく必要があります。AWSコンソールのAthenaセクションでSettingsをクリックすると表示されます。

AWS Console > Athena > Settings

3. Retoolへの追加

Retoolで新規リソースを作成し、typeで「Amazon Athena」を選択します。AWS資格情報とAthenaのQuery result locationを「Athena」のデータソース・フォームに入力し、「Save」を押します。

Resources > Add > Amazon Athena

4. クエリーの作成

これで、Retoolアプリケーション内でクエリーを作成するときに、新規作成したAthenaのリソースをResourceドロップダウンから選択できるようになりました。

Athenaのクエリーの結果は、Retoolの他のクエリーの場合と同様に表示させることができます。

Athenaのクエリーと通常のSQLクエリーの違いはわずかですが、Athenaのクエリーにはdataキーだけでなく、メタデータを含むqueryExecutionキーもあります。AWSはクエリー実行時にスキャンするデータの量に応じて課金するため、その違いが監視に役立つかもしれません。