ゆずかまたまうどん

技術, PCゲームレビュー, PCゲームトラブルシュート

aws-cdkを使ってapi gateway+lambdaなslack botを作る

以前api gateway+lambdaなslack botをCloudFormationのtemplateを頑張って書いて作りました

qiita.com

そんなことしなくてもaws-cdkという素晴らしいものがあるのでそちらで書き直しました

Repository

「にゃーん」と発言するとhttps://thecatapi.com/を通じて猫の画像を取ってきてチャンネルに貼っつけてくれるだけのbotです

github.com

リソースの記述

lambdaにenvを設定することもやってます

import path = require('path');
import cdk = require('@aws-cdk/cdk');
import lambda = require('@aws-cdk/aws-lambda');
import apigateway = require("@aws-cdk/aws-apigateway");

import toml = require("toml");
const { readFileSync } = require("fs");

export class SlackNyanBotStack extends cdk.Stack {
  constructor(scope: cdk.Construct, id: string, props?: cdk.StackProps) {
    super(scope, id, props);

    const file = readFileSync(path.join(__dirname, "./lambda-env.toml"));
    const env = toml.parse(file);

    // The code that defines your stack goes here
    const handler = new lambda.Function(this, 'SlackBot', {
      runtime: lambda.Runtime.NodeJS810,
      handler: 'index.handler',
      code: lambda.Code.asset(path.join(__dirname, '../lambda')),
      environment: env,
    });

    const api = new apigateway.RestApi(this, id, {
      restApiName: "test_api",
      description: "nyan"
    });

    const integration = new apigateway.LambdaIntegration(handler);
    api.root.addMethod("POST", integration, {});
  }
}

templateに比べて遥かに分かりやすいしシンプルです

cdkに関してはユーザーの利用記事は少ないですが、公式のリファレンスがしっかりしてて書くのにはあまり困りませんでした