Serverlessアプリケーションに特化したIaCツールServerless Devsを紹介
今回は、severlessアプリケーションに特化したIaCツールの1つである。
serverless devsを紹介します。
Infrastructure as Codeの外観
インフラをコードで管理するInfrastructure as Code (IaC)の構成管理ツールには、様々なものがあります。
代表的なIaCツールに以下のようなものがあります。
- CloudFormation
- AWS CDK
- Terraform
- Pulumi
- Serverless framework
これらのうちCloudFormationとAWS CDKはAWSに特化したサービスで、それ以外は複数のプラットフォームに対応しています。
AWSだけでなく、Google Cloud PlatformやAlibaba Cloudなどへのデプロイを検討しているならTerraformやPulumiなどを検討する必要があります。
ServerlessアプリケーションのIaC
Serverless frameworkは、serverlessアプリケーションの構築に特化しているため、用途が限定されるものの、設定をファイルの内容を簡略化できるメリットがあります。2022年1月時点では、serverlessアプリケーションのデプロイではserverless frameworkの採用が第一候補に挙がるようです。
Serverless frameworkを各種プラットフォームに対応させるには、専用のプラグインが必要になります。Alibaba Cloudへのデプロイの場合、”serverless-aliyun-function-compute”というプラグインで対応します。
しかし、serverless-aliyun-function-computeは公式のgithubリポジトリの更新が2年以上前に更新が止まっており、ドキュメントでもNode.js v8.xに対応していると明記されています。
2022年1月時点では、Node.js v8.xはサポート終了しており、v12.xのサポート終了が間近となっています。そのため、serverlessアプリケーションをAlibaba Cloudにデプロイするには、別の選択肢が必要になります。
今回紹介するserverless devsは、Alibaba Cloudが公式にリリースしているIaCツールで、serverlessアプリケーションに特化しています。
概ねserverless frameworkのAlibaba Cloud対応版のような位置づけです。
serverless-devsの使い方
serverless-devsをインストールしてからfunction computeへのデプロイをする一連の手順を簡単に紹介します。
- インストール:
npm install @serverless-devs/s -g
- 認証情報の設定:
s config add
- 初期ファイルの作成:
s init
- 設定ファイル(s.yaml)編集
- コードを編集(index.jsなど)
- デプロイ:
s deploy
インフラ構成の設定ファイル
httpリクエストをトリガーにして、function computeを動作させる場合の設定例は以下のようになります。
s.yamlの内容です。
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 | edition: 1.0.0 name: transform_fun access: default vars: region: us-east-1 services: fc-GraphqlServerlessDemoService-graphqlServerlessDemoFc: component: devsapp/fc props: region: {vars.region} service: name: GraphqlServerlessDemoService description: helloworld internetAccess: true logConfig: project: graphql-serverless-demo-log-project logstore: graphql-serverless-demo-log-store enableRequestMetrics: true enableInstanceMetrics: true logBeginRule: None function: name: graphqlServerlessDemoFc handler: index.handler runtime: nodejs12 codeUri: ./ triggers: - name: httpTrigger type: http config: authType: anonymous methods: - POST customDomains: - domainName: auto protocol: HTTP routeConfigs: - path: /* |
function computeでの処理
function computeにデプロイする関数の内容です。index.jsに書きます。
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 | var getRawBody = require('raw-body'); exports.handler = (req, resp, context) => { console.log('hello world'); var params = { path: req.path, queries: req.queries, headers: req.headers, method: req.method, requestURI: req.url, clientIP: req.clientIP, } getRawBody(req, function (err, body) { for (var key in req.queries) { var value = req.queries[key]; resp.setHeader(key, value); } resp.setHeader('Content-Type', 'application/json'); params.body = body.toString(); resp.send(JSON.stringify(params, null, ' ')); }); } |
これで
s deploy
とするだけで、デプロイ完了です。まとめ
serverless-devsはほぼserverless frameworkと同じような感覚で使用できました。
Alibaba Cloudがリリースしていることもあり、serverless-devs以外のライブラリなどを別途用意しなくても、Alibaba Cloudへのデプロイができます。
初期設定の手間を簡略化できるため、用途が限定されているなら、ぜひ導入してみたいツールだと感じました。
Author Profile
スターフィールド編集部
SHARE