Skip to content

Instantly share code, notes, and snippets.

@noid11
Last active April 17, 2023 01:35
Show Gist options
  • Save noid11/996d8628d35f551dad1159d74e1b13f3 to your computer and use it in GitHub Desktop.
Save noid11/996d8628d35f551dad1159d74e1b13f3 to your computer and use it in GitHub Desktop.
AWS CDK で作成する Lambda 関数を golang で書く方法

これは何?

  • AWS CDK で Lambda 関数を作成する際に golang 使う方法メモ

TOC

CDK プロジェクトのセットアップ

# setup
mkdir my-project && cd my-project
cdk init app --language typescript

# first build
npm run build
cdk ls

Lambda 関数を Stack に定義

npm install @aws-cdk/aws-lambda
  • lib/my-project-stack.ts に Lambda 関数の定義を追加
import * as cdk from '@aws-cdk/core';
import * as lambda from '@aws-cdk/aws-lambda';

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

    const hello = new lamdba.Function(this, 'HelloHandler', {
      runtime: lamdba.Runtime.GO_1_X,
      code: lamdba.Code.fromAsset('lambda/bin'),
      handler: 'main'
    })
  }
}

Lambda 関数を実装

  • ビルドしたバイナリを配置するディレクトリと、 golang のコード書くファイルを作成
mkdir -p lambda/bin
touch lambda/main.go
  • Go Modules で依存関係を管理するので go mod init しておく
go mod init example.com/my-project
  • npm run build で golang もビルドしたいので、 package.json を修正
    • build した時に lambda ディレクトリに移動して、 golang をビルドするコマンドを設定
...
  "scripts": {
    "build": "tsc; cd lambda; GOOS=linux go build -o bin/main",
    "watch": "tsc -w",
    "test": "jest",
    "cdk": "cdk"
  },
...
  • lambda/main.go にコードを書く
package main

import (
    "github.com/aws/aws-lambda-go/lambda"
)

type Response struct {
    Message string `json:"message"`
}

func Handler() (Response, error) {
    return Response{
        Message: "Hello World",
    }, nil
}

func main() {
    lambda.Start(Handler)
}
  • ビルドする
npm run build

実装した Lambda 関数を AWS SAM CLI でローカル起動

cdk synth --no-staging > template.yaml
sam local invoke HelloHandlerXXXXXXXX --no-event

デプロイ

cdk deploy

クリーンアップ

cdk destroy

試した環境

% cdk --version
s1.59.0 (build 1d082f4)
% sw_vers
ProductName:    Mac OS X
ProductVersion: 10.14.6
BuildVersion:   18G6020
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment