【ハンズオン】さぁ!サーバーレスを始めよう! #2 – AWS AI サービスと組み合わせて作るサーバーレス文字起こしパイプライン構築ハンズオン #AWSSummit

2020.09.14

2020年9月8日から9月30日の間で開催されているAWS Summit Online のセッションに参加しています。 AWS Summit Onlineでは基調講演等の他、ハンズオンセッションという手を動かすセッションがあります。

今回はさぁ!サーバーレスを始めよう! #2 - AWS AI サービスと組み合わせて作るサーバーレス文字起こしパイプライン構築ハンズオンに参加したのでレポートします。

セッション概要

スピーカー

金澤 圭 氏

アマゾン ウェブサービス ジャパン 技術統括本部

ソリューションアーキテクト

セッション

HOL-04:さぁ!サーバーレスを始めよう! #2 - AWS AI サービスと組み合わせて作るサーバーレス文字起こしパイプライン構築ハンズオン

動画&資料はこちらになります。 1時間半とちょっと長めの動画になりますが、一つ一つ動作確認をしながら細かく丁寧に作っていけるので、初心者の方にもおすすめです!

目的

このハンズオンでは、

  • AWS Lambda
  • AWS Step Functions
  • Amazon Transcribe
  • Amazon Comprehend
  • Amazon Polly

をはじめとした多数の AWS サービスを用い、文字起こしパイプラインを作ります。サーバーレスのメリットを、手を動かしながら体験できます。

ハンズオン概要

ストーリーに沿って、二段階に分けてハンズオンしていきます。

ハンズオン① シンプルな文字起こしパイプラインを作成する

ハンズオン② 文字起こしパイプラインを拡張する

今回使っていくサービスについて

今回多数サービスを組み合わせハンズオンをしていきます。

たくさんあるので、使ったことがないサービスもあるかと思いますので、簡単に機能の説明を貼らせて頂きます。全て、下記ブログから転載になります。

Amazon Polly

テキストを自然な音声に変換するテキスト読み上げサービス。音声エンジンとしてスタンダード(TTS; Text-to-Speech)とニューラル(NTTS; Neural Text-to-Speech)が選択可能。SSML(Speech Synthesis Markup Language)を使用して発音、ボリューム、話す速度など、音声のさまざまな要素をカスタマイズできる。また、レキシコンによる単語の発音のカスタマイズも可能。

AWS Lambda

サーバー不要でアプリケーションコードのみをデプロイすることで、イベント駆動でコードが実行できるサービス。他のサービスとのハブとなり、サーバーレスアーキテクチャの中核となるサービス。Provisioned Concurrencyを使用することでコールドスタート対策もできる。最大実行時間は15分。

Amazon S3

正式名称は Amazon Simple Storage Service で、年間で99.99%の可用性と99.999999999%の耐久性を実現するよう設計されたオブジェクトストレージ。アクセスポリシー、データの暗号化、バージョニング、MFA削除、ライフサイクル管理ポリシー、イベント通知。さらに、静的Webサイトホスティング、タグ付け、クロスリージョンレプリケーション、バッチオペレーション、アクセスポイントなど、およそSimpleとは言えない豊富な機能を備えている。またスタンダード、インテリジェントな階層化、標準-IA、1ゾーン-IA、Glacier、Glacier Deep Archive、低冗長化(非推奨)のストレージクラスが提供されている。ライフサイクルを設定することで自動的にオブジェクトのストレージクラスを移行させることができる。

Amazon Transcribe

音声をテキストに変換する文字起こしサービス。電話音声など不鮮明なものも可能。また医療に特化したサービスである Amazon Transcribe Medical もある。

Amazon DynamoDB

フルマネージドなkey-value型のNoSQLデータベースサービス。セカンダリインデックスやスループットキャパシティによるパフォーマンスの調整ができる。

Amazon Comprehend

フルマネージドな自然言語処理サービス。テキストの中から場所や人物、キーフレーズ、感情(肯定的/否定的/混在/中立)などが検出できる。

Amazon Simple Notification Service(SNS)

