4
0

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?

More than 5 years have passed since last update.

Rubyでサーバレスwebアプリケーション作成

Posted at

こんにちは。
日々の業務ではインフラをやっています@hayaosatoです。

約1ヶ月前になりますが、AWS re:Invent2018にてAWS Lambda(以下Lambdaと表記します)の多くのアップデートがありましたね。
ランタイムの追加とLambda Layersが追加されたということで、それらを踏まえて今回はサーバレスのWebアプリケーションを作成してみたいと思います。

作るもの

サーバレスなWebアプリケーションとして、構成は以下のようなります。
AWS.png

AWS Lambda

今回作るLambda関数としては、API Gatewayからのリクエストに対して以下のhashを返す必要があります

hash.rb
{ 
  statusCode: 200,
  headers: {
    Content-Type: 'text/html'
  },
  body: 'コンテンツ'
}

また、関数の更新は aws lambdaコマンドによって行いました。かなり便利ですね。

$ zip -r main.zip lambda_function.rb vendor
$ aws lambda update-function-code --function-name $FUNCTION_NAME --zip-file fileb://./lambda_function.zip
$ aws lambda update-function-configuration --function-name $FUNCTION_NAME --handler lambda_function.lambda_handler

Lambda Layers

Lambda Layersという機能の追加によってLambdaの関数が分割でき再利用しやすくなりました。
とりあえず使ってみたかったので今回はよくあるSlack通知をLayerに追加してみます。

また、Lambda Layerの追加も aws lambdaコマンドによって可能です
(※ 僕みたいにawscliのバージョンを上げ忘れてハマらないようにしましょう)

$ aws lambda publish-layer-version --layer-name $LAYER_NAME --zip-file fileb://./layer.zip --compatible-runtimes ruby2.5
$ aws lambda update-function-configuration --function-name $FUNCTION_NAME --layers $LAYER_ARN

これで追加したLambda Layerはrequireできるようになったので

require.rb
require '/opt/layer'

のようみ読み込んで使用できます。
(絶対パスで読み込まないと動かなかったのですが、何か設定抜けてたりするんですかね。。。)

API Gateway

あとはAPI Gatewayを使ってデプロイするだけです。
GETリクエスト時にLambdaを実行すうように設定して、ステージの作成でデプロイ完成です。

最後に

Lambdaはかなり今後の展開が楽しみで、インフラをやっておきながらサーバレスにはかなり期待しています。
皆さんもぜひ試してみてください。

参考

4
0
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
4
0

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?