Ruby
 Computer >> コンピューター >  >> プログラミング >> Ruby

AWSLambaでのRubyの使用

昨日AWSLambdaでのRubyサポートが発表されたとき、私はそれについて非常に興奮していたので、すぐに試してみる必要がありました。私たちはHoneybadgerでしばらくLambdaを使用してきましたが、Rubyで関数を記述できることを切望していました。新しいRubyサポートを数時間試してみたので、Node、Go、Pythonに費やす時間が減ると確信しています。 :)

簡単な例

AWSからの発表ブログ投稿により、Ruby on Lambdaをすばやく起動して実行できますが、サーバーレスフレームワークを使用してRubyLambda関数をデプロイする例を共有したいと思います。このフレームワークは、Lambda関数を操作する際の煩わしさを取り除く素晴らしい仕事をしていることがわかりました。フレームワークの現在のバージョン(1.34)には、Rubyプロジェクトのテンプレート生成の準備がまだできていませんが(この投稿を書き始める数時間前にPRがマージされました)、ジェネレーターなしで始めるのは簡単です。このウォークスルーに使用するサンプル設定ファイルは次のとおりです。これは、作成時にS3オブジェクトに関連付けられたメタデータをDynamoDBテーブルに入力する単純な関数です。

設定のリソースセクションにより、新しいDynamoDBテーブルが自動的に作成され、新しく作成されたテーブルの名前が、コードで使用する関数の環境変数に配置されます。この関数は、以前に作成されたSNSトピックのSNSイベントによってトリガーされます。そのSNSトピックは、S3バケット上のPUTeventsの通知を受け取ります。これも手動で作成されます。

これがRubyコードです:

このコードはそれほど多くのことを行いません。SNSイベントを受信し、SNSメッセージのレコードをループして、作成された各S3オブジェクトに関する情報を取得し、S3オブジェクトに対してHEADリクエストを実行してメタデータを取得してから、配置(作成)します。または更新)DynamoDBテーブルのアイテム。この関数の唯一の依存関係は、ランタイム環境に含まれているAWS SDKであるため、Gemfileについて心配する必要はありません。ただし、パーティーに持ち込みたい追加の宝石がある場合は、それを行うのは簡単です。展開について説明するときに、追加のgemを含める方法を見てみましょう。

導入

サーバーレスフレームワークのおかげで、このコードを現在の状態でLambdaに取得するのは非常に簡単です。

sls deploy

その1つのコマンドで、これらすべてが実行されます。

  • コードを圧縮する
  • zipファイルをS3に配置します
  • Lambdaに関数をデプロイします(環境変数とSNSトリガーを完備)
  • IAMポリシーを作成する
  • DynamoDBテーブルを作成する

デプロイが完了すると、バケットにオブジェクトを作成すると、DynamoDBテーブルに新しいアイテムが追加されます。

依存関係

デプロイされた関数に含まれる追加のgem依存関係を取得するのは簡単です。必要なのは、Gemfileを作成し、バンドルするgemを追加して、bundle install --path vendor/bundleを実行することだけです。 。これにより、gemがローカルディレクトリにバンドルされ、圧縮されて、残りのコードとともに関数に追加されます。

ただし、依存関係に関する1つの注意点は、コンパイルするために何らかのC拡張機能を必要とするgemです。開発環境はLambdaランタイム環境とは異なる可能性が高いため、これらの拡張機能をAWSで動作するようにコンパイルするには、もう少し作業を行う必要があります。ただし、lambci Dockerイメージと、Rubyイメージの上に作成したDockerイメージのおかげです。 、それは難しいことではありません。依存関係をバンドルして適切にコンパイルするには、次のようにDockerイメージを実行します。

docker run --rm -v $(pwd):/var/task stympy/lambda-ruby2.5

上記のbundlerコマンドラインを実行するだけなので、gemsはvendor/bundleに配置されます。 、deployによって作成されたZIPファイルに含める準備ができています コマンド。

それで、あなたはレースに出かけます。私が持っている限り、RubyinLambdaの実行を楽しんでいただければ幸いです。 :)


  1. RailsをAWSLambdaにデプロイする

    サーバーレスコンピューティングは、サーバーの管理とプロビジョニングの作業をクラウドプロバイダーに任せるのに役立ち、ほとんどのテクノロジーチームにとって急速に重要になっています。 AWS Lambdaは、多くのテクノロジーチームで使用されているサーバーレステクノロジーの一種です。 AWS Lambdaは、NodeJS、Java、Python、Rubyなどのコアプログラミング言語のほとんどをサポートしています。コアプログラミング言語はサポートされていますが、これらの言語で構築されたフレームワークの一部である機能に依存してサーバーレス関数を実行したい場合があります。この投稿では、AWSLambdaで

  2. Ruby2.6の9つの新機能

    Rubyの新しいバージョンには、新しい機能とパフォーマンスの改善が含まれています。 変更についていきますか? 見てみましょう! 無限の範囲 Ruby 2.5以前のバージョンは、すでに1つの形式の無限範囲をサポートしています( Float ::INFINITY を使用) )、しかしRuby2.6はこれを次のレベルに引き上げます。 新しい無限の範囲 次のようになります: (1..) これは、(1..10)のような終了値がないため、通常の範囲とは異なります。 。 使用例 : [a, b, c].zip(1..) # [[a, 1], [b, 2], [c, 3]] [1,2,3,