0
Help us understand the problem. What are the problem?

posted at

Windows環境でゼロからRuby + Lambda + API GatewayでAPI作って公開するまでの記事

概要

この記事では、Windows環境でゼロからRubyの開発環境を作って、ローカルで作成したコードをLambdaにアップし、API Gatewayを通して公開するまでの手順を記載します。

対象

・細かいことは良いから、とりあえずRubyでAPI作ってWeb公開したい人
・Lambdaとやらを使ってとりあえず何か動くものを作りたいが、何から初めて良いか分からない人

環境

  • windows10
  • Ruby 2.7

目次

  • 開発環境を作る
  • Lambda関数を作る
  • ローカルのコードをLambdaにデプロイする
  • API GatewayでWeb公開する

開発環境を作る

まずはRubyの開発環境を作ります。

Rubyのインストール

以下からRubyをインストールします。
■Ruby
https://rubyinstaller.org/downloads/

RubyはRuby+Devkitのver 2.7をDLして下さい
ver 2.7なのは、Lambda上で動くRubyが2.7なので環境を合わせるためです。
+Devkit版なのは、VSCodeでRubyのデバッグをするために、Devkitが必要になるためです。

インストール後、コマンドプロンプトを開き
ruby -vと入力してrubyのバージョンが表示されれば成功です。

VSCodeのインストール

以下からVSCodeをインストールします。
■VSCode
https://code.visualstudio.com/download

VSCodeの拡張機能をインストール

VSCodeの拡張機能から、RubyとVSCode Rubyを入れます。
これを入れることでRubyの入力サポートをしてくれます。

  • VSCodeを開いてCmd + Shift + Xを押す
  • 表示された検索窓にrubyと入力し、表示された拡張機能 Rubyのインストールボタンを押す
    image.png

■Ruby & VSCode Ruby
https://marketplace.visualstudio.com/items?itemName=rebornix.Ruby

VSCodeの設定

拡張機能をインストールしたら最低限の設定として
・language serverの有効化
・デバッグ機能の有効化
を行います。

language serverの有効化

language serverとは、マイクロソフトが提唱している言語入力サポートのプロトコルだそうです。
https://github.com/rubyide/vscode-ruby/blob/main/docs/language-server.md

色々とリッチな入力サポートをしてくれるので、有効化しておきましょう
拡張機能Rubyのドキュメントでも有効化が推奨されています。

  • VSCodeを開いてCmd + Shift + Xを押し、コマンドパレットを開く
  • settings jsonと入力し、表示された「基本設定: 設定(JSON)を開く」を選択する
    image.png
  • settings.jsonが開くので"ruby.useLanguageServer": trueを追加
    スクリーンショット 2022-05-12 085420.png

デバッグ機能の有効化

VSCode上でRubyのデバッグができるようにします。

こちらは先人の記事を参照
https://qiita.com/momoandbanana22/items/60682935ea8b01b30aec

lambda関数を作る

AWSコンソール上でLambda関数を作ります。
実際のコードは後でローカルからデプロイするので、デプロイ先の箱だけ作っておくイメージです。

  • Lambdaのコンソールを開き、「関数の作成」を押します。
    image.png
  • 作成する関数の設定画面に移るので関数名とランタイムを入力して、それ以外は変更せずに「関数の作成」を押します。
    • 今回は、関数名はtest_function、ランタイムはRuby 2.7を選択しました。
      image.png
  • 以下ような画面が出れば関数作成は成功です。
    image.png

ローカルのコードをLambdaにデプロイする

Lambdaにデプロイするコードの作成

VSCodeで以下コードを記述し、lambda_function.rbとして保存して下さい
※ Lambda関数作成時のデフォルトコードのレスポンス文字列を修正しただけのコードです。

require 'json'

def lambda_handler(event:, context:)
    { statusCode: 200, body: JSON.generate('Deploy Success!') }
end

AWS CLIを使ってLambdaにデプロイする

公式ドキュメントの通りに、AWS CLIを使って作成したコードを先程作ったLambdaにデプロイします。

# lambda_function.rbのzipを作成します。(zipにできれば手法は何でも良いです)
zip lambda_function.zip lambda_function.rb

# update-function-codeを使ってzipをlambdaにデプロイします。
# test_functionの部分は自身が作成したLambda関数名に置き換えてください
aws lambda update-function-code --function-name test_function --zip-file fileb://lambda_function.zip
  • Lambdaのコンソールを開き、コードの内容がlambda_function.rbのものに置き換わっていれば成功です。
    image.png

API GatewayでWeb公開する

作成したコードをAPI Gatewayを使ってWeb公開します。

  • API Gatewayのコンソールを開き、作成するAPIタイプに「REST API」を選択し「構築」を押す
    スクリーンショット 2022-05-12 102806.png
  • 以下設定でAPIを作成する
    • ”プロトコルを選択する”、は"REST”
    • "新しい API の作成"は、"新しいAPI"
    • "名前と説明"は、任意のAPI名を入力して、エンドポイントタイプはリージョンにする
      image.png
  • リソースの設定画面に移るので"アクション"プルダウンから「メソッドの作成 > ANY」を選択
    image.png
  • APIのバックエンドに何を設定するか聞かれるので、”Lambda 関数”に作成したLambda関数名(今回はtest_function)を入力し、保存する
    image.png
  • "アクションプル"ダウンから「APIのデプロイ」を選択する
  • デプロイされるステージを聞かれるので以下設定でデプロイする
    • "デプロイされるステージ"に"新しいステージ"
    • "ステージ名"に任意の名前
      image.png
  • 作成したステージの画面に遷移するので「URLの呼び出し」に記載されているURLにアクセスする
    image.png
  • lambda_function.rbに記載していたレスポンスが返ってきていれば、web公開成功です。
    image.png

補足

ちゃんとしたlambdaの開発環境を作りたい場合、VScodeではAWS Toolkitという開発ツールが提供されているので
そちらを使うとローカルでlambdaの環境を再現したデバッグを行うことができます。
ただしrubyは対応していません

Register as a new user and use Qiita more conveniently

  1. You can follow users and tags
  2. you can stock useful information
  3. You can make editorial suggestions for articles
What you can do with signing up
0
Help us understand the problem. What are the problem?