ロールプレイとデモ動画でサーバーレス開発の基礎を一挙習得「レガシーシステムにサーバーレスを利用して素早くサービスを追加するには」 #AWSSummit

ロールプレイで課題感と解決策を腹落ちさせながら、実際のプロトタイプ開発の詳細までが一気に把握できる素晴らしいセッションです。
2020.09.10

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

「な、なんかロールプレイが始まった。からのプロトタイプ開発デモか!こりゃたまげた」

当初想定していた斜め上をいく展開でした。

顧客とソリューションアーキテクトが次期システム開発の仕様を試行錯誤していく流れから、実際のプロトタイプ開発の様子をデモを交えて余すことなく解説してくれるセッション。

  • サーバーレスにするには、全部作り直しだと思いこんでいる
  • とりあえずAWSに既存システムもってきたが、AWSを活かせているきがしない
  • 実際にサーバーレス技術を使って開発していくイメージがついていない

そんな組織にばっちりハマります。

サーバーレスと銘打ってますが、実はLambdaだけではなく、Secrets ManagerやRDS ProxyやStep FunctionsやFargateや、それらを開発するためのSAMやSAM CLIやLocalStackまで幅広く網羅されているので、お得感満載ですよ。

(祭) ∧ ∧
 Y  ( ゚Д゚)
 Φ[_ソ__y_l〉     サーバーレスマツリ?
    |_|_|
    し'´J

祭りだワッショイ。

セッション内容

スピーカー

アマゾン ウェブ サービス ジャパン株式会社 技術統括本部 シニアソリューションアーキテクト 福井厚
アマゾン ウェブ サービス ジャパン株式会社 技術統括本部 ソリューションアーキテクト 今村優太
アマゾン ウェブ サービス ジャパン株式会社 技術統括本部 ソリューションアーキテクト 木村友則

セッション概要

多くの企業では、オンプレミスのシステムを AWS へ移行する場合、まずは Amazon EC2 へそのままの形で移行することが多いかと思います。それ自体は問題ありませんが、一旦AWSへ移行したら、今度はクラウドのメリットを活かすためにAWSのサービスをより活用したサービスを構築したいと考えるようになります。本セッションでは、ある企業がレガシーシステムをAWSへ移行した後、そのシステムと連携する新しいサービスをAWS上でどのように構築すべきかについて分かりやすく解説します。また新しいサービスをプロトタイピングで構築するためのアーキテクチャ設計も行います。

AWS Summitでは、前半と後半にわかれたセッションになっていて、前半が顧客とSAのロールプレイ。後半が具体的なプロトタイプの開発になっています。

セッション資料(前半)

AAB05_AWS_Summit_Online_2020_720p

セッション資料(後半)

AAB-06_AWS_Summit_Online_2020_Containe_720p

セッション内容の説明

今日のテーマは、「既存システムのAWS移行が完了したお客様を想定して、そのシステムに対してサーバーレスを元にして新機能を追加する」です。

このセッションでは、冒頭、顧客とソリューションアーキテクトのやり取りをロールプレイとしてお見せした後、後半で実際にプロトタイプ開発を通して、具体的な技術を使った実際に動くものを紹介していきます。。

(前半)ロールプレイ編

顧客:ようやくAWS移行を完了したところです。ありがとうございます。早速ですが、新しい機能を開発していきたく相談させてもらいました。

ソリューションアーキテクト(以下SA):お疲れさまでした。今度は、どんな新機能を予定しておられますか?

顧客:現在こんなシステム構成になっています。

新規開発する機能はこう考えています。

SA:プロジェクトの内容は把握しました。今は、既存の構成をそのままAWSに移行したところですが、今後の開発方針はどう考えてますか?

顧客:非常に悩んでいるところです。現在のECサイトにコードを追加していくのか、別のコードを用意するのか悩んでます。せっかくAWSに移行したので、AWSを活かしていきたい。サーバーレスに対して興味はあるんですが、まだ経験がないためいろいろ不安な点が強い。

SA:なるほど、徐々にサーバーレスを導入していくのは良いと思います。今、サーバーレスに期待していることはありますでしょうか?

顧客:はい、もろもろあります。

SA:よくわかりました。それでは、新しく開発する機能だけをサーバーレスで作成し連携させる方法をオススメしたいです。具体的な要件についてお聞かせください。

  • 新刊情報はどこから?形態は?手段は?
    • 外部の契約先からCSVの形式でデータを取得可能
  • 認証はどうなっているか?
    • 現在は認証情報のテーブルを持っている。ユーザー名とパスワードを利用
  • ワークロードは?負荷状況などは
    • 登録会員は10万名ほど。スパイクは特にないが、負荷としては昼や夜間が多い。有名な新刊が出たときは瞬間的にトラフィックが集中する場合もある
  • 開発言語は?データベースは?
    • 現在はJava。一部機能にReactや機械学習系でPythonを利用。データベースはMySQLが多い
  • スケジュールは?
    • 遅くとも半年ぐらいでリリースしたい。サーバーレス初めてなので、不安も抱えている

SA:これまでの内容を元に、アーキテクチャをディスカッションしていきましょう。

大方針として、WebはSPAを推奨します。静的ファイルはS3に格納しCloudFront経由で配信します。実際の登録処理は、API Gatewayを経由してLambdaを利用しましょう。データベースはスモールスタートとして、RDSのシングルインスタンスを使いましょう。

顧客:なるほど、APIを中心とした構成が非常に魅力的に感じました。

SA:そうですね。APIを中心とした開発には多くのメリットがあります。ひとつひとつの機能改修が素早く実施できることで、顧客要望へのキャッチアップができるというのは、ビジネス上の優位点に直結します。

顧客:サーバーレスで使う場合、RDBMSは相性が良くないと聞くんですが、実際どうでしょうか?

SA:確かにそうですね。ただ、今はRDS Proxyがでてきているので、ワークロードにもよりますが、サーバーレスコンピューティング環境でもRDBMSの採用は一つの有力な選択肢になってます。

また、もう一つの機能「CSVによる新刊情報の取り込みと対象ユーザーへのメール送信」ですが、2つの処理を連携する、またエラーのリトライを管理してくれるものにStep Functionsというものがあります。

この場合、Fargateを使うことをおすすめします。ここでコンテナを使う理由ですが、CSVの情報が非常に大きい場合Lambdaの実行時間の制限時間に抵触する場合がありえます。

顧客:なるほど、たしかに、CSVの新刊情報は量が毎回異なるので、実行時間の制限を考えた場合、コンテナは良い選択肢になりえますね。

SA:そうですね。また、2つ目の処理は1件1件の処理時間は短いので、メール送信をLambdaとSESを使おうと思います。

この2つの処理を連携されるために、Step Functionsを使うのが良いと考えています。

全体構成図を整理するとこうなります。元のシステムの横にサーバーレスなアーキテクチャを組み合わせる形ですね。

顧客:ありがとうございます。挑戦できそうです!

SA:プロジェクトの進め方ですが、最初にプロトタイプを開発することをオススメします。それにより技術的なブロッカーをみつけたり、AWSのサービスを使う上でのノウハウを吸収できるので、メリットが大きいです。

顧客:おお、メリットが非常に多そうですね。是非、そういった形で進めさせていただければと思います。

(後半)プロトタイプ開発の様子

ここからは、新機能の一部をプロトタイプ開発していく様子をお届けします。概要はこちら。

  • 実際にプロトタイプ開発を行う様子を提供
  • 細かい文法の解説は含まれていない。概要を理解していただくのが主な目的
  • PythonとVisual Studio Codeを使うが、難易度は平易。他の言語が得意な方でも視聴は可能
  • セッション中の成果物、資料のダウンロードも可能

最初にサーバーレス開発を効率化するツールを紹介していきます。最初にSAMです。

CloudFormationの機能を拡張しているのが大きな特徴なのですが、このように見比べてみると、SAMで定義したテンプレートのほうが圧倒的に小さいのがわかると思います。

SAMのCLIのご紹介です。

大きな特徴として、開発者のローカル環境でLambdaをDockerコンテナとして起動し、実装した処理を試すことができます。Lambda機能の提供は、DockerイメージがAWSから公式に提供されています。本日はこちらのツールを使って、実際にプロトタイプ開発をローカル環境をつかいながら実施していきます。

また、LocalStackもモックの役割として使っていきます。

今回のデモで作成するAPIは2種類です。

デモで用意するテーブルはこちら。

これら含めた作成する環境の一覧がこちらになります。

(濱田)これ以降は実際にVisual Studio Code上でローカル環境の整備、開発、テストを実施していく様子が、全てデモ動画として提供されています。ソースコードと動画は下記で提供されているので、是非その流れを抑えながら実際に手を動かしつつ、開発のイメージを抑えていただくことをオススメします!!

AAB-06_AWS_Summit_Online_2020_Containe_720p

追加の参考資料

最後に、今回説明した領域にわたる参考資料をご紹介。

AWS Hands-on for Begineers Serverless

AWS Hands-on for Beginners | AWS

AWS Hands-on for Beginners | AWS

CI/CD For Serverless Applications

CI/CD for Serverless Applications ::

AWS Black Belt Online Seminar(AWS SAM)

(19) 【AWS Black Belt Online Seminar】AWS Serverless Application Model - YouTube

20190814 AWS Black Belt Online Seminar AWS Serverless Application Mod…

顧客のあるあるシチュエーションとプロトタイプ開発のデモの組み合わせが新鮮かつ非常にわかりやすい必見セッション

最初のロールプレイから、プロトタイプ開発の様子につながっていく構成がめっちゃ新鮮でした。そんなんかよ!とセッション聞きながらあれこれ突っ込んでみてたんですが、すごい面白かったです。

通常ハンズオンなどで、コマンドを使いながら、いろんなリソースを構築していくながれを動画で紹介する場合、コマンドの羅列だけだと、今なんのためにどこの構築をやっているのかということがわかりにくくなりがちだと思ってました。

このセッションの構造は最初にロールプレイで顧客の悩んでいること、それに対するSAとの試行錯誤の様子が丁寧に深堀りされているので、そこの流れからのプロトタイプ開発というシチュエーションが非常にイメージしやすく、開発の流れもすごくしっくり理解することができました。

こういったロールプレイから開発ハンズオン的な流れのセッション貴重!なので、是非サーバーレス開発に馴染みが無い方は、前半から通してみていただきながら、後半実際に手を動かしてみることで、AWSにおけるサーバーレス開発のエッセンスと適用領域について理解を深めていただければと思います。

それでは、今日はこのへんで。濱田(@hamako9999)でした。