製品をチェック

製品をチェック

AWS Marketplace でAmazon Athena Glue Connector の利用を開始

AWS Marketplace へ

AWS Glue Studio でAmazon Athena データ連携のETL 処理を作成

AWS Glue Studio からAmazon Athena データに連携して、リアルタイムAmazon Athena データにCData Glue Connector を使ってETL 処理を構築。

加藤龍彦
デジタルマーケティング

最終更新日:2022-11-20

こんにちは!ウェブ担当の加藤です。マーケ関連のデータ分析や整備もやっています。

AWS Glue はAmazon が提供するETL サービスで、ビジネスデータをストレージやアナリティクスプラットフォームに簡単にロード・加工ができます。CData Glue Connectors を使うことで、Glue Studio でノーコード・ローコードでETL ジョブを作成することが可能になります。この記事では、CData Glue Connector for AmazonAthena を使って、Amazon Athena データ連携を行うAWS Glue ジョブを作成していきます。

IAM ロールの設定

AWS Glue ジョブを作成するには、AWS のIAM ロールを設定する必要があります。 IAM ロールは、Glue ジョブが関連するすべてのリソース(Amazon S3 のリソース、ターゲット、スクリプト、テンポラリーディレクトリ、AWS Glue Catalog オブジェクトを含む)にアクセス権限を持つ必要があります。また、AWS Glue Marketplace で購入するCData Glue Connector for AmazonAthena へのアクセス権限も必要です。

ミニマムで、以下のポリシーをIAM ロールに追加する必要があります:

  • AWSGlueServiceRole (Glue Studio およびGlue Jobs へのアクセス)
  • AmazonEC2ContainerRegistryReadOnly (CData AWS Glue Connector for AmazonAthena へのアクセス)

Amazon S3 データにアクセスする場合は以下を追加:

  • AmazonS3FullAccess (Amazon S3 への読み書き)

接続プロパティの保存にAWS Secrets Manager を使う場合、インラインでポリシーを追加して、Glue ジョブに必要な特定のsecrets へのアクセスを許容:

{ "Version": "2012-10-17", "Statement": [ { "Effect": "Allow", "Action": [ "secretsmanager:GetResourcePolicy", "secretsmanager:GetSecretValue", "secretsmanager:DescribeSecret", "secretsmanager:ListSecretVersionIds" ], "Resource": [ "arn:aws:secretsmanager:us-west-2:111122223333:secret:aes128-1a2b3c", "arn:aws:secretsmanager:us-west-2:111122223333:secret:aes192-4D5e6F", "arn:aws:secretsmanager:us-west-2:111122223333:secret:aes256-7g8H9i" ] } ] }

AWS Glue Studio およびGlue Job でのアクセス権限についての詳細情報は、「Setting up IAM Permissions for AWS Glue in the AWS Glue」ドキュメントを参照してください。

Amazon S3 バケットへのアクセス権限についての詳細情報は、「Amazon Simple Storage Service Developer Guide」を参照してください。

シークレットへのアクセスコントロール設定については、AWS Secrets Manager ドキュメントの「Authentication and Access Control for AWS Secrets Manager」および「Limiting Access to Specific Secrets」を参照してください。AWS Secret Manager から取得されたクレデンシャル(key-value ペアの文字列)は、CData Glue Connector がデータソースに接続する際に使われます。

Amazon Athena 接続プロパティの取得

Amazon Athena 接続プロパティの取得・設定方法

Amazon Athena リクエストの認証には、アカウントの管理のクレデンシャルか、IAM ユーザーのカスタムPermission を設定します。 AccessKey にAccess Key Id、SecretKey にはSecret Access Key を設定します。

AWS アカウントアドミニストレータとしてアクセスできる場合でも、AWS サービスへの接続にはIAM ユーザークレデンシャルを使用することが推奨されます。

IAM ユーザーのクレデンシャル取得は以下のとおり:

  1. IAM コンソールにログイン。
  2. Navigation ペインで「ユーザー」を選択。
  3. ユーザーのアクセスキーを作成または管理するには、ユーザーを選択してから「セキュリティ認証情報」タブを選択。

