【使ってみた】Serverless FrameworkでAWS Lambdaを簡単にデプロイ!

※当サイトは、アフィリエイト広告を利用しています。

チーズくん

Serverless Frameworkって使ったことある?

くれとむ

もちろん!AWS Lambdaのデプロイがすごく簡単になるんだよね。

チーズくん

使い方について、詳しく教えて!

このブログでは、実際にServerless Frameworkを使用してAWS Lambdaをデプロイする手順を、環境構築からデプロイ、テストまで詳しく解説していきます。

Serverless Frameworkとは?

Serverless Frameworkは、開発者がAWS Lambdaや他のサーバーレスアーキテクチャを迅速かつ容易に構築・デプロイするための強力なツールです。
このフレームワークを使用することで、面倒な設定作業を大幅に軽減し、迅速に環境を構築できます。
さらに、Serverless Frameworkは多くのプラットフォームと連携できるため、柔軟な開発が可能です。

環境の準備

まずは、以下の環境が整っていることを確認しましょう。

  • Node.js (npm)
  • AWSアカウント
  • AWS CLI

以下のコマンドで、必要なバージョンを確認できます。

$ node -v
$ aws --version

私の環境は以下の通りです。

$ node -v
v22.10.0

$ aws --version
aws-cli/2.11.20 Python/3.11.3 Darwin/24.1.0 exe/x86_64 prompt/off

Serverless Frameworkのインストール

Serverless Frameworkをインストールするために、次のコマンドを実行してください(※)。

$ npm install -g serverless

インストール後、動作確認を行いましょう。

$ serverless --version
Serverless ϟ Framework

 • 4.4.18

※-gオプションをつけることで、グローバルなnpmライブラリとして保存しています。
保存先を確認したい場合は、以下のコマンドを実行します。

$ npm root -g
/Users/your_username/.npm-global/lib/node_modules

AWSアカウントの設定

次に、AWSの設定を行います。AWS CLIを使用して次の手順を実施します。
本記事では、IAMユーザーの具体的な作成手順は省略します。

  1. 1. IAMユーザーを作成し、「AdministratorAccess」ポリシーをアタッチします。
    このユーザーには、自分のAWSアカウントにアクセスできる権限が必要です。
  2. 2. アクセスキーIDとシークレットアクセスキーを取得し、aws configureで認証情報を設定します。
$ aws configure

この操作により、~/.aws/credentialsに情報が保存されます。

serverlessの初期設定

以下のコマンドを実行します。

$ serverless

最初にServerless Frameworkを実行した際には、以下のような出力結果となると思います。

? Serverless Framework V4 CLI is free for developers and organizations making less than $2 million annually, but requires an account or a license key.

Please login/register or enter your license key: …
❯ Login/Register
Get A License
Enter A License Key
Explain Licensing Basics

このメッセージは、Serverless Frameworkを使用するにはアカウントの登録またはライセンスキーの入力が必要であるという趣旨のものです。
Serverless Frameworkのバージョン4 (V4) では、新しいライセンスシステムが導入されたことによるものです。

まず最初にServerless Frameworkの公式サイトでアカウントを作成してログインします。
登録は無料で、開発者や年間収益が200万ドル未満の組織には課金は発生しません。

一番上のLogin/Registerを選択した状態でEnterを押下します。
すると、次のような画面が表示されます。

新規アカウント、もしくは自身のGithubもしくはGoogleアカウントを使ってログイン処理を進めます。
Organization Nameを入力します。

ログインが完了すれば、以下のような画面が表示されます。

serverlessによるプロジェクトの作成

再度servelessコマンドを実行します。

$ serverless

TemplateはAWS / Python / HTTP APIを選択します。
Name Your Projectには任意のプロジェクト名を入力します。(例:post-pilot-s3-hosting)

? Select A Template: … 
❯ AWS / Node.js / HTTP API
  AWS / Node.js / Express API
  AWS / Node.js / Express API with DynamoDB
  AWS / Node.js / Scheduled Task
  AWS / Node.js / Simple Function
  AWS / Python / HTTP API
  AWS / Python / Flask API
  AWS / Python / Flask API with DynamoDB
  AWS / Python / Scheduled Task
  AWS / Python / Simple Function
  AWS / Compose / Serverless + Cloudformation + SAM

