おひとり

できる限りひとりで楽しむための情報やプログラミング情報など。

AWSでサーバーレスなバッチ処理を作るハンズオン(Lambda、EventBridgeやSAMを利用)

f:id:hitoridehitode:20211205161322p:plain
サーバーレスなバッチ処理を設計

はじめに

システムの機能としてバッチ処置が必要になることはよくあります。
バッチ処理は時間がかかるものもありますが、5分以内で終わるようなものの場合は、サーバーレスで実装することでコストを抑えられます。

ここではハンズオンとして、5分以内で終わるようなシンプルなバッチ処理をAWSのサーバーレスなサービスで構築していきます。

以下のような知識がある方を対象とします。

  • コマンドラインが使える。(AWS CLIがインストールされている。)
  • 何かしらAWSを使ったことがある。
  • AWSのマネジメントコンソールにログインできる。
  • 何らかのプログラミング言語が書ける。

AWSに使い慣れている必要はないです。

また、以下のサービスを使います。

  • EventBridge
  • Step Functions
  • Lambda
  • DynamoDB
  • S3

開発はAWSが提供するSAM(Serverless Application Model)を使います。ソースコードおよびAWSのリソースをコードで管理します。
また、Lambda関数のRuntimeはPython3を使います。最終的にはテストも書いて、それなりに応用可能な開発環境を作ります。

あらかじめAWSアカウントを用意してください。また、AWSのリソースには料金が発生しますのでご注意ください。
ただし、ローカルでの開発にはDynamoDB LocalやS3互換のMinioを使ってなるべく費用を抑えた開発環境を作ります。
そのため、Dockerが必要です。

作成するバッチ処理の概要

今回は「DynamoDBから取得したデータを使って、PDFのレポートを作成してS3バケットに保存する。」というバッチ処理を実装します。

以下のような構成にします。

f:id:hitoridehitode:20211205161500p:plain
今回のシステムの構成

リポジトリ

ソースコードは以下のリポジトリで公開しています。

github.com

目次

さっそくやっていきましょう。
リポジトリのコミットログを見ることで、章ごとの変更を確認できます。
※5章のみ、変更点が多いためブランチを分けています。refactoringというブランチに切り替えることで、5章のソースコードを閲覧できます。

1章 SAMでプロジェクトを初期化

www.ohitori.fun

2章 DynamoDB LocalとMinioでローカルにインフラを再現

www.ohitori.fun

3章 ビジネスロジックをLambdaに実装

www.ohitori.fun

4章 EventBridgeでStateMachineをトリガー、デプロイ

www.ohitori.fun

5章 リファクタリングしてテストを実装

www.ohitori.fun