簡體   English   中英

AWS Lambda 與 RDS Postgresql - 未知問題

[英]AWS Lambda with RDS Postgresql - Unknown Issue

我已經為這個問題苦苦掙扎了 3 天,無法弄清楚出了什么問題。 我在我的 Lambda function 中將我所有的登錄憑據設置為環境變量。我的 RDS 實例對公眾開放,安全組也打開傳入和傳出端口。

我的 PostgresQL 代碼有很多變體,最新的一個來自這個AWS Lambda NodeJS 連接到 RDS Postgres 數據庫

我當前的 lambda 代碼

const pg = require('pg')
const pool = new pg.Pool()

async function query (q) {
  const client = await pool.connect()
  let res
  try {
    await client.query('BEGIN')
    try {
      res = await client.query(q)
      await client.query('COMMIT')
    } catch (err) {
      await client.query('ROLLBACK')
      throw err
    }
  } finally {
    client.release()
  }
  return res
}

exports.handler = async (event, context, callback) => {
    try {
      const { rows } = await query("select 'thaison' as ")
      console.log(JSON.stringify(rows[0]))
      var response = {
          "statusCode": 200,
          "headers": {
              "Content-Type" : "application/json"
          },
          "body": JSON.stringify(rows),
          "isBase64Encoded": false
      };
      callback(null, response);
    } catch (err) {
      console.log('Database ' + err)
      callback(null, 'Database ' + err);
    }
};

我可以在pool.connect()之前和之后成功執行console.log 我也可以在client.query()之前但不能在之后使用console.log 問題出在client.query()之后,什么也沒有發生。 我檢查了 Cloudwatch 日志和指標,日志上沒有任何內容,也沒有任何錯誤報告。 代碼必須在某處失敗,但我無法弄清楚在哪里。 響應是 null,查詢后我無法記錄任何內容,甚至在catch(err)塊中也沒有。 我做的最后一件事是將 PG 端點更改為甚至不存在的東西,但我仍然沒有收到任何錯誤。 這東西就這么默默的失敗了。

我究竟做錯了什么?

由於您使用的是Publicly Available = Yes ,數據庫的 DNS 名稱將解析為公共地址 IP 這意味着 Lambda function需要 Inte.net 訪問

這可以通過將 Lambda function 附加到 VPC 或通過將 Lambda function 附加到私有 su.net然后使用公共 su.net 中的NAT 網關提供對 Inte.net 的訪問來完成。 安全組應允許從0.0.0.0/0進行訪問(這對安全性非常不利)。

配置此類系統的更“安全”的方法是:

  • 使用Publicly Available = No ,這只會將 RDS 數據庫的 DNS Name 解析為私有地址 IP
  • 將 Lambda function 附加到與 RDS 數據庫相同的 VPC 中的 su.net
  • 將安全組附加到 Lambda function ( Lambda-SG ),允許默認“允許所有”出站訪問
  • 將安全組附加到 RDS 數據庫 ( RDS-SG ),允許在端口 5432 (PostgreSQL) 上進行入站訪問, Source = Lambda-SG

也就是說, RDS-SG Lambda-SG 這將允許 Lambda function 訪問 RDS 數據庫。

但是,請注意,RDS 數據庫只能從 VPC 內部訪問。 您將無法從您自己的計算機在 Inte.net 上連接到它(因為它現在更安全)。 如果需要,您可以使用帶有端口轉發的跳轉盒進行連接。

暫無
暫無

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

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