Pythonを使ったAWSサーバーレス開発はどんな技術が使われてるの?〜初心者のための技術ガイド〜
製造ビジネステクノロジー部の丹波です
クラスメソッドに入社して2ヶ月が経ち、入社前の時期の自分を振り返ってみようと思ったところで以下のメモを発見しました
Pythonを用いたサーバーレスアーキテクチャの開発って具体的に何をするの?
何を勉強しておけばいい?
入社前の私は趣味程度の機械学習などでしかPythonを触ったことがなく、しかもほぼほぼJupyter Notebookで開発をしていたため、AWSどころかどんなプロジェクト構成(ファイルの配置など)になってるのかすらイメージがついてなかったです
7月から開発案件に参加し約1ヶ月ほど経過した今なら当時のこの疑問に回答できるようになったと思うのでまとめてみようと思います
1. はじめに
本記事を読んでほしい人
- AWS初心者
- AWSを用いたサーバーレス開発(Python)未経験者
など
本記事の目的
- 上記の方々が以下を把握できるようになること
- Pythonを用いたAWSのサーバーレス開発はどういった技術が使われているか
- Pythonを用いたAWSのサーバーレス開発をするには何を勉強すればいいか
2. サーバーレス開発の基礎
サーバーレスとは
「サーバーレス」とは、サーバーの管理や運用を開発者が行う必要がなく、必要な時に必要なだけリソースを使用できる、といった意味になります
まず本題に入る前に、AWSにおける"サーバーレス"とはどんなサービスが該当するのでしょうか?
実は厳密的な定義は決まっていないので、よく使われるものを挙げてみようと思います
- AWS Lambda
- Amazon API Gateway
- Amazon DynamoDB
- Amazon S3
- Amazon SQS
- Amazon SNS
もちろん実際の開発ではこれら以外のサービスを使うことがありますが、最低限これらを抑えておくとすんなり開発に参加できるかと思います
このあたりの話はたくさん情報があるのでぜひ調べてみてください
実際書くのはほぼLambdaのコード
「開発」というとコードを書くことをイメージするかと思いますが、サーバーレス開発だとどこに、どんなことをするコードを書くのでしょうか?
実は、実際コードを書くのはほとんどLambda関数とそのテストコードになるかと思います
Lambda関数は具体的にどういった内容かというと
- APIGatewayと連携するLambda
- DynamoDBの操作をするLambda
- そのほかいわゆるビジネスロジック
あたりです
そういったLambda関数と、さまざまなAWSサービスを組み合わせてシステムを構築していくイメージです
IaC(Infrastructure as Code)
必須ではないのですが、IaCを導入するなら当然IaCも勉強し、コードを書く必要があります
IaCを使うと様々なメリットがあるので、AWS CDKやTerraform、AWS SAMなども学んで欲しい技術になります
3.1 必須のライブラリ
Lambdaを書くということを知った上で、次に実際はどういったツールやライブラリを使うのかリストアップしていきます
AWS SDK for Python (Boto3)
- 名前の通りAWS公式が提供しているSDK
- PythonからAWSサービスにアクセスしいろんな操作をするために使用する
- サーバーレス開発においてこのライブラリに対する知識はかなり重要
Pythonに限らず、AWSサービスを使ったサーバーレス開発をするならAWSのSDKを扱う技術が必ず必要になります
公式ドキュメント: Boto3 Documentation
3.2 テスト関連ライブラリ
テストコードを書かなくてもプログラムは動作するので厳密には必須ではありませんが、コードの品質を保証したりバグの早期発見に役立つため、今や多くの開発現場で取り入れられ、テストを自動化するのが一般的になっていると思います
そのため、これらの技術も抑えておきたいです
pytest / unittest
- テストコードを書くために必要なライブラリ
- unittestはPython標準のライブラリ
- pytestはよりいろんな機能が追加された、サードパーティのライブラリ
Pythonでテストを書くとなると必ず使うことになるライブラリです
unittestドキュメント: unittest --- ユニットテストフレームワーク
pytest公式ドキュメント: pytest documentation
moto
- AWSサービスをモックするためのPythonライブラリ
- 実際に存在するAWSリソースを使わずBoto3で書いたコードをテストできる
実際のAWSリソースを使わずテストする理由などについて、詳しく情報は下記などを参考にしてください
motoドキュメント: Moto:Mock AWS Services
LocalStack
- テストコードを書く時に使用する
- こっちはAWSサービスをDockerコンテナなどでエミュレートするライブラリ
- 実際の環境を想定したテストをすることが可能
- Python以外の言語でも使える
LocalStackドキュメント: LocalStack | docs
補足:Lambdaのテストについて
3.3 その他のライブラリ
ここから挙げるものは必ず使用する必要はないですが、使いこなすと開発やコーディングを効率化できるライブラリになります
Powertools for AWS Lambda (Python)
- Lambdaの開発効率、運用性を向上させるPythonユーティリティライブラリ
- AWSのベストプラクティスに基づいていて、ログ出力などを簡単に実装できるように
- その他にもLambda開発を便利にする様々な機能がある
Powertoolsは便利なライブラリですので是非とも使って欲しいのですが、初心者からすると複雑に見えるので、難しそうと感じたらまずは3.1で挙げたBoto3のみで使い始め、慣れてきたらPowertoolsを導入するといいかと思います
Powertools:Homepage
FastAPI
- PythonのWeb APIフレームワーク
- 自動でOpenAPI(Swagger)ドキュメントを生成することができ、API仕様書作成の手間を削減できる
- APIGateway + LambdaでのAPI開発にも使われている
FastAPI: FastAPI
Flask
- PythonのWebアプリケーションフレームワーク
- 軽量で柔軟性が高く簡潔
- こちらもAPIGateway + LambdaのAPI開発で使われる
Flask: Flask
mypy / mypy_boto3,boto3-stubs
- Pythonコードで型チェックができるライブラリ
- mypy_boto3はmypyと連携し、boto3の各サービスの型定義を提供してくれる
- mypy_boto3の各サービスの型情報はboto3-stubsを通してインストールする
mypy: Welcome to mypy documentation!
mypy_boto3: mypy-boto3
boto3-stubs: boto3-stubs
Pydantic
- Pythonのデータ検証ライブラリ
- データ検証とは、データの形、内容が正しいかどうか確認したり、データを扱いやすい形に整理するツール
Pydantic: Pydantic
black
- Pythonのコードフォーマッター
- 決まった書き方に自動で調整してくれる
black: The uncompromising code formatter
isort
- import文の書き方を自動で整理してくれるツール
isort: Home
flake8
- Pythonの静的解析ツール
- PEP8のスタイルガイド(インデント、空白、行の長さなど)のチェックや、論理エラーチェック(未使用の変数やimport)、複雑度のチェック(関数やメソッドの循環的複雑度)を行ってくれる
flake8: Flake8: Your Tool For Style Guide Enforcement
pyright
- 静的型チェッカー Pythonで型エラーを検出するためのツール
- 具体的には型アノテーションを使って型の不一致などを検出してくれる
pyright: pyright
静的解析ツールの使い方など
poetry
- npmとかyarnのようなパッケージ管理ツール
- 依存関係の整理や仮想環境の作成、パッケージのビルドなど、プロジェクトの管理を便利で効率的にしてくれる
poetry: Introduction
4. どうやって勉強する?
これらの技術をどうやって学習するかについてまとめます
書籍
サーバーレス開発をする上で有用な書籍をまとめた記事がありましたので下記を参考にしていただきたいです。
私自身も最近「AWS Lambda実践ガイド 第2版」を使って学習してますが、実際の開発現場で知っておきたいLambdaの設定などを知ることができるためかなりおすすめです
udemy
動画でわかりやすく学べます
サーバーレスに関する日本語の講座はまだ数が少ない印象ですが、英語の講座はそこそこ多いので英語ができるならぜひ
AWS Skill Builder
AWS公式の学習サイトです
講座用に用意されたAWS環境を使い、サービス料金を気にすることなく学習することができます
サーバーレスの講座も数が多かったです
サブスクプランに加入するとさらにいろんな講座が受けられます
5. おわりに
初めは複雑に感じるかもしれませんが、基本的な概念と主要なツールを理解すればサーバーレスの全容とその効果を体感できるかと思います
本記事が皆さんのサーバーレス開発の旅の一助となれば幸いです