LoginSignup
3
3

More than 5 years have passed since last update.

sbt-aws-serverlessのサンプルプロジェクトを作りました

Posted at

sbt-aws-serverlessプラグインを作った で公開した Amazon API Gateway + Lambdaのサーバレスアーキテクチャを簡単に実現して公開できちゃうsbtプラグインのサンプルプロジェクトを公開しました。

使い方は、READMEに書いてますが、ここにも書きます。

API GatewayにREST APIを作成する

まず、API GatewayにREST APIを作成します。

$ git clone https://github.com/yoshiyoshifujii/sample-serverless.git
$ cd sample-serverless/
$ ./bin/activator -mem 2048 \
  -DAWS_REGION=<Region Name> \
  -DAWS_ACCOUNT_ID=<AWS Account ID> \
  -DAWS_ROLE_ARN=arn:aws:iam::<AWS Account ID>:role/<Role Name> \
  -DAWS_BUCKET_NAME=<Bucket Name> \
  -DAUTH_KEY=hoge
> createApiGateway <name> [description]
ApiGateway created: <Rest APi ID>
[success] ...

activatorを起動する際に、環境変数をいろいろと指定していただくようにしていますが、いちいち指定するのが面倒な場合は、build.sbtを編集していただくと固定にできます。

以下の右辺を良い感じにしてください。

lazy val regionName = sys.props.getOrElse("AWS_REGION", "")
lazy val accountId = sys.props.getOrElse("AWS_ACCOUNT_ID", "")
lazy val restApiId = sys.props.getOrElse("AWS_REST_API_ID", "")
lazy val roleArn = sys.props.getOrElse("AWS_ROLE_ARN", "")
lazy val bucketName = sys.props.getOrElse("AWS_BUCKET_NAME", "")
lazy val authKey = sys.props.getOrElse("AUTH_KEY", "")

deploy

つぎに、LambdaにDeployします。

$ ./bin/activator -mem 2048 \
  -DAWS_REGION=<Region Name> \
  -DAWS_ACCOUNT_ID=<AWS Account ID> \
  -DAWS_REST_API_ID=<Rest Api ID> \ # <- add this line
  -DAWS_ROLE_ARN=arn:aws:iam::<AWS Account ID>:role/<Role Name> \
  -DAWS_BUCKET_NAME=<Bucket Name> \
  -DAUTH_KEY=hoge
> deploy
...
Lambda Deploy: arn:aws:lambda:<Region Name>:<AWS Account ID>:function:SampleHello
Publish Lambda: arn:aws:lambda:<Region Name>:<AWS Account ID>:function:SampleHello:1
Create Alias: arn:aws:lambda:<Region Name>:<AWS Account ID>:function:SampleHello:test1
Create Alias: arn:aws:lambda:<Region Name>:<AWS Account ID>:function:SampleHello:production1
Api Gateway Deploy
[success] ...

ここでは、build.sbtに指定している、Aliasをまとめて作ってくれます。

また、API Gatewayの統合インテグレーションも良い感じに作成してくれます。

API Gateway のステージを作成

test という名前のステージを作成します。

> createDeployment test
[success] ...

test

作成したステージや、Lambdaがちゃんと動くか、RESTful APIを叩いて確認します。

この際、HTTPSでアクセスしていますので、アクセスできる環境であることが必要です。

> testMethod test
test method success.
[success] ...

test以外のステージを作成

公開用とStagingテスト用に、 v1staging という名前のステージを作成します。

このとき、先程Deployしたtestステージの Deployment ID が必要ですので、先に、 getDeployments を実行して確認してから、作成します。

> getDeployments
=====================================================================================
<Rest Api ID>
=====================================================================================
| Created Date                   | Deployment Id   | Description                    |
|--------------------------------|-----------------|--------------------------------|
| Mon Sep 19 19:56:01 JST 2016   | xxxxxx          | 0.1                            |
[success] ...

> updateStages xxxxxx
[success] ...

curl

最後に、curlでアクセスできれば、公開完了です。

$ curl -i -X GET https://<Rest Api ID>.execute-api.<Region Name>.amazonaws.com/v1/hellos -H "Authorization:hoge"
HTTP/1.1 200 OK
Content-Type: application/json
Content-Length: 21
Connection: keep-alive
Date: Mon, 19 Sep 2016 11:47:36 GMT
x-amzn-RequestId: xxxxxxxx-xxxx-xxxx-xxxx-xxxxxxxxxxxx
X-Cache: Miss from cloudfront
Via: 1.1 xxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxx.cloudfront.net (CloudFront)
X-Amz-Cf-Id: xxxxxxx-xxxxxxxxxxxxxxxxxx_xxxxxxxx-xxxxxxxxxxxxxxxxxx==

{"message":"World!!"}%

まとめ

ざっとこんな感じでSampleが実行できます。

swagger.yaml を良い感じに作って、Lambdaも良い感じに作れば、どんどんエンドポイントを追加していけます。

ScalaでLambdaを作るのに、良い感じに抽象化した部品も公開できたらなーっておもってますが、おいおいやっていきたいと思います。

以上です。

3
3
0

Register as a new user and use Qiita more conveniently

  1. You get articles that match your needs
  2. You can efficiently read back useful information
  3. You can use dark theme
What you can do with signing up
3
3