ターゲットテーブル内のデータを で更新する AWS Glue と Athena - AWS Step Functions

翻訳は機械翻訳により提供されています。提供された翻訳内容と英語版の間で齟齬、不一致または矛盾がある場合、英語版が優先します。

ターゲットテーブル内のデータを で更新する AWS Glue と Athena

このサンプルプロジェクトでは、ターゲットテーブルをクエリして で現在のデータを取得する方法を示します。 AWS Glue カタログを作成し、Amazon Athena を使用して他のソースからの新しいデータで更新します。

このプロジェクトでは、Step Functions ステートマシンは を呼び出します。 AWS Glue ターゲットテーブルが Amazon S3 バケットに存在するかどうかを確認するカタログ。テーブルが見つからない場合は、新しいテーブルが作成されます。次に、Step Functions は Athena クエリを実行して、別のデータソースからターゲットテーブルに行を追加します。まずターゲットテーブルにクエリを実行して最新の日付を取得し、次にソーステーブルにクエリを実行して最新のデータを取得し、ターゲットテーブルに挿入します。

ステップ 1: ステートマシンを作成する

  1. Step Functions コンソールを開き、[ステートマシンの作成] を選択します。

  2. 検索ボックスに Keep data up to date と入力し、返された検索結果から [データを最新の状態に保つ] を選択します。

  3. [次へ] を選択して続行します。

  4. デモを実行して読み取り専用と ready-to-deploy ワークフローを作成するか、ビルドを選択して編集可能なステートマシン定義を作成し、後でデプロイできます。

    このサンプルプロジェクトは、以下のリソースをデプロイします。

    • An Amazon S3 bucket (バケット)

    • Amazon Athena クエリ

    • An AWS Glue Data Catalog call

    • An AWS Step Functions ステートマシン

    • 関連 AWS Identity and Access Management (IAM) ロール

    以下のイメージは、[データを最新の状態に保つ] サンプルプロジェクトのワークフローグラフを示しています。

    [データを最新の状態に保つ] サンプルプロジェクトのワークフローグラフ。
  5. [テンプレートの使用] を選択して選択を続行します。

次のステップは、前の選択肢によって異なります。

  1. デモの実行 – によってデプロイされたリソースを使用して読み取り専用プロジェクトを作成する前に、ステートマシンを確認できます。 AWS CloudFormation を に AWS アカウント.

    ステートマシンの定義を表示でき、準備ができたら、デプロイと実行を選択してプロジェクトをデプロイし、リソースを作成します。

    デプロイでは、リソースとアクセス許可の作成に最大 10 分かかる場合があります。スタック ID リンクを使用して、 の進行状況をモニタリングできます。 AWS CloudFormation.

    デプロイが完了すると、コンソールに新しいステートマシンが表示されます。

  2. 構築 – ワークフロー定義を確認して編集できます。カスタムワークフローの実行を試みる前に、サンプルプロジェクトのプレースホルダーの値を設定する必要がある場合があります。

注記

アカウントにデプロイされたサービスには、標準料金が適用される場合があります。

ステップ 2: ステートマシンを実行する

  1. [ステートマシン] ページで、サンプルプロジェクトを選択します。

  2. サンプルプロジェクトページで、[実行を開始] を選択します。

  3. [実行を開始] ダイアログボックスで、以下の操作を行います。

    1. (オプション) 生成されたデフォルトを上書きするカスタム実行名を入力します。

      非ASCII名前とログ記録

      Step Functions は、 以外のASCII文字を含むステートマシン、実行、アクティビティ、およびラベルの名前を受け入れます。このような文字は Amazon では機能しないため CloudWatch、 でメトリクスを追跡できるようにASCII、文字のみを使用することをお勧めします CloudWatch。

    2. (オプション) 入力ボックスに、入力値を として入力しますJSON。デモを実行している場合は、このステップをスキップできます。

    3. [実行のスタート] を選択します。

    Step Functions コンソールで実行の詳細ページに移動し、グラフビューで状態を選択して、ステップの詳細ペインの関連情報を確認できます。

ステートマシンのコード例

