[レポート] Step Functionsによるサーバーレスな画像処理ワークフローを作成するワークショップ #SVS340 #reinvent

2019.12.06

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

CX事業本部@大阪の岩田です。 本エントリはAWS re:Invent 2019のセッションSVS340 Serverless image processing workflows at scale with AWS Step Functionsのレポートとなります。

セッション情報

概要

With AWS Lambda, you can write code to process images and files without provisioning servers. But at scale, how do you manage coordinating multiple parallel processing steps, catch errors and retry failures, and keep your code modular and maintainable? AWS Step Functions comes to the rescue! In this workshop, you will design and implement a distributed state machine to orchestrate a multi-step image recognition and processing workflow using AWS Rekognition and AWS Step Functions.

日本語訳

AWS Lambdaを使用すると、サーバーをプロビジョニングせずにイメージとファイルを処理するコードを作成できます。 しかし、大規模になった場合、どのように複数の並列処理を管理し、エラーをキャッチし、失敗時に再試行しつつ、コードを共通化し、保守可能な状態に保てば良いのでしょうか? AWS Step Functionsがその助けになります! このワークショップでは、AWS RekognitionおよびAWS Step Functionsを使用して、マルチステップの画像認識・処理ワークフローの分散ステートマシンを設計・実装します。

レポート

ワークショップの概要についての講義

  • サーバーレスとは
    • アプリの作成に集中できる
    • インフラの管理不要
    • オートスケール
    • 従量課金
    • 高可用性

Lambdaとは

  • Serverless Faas
  • 3つの要素から構成される
    • Event Source
    • Function
    • Services
  • 複数のLambdaを組み合わせると複雑に
  • オーケストレーションが必要
  • そこでStep Functionsを使う

Step Functionsの概要

  • JSONでステートマシンを定義
  • マネジメントコンソールからワークフローを可視化して確認できる
  • ワークフローの実行状況をモニタリングできる
  • Stateを使ってワークフローを管理する

Amazon Rekognitionの概要

  • オブジェクト検出が可能なディープラーニングのサービス
  • 人物検出や顔検出等に利用可能

作成するシステムのアーキテクチャ

  • 以下のAWSサービスを利用
    • S3
    • Lambda
    • DynamoDB
    • Rekognision
  • S3に置かれた画像ファイルに対して顔検出を行う
    • 検出結果はDynamoDBに保存する
    • 画像のサムネイルを生成して別のS3バケットに保存する

Cloud9について

  • クラウドベースのIDE
  • デフォルトで開発に必要なツール類が一式入ってる
  • AWSリソースとの接続に際してNW帯域の心配がいらない

ワークショップ

内容についてはこちらのURLで公開されています

SERVERLESS IMAGE PROCESSING

セットアップ

  • Cloud9の環境を構築
  • アカウントはワークショップ用のtmpアカウントが払い出される

こんな感じのバウチャーをもらいました。指定されたURLから必要事項を入力するとtmpアカウントでマネコンにログインできるようになります。

実装

  • Rekognitionのコレクションを作成
  • CFnスタックを作成
Step Functionsのステートマシンを作成

  • 顔検出して結果をチェック
  • 顔が検出できなかった場合はエラーで終了
重複チェックのステップを追加

並列処理のステップを追加(サムネイルの生成とRekognitionのコレクションに顔画像を追加する処理を並列実行)

メタデータの永続化(DynamoDBへの保存)を追加

アップロード&テスト

  • ユーザーa~dまで4人のユーザーの写真を追加
    • bはサングラスかけてるから検出されない
    • cは複数人写ってるから検出されない
    • dは人が写ってないから検出されない
  • 自分の手持ちの写真をUPし、処理が成功してDynamoDBに永続化されることを確認する

オプション

  • エラー発生時にSNSに通知するステップを追加
  • 並列度を動的に制御する
    • ワークフローをネストして実行

まとめ

普段サーバーレスアーキテクチャでの開発をメインの業務にしながら、実はStepFunctionsについてはこれまであまり触る機会が無く、理解も浅い状態でした。このセッションを通じてStepFunctionsメッチャ便利!!ということを実感することができました。StepFunctionsをうまく活用することで、これまでLambdaに実装していた面倒なリトライ処理やエラーハンドリングが省力化できそうです。今回のre:inventでAWS Step Functions Expressなんてのも登場しましたし今後の開発にStepFunctionsを活用していきたいと思います。