フルマネージドなプッシュ型メッセージングサービス。サブスクライブしているエンドポイントまたはクライアントへの、メッセージの配信または送信を調整し管理する。サポートしているサブスクライバーはHTTP/HTTPS、Email、SMS(ショートメッセージ)、SQS、Lambda、アプリケーション(モバイルなど)。ただしモバイルへのプッシュ通知はMobile Hubの利用が推奨されている。

AWS CloudTrail

AWSのAPIコール履歴(イベント)を取得・収集する、運用およびリスクの監査支援サービス。ログファイルの配信をSNS通知することも可能。またデータイベントとして、S3のオブジェクトレベルのロギング、Lambdaの関数レベルのロギングもサポートされている。

Amazon EventBridge

AWSサービス、独自のサービス、SaaSアプリケーションと連携し、イベント駆動型アーキテクチャを構築できるサーバーレスイベントバスサービス。CloudWatch Eventsをベースに構築され、CloudWatch Eventsを拡張するサービス。将来的にはCloudWatch EventsはEventBridgeに名称変更される予定。

AWS Step Functions

タスクとステートマシンの概念に基づく、分散アプリケーションとマイクロサービスを調整するワークフローサービス。ワークフローには標準とExpressの2タイプが提供されている。ドメインロジックはLambda関数やAWSサービス、またはEC2やECSを使用して定義する。また、ワークフロー全体はステートマシンとして、JSONベースの言語、ASL(Amazon States Language)を使用して定義する。

ハンズオン

少し長めなので、IAMロールの設定や細かい設定値など、省略して書いています。細かい部分はぜひ実際のハンズオン動画をご覧頂ければと思います。

ハンズオン① シンプルな文字起こしパイプラインを作成する

準備

Amazon S3

input用のバケットとoutput用のバケットを作ります。

AWS Lambda

「s3-get-object-python」設計図から関数を作ります。

指定したS3にmp3ファイルが置かれたら、Lambdaが発火します。

ちょっとコードを書き換えます。

input用のS3パケットのmp3をTranscribeで文字起こしして、output用のS3バケットに出力するようにします。

実行

Amazon Pollyでmp3を作成し、S3に文字起こしされた内容が出力されるのを確認します。

入力

Amazon Pollyでネガティブな内容をしゃべらせて、input用のS3バケットに出力します。

出力

「もう二度と買いません」が正しく文字起こしされました!

 

ハンズオン② 文字起こしパイプラインを拡張する

準備

ハンズオン①で作ったものに追加をしていきます。

Amazon DynamoDB

入力音声の内容を記録していくためのテーブルを作成します。

Amazon Simple Notification Service(SNS)

ネガティブな音声が来たときはメールを送信したいので、そのメール送信用にトピックを作ります。

自分のメールアドレスへメールを送信するサブスクリプションを作成して、メールの認証をします。

AWS Lambda

「put-transcribe-result-function」と「notify-negative-feedback-function」を作ります。

「put-transcribe-result-function」ではインプットの内容をDynamoDBに書き込みます。

「notify-negative-feedback-function」では、インプットの内容をAmazon Comprehendを使ってネガティブな内容かどうかを判断し、ネガティブなら作成したSNSトピックに通知を出します。

 

 

AWS Step Functions

「put-transcribe-result-function」と「notify-negative-feedback-function」をまとめて、パラレル実行できるようにします。

 

AWS CloudTrail

ハンズオン①の結果がoutput用のS3バケットに出力されたのをトリガーにして、作成したStepFunctionを動かしたいのですが、直ではできないため、CloudTrailを経由させます。

Amazon EventBridge

CloudTrailで取得したイベントをトリガーとして、作成したStepFunctionを動かします。

実行

全部通して実行してみます。Amazon Pollyでmp3を作成し、DynamoDBへの出力SNSからのメール受信を確認します。

入力

Amazon Pollyでネガティブな内容をしゃべらせて、input用のS3バケットに出力します。

出力

「もう二度と買いません」がDynamoDBに出力されました!

メールも届きました!

感想

多くのサービスを利用する盛りだくさんなハンズオンで、いくつか使ったことのないサービスがありましたが、1サービスごとに使い方を説明してくださっており、すべて問題なく全て動かすことができました。

サーバーレスに挑戦してみたいけど、サーバーレスのサービスにそんなに触ったことがないという方にもおすすめのハンズオンです。