CNDO2021、サーバーレスの勘所をサーバーワークスのエンジニアが紹介

2021年7月27日(火)
松下 康之 - Yasuyuki Matsushita
サーバーワークスのエンジニアがPyhtonとLambdaをベースにしたサーバーレスの要点を解説したセッションを紹介する。

CloudNative Days Online 2021から、AWS上でPythonを使ったサーバーレスアプリケーションの開発について、実際にエンジニア本人が経験した内容をベースとした解説を行うセッションを紹介する。これは株式会社サーバーワークスの社内SEである橋本拓弥氏が行ったもので、「私がもっと早く知りたかったサーバーレス開発の "Hello World" 次の一歩」というタイトルにある通り、橋本氏が実際にAWSの上でサーバーレスを開発した知見を紹介するものだ。サーバーワークス自体がAWSに特化したシステムインテグレーションを行う企業であることから、この場合のサーバーレスはAWSのLambda、Step Functionsを使い、開発言語はPythonという前提の上での体験談となる。

橋本氏はhassakuというハンドル名でGitHubやTwitterでも活動しているので、以降はhassaku氏としてセッションを紹介したい。

AWS上のサーバーレス開発の知見を紹介

AWS上のサーバーレス開発の知見を紹介

このセッションは開発の初心者がサーバーレスを「それっぽく」行えるようになるための経験談ということだが、サーバーレス自体が新しい概念であるため、社内にサーバーレスを教えてくれる先輩がいないという実情を踏まえて「自走」できることを目指しているということだろう。

セッションの目的

セッションの目的

内容は「どのように学んでいけばいいのか?」という部分とhassaku氏の経験からのTipsをシェアするものとなっている。

このセッションのアジェンダ

このセッションのアジェンダ

また前提としてAWSとPythonに限定した経験談であることが、このスライドからわかる。hassaku氏自身が新卒でサーバーワークスに入社して6年目という自己紹介からもわかるように、GCPやAzure、またオンプレミスのKnativeやOpenFaaSなどは想定していない。

セッションはAWSとPythonに限定した話

セッションはAWSとPythonに限定した話

hassaku氏が強調した最初のポイントは、学ぶための順序として「概念を理解する」「実際にやってみる」という至極当たり前の手法の大切さだ。

サーバーレスを学ぶための順序を解説

サーバーレスを学ぶための順序を解説

AWS上のサーバーレスの実装であるLambdaとAWSのサービスをオーケストレーションするStep Functionsが重要だと説明し、オープンソースのServerless Frameworkについては実際にコードを書きながら覚えることを推奨した。

サーバーレスを学ぶための優先順位

サーバーレスを学ぶための優先順位

またサーバーレスの基本的概念となるイベント駆動型のプログラミングについては「基本サービスに慣れてきたころに思い出せばOK」としてあまり拘らないことを説明。AWSにおけるイベントを繋ぐためのサービス、SQS、SNS、Kinesisとイベントを実装するLambda、Step Function、コードが利用とするデータストアとしてのS3とDynamoDBを挙げてその3つを上手く繋げて実装するという基本的な考え方を解説した。

イベント駆動型開発を解説

イベント駆動型開発を解説

ここではイベント駆動型のコードを書く時の注意点として、どのプロセスから受け取るのか/どのプロセスに渡すのかを意識しないようにプログラミングするべきであるとして、いわゆる手続的、同期的なコードを書かないことを挙げて説明した。

イベント駆動型の注意点

イベント駆動型の注意点

ここからはServerless FrameworkのTipsとして、hassaku氏がよく利用しているプラグインの説明に移った。

Serverless Frameworkのプラグインを紹介

Serverless Frameworkのプラグインを紹介

ここではStep Functions、Python Requirements、Pseudo Parameters、Dotenvなどを紹介。これ以外にも多くのプラグインが開発されており、Serverlessの公式サイトでは専用ページで紹介されているので、興味のある人は参照して欲しい。

参考 Serverless Frameworkのプラグインページ:Serverless Plugins Directory

次にサーバーレスの「ステージ」という概念について解説した。これはDevOps的に言えば、コードが開発・実装される際にDev、Staging、Productionなどのステージに分けて実装することと同様の発想だと思われるが、ここではServerless Frameworkの独自の概念として紹介している。

