【问题标题】:Send API get request from AWS Lambda in ruby在 ruby​​ 中从 AWS Lambda 发送 API 获取请求
【发布时间】:2021-11-06 21:49:49
【问题描述】:

我试图从 AWS Lambda 函数向我的 rails 服务器发送 API 请求。

我使用httparty gem 发送请求。

我试过下面的代码

require "httparty"

class PostManager
  include HTTParty

  def initialize
  end

  def create_post(job_id)
    puts "----------------- Inside post manager ------------------"
    puts "----------------- #{ENV["BASE_URI"]} ------------------"
    puts "#{ENV['BASE_URI']}/call_response?job_id=#{job_id}"
    response = HTTParty.get("#{ENV['BASE_URI']}")
    puts "******************HTTP Response -: #{response}******************"
    response
  end
end

我正在从 aws lambda 主处理程序触发此代码,如下所示。

post_manager = PostManager.new
response     = post_manager.create_post(job_id)

但是 lambda 函数会超时。请求根本没有到达 Rails 服务器。

如果我遗漏了什么,请指导我。还邀请了其他从 aws lambda 函数向外部服务器发送发布请求的替代方案。

【问题讨论】:

  • Lambda 函数是否部署在 VPC 中?

标签: ruby aws-lambda timeout httprequest


【解决方案1】:

由于http方是http客户端,我推荐阅读documentation,开始尝试pry和http://httpbin.org之类的网站

所以去会有所有的想法。阅读您的代码我不确定您想要实现什么,但我认为您想连接到某个正在运行的点:

这个 shell 变量中的域 => #{ENV['BASE_URI']} http 方法的路径 => call_response 以及一些路径参数,例如 => job_id=#{job_id}

你总是说这是一个帖子,但你正在做一个 get => HTTParty.get

所以让我们从the documentation 中显示的对象开始,以便使用 curl 攻击this method,如下所示:

❯ curl -X GET "http://httpbin.org/get?job_id=4" -H  "accept: application/json"                                                                                                           ~/learn/ruby/stackoverflow
{
  "args": {
    "job_id": "4"
  },
  "headers": {
    "Accept": "application/json",
    "Host": "httpbin.org",
    "User-Agent": "curl/7.64.1",
    "X-Amzn-Trace-Id": "Root=1-613b73ef-2d00166a2ae40e704b448352"
  },
  "origin": "83.53.251.55",
  "url": "http://httpbin.org/get?job_id=4"
}

那么对于一个http客户端对象

将此添加到名为 httpbin_client.rb 的文件中:

require 'httparty'

class HTTPbinClient
  include HTTParty
  base_uri ENV['BASE_URI']

  def initialize
  end

  def ask_for_job_id(job_id)
    self.class.get('/get', {query: {job_id: job_id}})
  end
end

http_bin = HTTPbinClient.new
puts http_bin.ask_for_job_id(28)

这样调用:

❯ BASE_URI=httpbin.org ruby httpbin_client.rb                                 ~/learn/ruby/stackoverflow
{
  "args": {
    "job_id": "28"
  },
  "headers": {
    "Accept": "*/*",
    "Accept-Encoding": "gzip;q=1.0,deflate;q=0.6,identity;q=0.3",
    "Host": "httpbin.org",
    "User-Agent": "Ruby",
    "X-Amzn-Trace-Id": "Root=1-613b776d-47036b9b29bb1ae34b4a0e50"
  },
  "origin": "83.53.251.55",
  "url": "http://httpbin.org/get?job_id=28"
}

【讨论】:

    猜你喜欢
    • 2022-11-23
    • 2019-10-06
    • 1970-01-01
    • 2017-01-27
    • 1970-01-01
    • 2019-05-30
    • 1970-01-01
    • 1970-01-01
    • 2015-11-19
    相关资源
    最近更新 更多