✔ Name Your Project: · post-pilot-s3-hosting

「Create A New App」を選択し、 Name Your New Appには任意のアプリ名を入力します。(例:post-pilot-s3-hosting)

✔ Create Or Select An Existing App: · Create A New App
✔ Name Your New App: · post-pilot-s3-hosting

上記の実行完了後、以下のようなディレクトリとファイルが作成されていることを確認します。

$ pwd
YourDirectory/post-pilot-s3-hosting
$ tree
.
├── README.md
├── handler.py
└── serverless.yml

なおServerless Frameworkのバージョン4 では、serverless.ymlは自動で作成されます。
本ブログの設定では、以下のような内容で作成されました。

# "org" ensures this Service is used with the correct Serverless Framework Access Key.
org: your-organization-name
# "app" enables Serverless Framework Dashboard features and sharing them with other Services.
app: post-pilot-s3-hosting
# "service" is the name of this project. This will also be added to your AWS resource names.
service: post-pilot-s3-hosting

provider:
  name: aws
  runtime: python3.12

functions:
  hello:
    handler: handler.hello
    events:
      - httpApi:
          path: /
          method: get

handler.pyには以下のようなコードが記載されています。

import json


def hello(event, context):
    body = {
        "message": "Go Serverless v4.0! Your function executed successfully!",
    }

    response = {"statusCode": 200, "body": json.dumps(body)}

    return response

servelessを使ったデプロイ

先ほど作成したプロジェクトディレクトリに移動し、デプロイを行います。
以下のコマンドでLambda関数にデプロイできます。

serverless deploy

デプロイが成功すると、エンドポイントのURLや関数名などの情報が表示されます。
Lambda関数の画面からも確認できます。
これで、Lambda関数がAWSにデプロイされました。

servelessによるテスト

デプロイ後、serverlessコマンドで関数を実行してみましょう。
以下のコマンドで呼び出すことができます。
なお、helloの部分は、serveless.yamlのfunctionsに記載されている関数名です。

$ serverless invoke local -f hello


{
    "statusCode": 200,
    "body": "{\"message\": \"Go Serverless v4.0! Your function executed successfully!\"}"
}

実際にhandler.pyのhello関数でreturnしている値が返ってきていることがわかります。Lambda関数が正しく動作しているか確認できました。

削除

最後に、作成したサービスを削除したい場合は、以下のコマンドを使用します。

serverless remove

これで、AWS上のリソースがすべて削除されます。
実際にLambda関数の画面上からも削除されていることが確認できました。

Serverless Framework活用法

チーズくん

Serverless Frameworkをさらに活用したいと思っているんだけど、他にどんなことができるの?

くれとむ

それはいい質問だね!Serverless Frameworkには、たくさんの機能があって、もっと効率的に開発できるんだ。

既存のLambdaプロジェクトのデプロイ

既に存在する以下のようなプロジェクトをserverlessコマンドを使ってLambdaにアップロードする方法もご紹介します。

.
├── README.md
├── requirements.txt
├── serverless.yaml
├── src
│   ├── __init__.py
│   ├── handlers
│   │   ├── fetch_bing_articles
│   │   │   └── handler.py
│   │   ├── run_pipeline
│   │   │   └── handler.py
│   │   └── scrape_content
│   │       └── handler.py
│   └── services
│       ├── bing_search_api.py
│       ├── can_scrape.py
│       ├── openai_api.py
│       ├── pipeline_utils.py
│       ├── post_to_wordpress.py
│       └── utils.py
└── tests
    ├── fetch_bing_articles_test.py
    ├── run_pipeline_test.py
    └── scrape_content_test.py

以下のようなserverless.yamlのテンプレートをプロジェクトのルートに作成します。

service: post-pilot-s3-hosting

provider:
  name: aws
  runtime: python3.12
  region: ap-northeast-1

functions:
  example:
    handler: src.handlers.fetch_bing_articles.handler.handler
    events:
      - httpApi:
          path: /fetch_bing_article
          method: get

新規作成の時と同様に、serverlessコマンドを実行し、既存のプロジェクト名を選択します。(例:post-pilot-s3-hosting)

$ serverless

? Create Or Select An Existing App: … 
  Create A New App
❯ post-pilot-s3-hosting
  postpilot-s3-hosting


✔ Create Or Select An Existing App: · post-pilot-s3-hosting

