Serverless CI/CD でAWSへServerless Frameworkをデプロイ!

Serverless CI/CD でAWSへServerless Frameworkをデプロイ!

こんにちは!

今回は、構成管理ツールである Serverless Framework の CI/CD 機能、 Serverless CI/CD について解説していきます!

CI/CD ツールがたくさんある中で、何を使えばいいのかお悩みの方には選択肢のひとつとして情報を提供できる記事になっているかと思いますので、ぜひ参考にしてみてください。また、興味はあったけどまだ触っていないという方にも向けた内容となっていますので、最後までお読み頂ければありがたいです!

想定する読者

  • Serverless Framework に興味があるヒト
  • Serverless CI/CD に興味があるヒト
  • CI/CD ツールを検討中のヒト

はじめに

Serverless CI/CD は現在(2021年5月15日)、以下のコード管理サービスと言語、およびクラウドプロバイダをサポートしています。

  • コード管理:GithubとBitBucket
  • 言語:NodeまたはPython
  • クラウド:AWS

これらを理解した上で、実際にやってみましょう!

GUI コンソールでの設定

事前に Serverless Framework のアカウントを作成して、GUI のコンソールにログインし色々と設定する必要があります。ここではまっさらな状態ということを前提として、設定を順に説明していきます。

org の設定

左ペインから「org」をクリックしたら、まず「providers」を設定しましょう。AWS に Serverless Framework 用の IAM ユーザーを作成し、認証情報を設定してください。

apps の設定

左ペインから「apps」を選択し、「create app」をクリックします。そのあと、「serverless framework」をクリックします。

次の画面では、app と service 名を入力して、Credentials を設定し、一番下の「go to app settings」をクリックします。

なお、一番上にあるテンプレートは、serverless.yml に記述しなければいけないコードになりますので、コピーしてデプロイ予定の serverless.yml に貼り付けてください。

次にご自身が利用されているコード管理サービスを選択してください。本記事では BitBucket を選択します。

通知は Email のほかに Slack や SNS、Webhook が設定可能です。

選択後はリポジトリやリージョン、通知などを設定します。これで app 画面の設定は完了となります。

CI/CD を実行してみる

今回は Serverless Framework のテンプレートを使って動作確認します。以下のコマンドでディレクトリを作成しましょう。

sls create --template aws-nodejs --path myService

少し修正を加えて以下のコードをデプロイします。1行目〜3行目は先ほど GUI 画面にて設定した CI/CD を指定しておりますので必ず記述してください。

org: sample
app: cicd-test
service: cicd-test

frameworkVersion: '2'

provider:
  name: aws
  runtime: nodejs12.x
  region: ap-northeast-1
  lambdaHashingVersion: 20201221

functions:
  hello:
    handler: handler.hello

package:
  exclude:
    - README.md

これをプッシュすると、それをトリガーに serverless.yml の内容がデプロイされます。GUI 画面では以下のように確認ができます。併せて CloudFormation でもデプロイできたかどうか確認しましょう。

CI/CD の内部的な動き

Serverless CI/CD は内部的に以下のコマンドを順に実行しています。

  1. npm install
  2. npm test
  3. sls deploy

そのため、テストの実行内容は package.json の scripts の test 部分に記述します。以下は例になります。

{
  "name": "cicd-test",
  "version": "1.0.0",
  "description": "",
  "main": "index.js",
  "scripts": {
    "test": "<your script>""
  },
  "author": "",
  "license": "ISC"
}

また serverless-plugin-scripts プラグインを利用することで、npm install と npm test の実行前後にてコマンドを実行することができます。利用できるパラメータと実行時のタイミングは以下になります。

パラメータ実行されるタイミング
preinstallnpm install 前
postinstallnpm install 後
pretestnpm test 前
posttestnpm test 後
{
  "name": "cicd-test",
  "version": "1.0.0",
  "scripts": {
    "preinstall": "<your script>",
    "postinstall": "<your script>",
    "pretest": "<your script>",
    "posttest": "<your script>"
  }
}

加えて sls deploy 前後においてもコマンドが実行可能となります。その際は、package.json ではなく、serverless.yml に記述します。

plugins:
  - serverless-plugin-scripts

custom:
  scripts:
    hooks:
      # デプロイ前
      # ‘before:deploy:deploy': <your script>
      # デプロイ後
      # ‘deploy:finalize’: <your script>

これらを用いて、ご自身の環境に合わせて CI/CD 部分を作成してみてください!参考になれば幸いです!

関連記事

まとめ

Serverless CI/CD では、プラグインを利用することで、CI 部分の細かな制御を行うことができます。また SaaS ツールになりますので、コンソールで視覚化できるという点もメリットになります。まだ触ったことのない方はぜひ試してみてください。

このブログでは、AWS の記事をどんどん公開しておりますので、ご興味のある方は他の記事もご覧いただければと思います。

AWS に関する開発は、お気軽にお問い合わせください。