aws sam initを試してみた(Ruby)
はじめに
AWS SAMという素晴らしいものがある。
簡単に説明すると、こんな感じです。
- サーバレス最適化CloudFormation拡張
- サーバレスアプリケーションのローカル開発
- Lambdaを作らなくても検証可能
- AWS上じゃなくても検証可能
サンプルを作る機能(sam init)もあるので、Rubyで試してみます。
開発環境準備
Cloud9使います!最近はここでしか開発してないです。
※ ローカル環境でも問題ないですがSAM入れたりの作業が必要
以下のSAMとRubyはこちらの記事で紹介しているので参考にしていただければ。
SAM
とりあえず最新のaws-sam-cliを入れます。
Cloud9のSAMは古いのでアップグレードする必要があります。
Ruby
LambdaはRuby2.5.0なので合わせます。
Cloud9はRubyのバージョンをダウングレードする必要があります。
sam initを試す (Ruby)
$ sam init --runtime ruby2.5 # 以下のファイルが生成される ├── event.json # lambdaのパラメータ ├── Gemfile # tests用Gem ├── hello_world │ ├── app.rb # Lambda実行ファイル │ └── Gemfile # Lambda用Gem ├── README.md # 説明 ├── template.yaml # sam template └── tests └── unit └── test_handler.rb # テストコード $ cd sam-app # Gemをインストールする $ bundle install
なんと、そのままだと動かないw
一部修正が必要なので修正を行う(正しい修正対応かは自信がない..)
# tests/unit/test_handler.rb require 'json' require 'test/unit' require 'mocha/test_unit' require_relative '../../hello_world/app' class HelloWorldTest < Test::Unit::TestCase # # 割愛 # def expected_result { statusCode: 200, body: { message: 'Hello World!', # コメントアウト(app.rbのlocationがコメントアウトされてる) # location: '1.1.1.1' }.to_json } end def test_lambda_handler # コメントアウト(不要処理) # HTTParty.expects(:get).with('http://checkip.amazonaws.com/').returns(mock_response) assert_equal(lambda_handler(event: event, context: ''), expected_result) end end
あとはテスト実行して、Lambda実行してAPIサーバ起動
# テスト実行(100% passedになることを確認) $ ruby tests/unit/test_handler.rb # Lambda実行(HelloWorldFuntion) $ sam local invoke HelloWorldFunction --event event.json # APIサーバ起動 $ sam local start-api $ curl 127.0.0.1:3000/hello
まとめ
実運用とかでは使う事ないかな。という感想
samが分からないという状態ならイメージが掴めてGood!
samの話じゃないけど、cloud9がやはり神サービスですわ。