Pulumiはプログラマーにとって慣れ親しんだ言語でインフラを構成できるモダンなIaCツールです。
小規模なプロジェクトで1人で何役もやっている人にとっては生産性が高いかもしれません。
イケてると思ったポイントや、ググってもサクッと分からなかった様な話を記事にしていきます。
前提条件
- Pulumi及びAWSの設定が完了している
マジック関数 (Lambda Magic Fucntion)
簡単な処理を記載するのであれば、このようにインラインのコードとして含めることで、コード量も少なく、手間が省けますね。以下はTypeScriptでの例です。S3のオブジェクト作成をトリガーとしたLambda関数の記述例です。
import * as aws from "@pulumi/aws";
// バケット作成
const docsBucket = new aws.s3.Bucket("docs");
// Lambdaのハンドラー関数をS3のバケットのonObjectCreateをトリガーとして紐付ける
docsBucket.onObjectCreated("docsHandler", new aws.lambda.CallbackFunction("docsHandler", {
// ここにプロパティを書く
memorySize: 256 /*MB*/,
callback: (event: any, context: aws.lambda.Context) => {
// ここにハンドラーを書く
console.log('hello world');
},
});
ハンドラーのコードを別ファイルとしてモジュール化したい場合
import * as aws from "@pulumi/aws";
import myHandler from "./myHandler";
// バケット作成
const docsBucket = new aws.s3.Bucket("docs");
// Lambdaのハンドラー関数をS3のバケットのonObjectCreateをトリガーとして紐付ける
docsBucket.onObjectCreated("docsHandler", new aws.lambda.CallbackFunction("docsHandlerFunc", {
memorySize: 256 /*MB*/,
callback: (event: any, context: aws.lambda.Context) => {
// 呼び出し
myHandler(event, context);
},
});
myHandler.ts
import * as aws from "@pulumi/aws";
// ハンドラー
export function myHandler(
event: any,
context: aws.lambda.Context
) {
// 処理内容
console.log("hello");
}
export default myHandler;