PulumiでGoogle Cloud FunctionsにTypeScriptの関数をデプロイする方法
Pulumiはインフラ構成をTypeScriptなどのプログラミング言語で定義でき、AWSやGoogle Cloud Platformへのデプロイを自動化できるツールです。この投稿では、Google Cloud FunctionsにTypeScript製の関数をデプロイする際に、Pulumiを使う方法を紹介します。
Pulumiはインフラとアプリを一体化できるのが特徴的
Terraformなどのインフラ構成管理ツールで、Google Cloud Functionsに関数をデプロイする場合、インフラ構成の定義と、Functionsなどのアプリケーションコードは別々のファイルになるのが普通です。
Pulumiは一風変わっていて、インフラ構成と関数をひとつのファイルに書くことができるのが特徴的です。インフラ構成をTypeScriptで定義して、Cloud FunctionsもTypeScriptで実装すると、インフラとアプリを一体化したシームレスなコードにできます。
PulumiでCloud Functionsをお手軽にデプロイする
PulumiでCloud Functionsをデプロイする最も手軽な方法は、インフラ構成定義に関数の実装も混ぜて書くパターンです。そのパターンでは、次のようなコードになります:
import * as gcp from "@pulumi/gcp";
// Cloud Functions APIを有効化する
const cloudFunctionsService = new gcp.projects.Service(
"cloudFunctionsService",
{
disableDependentServices: true,
service: "cloudfunctions.googleapis.com",
}
);
// デプロイする関数のアプリケーションコード
const helloWorld: gcp.cloudfunctions.HttpCallback = (req, res) => {
res.send("Hello World!");
};
// デプロイする関数のインフラ構成定義
const helloWorldFunction = new gcp.cloudfunctions.HttpCallbackFunction(
"helloWorldFunction",
{
runtime: "nodejs12",
callback: helloWorld,
},
{ dependsOn: cloudFunctionsService }
);
// デプロイ後に表示する情報
export const functionUrl = helloWorldFunction.httpsTriggerUrl;
抜粋して説明すると、次のhelloWorld
という変数に代入した部分がアプリケーションコード、つまり関数の実装になります:
const helloWorld: gcp.cloudfunctions.HttpCallback = (req, res) => {
res.send("Hello World!");
};
次に、helloWorldFunction
がインフラの構成定義になります。
const helloWorldFunction = new gcp.cloudfunctions.HttpCallbackFunction(
"helloWorldFunction",
{
runtime: "nodejs12",
callback: helloWorld,
},
{/*...*/}
);
ここで注目したいのが、上で定義したアプリケーションコードのhelloWorld
をそのまま代入できているところです。これが、Pulumiの最大の特徴で、インフラとアプリを一体化できるところです。
この構成でpulumi up
し、デプロイすると、関数のURLが発行されるので、すぐに関数を利用できます。
$ curl https://asia-northeast1-${PROJECT}.cloudfunctions.net/helloWorldFunction-af3d854
Hello World!
まとめ
Pulumiを使うと、TypeScriptでインフラ構成を定義しながら、Cloud Functionsの実装もそれに埋め込むかたちでデプロイすることができます。インフラとアプリを一体化できるので、よりシームレスな運用ができるようになるのが特徴です。Terraformと比べると、インフラ構成管理のために別の言語を覚える必要がありません。
加えて、TypeScriptエコシステムの恩恵を享受できるメリットもあります。IDEではコード補完が効き、デプロイ前には型による静的チェックができたりと、アプリ開発と似たような開発体験が得られます。
PulumiはTypeScriptプログラマがインフラを扱うシーンに相性のいいツールになると思います。
最後までお読みくださりありがとうございました。Twitterでは、Qiitaに書かない技術ネタなどもツイートしているので、よかったらフォローしてもらえると嬉しいです→Twitter@suin
Author And Source
この問題について(PulumiでGoogle Cloud FunctionsにTypeScriptの関数をデプロイする方法), 我々は、より多くの情報をここで見つけました https://qiita.com/suin/items/57e2043779c921d342c2著者帰属:元の著者の情報は、元のURLに含まれています。著作権は原作者に属する。
Content is automatically searched and collected through network algorithms . If there is a violation . Please contact us . We will adjust (correct author information ,or delete content ) as soon as possible .