AWS Lambdaを使ってGo言語でHelloを出力させる

AWSのLambdaを使って、Helloを出力させたいと思う。

AWS Lambdaとは

概要

AWS Lambda を使用すれば、サーバーのプロビジョニングや管理なしでコードを実行できます。

サーバー管理が不要でコードの実行ができるよっていうものらしい。 Paasみたいなもの?って思ったらFaasっていうものらしい。

PaaSがリクエストごとにアプリケーション全体を起動・終了させる「リクエストリプライ方式」を、FaaSは必要なサービス毎に起動・終了させる「イベントドリンブン方式」を狙ったもの

負荷予測が難しく、ダイナミックな負荷の変動に対応しなければならないアプリケーションに向いているとか。

料金

f:id:utr066:20180308123206p:plain

Lambda はイベント通知と、コンソールからのテスト呼び出しを含む起動の呼び出しに対応して実行を開始した回数をカウントします。関数全体に対する合計リクエスト数に応じて料金が発生します。
Lambda では 1 か月に 1,000,000 件の無料リクエストおよび 400,000 GB-秒のコンピューティング時間が無料利用枠となっています。

1 か月に 1,000,000 件の無料リクエストおよび 400,000 GB-秒のコンピューティング時間が無料利用枠

これはかなりいいですね、簡単に作って試すのなら無料でいけそう。

Labbdaを使ってみる

f:id:utr066:20180308123819p:plain f:id:utr066:20180308123816p:plain Lambdaを検索し、関数の作成をします。

f:id:utr066:20180308124747p:plain Goでやりたいので、Goを選択。

ロールとポリシーテンプレートがよくわからん。

設計図を使用してコンソールで AWS Lambda 関数を作成する場合、Lambda ポリシーテンプレートのリストから関数用のロールを作成できます。これらのテンプレートの 1 つを選択することで、Lambda 関数によってそのポリシーに添付する必要があるアクセス権限をもったロールが自動的に作成されます。

なるほど、ポリシーテンプレートを選んだらそれに基づくロールっていうものを勝手に作ってくれるのね。

f:id:utr066:20180308124943p:plain

でも、今回はHello出力するだけだし、こんな権限いらん。 なので、何も選ばずに関数を作成します。

f:id:utr066:20180308125112p:plain

以下を参考にし、Helloを出力するファイルを作る。

GitHub - aws/aws-lambda-go: Libraries, samples and tools to help Go developers develop AWS Lambda functions.

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いらないです。

f:id:utr066:20180308131701p:plain アップロードがzipかS3からしか対応していないようなので、zipにします。

zip hello.zip hello

出来上がったzipをアップロードしたら保存ボタンをクリック。

今あげたファイルを実行するにはテストイベントとやらを作る必要があるらしい。 f:id:utr066:20180308132932p:plain 作成したら、あとは実行するのみ。

f:id:utr066:20180308133103p:plain

成功だぜ。