Slide 1

Slide 1 text

Go on AWS Lambda May 28, 2018 @merpay Soichiro Kawamura Certain Enterprise @translucens

Slide 2

Slide 2 text

●$whoami ● 某エンタープライズ企業 アジャイル推進部門所属 ○ クラウドネイティブ設計、ChatOpsの布教 ○ その前はオンプレで金融システム開発 ● 道場に来た理由 ○ ドイツ拠点CTOがGoは軽量、型安全で最高!と 強く推しているので来ました ○ ちょっとした業務改善アプリでK8sのYAMLを全部書くのはつらい →Serverlessでアプリを作りたい ● 趣味 ○ 写真、航空マイル集め、ガジェット

Slide 3

Slide 3 text

No content

Slide 4

Slide 4 text

●Development over the Cloud ● 「クラウドの上で」開発

Slide 5

Slide 5 text

●Go on Serverless platform ● 型安全であり、ネイティブバイナリが生成できて 起動の速いGoはServerlessに最適 ○ コンテナの起動に10秒以上かかる言語☕もある ● 2018年になり、AWS LambdaがGoをサポート、 デプロイに使うSAMテンプレートの自動生成も可能に ○ SAMはCloudFormationのLambda用の拡張 ○ 他のスクリプト言語と違い、Web IDEが使えないのでSAMは必須 https://aws.amazon.com/about-aws/whats- new/2018/01/aws-lambda-supports-go/ https://aws.amazon.com/about-aws/whats- new/2018/04/aws-sam-cli-releases-new-init-command/

Slide 6

Slide 6 text

Preparation - sam init command $ pip install aws-sam-cli --user $ sam init --runtime go1.x $ cd sam-app $ tree . ├── hello-world │ ├── main.go │ └── main_test.go ├── Makefile ├── README.md └── template.yaml 単にSAMのテンプレ だけでなく、 必要なコード類を 一式作ってくれる

Slide 7

Slide 7 text

Scaffold made by sam init AWS Lambda Lambda function Amazon API Gateway AWS X-Ray https://checkip.amazonaws.com 2. 起動 1. GET /hello 監視 3. GET / 4. “192.0.2.1” 5. “Hello, 192.0.2.1” 6. “Hello, 192.0.2.1”

Slide 8

Slide 8 text

How to deploy AWS Lambda 1. $go build 2. S3バケット作成(初回のみ) 3. パッケージング(バイナリのアップロード) $sam package AWS CloudFormation 4. デプロイ $sam deploy SAM template Packaged SAM template Amazon API Gateway 自動作成

Slide 9

Slide 9 text

Developing Program Lambda X-Ray 監視 email SES us-west-2 (Oregon) SNS SNS Lambda ap-northeast-1 (Tokyo) • BASE64デコード • メール→JSON変換 JSON→ SlackへのPOST

Slide 10

Slide 10 text

Developing Program w/ Future works Lambda email SES us-west-2 (Oregon) EC2 SNS SNS Lambda ap-northeast-1 (Tokyo) GuardDuty Event Lambda SNS Lambda 深刻度に応じた チケット優先度の設定 ルーティング情報は SNSに集約

Slide 11

Slide 11 text

●Demo

Slide 12

Slide 12 text

●Pitfalls ● 既存のS3バケットをSAMに指定できない ● SESからLambdaを 直接起動する場合 ○ 本文がJSONに含まれない ○ 他リージョンは指定不可 ● SESのテストメールが BASE64を指定しても UTF-8で送信されてBASE64デコードがこける

Slide 13

Slide 13 text

●Thanks JSON→Go Converter! ● https://mholt.github.io/json-to-go/