最近Goの勉強をしているので、lambdaもGoで動かせないかなと思ってやってみた。
##準備するもの
Go
Apexのインストール
AWSのアカウント
awscli
##Apexとは
lambdaのビルドとデプロイなどを簡単に管理をするツール。
サポートしている言語はNode.js、Java、Python、Go
公式にはサポートしてないGoが使えるのはいいですね。
どうやってるのかというと、Node.jsでGoのバイナリを実行してるっぽい。
###インストール
Mac もしくは Linuxの場合
% curl https://raw.githubusercontent.com/apex/apex/master/install.sh | sh
Windowsは直接バイナリをインストール
インストールが終わったらはApexのアップグレードをします。
% apex upgrade
AWSのAPIキーの設定
aws configure
でAPIキーを設定します。
% aws configure
AWS Access Key ID [None]: アクセスキーID
AWS Secret Access Key [None]: アクセスキー
Default region name [None]: ap-northeast-1 //東京リージョン
Default output format [None]:ENTER
###今回作ったアカウント用のIAMポリシー
テスト用なのでApex用のポリシーを適応しました。
これで最低限動きます。
{
"Version": "2012-10-17",
"Statement": [
{
"Effect": "Allow",
"Action": [
"iam:Create*",
"iam:Attach*",
"lambda:*"
],
"Resource": "*"
}
]
}
##プロジェクト作成
適当なディレクトリにプロジェクトフォルダを作ります。
% mkdir apex-sample-go
% cd apex-sample-go
init
プロジェクトの雛形を作ります。
% apex init
_ ____ _______ __
/ \ | _ \| ____\ \/ /
/ _ \ | |_) | _| \ /
/ ___ \| __/| |___ / \
/_/ \_\_| |_____/_/\_\
Enter the name of your project. It should be machine-friendly, as this
is used to prefix your functions in Lambda.
Project name: apex-sample-golang //プロジェクト名の入力
Enter an optional description of your project.
Project description: apex-samle-golang is Hello world App by Golang //プロジェクトの説明
[+] creating IAM apex-sample-golang_lambda_function role
[+] creating IAM apex-sample-golang_lambda_logs policy
[+] attaching policy to lambda_function role.
[+] creating ./project.json
[+] creating ./functions
Setup complete, deploy those functions!
$ apex deploy
lambdaの作成
公式にGoのサンプルがあるのでそれを写経。functions/hello/main.go
に保存し、自動作成されているfunctions/hello/index.js
(node.jsのhello world)は削除します。ファイル構成は以下の形になります。
apex-sample-go/
├── event.json (サンプルから)
├── functions/
│ └── hello/
│ └── main.go (サンプルから)
└── project.json
できたらapex deploy
をします。
% apex deploy
• creating function function=hello
• created alias current function=hello version=1
• function created function=hello name=apex-samle-golang_hello version=1
なお失敗してもエラーメッセージが出るので安心
% apex deploy
⨯ Error: function hello: build hook: can't load package: package main:
main.go:1:1: expected 'package', found 'EOF'
lambda実行
apex invoke 関数名
でlambdaを実行します。
% apex invoke hello < event.json
{"hello":"world"}
上記のように返ってきたら成功です。
マネジメントコンソールで確認
AWSのマネジメントコンソールからlambdaを開いてみると
ちゃんと作られているのが確認できました。
ちなみにCode Sizeは 875.4KB
でした。
apex-go
パッケージを使ってるから他の言語より大きいのかな。
##最後に
サンプルで試しただけでしたが、とても簡単にGoでlambdaを作ることが出来ました。
apex-go
は他にも
- CloudWatch Logs
- Cognito
- Kinesis
- Dynamo
- S3
- SNS
- SES
サポートしているみたいなのでいろんなアプリを作ることが出来そうです。
でも一番は公式対応してくれるといいなと思います。
##参考
Apexの公式ドキュメント