【AWS】AWS SAM CLIでLambda×API GatewayのサーバーレスAPIを作る方法

当ページのリンクには広告が含まれています。
いずみ

こんな悩みを解決できる記事を書きました!

僕は現役フリーランスエンジニア(歴年)で、資格は個保有しています。

AWS SAM CLIを使ってLambdaとAPI GatewayのサーバーレスAPIを作る方法を知りたい」とお考えではありませんか?

AWSコンソールをポチポチ操作してLambdaやAPI Gatewayを作るのは、正直かなり手間がかかります。

AWS SAM CLIを使えば、テンプレート1つでLambda・API Gatewayをまとめて構築し、ローカルでの動作確認からデプロイまで一気に行うことが可能です。

いずみ

SAMを使うとCloudFormationのテンプレートを毎回一から書かなくていいので、サーバーレス構築がグッと楽になります。

ということで、本記事ではAWS SAM CLIでLambdaとAPI GatewayのサーバーレスAPIを作る方法を解説します。

いずみ

すぐ読み終わるので、ぜひ最後まで読んでくださいませ。

スクロールできます
【当サイト】おすすめフリーランスエージェント3選
エージェント評価ポイント公式サイト
レバテックフリーランス

5.0
業界最大級のエージェント。
高単価案件が豊富。
公式
Midworks

4.8
満足度調査で
3年連続3冠を達成。
公式
ITプロパートナーズ