AWS ルートアカウントのクレデンシャル取得は以下のとおり:

  1. ルートアカウントの資格情報を使用してAWS 管理コンソールにサインイン。
  2. アカウント名または番号を選択し、表示されたメニューで「My Security Credentials」を選択。
  3. 「Continue to Security Credentials」をクリックし、「Access Keys」セクションを展開して、ルートアカウントのアクセスキーを管理または作成。

EC2 インスタンスからの認証

EC2 インスタンスからCData 製品を使用していて、そのインスタンスにIAM ロールが割り当てられている場合は、認証にIAM ロールを使用できます。 これを行うには、UseEC2Roles をtrue に設定しAccessKeySecretKey を空のままにします。 CData 製品は自動的にIAM ロールの認証情報を取得し、それらを使って認証します。

AWS ロールとして認証

多くの場合、認証にはAWS ルートユーザーのダイレクトなセキュリティ認証情報ではなく、IAM ロールを使用することをお勧めします。 代わりにRoleARN を指定してAWS ロールを使用できます。これにより、CData 製品は指定されたロールの資格情報を取得しようと試みます。 (すでにEC2 インスタンスなどで接続されているのではなく)AWS に接続している場合は、役割を担うIAM ユーザーのAccessKeySecretKey を追加で指定する必要があります。AWS ルートユーザーのAccessKey およびSecretKey を指定する場合、 ロールは使用できません。

MFA での認証

多要素認証を必要とするユーザーおよびロールには、MFASerialNumber およびMFAToken 接続プロパティを指定してください。 これにより、CData 製品は一時的な認証資格情報を取得するために、リクエストでMFA 認証情報を送信します。一時的な認証情報の有効期間 (デフォルトは3600秒)は、TemporaryTokenDuration プロパティを介して制御できます。

Amazon Athena への接続

AccessKeySecretKey プロパティに加え、DatabaseS3StagingDirectoryRegion を設定します。Region をAmazon Athena データがホストされているリージョンに設定します。S3StagingDirectory をクエリの結果を格納したいS3内のフォルダに設定します。

接続にDatabase が設定されていない場合は、CData 製品はAmazon Athena に設定されているデフォルトデータベースに接続します。

CData Glue Connector for AmazonAthena で使用するので必要なプロパティの値をメモしておきます。

(Optional)Amazon Athena Connection Properties Credentials をAWS Secrets Manager に保存する

接続プロパティをセキュアに保存して使用するには、AWS Secrets Manager に保存することができます。

Note: AWS Glue ETL ジョブおよびシークレットは、同じリジョンにホストされる必要があります。リジョンをまたぐシークレットの取得はサポートされていません。

  1. AWS Secrets Manager console にサインインします。
  2. service introduction ページもしくはSecrets list ページで、Store a new secret を選択します。
  3. Store a new secret ページで、Other type of secret を選択します。このオプションはシークレットの構造や詳細を自身で提供するものです。
  4. Amazon Athena への接続プロパティについては"Activate" セクションを参照してください。必要なプロパティに対して、key-value ペアを作ります。例:
    • Username: account user (for example, [email protected])
    • Password: account password
    • Add any additional private credential key-value pairs required by the CData Glue Connector for AmazonAthena

    シークレットの作成については、AWS Secrets Manager User Guide のCreating and Managing Secrets with AWS Secrets Manager を参照してください。

  5. AWS Glue Studio で使用するシークレット名を保存します。

CData Glue Connector for AmazonAthena をサブスクライブする

AWS Glue Studio でCData Glue Connector for AmazonAthena を利用するには、AWS Marketplace でコネクタのサブスクリプションを行う必要があります。すでにCData Glue Connector for AmazonAthena のサブスクリプション契約をしている場合には、この部分はスキップしてください。

  1. AWS Glue Studio でConnectors をクリック
  2. AWS Marketplace にアクセス
  3. "CData Amazon Athena" のコネクタを検索 Selecting a CData AWS Glue Connector
  4. "Continue to Subscribe" をクリック
  5. Connector の使用条件に同意して、リクエストが処理完了を待ちます
  6. "Continue to Configuration" をクリック Accepted Terms and continuing Configuration

