Qiita Teams that are logged in
You are not logged in to any team

Log in to Qiita Team
Community
OrganizationAdvent CalendarQiitadon (β)
Service
Qiita JobsQiita ZineQiita Blog
24
Help us understand the problem. What is going on with this article?
@wind-up-bird

AWS Lambda で Ruby を使ってみる

More than 1 year has passed since last update.

はじめに

2018年の AWS re:Invent では多くの新機能が発表されていましたね。

特に Lambda 関連では、

ALB のバックエンドに Lambda を指定できるようになったり
Lambda functions as targets for Application Load Balancers | Networking & Content Delivery

Lambda Layers で関数ごとにパッケージングする必要がなくなったり
New for AWS Lambda – Use Any Programming Language and Share Common Components | AWS News Blog

と、いろいろ興味深い発表がありました。

その中でも、今回は AWS Lambda が Ruby をサポートしたとのことで、早速触ってみました。
Announcing Ruby Support for AWS Lambda | AWS Compute Blog

Hello world

なによりも Hello World ということで、ブログで紹介されているチュートリアルを実行してみます。
まずは function を新規作成します。
Screen Shot 2018-12-02 at 12.12.38.png
おぉ。。。確かに Ruby が選択できるようになっています。(※東京リージョンでも利用可。)
ただし、現時点で選択できる Runtime は Ruby 2.5 のみです。

ということで、function を新規作成すると、例によってサンプルコードが載っています。
Screen Shot 2018-12-02 at 12.21.02.png
なので、何も考えずにこれを実行していきます。

Test ボタンをクリックするとウィンドウが立ち上がるので、Envent Name に適当に名前を入力します。それ以外は変更せず、Create をクリックしてテストを作成します。

作成したテストイベントを利用して、実行してみます。
Screen Shot 2018-12-02 at 12.35.54.png

{
  "statusCode": 200,
  "body": "\"Hello from Lambda!\""
}

と表示され、うまく実行できたようですね。

Web アプリケーションのデプロイ

さすがに、Hello World だけでは物足りないので、チュートリアルにある Sinatra を利用した
Webアプリケーションをデプロイするところまでやってみたいと思います。
GitHub - Demo code for running Ruby Sinatra on AWS Lambda

ちなみに、サンプルは Lambda だけでなく、API Gateway と DynamoDB も利用します。
(これぞ、サーバーレス。。。)

事前準備

AWS SAM を利用するので予めインストールしておく必要があります。
pip を利用すれば、コマンド一つで導入できます。

> pip install aws-sam-cli

また、アプリケーションを配置するため、S3 にバケットを作成しておきます。
今回はバケット名を sample-sinatra-application としています。

> aws s3 mb s3://sample-sinatra-application

サンプルアプリを Clone

次にブログで紹介されているサンプルコードを Local に Clone します。

> git clone https://github.com/aws-samples/serverless-sinatra-sample

bundler を使って、依存するパッケージをインストールします。

> cd serverless-sinatra-sample
> bundle install --deployment

パッケージング

次のコマンドでパッケージングおよび、先程作成した、S3 バケット名を指定してアプリケーションをアップロードします。

> sam package --template-file template.yaml \
 --output-template-file packaged-template.yaml \
 --s3-bucket sample-sinatra-application

実行して少し待つと、、、

Uploading to XXXXXXXXXXXXXXXXXXXX  64727 / 64727.0  (100.00%)
Successfully packaged artifacts and wrote output template to file packaged-template.yaml.
Execute the following command to deploy the packaged template
aws cloudformation deploy --template-file /path/to/serverless-sinatra-sample/packaged-template.yaml --stack-name <YOUR STACK NAME>

Successfully ~~~ と出れば成功です。

S3にアップロードされていることも確認できますね。

> aws s3 ls s3://sample-sinatra-application
2018-12-02 14:17:40    3557087 XXXXXXXXXXXXXXXXXXXX

デプロイ

最後にアプリケーションをデプロイします。

> sam deploy --template-file packaged-template.yaml \
 --stack-name LambdaSinatra \
 --capabilities CAPABILITY_IAM

実行して少し待つと、、、

Waiting for changeset to be created..
Waiting for stack create/update to complete
Successfully created/updated stack - LambdaSinatra

Successfully ~~~ と出れば成功です。

AWS のコンソールからも作成されたことが確認できます。
Screen Shot 2018-12-02 at 15.17.30.png

確認

Overview の Resources にある SinatraAPI をクリックすると、Amazon API Gateway のページに遷移するので、左ペインのDashboardを選択し、URL をコピーします。
Screen Shot 2018-12-02 at 15.30.02.png

ブラウザから URL にアクセスします。
https://XXXXX.execute-api.ap-northeast-1.amazonaws.com/Prod/
Screen Shot 2018-12-02 at 15.28.35.png
わーいわーい。アクセスできました。

API のサンプル:
https://XXXXX.execute-api.ap-northeast-1.amazonaws.com/Prod/hello-world

{"Output":"Hello World!"}

FeedBackページ:
https://XXXXX.execute-api.ap-northeast-1.amazonaws.com/Prod/feedback
Screen Shot 2018-12-02 at 15.35.54.png
うん、ちゃんと動いているようですね。

おわりに

ということで、Ruby on AWS Lambda の紹介でした。
これを機に Lambda 経由で Ruby アプリをどんどん世に出していくことにしよう、そうしよう。

24
Help us understand the problem. What is going on with this article?
Why not register and get more from Qiita?
  1. We will deliver articles that match you
    By following users and tags, you can catch up information on technical fields that you are interested in as a whole
  2. you can read useful information later efficiently
    By "stocking" the articles you like, you can search right away
toreta
飲食店向け予約/顧客台帳サービス「トレタ」、超直前予約アプリ「トレタnow」を開発・提供するスタートアップ企業です。

Comments

No comments
Sign up for free and join this conversation.
Sign Up
If you already have a Qiita account Login
24
Help us understand the problem. What is going on with this article?