Serverless Frameworkのステージを解説

Serverless Frameworkのステージを解説

またステージングを使う場合は、ステージに依存しないコードにすること、環境変数を使って動作を変える仕組みを利用することを解説した。

ステージを使う際の注意点

ステージを使う際の注意点

ステージによって値を変える具体的な例として、リソース名、エンドポイント名などを挙げて紹介した。また実装するステージを判定するPythonのサンプルコードを挙げて解説した。

ステージを判定するコードを紹介

ステージを判定するコードを紹介

このスライドではテンプレート開発の際のポイントがいくつか例が挙げられている。どれもデベロッパーとしての苦労がそのまま表現されており、一般的な正解として妥当かどうかは別にして興味深い内容となった。

hassaku氏が考えるAWS上の開発の要点。

hassaku氏が考えるAWS上の開発の要点。

またサーバーレスのテストについても最適解はまだわからないとして、単体テストをちゃんとやることなどを強調し、hassaku氏自身もまだ模索中であることを説明した。

テストに関する考察

テストに関する考察

そして何度か出てくる「ピタゴラスイッチ」という表現を使ってサーバーレスのアプリケーションの全体像の見通しが悪くなる問題点についても言及し、現状ではドキュメントをちゃんと書くことしか対応策がないということを説明した。ここで唐突に出てくるBoto3とは、AWSのサービスをPythonから操作するためのSDKだ。AWSとPythonユーザーにとっては馴染みの名称かもしれないが、詳細は以下の公式サイトを参照されたい。

参考:AWS SDK for Python (Boto3)

ピタゴラスイッチ方式のサーバーレスはつらい

ピタゴラスイッチ方式のサーバーレスはつらい

またAWSが提供するキーバリューストアであるDynamoDBについてもその難しさについて説明し、必要であればhassaku氏自身が参考にしたブログ記事を参照して欲しいと説明した。

DynamoDBの学習には「虎の巻」を使うことを推奨

DynamoDBの学習には「虎の巻」を使うことを推奨

参考:DynamoDBデータモデリング虎の巻:第壱巻 ~前提知識編~

最後にまとめとして、AWSのサービスオーケストレーターであるStep Functionsがサーバーレスにとっては重要であること、ひとつのLambdaプロセスに多くのロジックを詰め込まないことなどを紹介して、セッションを終えた。

個人の経験したことをベースにサーバーレスを解説するセッションであり、AWSとPythonに特化した内容がそのまま他のプラットフォームでは応用できないかもしれないが、それでもサーバーレスを始める際のヒントとして有用だろう。多分にカジュアルな説明となっているが、エンジニアにとってはこのスタイルのほうがとっつきやすいのかもしれない。

著者
松下 康之 - Yasuyuki Matsushita
フリーランスライター&マーケティングスペシャリスト。DEC、マイクロソフト、アドビ、レノボなどでのマーケティング、ビジネス誌の編集委員などを経てICT関連のトピックを追うライターに。オープンソースとセキュリティが最近の興味の中心。

連載バックナンバー

クラウドイベント
第15回

CNDO2021、CNCFの提供するクラウドネイティブランドスケープを解説するセッションを紹介

2021/8/5
クラウドネイティブランドスケープを中心にCNCFの活動を解説したセッションを紹介する。
設計/手法/テストイベント
第14回

CNDO 2021、技術的負債を現場のエンジニアが対処する方法を解説

2021/8/2
時間の経過とともに溜まってしまう技術的負債に、現場のエンジニアはどう対処するべきかをAWSのエバンジェリストが解説したセッションを紹介する。
クラウドイベント
第13回

CNDO2021、Kubernetesがない世界とある世界の違いをインフラエンジニアが解説

2021/7/29
Kubernetesがある世界とない世界を比較して、クラウドネイティブになるためのヒントを解説するセッションを紹介する。

Think ITメルマガ会員登録受付中

Think ITでは、技術情報が詰まったメールマガジン「Think IT Weekly」の配信サービスを提供しています。メルマガ会員登録を済ませれば、メルマガだけでなく、さまざまな限定特典を入手できるようになります。

Think ITメルマガ会員のサービス内容を見る

他にもこの記事が読まれています