このサンプルプロジェクトのステートマシンは Amazon S3 と統合されています。 AWS Glueパラメータをそれらのリソースに直接渡すことで、、、および Amazon Athena。

このステートマシンの例を参照して、Step Functions が Amazon S3 を制御する方法を確認してください。 AWS Glue、、および Amazon Athena は、 Resourceフィールドの Amazon リソースネーム (ARN) に接続し、 をサービス Parametersに渡しますAPI。

方法の詳細については、 AWS Step Functions は他の を制御できます AWS サービスについては、「」を参照してくださいサービスと Step Functions の統合

{ "Comment": "An example demonstrates how to use Athena to query a target table to get current data, then update it with new data from other sources.", "StartAt": "Get Target Table", "States": { "Get Target Table": { "Type": "Task", "Parameters": { "DatabaseName": "<GLUE_DATABASE_NAME>", "Name": "target" }, "Catch": [ { "ErrorEquals": [ "Glue.EntityNotFoundException" ], "Next": "Create Target Table" } ], "Resource": "arn:aws:states:::aws-sdk:glue:getTable", "Next": "Update Target Table" }, "Create Target Table": { "Resource": "arn:aws:states:::athena:startQueryExecution.sync", "Parameters": { "QueryString": "<ATHENA_QUERYSTRING>", "WorkGroup": "<ATHENA_WORKGROUP>" }, "Type": "Task", "Next": "Update Target Table" }, "Update Target Table": { "Resource": "arn:aws:states:::athena:startQueryExecution.sync", "Parameters": { "QueryString": "<ATHENA_QUERYSTRING>", "WorkGroup": "<ATHENA_WORKGROUP>" }, "Type": "Task", "End": true } } }

IAM 例

この例では AWS Identity and Access Management サンプルプロジェクトによって生成された (IAM) ポリシーには、ステートマシンおよび関連リソースの実行に必要な最小権限が含まれています。IAM ポリシーに必要なアクセス許可のみを含めることをお勧めします。

AthenaStartQueryExecution

"Version": "2012-10-17", "Statement": [ { "Effect": "Allow", "Action": [ "athena:startQueryExecution", "athena:stopQueryExecution", "athena:getQueryExecution", "athena:getDataCatalog" ], "Resource": [ "arn:aws:athena:us-east-2:123456789012:workgroup/stepfunctions-athena-sample-project-workgroup-26ujlyawxg", "arn:aws:athena:us-east-2:123456789012:datacatalog/*" ] }, { "Effect": "Allow", "Action": [ "s3:GetBucketLocation", "s3:GetObject", "s3:ListBucket", "s3:ListBucketMultipartUploads", "s3:ListMultipartUploadParts", "s3:AbortMultipartUpload", "s3:CreateBucket", "s3:PutObject" ], "Resource": [ "arn:aws:s3:::*" ] }, { "Effect": "Allow", "Action": [ "glue:CreateDatabase", "glue:GetDatabase", "glue:GetDatabases", "glue:UpdateDatabase", "glue:DeleteDatabase", "glue:CreateTable", "glue:UpdateTable", "glue:GetTable", "glue:GetTables", "glue:DeleteTable", "glue:BatchDeleteTable", "glue:BatchCreatePartition", "glue:CreatePartition", "glue:UpdatePartition", "glue:GetPartition", "glue:GetPartitions", "glue:BatchGetPartition", "glue:DeletePartition", "glue:BatchDeletePartition" ], "Resource": [ "arn:aws::glue:us-east-2:123456789012:catalog", "arn:aws::glue:us-east-2:123456789012:database/*", "arn:aws::glue:us-east-2:123456789012:table/*", "arn:aws::glue:us-east-2:123456789012:userDefinedFunction/*" ] }, { "Effect": "Allow", "Action": [ "lakeformation:GetDataAccess" ], "Resource": [ "*" ] } ] }

他の で Step Functions を使用するIAMときに を設定する方法の詳細については、「」を参照してください。 AWS サービスについては、「」を参照してくださいStep Functions が統合サービスのIAMポリシーを生成する方法