Glue Studio でCData Glue Connector for AmazonAthena をアクティベートする

AWS Glue でCData Glue Connector for AmazonAthenaを使うためには、AWS Glue Studio でサブスクライブしたコネクタをアクティベートする必要があります。アクティベートすることで、AWS アカウントにコネクタオブジェクトが作成されます。

  1. コネクタのサブスクリプションが完了したら、AWS Marketplace Connector ページにnew Config タブが表示されます。
  2. デリバリーオプションを選択して、"Continue to Launch" ボタンをクリックします。 Launching the Connector
  3. ローンチタブで、"Usage Instructions" をクリックして、表示されるリンクに従い、接続設定を行います。 Activate the Connector
  4. Connection アクセスで、JDBC URL 形式を選択し、接続設定を行います。以下が一般的なAmazon Athena への接続のJDBC URL 接続文字列フォーマットです。Amazon Athena への接続の詳細については、Connector のヘルプドキュメントを参照してください。

    AWS Secrets Manager でのシークレットの保管をしている場合には、プレースホルダーの値 (e.g. ${Property1}) は空白になります。そうでない場合には、入力した値はAWS Glue Connection インターフェースはRead-only のJDBCURL として表示されます。

    AWS Root Credentials

    jdbc:cdata:AmazonAthena:AuthScheme=AwsRootKeys;AWSAccessKey=${AWSAccessKey};AWSSecretKey=${AWSSecretKey};Database=${Database};S3StagingDirectory=${S3StagingDirectory};AWSRegion=${AWSRegion};S3StagingDirectory=${S3StagingDirectory};

    AWS Temporary Credentials

    jdbc:cdata:AmazonAthena:AuthScheme=TemporaryCredentials;AWSAccessKey=${AWSAccessKey};AWSSecretKey=${AWSSecretKey};AWSSessionToken=${AWSSessionToken};Database=${Database};S3StagingDirectory=${S3StagingDirectory};AWSRegion=${AWSRegion};S3StagingDirectory=${S3StagingDirectory};

    AWS EC2 Roles

    jdbc:cdata:AmazonAthena:AuthScheme=AwsEC2Roles;AWSRoleARN=${AWSRoleARN};AWSExternalID=${AWSExternalId};Database=${Database};S3StagingDirectory=${S3StagingDirectory};AWSRegion=${AWSRegion};S3StagingDirectory=${S3StagingDirectory}; Configure the Connection (Salesforce is shown)
  5. (Optional): コネクタのログ取得を設定。

    CData Glue Connector for AmazonAthena のログ機能を利用する場合、JDBC URL に以下の2つのプロパティを追加しま:

    • Logfile: Set this to "STDOUT://"
    • Verbosity: Set this to an integer (1-5) for varying depths of logging. 1 is the default, 3 is recommended for most debugging scenarios.
  6. Network オプションを設定して"Create Connection" をクリックします。

Amazon Glue ジョブの作成

接続設定の完了後、Glue ジョブを作成することができます。

コネクションを使うジョブを作成

  1. Glue Studio で"Your connections" から作成したConnection を選択します。
  2. Creating a job from the new Connection.
  3. "Create job" をクリックします。

    ジョブエディタが開くので、新しいNode を追加します。Node 詳細パネルの右にSource Properties タブがあります。

Source Node Properties を設定:

Source properties タブでデータソースへの接続オプションを選択できます。AWS Glue Studio ヘルプで詳細を確認してください。ここではシンプルな例を示します。

  1. ジョブエディタで、コネクタのSource Node が選択されていることを確認します。右側のNode 詳細パネルSource Properties タブを選択します。
  2. コネクタ名のConnection フィールドが出てきます。
  3. データソースのデータロケーションを入力します。使用するデータのテーブル名もしくはSQL クエリを直接入力することができます。SQL クエリの例は SELECT Name, TotalDue FROM Customers WHERE CustomerId = 12345 です。 Configuring the Source node.
  4. データソースからTransformation Node にデータを渡すために、AWS Glue Studio ではデータのスキーマを定義する必要があります。"Use Schema Builder" を選択して、スキーマを設定します。
  5. 必要に応じて他のオプションフィールドを設定します:
    • Partitioning information - for parallelizing the read operations from the data source
    • Data type mappings - to convert data types used in the source data to the data types supported by AWS Glue
    • Filter predicate - to select a subset of the data from the data source

    これらのオプションの詳細については"Use the Connection in a Glue job using Glue Studio" を参照してください。

  6. Node properties パネルのOutput スキーマタブで、これらの作成されたスキーマを確認できます。

