AWSのLambdaを使って、Helloを出力させたいと思う。
AWS Lambdaとは
概要
AWS Lambda を使用すれば、サーバーのプロビジョニングや管理なしでコードを実行できます。
サーバー管理が不要でコードの実行ができるよっていうものらしい。 Paasみたいなもの?って思ったらFaasっていうものらしい。
PaaSがリクエストごとにアプリケーション全体を起動・終了させる「リクエストリプライ方式」を、FaaSは必要なサービス毎に起動・終了させる「イベントドリンブン方式」を狙ったもの
負荷予測が難しく、ダイナミックな負荷の変動に対応しなければならないアプリケーションに向いているとか。
料金
Lambda はイベント通知と、コンソールからのテスト呼び出しを含む起動の呼び出しに対応して実行を開始した回数をカウントします。関数全体に対する合計リクエスト数に応じて料金が発生します。 Lambda では 1 か月に 1,000,000 件の無料リクエストおよび 400,000 GB-秒のコンピューティング時間が無料利用枠となっています。
1 か月に 1,000,000 件の無料リクエストおよび 400,000 GB-秒のコンピューティング時間が無料利用枠
これはかなりいいですね、簡単に作って試すのなら無料でいけそう。
Labbdaを使ってみる
Lambdaを検索し、関数の作成をします。
Goでやりたいので、Goを選択。
ロールとポリシーテンプレートがよくわからん。
設計図を使用してコンソールで AWS Lambda 関数を作成する場合、Lambda ポリシーテンプレートのリストから関数用のロールを作成できます。これらのテンプレートの 1 つを選択することで、Lambda 関数によってそのポリシーに添付する必要があるアクセス権限をもったロールが自動的に作成されます。
なるほど、ポリシーテンプレートを選んだらそれに基づくロールっていうものを勝手に作ってくれるのね。
でも、今回はHello出力するだけだし、こんな権限いらん。 なので、何も選ばずに関数を作成します。
以下を参考にし、Helloを出力するファイルを作る。
go get -u github.com/aws/aws-lambda-go/lambda
package main import ( "github.com/aws/aws-lambda-go/lambda" ) func hello() (string, error) { return "Hello ƛ!", nil } func main() { // Make the handler available for Remote Procedure Call by AWS Lambda lambda.Start(hello) }
env GOOS=linux GOARCH=amd64 go build -o hello // helloという名称のバイナリ作成。bashの場合はenvいらないです。
アップロードがzipかS3からしか対応していないようなので、zipにします。
zip hello.zip hello
出来上がったzipをアップロードしたら保存ボタンをクリック。
今あげたファイルを実行するにはテストイベントとやらを作る必要があるらしい。
作成したら、あとは実行するのみ。
成功だぜ。