AWS SAM を利用して決済管理ツールのバックエンドをゼロから素早く構築
はじめに
こんにちは、KINTOテクノロジーズで、決済プラットフォームの開発チームに所属している西田です。
今回は、以前こちらでも紹介した社内向けの決済に関する業務システムのバックエンドを AWS SAM で構築したお話をしたいと思います。
AWS SAM とは
まずはじめに AWS SAM(Serverless Application Model)とは、Lambda や API Gateway などのサーバーレスなサービスを簡単に構築・デプロイができるツールです。AWS SAM を利用することで、我々開発者がインフラに対しての知識を深く持つ必要がなくなり、サーバーレスアーキテクチャを利用したアプリケーション開発部分に集中することができます。
AWS SAM を採用したきっかけ
KINTOテクノロジーズへ入社してすぐに決済に関する業務システムの開発に参画、開発期間は2~3ヶ月程度であったこともあり、バックエンド側の技術選定では素早く開発できる技術の選定が求められました。
社内向けのシステムであったため、アクセス数が限定である点と前職では AWS SAM を利用して環境構築していた経験を活かして AWS SAM を利用して開発を進めることにしました。
AWS SAM の使い方
AWS SAM を利用して、REST API を APIGateway と Lambda を使ったサーバーレス構成で構築してみたいと思います。
ディレクトリ構成はこちらです。
.
├── hello_world
│ ├── __init__.py
│ └── app.py
└── template.yaml
はじめに AWS SAM を公式のドキュメントからインストールします
AWS SAM では template というファイルを利用して、AWS のリソースの管理を行います。
AWSTemplateFormatVersion: '2010-09-09'
Transform: AWS::Serverless-2016-10-31
Description: >
sam-app
Sample SAM Template for sam-app
Resources:
HelloWorldFunction:
Type: AWS::Serverless::Function
Properties:
FunctionName: HelloWorldFunction
CodeUri: hello_world/
Handler: app.lambda_handler
Runtime: python3.9
Events:
HelloWorld:
Type: Api
Properties:
Path: /hello
Method: get
import json
def lambda_handler(event, context):
body = {
"message": "hello world",
}
response = {
"statusCode": 200,
"body": json.dumps(body)
}
return response
SAM コマンドを使ってデプロイをします。
今回は --guided
を使って対話形式でデプロイしてみます。
sam deploy --guided
スタック名やリージョンなどを入力していきます。
Stack Name [sam-app]: # デプロイするスタック名を入力
AWS Region [ap-northeast-1]: # デプロイするリージョンを入力
#Shows you resources changes to be deployed and require a 'Y' to initiate deploy
Confirm changes before deploy [y/N]: # 変更内容を確認するかを入力
#SAM needs permission to be able to create roles to connect to the resources in your template
Allow SAM CLI IAM role creation [Y/n]: # SAM CLI が IAM ロールを作成するかを入力
#Preserves the state of previously provisioned resources when an operation fails
Disable rollback [y/N]: # ロールバックを無効にするかを入力
HelloWorldFunction may not have authorization defined, Is this okay? [y/N]: # Lambda に対する認可を設定するかを入力
Save arguments to configuration file [Y/n]: # 設定を保存するかを入力
SAM configuration file [samconfig.toml]: # 設定ファイルの名前を入力
SAM configuration environment [default]: # 環境名を入力
デプロイが完了したら、Lambda のコンソールから HelloWorldFunction
が作成されていることを確認します。
Lambda のトリガーになっている API Gateway を選択することでエンドポイントが確認できます。
curl でリクエストを送ってみます
curl https://xxxxxxxxxx.execute-api.ap-northeast-1.amazonaws.com/Prod/hello
リクエストが成功すると以下のようなレスポンスが返ってきます
{"message": "hello world"}
導入してみて
過去に AWS SAM を利用していたこともあり、基盤的な構築自体は当日である程度形にできるくらいにスムーズに行え、目標としていた計画通りに開発を進めることができました。
慣れてくるとサーバーレス構成で API を簡単に作れるところが良いところだと改めて感じました。
また、APIGateway や Lambda だけでなくバッチ処理といった定期処理で利用される EventBridge や SQS も AWS SAM で構築していたりします。
公式のドキュメントも整備されてきているので、利用する上でのハードルも下がっているように思います。
まとめ
今回は、決済に関する業務システムのバックエンドを AWS SAM でゼロから素早く構築したお話をしました。
AWS が提供しているツールでもあるので親和性が高く、環境の構築負荷を下げ、より実装部分に集中できる良いツールだと思いますので、ご興味ある方はぜひ触ってみてください。
関連記事 | Related Posts
We are hiring!
【プラットフォームエンジニア】プラットフォームG/東京・大阪
プラットフォームグループについてAWS を中心とするインフラ上で稼働するアプリケーション運用改善のサポートを担当しています。
【クラウドエンジニア】Cloud Infrastructure G/東京・大阪
KINTO Tech BlogWantedlyストーリーCloud InfrastructureグループについてAWSを主としたクラウドインフラの設計、構築、運用を主に担当しています。