Glue ジョブの編集、保存、実行

ジョブグラフでNode を追加・編集することでジョブを変更することができます。詳細は、Editing ETL jobs in AWS Glue Studio を参照してください。

ジョブの編集が終わったら、Job Properties を入力します。

  1. グラフエディタでJob Properties タブを選択します。
  2. カスタムコネクタの使用には、以下のJob Properties を設定します:
    • Name: Provide a job name.
    • IAM Role: Choose (or create) an IAM role with the necessary permissions, as described previously.
    • Type: Choose "Spark."
    • Glue version: Choose "Glue 2.0 - Supports spark 2.4, Scala 2, Python 3."
    • Language: Choose "Python 3."
    • 他のパラメータにはデフォルト値を使います。詳細はAWS Glue Developer Guide の"Defining Job Properties" を参照してください。
    Configuring the job properties.
  3. "Save" を押して保存します。
  4. "Successfully created Job" の表示が緑のバナーに出ます。
  5. ジョブの保存後、"Run" をクリックしてジョブを実行します。
  6. "Script" tab を選択すると、ジョブで生成されたスクリプトを見ることができます。"Job runs" タブには、ジョブの実行履歴が出ます。詳細は"View information for recent job runs" を参照してください。 Completed job run details.

Generate Script のレビュー

ジョブ作成において、Script タブをクリックし、Glue Studio が作成するスクリプトを確認することができます。シンプルなAmazon Athena データのS3 バケットへの書き込みの場合、スクリプトは以下のようになります:

スクリプトサンプル

import sys from awsglue.transforms import * from awsglue.utils import getResolvedOptions from pyspark.context import SparkContext from awsglue.context import GlueContext from awsglue.job import Job ## @params: [JOB_NAME] args = getResolvedOptions(sys.argv, ['JOB_NAME']) sc = SparkContext() glueContext = GlueContext(sc) spark = glueContext.spark_session job = Job(glueContext) job.init(args['JOB_NAME'], args) ## @type: DataSource ## @args: [connection_type = "marketplace.jdbc", connection_options = {"dbTable":"Customers","connectionName":"cdata-athena"}, transformation_ctx = "DataSource0"] ## @return: DataSource0 ## @inputs: [] DataSource0 = glueContext.create_dynamic_frame.from_options(connection_type = "marketplace.jdbc", connection_options = {"dbTable":"Customers","connectionName":"cdata-athena"}, transformation_ctx = "DataSource0") ## @type: DataSink ## @args: [connection_type = "s3", format = "json", connection_options = {"path": "s3://PATH/TO/BUCKET/", "partitionKeys": []}, transformation_ctx = "DataSink0"] ## @return: DataSink0 ## @inputs: [frame = DataSource0] DataSink0 = glueContext.write_dynamic_frame.from_options(frame = DataSource0, connection_type = "s3", format = "json", connection_options = {"path": "s3://PATH/TO/BUCKET/", "partitionKeys": []}, transformation_ctx = "DataSink0") job.commit()

CData Glue Connector for AmazonAthena をAWS Glue Studio で使って、簡単にAmazon Athena データをS3 バケットや他の同期先にETL するジョブを作成することができます。 また、Glue Connector を使って、Amazon Athena にデータを挿入、更新、削除を行うGlue ジョブを作ることもできます。.

トライアル・お問い合わせ

30日間無償トライアルで、CData のリアルタイムデータ連携をフルにお試しいただけます。記事や製品についてのご質問があればお気軽にお問い合わせください。