Your Serverless Framework Service is ready to deploy.

デプロイも同様に、以下のコマンドを実行します。

$ serverless deploy

コンソール画面からもLambda関数が作成されていることが確認できます。
API Gatewayも作成されています。

プラグインの活用

Serverless Frameworkの大きな魅力は、豊富なプラグインエコシステムです。これにより、さらなる機能拡張が可能です。例えば、以下のようなプラグインがあります。

  • serverless-offline
    • メリット
      • ローカル環境でLambda関数を実行でき、デバッグが容易になります。
      • AWSにデプロイせず、ローカル環境でLambda関数とAPI Gatewayの動作を確認できます。
      • クラウド環境に依存せずローカルで開発・テスト可能です。
    • ユースケース
      • クライアントとAPI間のデータフローを検証。
      • 入力パラメータや出力フォーマットのテスト。

プラグインの追加は簡単です。次のコマンドでインストールできます。

$ npm install serverless-offline --save-dev

その後、serverless.ymlのpluginsセクションに追加するだけで、ローカルでのテストが可能になります。

plugins:
  - serverless-offline

以下のコマンドでローカルサーバーを起動します。

serverless offline

これにより、ブラウザや curl で http://localhost:3000/hello にアクセスしてテストすることができます。

API Gatewayのカスタマイズ

Serverless Frameworkでは、API Gatewayとの連携が簡単です。
API Gatewayのステージ変数やカスタムドメインの設定をサポートしています。
これにより、より本格的なAPIを構築できます。

以下は、serverless.yamlにカスタムドメインの設定を追加する例です。

custom:
customDomain:
domainName: api.example.com
certificateName: your-certificate-name

CI/CDの導入

サーバーレスアーキテクチャの利点を最大限に活かすためには、継続的インテグレーション・デリバリー(CI/CD)の導入が重要です。
GitHub ActionsやCircleCIなどを活用し、デプロイプロセスを自動化できます。

基本的なフローとしては、コードをプッシュすることで自動でビルド、テスト、デプロイを行う設定が可能です。

  • GitHub Actionsの設定例です。
    リポジトリに .github/workflows/deploy.yml を作成します。
    serverlessコマンドをCI/CDパイプラインの中に組み込むことで、Lambdaプロジェクトの効率的な開発が可能になります。
name: Deploy to AWS

on:
  push:
    branches:
      - main

jobs:
  deploy:
    runs-on: ubuntu-latest

    steps:
      - name: Checkout code
        uses: actions/checkout@v2

      - name: Set up Node.js
        uses: actions/setup-node@v2
        with:
          node-version: 14

      - name: Install Serverless Framework
        run: npm install -g serverless

      - name: Deploy to AWS
        run: serverless deploy
        env:
          AWS_ACCESS_KEY_ID: ${{ secrets.AWS_ACCESS_KEY_ID }}
          AWS_SECRET_ACCESS_KEY: ${{ secrets.AWS_SECRET_ACCESS_KEY }}

まとめ

Serverless Frameworkを使用することで、AWS Lambdaの環境構築からデプロイ、テストまでをスムーズに実施できました。
またプラグインの活用、環境変数の設定、API Gatewayのカスタマイズなど多様な機能を取り入れることで、より効率的な開発を実現できます。

くれとむ

Serverless Frameworkを活用することで、Lambdaデプロイが楽になったね。

チーズくん

使いこなせば便利なツールであることは間違いないね。

皆さんもぜひ、Serverless Frameworkを使って、サーバーレス開発を進めてみてください!
最後まで読んでいただき、ありがとうございました。

コメントを残す

メールアドレスが公開されることはありません。 ※ が付いている欄は必須項目です

CAPTCHA


ABOUT US
くれとむ
IT企業で働いているシステムエンジニアです。 AWSなどIT技術のトレンドを発信します。 また、日常の課題を解決するライフハック記事や実体験をもとにしたレビューも発信します。 エンジニアならではの視点で、技術の楽しさと日常の快適さを繋げます! AWS認定(CLF, SAA, DVA, SOA, SAP, DOP, ANS, SCS, MLS)、基本情報技術者、応用情報技術者、情報処理安全確保支援士、TOEIC L&R 870点 ※このサイトはアフィリエイト広告(Amazonアソシエイト含む)を掲載しています。