LoginSignup
3
0

More than 1 year has passed since last update.

CI/CDやってみた① Serverless FrameworkとCodeBuildを使ってlambda functionを作る

Last updated at Posted at 2023-05-15

CI/CDの勉強をするために、超簡単なアーキテクチャを作ってみました。

今回作るもの

以下がアーキテクチャです。

image.png
CodeBuildとServerless Frameworkを使用してCI/CDを作っています。

GitHubでrepositoryを作る

適当なGitHub repositoryを作成します。
今回は全てのファイルをここで作成します。
CodeCommitでもいいのですが,GitHubでも大丈夫です。

CodeBuildでbuild projectを作る

マネコンから作成します。
設定内容は以下の通りです。

Source

Source provider

今回はGitHubを選択します。

Repository

先ほど作成したRepositoryを選択します。

Source version

今回作業するブランチを設定します。
mainでもfeature/serverlessでも何でも大丈夫です。
このブランチにpushしたファイルがCodeBuildに使われます。

Environment

Managed imageをチェックして,以下の設定を行います。
ほぼデフォルトにしました。

Operationg system

aws/codebuild/amazonlinux2-x86_64-standard:4.0

Service role

CodeBuild専用のRoleを作成したあと,選択しました。
AdminstratorAccsessを付与してあります。
詳細)
AWSジョブ機能の 管理ポリシー - AWS Identity and Access Management

Buildspec

Use a buildspec fileにチェックします。
今回はマネコンからではなく,buildspec.ymlのファイルからから設定するためです。

以上でCodeBuildの作成は終わりです。

buildspec.ymlの作成

GitHubレポジトリのrootに作成します。

buildspec.yml
#buildspecのバージョンを指定する
version: 0.2 

#ビルドの各段階で実行するコマンドを書いていく
phases: 
  install:
    commands:
      - npm install -g serverless #serverlessをインストールする
  build:
    commands:
      - sls deploy               #serverless.ymlの内容をdeployする
      - echo 'deploy finished!'
      - sls invoke -f hello --log

パラメータの説明

version: buildspecのバージョン。特に理由がなければ0.2を指定する。

phases: ビルドの各段階でCodeBuildが実行するコマンドを指定する。

  • install/ pre_build/ build / post_buildの4段階の設定ができます。
  • commandsで具体的なコマンドを指定します。上から順番に実行されていきます。

buildspec.ymlではsls deployだけを行います。
AWSリソースの中身はserverless.ymlで設定するのがミソです。
(今回はlambdaなのでsls invokeも必要です。これをやらないとdeployはされてもログにHello Worldが出ません。)

serverless.ymlの作成

GitHubレポジトリのrootに以下のようなファイルを作成します。

serverless.yml
# serverless frameworkのサービス名(プロジェクト名)を設定する
service: serverless-lambda-helloworld

provider:
  name: aws #基本AWSで固定
  runtime: python3.9
  stage: dev 


functions:
  hello:
    handler: handler.hello

パラメータの説明

service: Serverless Frameworkのサービス名/プロジェクト名です。

provider:クラウドサービスの設定を行います。

  • name:クラウドサービスを指定します。
    AWSの他にGCP,Azureなども指定できます。

  • runtime: 言語とそのversionを指定します。
    lambda functionのruntimeの設定をここで行います。

  • stage: stageを設定します。default値はdevです。

functions:lambda functionの設定を行います。
helloはfunctionの名前です。

  • handlerで呼び出す関数を指定します。
    • 今回はhandler.pydef hello()を呼び出したいのでhandler.helloと書きます。
    • 別な例)main.pydef hogehoge()の場合,main.hogehogeと書きます。

もちろん、2個以上のfunctionを作ることもできます。
Serverless Framework - AWS Lambda Functions

handler.pyの作成

lambda functionの設定を書きます。
通常のlambdaと同様なので説明は割愛します。

handler.py
import json


def hello(event, context):
    body = {
        "message": "Hello World! From serverless!",
        "input": event,
    }
    # print("Hello World! From serverless") printだとnullになった
    return {"statusCode": 200, "body": json.dumps(body)}

buildを実行する

マネコンから実行します。
先ほど作成したCode Buildの画面からstart buildをクリックすると実行されます。

CodeBuildのログにHelloWorldの文字が現れるはずです!

参考情報

3
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
3
0