はじめに
この記事では、Serverless Frameworkの基本的な使い方を説明します。Serverless Frameworkは現在、サーバーレスアーキテクチャを効率的に構築するための主要なツールの一つです。
Serverless Frameworkとは
Serverless Frameworkは、サーバーレスアーキテクチャを簡単に、効率よくデプロイ・運用するためのオープンソースのツールです。このツールは、AWS Lambda, Azure Functions, Google Cloud Functionsなど、多くのクラウドプロバイダに対応しています。
チュートリアル
ディレクトリ構成
.
├── Dockerfile
├── README.md
├── assets
│ └── index.html
├── docker-compose.yml
├── functions
│ └── hello
│ └── handler.py
├── package-lock.json
├── package.json
└── serverless.yml
この構造では、functionsディレクトリがLambda関数のコードを、assetsディレクトリがフロントエンドのHTMLファイルを、serverless.ymlがServerless Frameworkの設定を格納しています。
設定ファイル
各設定ファイルについて簡単に説明します。
Dockerfile
このDockerfileは、Python 3.8をベースに、Node.jsとServerless Frameworkをインストールしています。
# ベースイメージ
FROM python:3.8
# Node.jsをインストール
RUN apt-get update && apt-get install -y nodejs npm
# Serverless Frameworkをインストール
RUN npm install -g serverless
# ワークディレクトリを設定
WORKDIR /app
# Pythonの依存関係をコピー&インストール
COPY requirements.txt .
RUN pip install -r requirements.txt
# package.jsonをコピー&インストール
COPY package.json .
RUN npm install
docker-compose.yml
このファイルは、Dockerコンテナの設定を行います。AWSのクレデンシャルを環境変数としてコンテナに渡しています。
version: '3'
services:
serverless_app:
build: .
volumes:
- .:/app
environment:
- AWS_ACCESS_KEY_ID=${AWS_ACCESS_KEY_ID}
- AWS_SECRET_ACCESS_KEY=${AWS_SECRET_ACCESS_KEY}
- AWS_DEFAULT_REGION=${AWS_REGION}
.env
AWSのクレデンシャルとデフォルトのリージョンを設定します。
AWS_ACCESS_KEY_ID=xxxxxxx
AWS_SECRET_ACCESS_KEY=xxxxxxx
AWS_REGION=ap-northeast-1
serverless.yml
このファイルで、AWS Lambda関数とAPI Gatewayの設定を行います。
service: serverless-framework-tutorial
provider:
name: aws
runtime: python3.8
region: ap-northeast-1
functions:
hello:
handler: functions/hello/handler.hello
role: arn:aws:iam::xxxxxxxxxx:role/serverless-framework-role
events:
- http:
path: hello
method: get
cors: true
Lambda
import json
def hello(event, context):
body = {
"message": "Hello, world!"
}
response = {
"statusCode": 200,
"body": json.dumps(body),
'headers': {
'Access-Control-Allow-Origin': '*'
}
}
return response
このPythonスクリプトは、単純な"Hello, world!"メッセージを返すLambda関数を定義しています。