Serverless Framework で自動的に作成される Amazon EventBridge 構築用の AWS Lambda を抑止する

記事タイトルとURLをコピーする

はじめに

Happy Serverless Life!
こんにちは。アプリケーションサービス部の 水垣 です。
今日は、Serverless Framework (以降 sls)の小ネタを紹介したいと思います。

今まで sls を利用して Amazon EventBridge と連携した AWS Lambda をデプロイする際に、sls によって自動的に EventBridge 構築用の Lambda がデプロイした環境に作成されていたかと思います。

この Lambda の扱いにモヤモヤしていませんでしたか?自分はしていました。
常に起動されるわけでもなくシステム自体には不要な Lambda なのでお客様にはなんて説明しようか、EventBridge 構築後に手動で削除するべきか、でも再デプロイ時とかどうしよう...などなど。

先日、久しぶりに EventBridge のスケジュールで起動する Lambda を作成をした際に、実はこの自動的に作成される EventBridge 構築用の Lambda が作成されなくなる方法があることに気づきました。
その際に、ちょっと記述のしかたでハマったのでブログにおこしました。

環境

  • OS: Amazon Linux 2
  • Serverless Framework: 2.70.0
  • Node.js: 16.13.0

定義方法

seleverless.yml の provider: に以下の内容で記述します。

provider:
  eventBridge:
    useCloudFormation: true

これで、EventBridge 構築用の Lambda が自動的に作成されることがなくなります。 モヤモヤがスッキリしますね。

実は デプロイ後に表示された Deprecation warning やサイトに記載されているコードをそのまま定義しても、有効にならなかったので少しハマりました。
ここは注意が必要です。

eventBridge.useCloudFormation: true

↓実は、以下のように定義する

eventBridge:
    useCloudFormation: true

詳細情報

実は、sls デプロイ時に表示された Deprecation warning に答えが書かれていました。

Serverless: Deprecation warning: Starting with "v3.0.0", AWS EventBridge resources will be created using native CloudFormation resources by default. It is possible to use that functionality now by setting "eventBridge.useCloudFormation: true" as provider property in your configuration. If you want to keep using the old creation method, set that property to "false" to hide this deprecation message. More Info: https://www.serverless.com/framework/docs/deprecations/#AWS_EVENT_BRIDGE_CUSTOM_RESOURCE

翻訳

非推奨の警告。v3.0.0から、AWS EventBridgeのリソースは、デフォルトでネイティブのCloudFormationリソースを使用して作成されます。 設定のプロバイダプロパティに「eventBridge.useCloudFormation: true」を設定することで、現在その機能を使用することが可能です。 古い作成方法を使い続けたい場合は、このプロパティを「false」に設定すると、この非推奨メッセージが非表示になります。

sls の 次のメジャーバージョンである version 3.0 からは、CloudFormation を利用して EventBridge が構築されるので、カスタムのこの Lambda は自動作成されなくなるそうです。
そして、現行の version 2 系でも eventBridge.useCloudFormation: true を serverless.yml の provider: 以下に定義することで、この機能を利用できるとのことです!(2.27.0 以降から)

より詳細な内容は、公式サイトにも記載されていました。

Note: Prior to 2.27.0 version of the Framework, eventBridge resources were provisioned with Custom Resources. With 2.27.0 an optional support for native CloudFormation was introduced and can be turned on by setting provider.eventBridge.useCloudFormation property to true. It is recommended to migrate to native CloudFormation as it will become a default with next major version. It also adds the ability to define eventBus with CF intrinsic functions as values.

翻訳

注:フレームワークのバージョン2.27.0以前では、eventBridgeリソースはカスタムリソースでプロビジョニングされていました。2.27.0では、ネイティブCloudFormationのオプションサポートが導入され、provider.eventBridge.useCloudFormationプロパティをtrueに設定することでオンにすることができるようになりました。次のメジャーバージョンでは、ネイティブCloudFormationがデフォルトになるので、移行することをお勧めします。また、CFの固有関数を値としてeventBusを定義する機能が追加されました。

さいごに

いかかでしたでしょうか? この機能自体は version 2.27.0 から使えるみたいですね(2022/1時点の最新は version 2.70.0)。キャッチアップ不足でした。まだまだ精進しないとですね...

それでは、皆さん今年も良い Happy Serverless Life を楽しんでください!

募集中!

サーバーワークスのアプリケーションサービス部(主にアプリケーション作成を担当する部です)では、エンジニアを募集しています。
AWS などのクラウドを使って、お客様のシステムを開発・運用することに興味がありましたら、ぜひ弊社のリクルートサイトをのぞいてみてください!
お待ちしています!!