簡體   English   中英

aws lambda 無法從另一個 vpc 調用 web 服務

[英]aws lambda cannot call webservice from another vpc

我們有一個 aws lambda,它是在自定義 vpc su.nets 中提供的。 lambda 調用 Web 服務 api 調用,這是另一個 VPC。 但是,調用不會通過 go 導致 object 錯誤。

如果給定本地 webserive 端點,相同的 lambda 也可以工作。 我們可以從 ec2 的瀏覽器調用 web 服務,它與 lambda 是同一個 su.net。它是一個 HTTPS 網絡服務端點。 檢查了 LB 中的訪問日志。 目標負載均衡器日志中沒有 lambda su.net/ip 的負載均衡器訪問日志。 但日志可用於 ec2 IP 地址,用於從瀏覽器進行的調用。

我們需要檢查 lambda 的任何設置嗎? lambda 如何處理 HTTPS 的證書? 是否有類似執行命令的 tracert 來檢查調用被阻止的位置?

下面是node.js中的lambda代碼。有錯誤

  use strict;
  
  var soap = require('strong-soap').soap;   
  var aUrl = process.env.a_url;
  var bcUrl = process.env.b_url;

  //aUrl = https://first.second.example.com/test/SoapRecordings/Calculator.asmx?WSDL;
  //bUrl = https://first.second.example.com/Webservice/staging/Service.asmx?WSDL;
  

  var region = process.env.region;
  var secretName = process.env.secretName; 

  var aRequestArgs = {
      UserName: process.env.service_username,
      Password: process.env.service_password
  };
  
  exports.handler = (event, context, callback) => {  

       
  var options = {};
  console.log('Calling Service...\n');
  soap.createClient(aUrl, options, function(err, client) {
  
    var method = client['GetLocationData'];
    console.log('called GetLocationData service method\n');
    method(aRequestArgs, function(err, result, envelope, soapHeader) {
      if(err) {
          console.log('error: ' + err);
          return;
      }
      else 
      {

          console.log('Received response from GetLocationData(): \n');
          
          CallService(JSON.stringify(result));
      }
  });

  function CallService(LocData)
  {
     
    var bRequestArgs = {
        UserID: process.env.service_userid,
        Password: process.env.service_password,
        AuthorizationKey: process.env.service_authorizationkey,
        LocationData: LocData
    }; 
     
    console.log('Calling  Service...\n');
    options = {};
    soap.createClient(bUrl, options, function(err, client) {
    
      var service_method = client['UpdateLocationData'];
      console.log('called UpdateLocationData service method\n');
      
      service_method(bRequestArgs, function(err, result, envelope, soapHeader) {
        if(err) {
            console.log(' error: ' + err);
            return;
        }
        else 
        {
            console.log(' Response: \n' + JSON.stringify(result));
                            
        }
    });  
    });
     
  }
  
  });

 }; //exports.handler
  '''


error exception here :TLSSocket.socketErrorListener


'''
{"errorType":"TypeError","errorMessage":"Cannot read property 'GetRFCLocationData' of undefined","stack":["TypeError: Cannot read property 'GetLocationData' of undefined","    at /var/task/index.js:35:24","    at /var/task/node_modules/strong-soap/src/soap.js:54:5","    at /var/task/node_modules/strong-soap/src/soap.js:36:16","    at /var/task/node_modules/strong-soap/src/parser/wsdl.js:480:13","    at Request._callback (/var/task/node_modules/strong-soap/src/http.js:166:18)","    at self.callback (/var/task/node_modules/request/request.js:185:22)","    at Request.emit (events.js:375:28)","    at Request.onRequestError (/var/task/node_modules/request/request.js:877:8)","    at ClientRequest.emit (events.js:375:28)","    at TLSSocket.socketErrorListener (_http_client.js:475:9)"]}
END RequestId: b315720f-2294-449d-8337-35d9226b6615

問題已解決。 似乎 lambda nodejs 沒有證書來解密 HTTPS 調用。 我們在 nodejs 中添加了 process.env['NODE_TLS_REJECT_UNAUTHORIZED'] = 0。 它開始工作了。

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM