本文へスキップ / Skip to main content
KINTO Tech Blog

約6分で読めます

Development

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

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

AI が生成した要約です。正確な内容は本文をご確認ください。

要約を読む

AWS SAM を使って、決済管理ツールのバックエンドをゼロから3ヶ月以内に構築しました。 その結果、開発期間は短縮され、開発者がインフラに集中しなくて済みました。 開発期間が短く、社内システムなのでアクセスも限られているため、開発スピードが最も重要でした。 そこで、AWS SAM を選んだのは、サーバーレスの構成を簡単に扱えるからです。 AWS SAM では、template ファイルを使ってリソースを定義し、SAM コマンドでデプロイします。 --guided を使えば、リージョンやスタック名などを入力するだけで構築が進み、当日中に構築完了しました。 Lambda と API Gateway を使って REST API を作ることができ、curl でテストすると成功するレスポンスが返ってきました。 その結果、API の作成に1日で完了し、開発者が実装に集中できるようになりました。 API だけでなく、EventBridge や SQS といったバッチ処理も AWS SAM で構築でき、一貫した構成管理が可能になりました。 公式ドキュメントが整備されているため、学習コストも低く、実際の開発にすぐに活用できました。 この取り組みで、開発期間は3ヶ月から2ヶ月に短縮され、開発負荷が半分に減りました。 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

Follow Us

XConnpassWantedly

KINTOテクノロジーズの最新情報をSNSで発信中!イベント・テックブログ更新情報もお届けします。