4.6
週2〜3向けの案件が豊富。公式
執筆者/監修者
  • フリーランスエンジニア(保有資格個、企業と直接契約
  • ブログ・アフィリエイト歴7年(2018年〜)
  • ブランドせどりで月利50万円⇨脱サラ
  • 投資(仮想通貨・FX)歴7年(2018年〜)
  • X(旧Twitter)フォロワー約1,900人
  • 運営者情報はこちら
いずみです
目次

【AWS】AWS SAM CLIでLambda×API GatewayのサーバーレスAPIを作る方法

早速ですが、AWS SAM CLIを使ってLambdaとAPI Gatewayのサーバーレス構成を作っていきます。

今回はPython 3.13ランタイムを使います。

事前準備(AWS CLI・SAM CLIのインストール)

まずは、AWS CLIとSAM CLIをインストールし、認証情報を設定します。

STEP
AWS CLIを設定する

IAMユーザーのアクセスキーを発行し、aws configure で認証情報を設定します。

aws configure
STEP
SAM CLIをインストールする

pipまたはHomebrewでインストールできます。

pip install aws-sam-cli
sam --version

sam initでプロジェクトを作成する

sam init を実行すると、対話形式でテンプレートを選ぶだけでプロジェクトの雛形を作成できます。

sam init

Which template source would you like to use?
    1 - AWS Quick Start Templates
Choice: 1

Choose an AWS Quick Start application template
    1 - Hello World Example
Template: 1

Use the most popular runtime and package type? (Python and zip) [y/N]: y

Would you like to enable X-Ray tracing on the function(s) in your application? [y/N]: n

Project name [sam-app]: sam-lambda-api

作成されるディレクトリ構成は以下のようになります。

sam-lambda-api/
├── hello_world/
│   ├── app.py
│   └── requirements.txt
├── events/
│   └── event.json
└── template.yaml
いずみ

対話形式で聞かれる項目は基本Enterでも進められますが、ランタイムだけはPythonを選ぶよう注意してください。

template.yamlでAPIエンドポイントを定義する

template.yamlEventsApi を書くだけで、Lambda関数とAPI Gatewayのエンドポイントが同時に定義できます。

AWSTemplateFormatVersion: '2010-09-09'
Transform: AWS::Serverless-2016-10-31
Description: sam-lambda-api

Globals:
  Function:
    Timeout: 10
    Runtime: python3.13

Resources:
  HelloWorldFunction:
    Type: AWS::Serverless::Function
    Properties:
      CodeUri: hello_world/
      Handler: app.lambda_handler
      Events:
        HelloWorld:
          Type: Api
          Properties:
            Path: /hello
            Method: get

Outputs:
  HelloWorldApi:
    Description: API Gateway endpoint URL
    Value: !Sub "https://${ServerlessRestApi}.execute-api.${AWS::Region}.amazonaws.com/Prod/hello/"

Lambda関数本体(app.py)はこのように書きます。

import json

def lambda_handler(event, context):
    return {
        "statusCode": 200,
        "body": json.dumps({"message": "Hello from Lambda!"})
    }
いずみ

Events配下にApiを書くだけでAPI Gatewayまで自動生成してくれるのが地味に便利なポイントです。

ローカルでAPIをテストする

デプロイ前に、Dockerを使ってローカルでAPIの動作確認をします。

STEP
ビルドしてローカルサーバーを起動する
sam build
sam local start-api
STEP
curlでリクエストを送って確認する
curl http://127.0.0.1:3000/hello
いずみ

ローカルでcurlが通ったら、あとは本番環境にデプロイするだけです。

AWSへデプロイする

動作確認ができたら、sam deploy --guided で本番環境にデプロイします。

sam deploy --guided

スタック名やリージョンなどを対話形式で入力していくと、CloudFormation経由でLambdaとAPI Gatewayが自動構築されます。

デプロイ完了後に表示されるAPI GatewayのURLにアクセスすれば、作成したAPIを呼び出せます。

いずみ

初回のsam deploy --guidedは設定をsamconfig.tomlに保存してくれるので、2回目以降はsam deployだけでOKです。

スクロールできます
【当サイト】おすすめフリーランスエージェント3選
エージェント評価ポイント公式サイト
レバテックフリーランス

5.0
業界最大級のエージェント。
高単価案件が豊富。
公式
Midworks

4.8
満足度調査で
3年連続3冠を達成。
公式
ITプロパートナーズ

4.6
週2〜3向けの案件が豊富。公式

【厳選】フリーランスエンジニアにおすすめなエージェント3選

フリーランスエンジニアになるにはエージェントから案件をもらう必要があります。

僕が実際に利用しているおすすめエージェントを紹介しますね。

いずみ

エージェントは必ず複数登録してください。

担当者によっては「全然案件紹介してくれない…」みたいなこともあるので…

僕は実際に5つのエージェントを使い回していますよ。

フリーランスを始めるなら「

案件数マージン率単価
約88,000件非公開
初心者福利厚生申し込み
無料
Good Point
  • 業界最大級の案件数。
  • 業界トップクラスの高単価報酬、低マージン(平均年収862万円)。
  • 案件参画中のフォローの充実。

※詳細は「【業界最大手】レバテックフリーランスとは?メリットや利用手順を解説!」を参照。

は業界最大手のフリーランスエージェントです。

とにかく案件数が多いので、とりあえず登録しておけば間違いないエージェントです!

いずみ

僕もはじめてフリーランスの案件を貰ったのはです。

保有している案件数が多いので、業務経験がなくても何かしらの案件は紹介してもらえますよ(僕はJavaの経験3年でも案件を貰えました)。

手厚い保障を重視したいなら「

案件数マージン率単価
約10,000件非公開
初心者福利厚生申し込み
無料
Good Point
  • 手厚い保障で正社員並みの安心感。
  • 還元率60%超え&単価公開でクリアな契約。
  • 給与保障制度(審査あり)。

は手厚い保障が特徴のフリーランスエージェントです。

フリーランスを目指しているけど不安な方や保障を重視したい方におすすめです。

いずみ

僕も何度か案件を紹介してもらいました。

自分のスキルに合った案件を紹介してもらえましたし、電話のやり取りも非常に丁寧でした。

週2〜3日の案件探しなら「

案件数マージン率単価
約5,000件非公開
初心者福利厚生申し込み
経験者向け無料
Good Point
  • IT案件に特化したフリーランスエージェント。
  • 週2〜3日の案件が豊富。
  • リモート案件が多く、直エンドなので単価も高い。

※詳細は「【週2・3案件】ITプロパートナーズとは?メリットや利用手順を解説!」を参照。

はIT案件に特化したフリーランスエージェントです。

週2〜3日から参画できる案件が豊富なので、起業したい人にもおすすめです。

いずみ

週2〜3日の案件はある程度スキルがないと紹介してもらえない印象です。

とはいえ、週5の案件ももちろんありますし、僕が利用した時は迅速・丁寧に対応していただきました!

よくある質問

sam local start-apiがエラーになる場合はどうすればいいですか?

まずDockerが起動しているか確認してください。

SAM CLIはローカル実行にDockerコンテナを使うため、Dockerが動いていないと起動できません。

それでも解決しない場合は、sam buildを再実行してから起動する、またはポートが競合していないか--portオプションで変更してみてください。

AWSへのデプロイでどれくらい料金がかかりますか?

LambdaとAPI Gatewayにはどちらも無料利用枠があり、個人の学習用途で少し動かす程度であれば、月数十円〜数百円程度に収まることがほとんどです。

ただし、CloudWatch Logsへのログ保存など細かい部分でも課金対象になるため、検証が終わったらスタックごと削除しておくと安心です。

Python以外のランタイムでも同じ手順で使えますか?

はい。

Node.jsやJava、Goなど他のランタイムでも、基本的な流れ(sam init → template.yaml編集 → sam local start-api → sam deploy)は同じです。

変わるのはRuntimeの指定とハンドラーの書き方くらいなので、この記事の手順をそのまま応用できます。

まとめ

今回は、AWS SAM CLIでLambdaとAPI GatewayのサーバーレスAPIを作る方法について解説しました。

以下が本記事のまとめになります。

まとめ
  • sam initでテンプレートから雛形プロジェクトを作成できる。
  • template.yamlEventsApiを書くだけでAPI Gatewayまで自動構築される。
  • sam local start-apiでデプロイ前にローカル動作確認ができる。
  • sam deploy --guidedで対話形式のまま本番環境へデプロイできる。
まとめ
いずみ

最後までお読みいただき、ありがとうございました!

スクロールできます
【当サイト】おすすめフリーランスエージェント3選
エージェント評価ポイント公式サイト
レバテックフリーランス

5.0
業界最大級のエージェント。
高単価案件が豊富。
公式
Midworks

4.8
満足度調査で
3年連続3冠を達成。
公式
ITプロパートナーズ

4.6
週2〜3向けの案件が豊富。公式
  • クソおすすめ本
¥4,480 (2024/06/01 23:28時点 | Amazon調べ)
いずみ

海外のエンジニアがどういった思考で働いているかが理解できます。

海外に行く気はないけど海外エンジニアの動向が気になる雑魚エンジニアにおすすめです(本当におすすめな本しか紹介しないのでご安心を)。

この記事が気に入ったら
フォローしてね!

シェアしてね!
  • URLをコピーしました!
目次