LoginSignup
4
0

More than 1 year has passed since last update.

AWS Step Functionsの新機能AWS SDK Service Integrationsを使ってみた

Last updated at Posted at 2021-10-28

はじめに

StepFunctionsに大きなアップデートがあり、AWS SDK Service Integrationsが使えるようになりました。

AWS Step Functionsは、新機能AWS SDK Service Integrationsにより、サポートするAWSサービスの数を17から200以上に、AWS API Actionsを46から9,000以上に拡大しました。

  • 従来のStepFunctionsは手軽に始められる反面、Optimized integrationsに無いサービスを呼び出す場合、APIを呼び出すだけのLambda Functionを作る必要があり、構築、管理上の負担がありました
  • 新機能のAWS SDK service integrationsは、StepFunctionsから直接呼び出せるAPIが増え、APIを呼び出すだけのLambda Functionが不要になりました

新機能AWS SDK service integrationsで使用可能になったサービスの一覧

処理の流れ

  • DynamoDBからS3エクスポートを行う
    • DynamoDBのExportTableToPointInTimeのAPIを利用

Step Functions Workflow Studioの左メニューにある、アクションからDynamoDBを選択
action.png

ExportTableToPointInTimeのパーツを選択
parts.png

  • 60秒待機して、エクスポート状態を確認する
    • DynamoDBのDescribeExportのAPIを利用

同じくDynamoDBにあるDescribeExportのパーツを選択
describe.png

  • エクスポートが完了したら、終了とする
  • (実運用上はエクスポート後に、Athenaから検索するための、パーティション化、データカタログ作成処理などがありますが、長くなるので本記事では割愛します)

構成

  • ステートマシーン図

state.png

  • ASL(Amazon States Language)
    • 以下2点を行えば、このまま動きます
      • 対象のDynamoDBのポイントインタイムリカバリ (PITR)の有効化
      • IAMロール(DynamoDBへの操作権限、S3への書き込み権限)の設定
state_machine.json
{
  "Comment": "This is your state machine",
  "StartAt": "ExportTableToPointInTime",
  "States": {
    "ExportTableToPointInTime": {
      "Type": "Task",
      "Parameters": {
        "S3Bucket.$": "$.s3Bucket",
        "TableArn.$": "$.tableArn",
        "S3Prefix.$": "$.s3Prefix"
      },
      "Resource": "arn:aws:states:::aws-sdk:dynamodb:exportTableToPointInTime",
      "Next": "Wait",
      "ResultPath": "$.ExportTableResult"
    },
    "Wait": {
      "Type": "Wait",
      "Seconds": 60,
      "Next": "DescribeExport"
    },
    "DescribeExport": {
      "Type": "Task",
      "Parameters": {
        "ExportArn.$": "$.ExportTableResult.ExportDescription.ExportArn"
      },
      "Resource": "arn:aws:states:::aws-sdk:dynamodb:describeExport",
      "Next": "Choice",
      "ResultPath": "$.DescribeExportResult"
    },
    "Choice": {
      "Type": "Choice",
      "Choices": [
        {
          "Variable": "$.DescribeExportResult.ExportDescription.ExportStatus",
          "StringEquals": "COMPLETED",
          "Next": "Success"
        },
        {
          "Variable": "$.DescribeExportResult.ExportDescription.ExportStatus",
          "StringEquals": "IN_PROGRESS",
          "Next": "Wait"
        }
      ],
      "Default": "Fail"
    },
    "Fail": {
      "Type": "Fail"
    },
    "Success": {
      "Type": "Succeed"
    }
  }
}

StepFunctionsの実行時パラメータ

key value
tableArn DynamoDBのARN
s3Bucket エクスポート先のS3バケット 1
s3Prefix エクスポート先のS3パスの先頭文字列 1
  • エクスポート先のS3のパス構成
    s3://${s3Bucket}/${s3Prefix}/AWSDynamoDB/{DynamoDBが付けるエクスポートのユニークID}/data/
input.json
{
  "tableArn": "arn:aws:dynamodb:ap-northeast-1:12345XXXXXXX:table/test_table",
  "s3Bucket": "dynamodb-export",
  "s3Prefix": "test-table"
}

StepFunctions実行後

s3://dynamodb-export/test-table/AWSDynamoDB/01635316601377-6eb6d317/data/1

この場所にDynamoDBのデータがエクスポートされています。

最後に

Lambda Functionをなるべく使わない構成はポータビリティ性が高く、運用保守面でも大きなメリットになります。
また、Terraformで管理を行っていますが、作成するリソースが少なくなる点もメリットでした。

  • StepFunctions by Terraform


  1. エクスポート先のS3パスs3://${s3Bucket}/${s3Prefix}/AWSDynamoDB/{DynamoDBが付けるエクスポートのkey}/data/ 

4
0
0

Register as a new user and use Qiita more conveniently

  1. You get articles that match your needs
  2. You can efficiently read back useful information
  3. You can use dark theme
What you can do with signing up
4
0