読者です 読者をやめる 読者になる 読者になる

15 min/d

ぼうずやのにっき

Ruby なのに Java のライブラリを使えと言われた

AWS Lambda 便利だ。急に Ruby から Java のライブラリを使わないといけなくなった。

そこで AWS Lambda に Java のライブラリに登録し、それを Ruby から AWS SDK for Ruby 経由で呼び出す。

Ruby 側の雰囲気は↓のような形。

# ぜんぜんわからないけど雰囲気で書いた Ruby のコード (動かしてない)

require 'aws-sdk' # v2

# invoke('super-function', 'special-version', { param1: 123 })
# => { ... }
def invoke(fn, qualifier, event)
  access_key_id = ENV['AWS_ACCESS_KEY_ID']
  secret_access_key = ENV['AWS_SECRET_ACCESS_KEY']
  region = ENV['AWS_REGION']
  credentials = Aws::Credentials.new(access_key_id, secret_access_key)
  client = Aws::Lambda::Client.new(region: region, credentials: credentials)
  response = client.invoke({
    function_name: fn,
    invocation_type: 'RequestResponse',
    log_type: 'None',
    client_context: nil,
    payload: JSON.generate(event),
    qualifier: qualifier,
  })
  JSON.parse(response.payload.string)
end

エラーチェックとかしていないので雰囲気だけ。まじめにやるならリファレンスを見ると良い。

http://docs.aws.amazon.com/sdkforruby/api/Aws/Lambda/Client.html#invoke-instance_method

Java 側は面倒くさいので書かない。

急に謎の力が働いて「 Java のライブラリで処理しろ」ということになったら、 AWS Lambda でごまかせるかもしれないという話。