はじめに
この記事ではRuby製サーバレスフレームワークの「Jets」を検証した内容をまとめます。
環境はWindows10ですが、JetsがWindowsで動作しないためWSL(Debian)を使用しています。
目的
今回の目的はDynamoDBのテーブル設計、データアクセス設計の動作を保証することです。
環境構築
実際に環境構築した際に実行したコマンドを列挙します。
WSL
Windows StoreよりWSL(Ubuntu or Debian)をインストール。
sudo apt update
sudo apt upgrade
sudo apt install -y make gcc libssl-dev libreadline-dev zlib1g-dev git curl wget unzip
Ruby
下記記事のRubyの部分を参照
https://qiita.com/ksh-fthr/items/64a4e86c8bad08322c94#3-rbenv-%E3%82%92%E5%85%A5%E3%82%8C%E3%82%88%E3%81%86
git clone https://github.com/sstephenson/rbenv.git ~/.rbenv
git clone https://github.com/sstephenson/ruby-build.git ~/.rbenv/plugins/ruby-build
echo 'export PATH="$HOME/.rbenv/bin:$PATH"' >> ~/.bashrc
~/.rbenv/bin/rbenv init
vi .bashrc
source ~/.bashrc
rbenv install -l
rbenv install 2.6.6
rbenv rehash
rbenv global 2.6.6
ruby -v
Jets
sudo apt install -y nodejs npm
sudo npm install -g yarn
gem install jets
jets new プロジェクト名
dynamodb local
sudo apt install openjdk-11-jre
wget https://s3-ap-northeast-1.amazonaws.com/dynamodb-local-tokyo/dynamodb_local_latest.tar.gz
mkdir dynamodb
tar zxf dynamodb_local_latest.tar.gz -C ./dynamodb
cd dynamodb/
java -D"java.library.path=./DynamoDBLocal_lib" -jar DynamoDBLocal.jar -sharedDb
dynamodb-admin
npm install -g dynamodb-admin
export DYNAMO_ENDPOINT=http://localhost:8000
dynamodb-admin
aws-cli
curl "https://awscli.amazonaws.com/awscli-exe-linux-x86_64.zip" -o "awscliv2.zip"
unzip awscliv2.zip
sudo ./aws/install
/usr/local/bin/aws --version
aws configure
→CUIで適当なkey,idを設定(test_id, test_key等)
aws dynamodb list-tables --endpoint-url http://localhost:8000
→接続確認
環境構築は以上
Jets 検証
情報が少ないJetsを検証するにあたり、以下の記事が大変参考になりました。
https://qiita.com/gotchane/items/fd3c1e54f7bdaa4ab813
https://qiita.com/gotchane/items/d998b49dcaa31fe286b9
https://qiita.com/gotchane/items/b412295bee48ba827715
セッティング
- config/dynamodb.ymlのtable_namespaceを変更
- table_namespace: ○○○○(プロジェクト名等)
テーブル作成
- dynamodb-adminによる作成
- 後述のmodelの作成が必要
- dynamodb-adminによるテーブル作成方法は以前書いたこちらの記事を参照してください
- Jetsマイグレーションによる作成
- https://rubyonjets.com/reference/jets-dynamodb-generate/
- 例:jets dynamodb:generate create_users --partition-key user_id:string --sort-key delete_flg:number
※Jetsマイグレーションによる作成はJetsの恩恵を受けられる機能だが、GSI,LSI設定の情報がない。
ソースレベルでのJetsの理解があれば可能かもしれないが目的から外れるので今回は未調査。
modelの作成
dyanamodb-adminによるテーブル作成をした場合、作成したテーブルのモデルを以下の内容で作成する。
例:Usersテーブルを作成した場合、「user.rb」ファイルをapp/models配下に作成する。
class モデル名(User等) < Dynomite::Item
end
Jetsコンソールによるデータ操作
- プロジェクトディレクトリにて「jets c」を実行しコンソールを起動する
- dynomiteを参考にクエリを作成する
create_user = User.new(user_id: "test1_name", user_name: "test1", user_email: "test1@mail.com", delete_flg: 0)
create_user.replace
User.find(user_id:"test1_name", delete_flg:0)
その他
ハマりどころ(メモ)
- テーブル作成の項で記載しましたが、本来であればテーブル作成はマイグレーションファイルが作成されるJetsマイグレーションが理想です。ただ、現状のJetsの情報量ではGSI,LSI設定の適切な方法がぱっと出てきませんでした。
- GSI, LSIはデータアクセス設計を元に設定するのがベストですが、状況に応じて変更する必要が出てくることもあります。その際はdynamodb-adminを使う場合テーブルの作り直しが必要です。
- WSL上で動かしているJetsファイルの操作はWindows上で起動したVScodeでおこないました。
- RemoteWSLを導入する等の手順はこちら等を参照してみてください
エラー
私の環境ではmysql2のgemエラーでマイグレーションのテストができませんでした。
以下のコマンドで解決しました。
gem install mysql2 -v '0.5.3' --source 'https://rubygems.org/'
参考記事
公式:https://rubyonjets.com/
https://qiita.com/gotchane/items/fd3c1e54f7bdaa4ab813
https://qiita.com/gotchane/items/d998b49dcaa31fe286b9
https://qiita.com/gotchane/items/b412295bee48ba827715
おわりに
Ruby on JetsはAWS container HEROという世界に5人程しかいないAWSのスペシャリストによって作成されていることから、信頼性・機能性は高いと感じました。
ただし、現状ほぼ一人でメンテナンスされているとのことから本番環境への適用については慎重に判断するべきと思われます。
気になる方は以下の記事をご覧ください。
https://qiita.com/gotchane/items/02b9c539bfaf3a69d76e
多くのJetsに関する記事をまとめてくださった@gotchane 様には感謝申し上げます。