KINTO Tech Blog
Development

AWS SAM を利用して決済管理ツールのバックエンドをゼロから素早く構築

Cover Image for 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 を使ったサーバーレス構成で構築してみたいと思います。
sam_diagram

ディレクトリ構成はこちらです。

.
├── hello_world
│   ├── __init__.py
│   └── app.py
└── template.yaml

はじめに AWS SAM を公式のドキュメントからインストールします

AWS SAM では template というファイルを利用して、AWS のリソースの管理を行います。

template.yaml
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
app.py
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_cosole_functions

Lambda のトリガーになっている API Gateway を選択することでエンドポイントが確認できます。
lambda_cosole

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 が提供しているツールでもあるので親和性が高く、環境の構築負荷を下げ、より実装部分に集中できる良いツールだと思いますので、ご興味ある方はぜひ触ってみてください。

Facebook

関連記事 | Related Posts

Go.Wada
Go.Wada
Cover Image for グローバル展開も視野に入れた決済プラットフォームにドメイン駆動設計(DDD)を取り入れた

グローバル展開も視野に入れた決済プラットフォームにドメイン駆動設計(DDD)を取り入れた

Jumpei Shimamura
Jumpei Shimamura
Cover Image for ECS環境のAuto Provisioningを実現する仕組み

ECS環境のAuto Provisioningを実現する仕組み

Cover Image for 【アジャイルなSaaS導入】最小工数で素早く最大の価値を生む秘訣

【アジャイルなSaaS導入】最小工数で素早く最大の価値を生む秘訣

Cover Image for AWSサーバレスアーキテクチャをMonorepoツール - Nxとterraformで構築してみた!

AWSサーバレスアーキテクチャをMonorepoツール - Nxとterraformで構築してみた!

Cover Image for CloudFront FunctionsのDeployのプロセスと運用カイゼン

CloudFront FunctionsのDeployのプロセスと運用カイゼン

Rina.K
Rina.K
Cover Image for 書籍の管理方法をラクにした話

書籍の管理方法をラクにした話

We are hiring!

【プラットフォームエンジニア】プラットフォームG/東京・大阪

プラットフォームグループについてAWS を中心とするインフラ上で稼働するアプリケーション運用改善のサポートを担当しています。

【スクラッチ開発エンジニア】プラットフォームG/東京・大阪

プラットフォームグループについてAWS を中心とするインフラ上で稼働するアプリケーション運用改善のサポートを担当しています。