takedajs ログ

備考録

AWS LambdaをGolangで試してみた

GolangでAWS Lambda(以下、Lambda)用の関数パッケージを作成し、実行テストを行うまでを書いています。

Lambdaがサポートする言語は、Node.js、Python、Java、C#、Goですが、今回は一番書き慣れてるGoを利用してみました。

関数パッケージを作成

Lambdaで実行する関数パッケージを作成します。

実行コードを作成

ローカルの適当な場所に作業ディレクトリを作成し、その中に 公式サイトを参考にしてhello.goファイルを作成しました。

Lambda用ライブラリのインストール

go get コマンド で Lambda用ライブラリをインストールします。

% go get -u github.com/aws/aws-lambda-go/lambda
package context: unrecognized import path "context"

contextに関するエラーが発生しました。

久しぶりにgoを触ったので、ローカルのgoのバージョンが古いのが原因らしく、goをバージョンアップして再度go getしたら解決しました。

% brew update
% brew upgrade go
go 1.6 -> 1.10.3

ビルド実行

ターゲットを指定して、以下コマンドを実行してビルドします。

% GOOS=linux GOARCH=amd64 go build -o hello
% ls
hello*    hello.go

Zipに圧縮

以下コマンドを叩いてZipに圧縮します。

% zip hello.zip hello
% ls
hello* hello.go hello.zip

これで関数パッケージの作成が完了です。

IAM ロール作成

Lambdaの関数を作るためにはIAM ロール(以下ロール)を使う必要があるため、作成していきます。

AWSのコンソールから IAM->ロール を選択して以下ページにいきます。

1_AWSのIAM画面

ロール作成ボタンを押下して、ロール作成ページを表示します。

「このロールを使用するサービスを選択」でLambdaを選択し、「次のステップ:アクセス権限」を押下する。

2_AWSのロール作成画面

今回はCloudWatchの書き込みを許可するAWSLambdaBasicExecutionRoleを選択して、「次のステップ:確認」を押下する。

3_AWSのロール権限選択画面

任意のロール名を選択し、「ロールの作成」を押下する。

4_AWSのロール情報登録画面

ロール一覧に先程作成したものが追加され、これでロール作成は完了です。

5_AWS_のロール一覧画面

Lambda関数作成

Lambda->関数にある「関数の作成」を押下する。

6_AWS Lambda関数一覧画面

一から作成、ランタイムは「Go 1.x」、ロールは先程作成したもの選択し、「関数の作成」を押下します。

7_AWS Lambda関数作成画面

関数が作成されました。

8_AWS Lambda関数作成完了画面

Lambda実行テスト

関数パッケージのアップロードから作成したhello.zipをアップし、「保存」を押下します。

9_AWS Lambda関数パッケージアップロード画面

保存ができたら「テスト」を押下します。以下のようにテストイベントを作成し、「保存」を押下します。

10_AWS Lambdaテストイベントの設定

作成したテストイベントのhelloを選択し「テスト」を押下すると、結果が返却され、正しく実行されたことが分かります。

AWS Lambdaテストイベント実行結果

まとめ

GolangでLambda関数の実行テストまでやってみました。

LambdaはS3やCloudWatchなど他のAWSサービスとも連携ができるので、試してみたいと思います。

参考

AWS Lambda で Go が使えるようになったので試してみた | Developers.IO

[AWS] Lambda + API Gatewayでサーバレスを始める 1