複数のスタックを分割してデプロイするためのServerless Frameworkのserverless-plugin-split-stacks

複数のスタックを分割してデプロイするためのServerless Frameworkのserverless-plugin-split-stacks

この記事は公開されてから1年以上経過しています。情報が古い可能性がありますので、ご注意ください。

こんにちは!

Serverless Frameworkは、サーバーレスアプリケーションを開発してデプロイするためのオープンソースのフレームワークです。serverless-plugin-split-stacksは、Serverless Frameworkを使って複数のスタックを分割してデプロイするためのプラグインです。

本記事では、serverless-plugin-split-stacksプラグインを使用したスタックの分割方法について解説します。

serverless-plugin-split-stacksを使った複数のスタックの分割デプロイ

serverless-plugin-split-stacksを使うと、複数のスタックを分割してデプロイすることができます。

インストール

まず、serverless-plugin-split-stacksをインストールします。

npm install --save-dev serverless-plugin-split-stacks
# or
yarn add serverless-plugin-split-stacks -D

設定

次にserverless.ymlファイルに以下のプラグインを追加し、customプロパティを追加します。

plugins:
  - serverless-plugin-split-stacks

custom:
  splitStacks:
    perFunction: true
    perType: false
    perGroupFunction: false
    stackConcurrency: 5 # Controls if enabled and how much stacks are deployed in parallel. Disabled if absent.
    resourceConcurrency: 10 # Controls how much resources are deployed in parallel. Disabled if absent.

カスタムプロパティの詳細は以下にまとめました。

プロパティ説明
perFunction関連するLambda関数専用のネストされたスタックにリソースを分割するものです。1.xではデフォルトでoffですが、2.xではデフォルトでenabledに切り替わります。
perType指定されたリソースタイプに対してリソースをネストされたスタックに移動させます。Per Lambdaが有効な場合、Per Typeよりも優先されます。
perGroupFunctionLambda関数と関連するリソースのセット専用のネストされたスタックにリソースを分割するものです。Per LambdaまたはPer Typeが有効な場合、Per Lambda Groupよりも優先されます。
stackConcurrency有効な場合、どの程度のスタックを並列に配置するかを制御します。
resourceConcurrency並列に配置されるリソースの量を制御します。

スタック分割を拡張

スタック分割を、Javascriptでカスタマタイズできます。

サーバーレスフレームワークのデプロイを実行するルートディレクトリに、stacks-map.jsファイルを作成します。

module.exports = (resource, logicalId) => {
  if (logicalId.startsWith("Foo")) return { destination: 'Foo' };
 
  // Falls back to default
};

serverless-plugin-split-stacksはルートディレクトリのstacks-map.jsファイルを自動的に読み込みます。上記サンプルでは、リソースの物理IDがFooから始まるリソースを、Fooというスタックにネスト分割しています。

実行

最後に、以下のコマンドを実行して、複数のスタックを分割してデプロイします。

serverless deploy

まとめ

今回は、Serverless Frameworkのserverless-plugin-split-stacksを使って複数のスタックを分割してデプロイする方法について解説しました。Serverless Frameworkを使うと、複数のスタックを分割してデプロイすることができます。

サーバーレス開発低コストなAWS開発内製化はお気軽にお問い合わせください。