CNDO2021、サーバーレスの勘所をサーバーワークスのエンジニアが紹介
CloudNative Days Online 2021から、AWS上でPythonを使ったサーバーレスアプリケーションの開発について、実際にエンジニア本人が経験した内容をベースとした解説を行うセッションを紹介する。これは株式会社サーバーワークスの社内SEである橋本拓弥氏が行ったもので、「私がもっと早く知りたかったサーバーレス開発の "Hello World" 次の一歩」というタイトルにある通り、橋本氏が実際にAWSの上でサーバーレスを開発した知見を紹介するものだ。サーバーワークス自体がAWSに特化したシステムインテグレーションを行う企業であることから、この場合のサーバーレスはAWSのLambda、Step Functionsを使い、開発言語はPythonという前提の上での体験談となる。
橋本氏はhassakuというハンドル名でGitHubやTwitterでも活動しているので、以降はhassaku氏としてセッションを紹介したい。
このセッションは開発の初心者がサーバーレスを「それっぽく」行えるようになるための経験談ということだが、サーバーレス自体が新しい概念であるため、社内にサーバーレスを教えてくれる先輩がいないという実情を踏まえて「自走」できることを目指しているということだろう。
内容は「どのように学んでいけばいいのか?」という部分とhassaku氏の経験からのTipsをシェアするものとなっている。
また前提としてAWSとPythonに限定した経験談であることが、このスライドからわかる。hassaku氏自身が新卒でサーバーワークスに入社して6年目という自己紹介からもわかるように、GCPやAzure、またオンプレミスのKnativeやOpenFaaSなどは想定していない。
hassaku氏が強調した最初のポイントは、学ぶための順序として「概念を理解する」「実際にやってみる」という至極当たり前の手法の大切さだ。
AWS上のサーバーレスの実装であるLambdaとAWSのサービスをオーケストレーションするStep Functionsが重要だと説明し、オープンソースのServerless Frameworkについては実際にコードを書きながら覚えることを推奨した。
またサーバーレスの基本的概念となるイベント駆動型のプログラミングについては「基本サービスに慣れてきたころに思い出せばOK」としてあまり拘らないことを説明。AWSにおけるイベントを繋ぐためのサービス、SQS、SNS、Kinesisとイベントを実装するLambda、Step Function、コードが利用とするデータストアとしてのS3とDynamoDBを挙げてその3つを上手く繋げて実装するという基本的な考え方を解説した。
ここではイベント駆動型のコードを書く時の注意点として、どのプロセスから受け取るのか/どのプロセスに渡すのかを意識しないようにプログラミングするべきであるとして、いわゆる手続的、同期的なコードを書かないことを挙げて説明した。
ここからはServerless FrameworkのTipsとして、hassaku氏がよく利用しているプラグインの説明に移った。
ここではStep Functions、Python Requirements、Pseudo Parameters、Dotenvなどを紹介。これ以外にも多くのプラグインが開発されており、Serverlessの公式サイトでは専用ページで紹介されているので、興味のある人は参照して欲しい。
参考 Serverless Frameworkのプラグインページ:Serverless Plugins Directory
次にサーバーレスの「ステージ」という概念について解説した。これはDevOps的に言えば、コードが開発・実装される際にDev、Staging、Productionなどのステージに分けて実装することと同様の発想だと思われるが、ここではServerless Frameworkの独自の概念として紹介している。
またステージングを使う場合は、ステージに依存しないコードにすること、環境変数を使って動作を変える仕組みを利用することを解説した。
ステージによって値を変える具体的な例として、リソース名、エンドポイント名などを挙げて紹介した。また実装するステージを判定するPythonのサンプルコードを挙げて解説した。
このスライドではテンプレート開発の際のポイントがいくつか例が挙げられている。どれもデベロッパーとしての苦労がそのまま表現されており、一般的な正解として妥当かどうかは別にして興味深い内容となった。
またサーバーレスのテストについても最適解はまだわからないとして、単体テストをちゃんとやることなどを強調し、hassaku氏自身もまだ模索中であることを説明した。
そして何度か出てくる「ピタゴラスイッチ」という表現を使ってサーバーレスのアプリケーションの全体像の見通しが悪くなる問題点についても言及し、現状ではドキュメントをちゃんと書くことしか対応策がないということを説明した。ここで唐突に出てくるBoto3とは、AWSのサービスをPythonから操作するためのSDKだ。AWSとPythonユーザーにとっては馴染みの名称かもしれないが、詳細は以下の公式サイトを参照されたい。
またAWSが提供するキーバリューストアであるDynamoDBについてもその難しさについて説明し、必要であればhassaku氏自身が参考にしたブログ記事を参照して欲しいと説明した。
参考:DynamoDBデータモデリング虎の巻:第壱巻 ~前提知識編~
最後にまとめとして、AWSのサービスオーケストレーターであるStep Functionsがサーバーレスにとっては重要であること、ひとつのLambdaプロセスに多くのロジックを詰め込まないことなどを紹介して、セッションを終えた。
個人の経験したことをベースにサーバーレスを解説するセッションであり、AWSとPythonに特化した内容がそのまま他のプラットフォームでは応用できないかもしれないが、それでもサーバーレスを始める際のヒントとして有用だろう。多分にカジュアルな説明となっているが、エンジニアにとってはこのスタイルのほうがとっつきやすいのかもしれない。
連載バックナンバー
Think ITメルマガ会員登録受付中
全文検索エンジンによるおすすめ記事
- 初のオンライン開催! チュートリアル、カンファレンス、スプリントに加え、スタンプラリーなど新たな試みも。PyCon JP 2020レポート【前編】
- サーバーレスな事例が次々登場―ServerlessConf Tokyo 2016レポート
- サーバレスアプリケーション運用フレームワーク「Serverless Framework 1.54」リリース
- クラウドネイティブの真髄であるサーバーレスがキーノートに登場
- Cloud Operator Days Tokyo 2021からNTT東日本とKDDIのインフラ監視に関するセッションを紹介
- CI/CD Conference 2023から、アルファドライブ/ニューズピックスのSREがAWS CDKを活用したCI/CD改善を解説
- CloudサービスとRPAの連携
- 初のオンライン開催! チュートリアル、カンファレンス、スプリントに加え、スタンプラリーなど新たな試みも。PyCon JP 2020レポート【後編】
- KubeCon China:サーバーレスとマルチテナンシーのセッションに注目
- クラウドアプリケーションを構築してデータを送信しよう