0
Help us understand the problem. What are the problem?

More than 1 year has passed since last update.

posted at

updated at

serverless-cloudform の紹介

この記事は

Opt Technologies Advent Calendar 2019 の 12日目の記事です。(遅れて投稿)

serverless-cloudform とは

gcchaan/serverless-cloudformServerlessFramework(以下SLS) のプラグインです。
利用用途は bright/cloudform で SLS の CloudFormation(以下CFn) テンプレートを定義することです。
メリットには serverless.yml から CFn テンプレートを分離できること、cloudform を利用できることなどがあります。

cloudform とは

cloudform は TypeScript によって CFn テンプレートの定義を可能にするパッケージです。
後発の AWS CDK では 抽象化や diff、deploy コマンドがありますが、cloudform は素直に TypeScript で記述した内容を CFn テンプレートにビルドするのみです。

serverless-framework の利用シーン

私ごとですが今年は簡単なピアボーナスアプリと広告配信サービスを作りました。
両者とも Slack をインターフェースにしているツールなので Lambda がちょうどよかったです。
このようなちょっとした API の開発の際に SLS は便利ですね。もちろん AWS SAM や chalice もよいですが、SLS も AWS の機能アップデートへの追従も早く、プラグインが充実していて、自力での拡張も簡単で気に入っています。

ところで、ちょっとした API の開発では Lambda と連携して S3 や DynamoDB などを使いたくなることも多いです。かつそのリソースも SLS で一緒に管理できると便利な時もあります。もちろん複数サービスから利用されるリソースであるとか、S3 や DB、Cognito は別途 CDK などで独立して管理したいところですが、そこまでしなくてもよい場合では serverless.yml の Resouces に書くかなと思います。
serverless-cloudform では SLS の package 時に ユーザーが定義した ts ファイルを直接 CFn テンプレートとしてマージします。
cloudform を使うことで、シンタックスのミスに気づきにくいようなこともなく、属性や値が型によって安全に記述できますし、ステージによって条件分岐するとか、アプリケーションコードと同じ設定値の変数を使うとか、ファイルを分けることも比較的簡単にできるのでとても便利です。

serverless-cloudform を使った例

詳細の使い方は説明するようなものでもないため割愛します。
代わりにといってはなんですが参考用にサンプルコードを作成しました。
serverless-dynamodb-local にも対応しています!

gcchaan-sandbox/counter-app

いわゆるカウンターです。
gcchaan-sandbox/counter-app

gcchaan-sandbox/lambda-api-serverless

作業中のリポジトリですが、lambda-api を使った CRUD のコードもあります。
gcchaan-sandbox/lambda-api-serverless

おわりに

Serverless の開発を盛り上げたいです!
この記事がどなたかの参考になりましたら幸いです

Why not register and get more from Qiita?
  1. We will deliver articles that match you
    By following users and tags, you can catch up information on technical fields that you are interested in as a whole
  2. you can read useful information later efficiently
    By "stocking" the articles you like, you can search right away
Sign upLogin
0
Help us understand the problem. What are the problem?