0
0

More than 1 year has passed since last update.

serverless framework を使ってHelloWorld

Last updated at Posted at 2023-09-16

はじめに

この記事では、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のクレデンシャルを環境変数としてコンテナに渡しています。

docker-compose.yml
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のクレデンシャルとデフォルトのリージョンを設定します。

.env
AWS_ACCESS_KEY_ID=xxxxxxx
AWS_SECRET_ACCESS_KEY=xxxxxxx
AWS_REGION=ap-northeast-1

serverless.yml

このファイルで、AWS Lambda関数とAPI Gatewayの設定を行います。

serverless.yml
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関数を定義しています。

0
0
0

Register as a new user and use Qiita more conveniently

  1. You get articles that match your needs
  2. You can efficiently read back useful information
  3. You can use dark theme
What you can do with signing up
0
0