Amazon Athena Engine Version 3を使用するWork GroupをAWS CDKで作る

2022.10.15

この記事は公開されてから1年以上経過しています。情報が古い可能性がありますので、ご注意ください。

こんにちは、CX事業本部 IoT事業部の若槻です。

先日、Amazon Athenaのengine versioningにAthena engine version 3が追加されました。

Version 3では、50以上の新しいSQL関数の追加や、クエリパフォーマンスの改善が行われており、是非とも使ってみたいところです。

そこで今回は、Amazon Athena Engine Version 3を使用するWork GroupをAWS CDKで作る方法を確認してみました。

Work GroupのEngine Versionの指定方法は2種類ある

Athena Work GroupでのEngine Versionの指定方法は、AutomaticManualの2種類があります。

Automaticとした場合は現時点では既定でversion 2が使われますが、今後AWSからの通知があった後にversion 3に自動でアップグレードされるとのことです。

Athena will notify you of your upgrade in the Athena console and through your AWS Health Dashboard. Your engine version will remain on the current version until you receive a notification.

Manualとした場合はversion 2とversion 3のいずれかが選択できます。推奨はversion 3なんですね。

よって、Amazon Athena Engine Version 3を使用するWork Groupを作りたい場合は、Manualでversion 3を指定すれば良さそうです。

engine version 3を使用するWork Groupを作る

それではAWS CDKでengine version 3を使用するWork Groupを作成してみます。

結論として、selectedEngineVersionでengine version 3を明示的に指定することにより、Manualでengine version 3を指定したWork Groupを作成できました。

lib/aws-cdk-app-stack.ts

import { aws_athena, Stack, StackProps } from 'aws-cdk-lib';
import { Construct } from 'constructs';

export class AwsCdkAppStack extends Stack {
  constructor(scope: Construct, id: string, props?: StackProps) {
    super(scope, id, props);

    // engine versionの指定なし
    new aws_athena.CfnWorkGroup(this, 'workGroup', {
      name: 'workGroup',
    });

    // engine version 3を明示的に指定
    new aws_athena.CfnWorkGroup(this, 'workGroupV3', {
      name: 'workGroupVersionSpecified',
      workGroupConfiguration: {
        engineVersion: {
          selectedEngineVersion: 'Athena engine version 3',
        },
      },
    });
  }
}

上記スタックをCDK Deployしてリソースを作成します。

作成されたWork Groupをathena get-work-groupコマンドで取得してみます。

バージョンを指定しなかった方は、SelectedEngineVersionがAuto(Automatic)、EffectiveEngineVersionがAthena engine version 2となっており、現状でversion 2のEngineが使われるようになっています。

$ aws athena get-work-group --work-group workGroup
{
    "WorkGroup": {
        "Name": "workGroup",
        "State": "ENABLED",
        "Configuration": {
            "EnforceWorkGroupConfiguration": true,
            "PublishCloudWatchMetricsEnabled": true,
            "RequesterPaysEnabled": false,
            "EngineVersion": {
                "SelectedEngineVersion": "AUTO",
                "EffectiveEngineVersion": "Athena engine version 2"
            }
        },
        "CreationTime": "2022-10-15T22:27:25.515000+09:00"
    }
}

バージョンを明示的に指定した方は、SelectedEngineVersionおよびEffectiveEngineVersionのいずれもAthena engine version 3となっており、version 3のEngineが使われるようになっています。

$ aws athena get-work-group --work-group workGroupVersionSpecified
{
    "WorkGroup": {
        "Name": "workGroupVersionSpecified",
        "State": "ENABLED",
        "Configuration": {
            "EnforceWorkGroupConfiguration": true,
            "PublishCloudWatchMetricsEnabled": false,
            "RequesterPaysEnabled": false,
            "EngineVersion": {
                "SelectedEngineVersion": "Athena engine version 3",
                "EffectiveEngineVersion": "Athena engine version 3"
            }
        },
        "CreationTime": "2022-10-15T22:27:38.396000+09:00"
    }
}

一応コンソールで確認してみると、Manualが選択されています。

EffectiveEngineVersionとSelectedEngineVersion

前述の実装で、「EffectiveEngineVersion」と「SelectedEngineVersion」というプロパティが出てきました。

EffectiveEngineVersionは、現在そのWork Groupで有効なEngine Versionを表します。読み取り専用属性であり、SelectedEngineVersionでAutoを指定しており自動でアップグレードが行われた場合にこの値が自動で変わるものと思われます。

EffectiveEngineVersion Read only. The engine version on which the query runs. If the user requests a valid engine version other than Auto, the effective engine version is the same as the engine version that the user requested. If the user requests Auto, the effective engine version is chosen by Athena. When a request to update the engine version is made by a CreateWorkGroup or UpdateWorkGroup operation, the EffectiveEngineVersion field is ignored.

SelectedEngineVersionは、既定はAutoで、version 2またはversion 3を明示的に指定できるようです。

SelectedEngineVersion The engine version requested by the user. Possible values are determined by the output of ListEngineVersions, including Auto. The default is Auto.

ListEngineVersions APIを叩いてみると、現在指定できるのは次の3つのようですね。

$ aws athena list-engine-versions
{
    "EngineVersions": [
        {
            "SelectedEngineVersion": "AUTO"
        },
        {
            "SelectedEngineVersion": "Athena engine version 2"
        },
        {
            "SelectedEngineVersion": "Athena engine version 3"
        }
    ]
}

参考

以上