もちろん!AWS Lambdaのデプロイがすごく簡単になるんだよね。
使い方について、詳しく教えて!
このブログでは、実際にServerless Frameworkを使用してAWS Lambdaをデプロイする手順を、環境構築からデプロイ、テストまで詳しく解説していきます。
Contents
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. IAMユーザーを作成し、「AdministratorAccess」ポリシーをアタッチします。
このユーザーには、自分のAWSアカウントにアクセスできる権限が必要です。 - 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を使って、サーバーレス開発を進めてみてください!
最後まで読んでいただき、ありがとうございました。
Serverless Frameworkって使ったことある?