使用 Lambda 和 Secrets Manager 來排程 Amazon RDS for PostgreSQL 和 Aurora PostgreSQL 的任務 - AWS 方案指引

本文為英文版的機器翻譯版本,如內容有任何歧義或不一致之處,概以英文版為準。

使用 Lambda 和 Secrets Manager 來排程 Amazon RDS for PostgreSQL 和 Aurora PostgreSQL 的任務

由 Yaser Raja 建立 (AWS)

環境:PoC 或試行

來源:資料庫:關聯性

目標:PostgreSQL on AWS

R 類型:不適用

工作負載:開放原始碼

技術:資料庫

AWS 服務:AWSLambda;AmazonRDS;AWSSecrets Manager;Amazon Aurora

Summary

對於在 Amazon Elastic Compute Cloud (Amazon EC2) 執行個體上託管的內部部署資料庫和資料庫,資料庫管理員通常會使用 cron 公用程式來排程任務。

例如,可以使用 cron 輕鬆排程資料擷取任務或資料清除任務。對於這些任務,資料庫憑證通常是硬式編碼或儲存在屬性檔案中。不過,當您遷移至 Amazon Relational Database Service (Amazon RDS) 或 Amazon Aurora Postgre SQL-Compatible Edition 時,您會失去登入主機執行個體以排程 Cron 任務的能力。 

此模式說明如何使用 AWS Lambda 和 AWS Secrets Manager 來排程遷移後 Amazon RDS for PostgreSQL 和 Aurora Postgre SQL相容資料庫的任務。 

先決條件和限制

先決條件

  • 作用中AWS帳戶 

  • Amazon RDS for PostgreSQL 或 Aurora Postgre SQL- 相容資料庫

限制

架構

來源技術堆疊

此堆疊以 Bash、Python 和 Java 等語言撰寫的任務。資料庫憑證會儲存在 屬性檔案中,而任務是使用 Linux cron 排程。

目標技術堆疊

此堆疊具有 Lambda 函數,該函數使用儲存在 Secrets Manager 中的憑證來連線至資料庫並執行活動。Lambda 函數是使用 Amazon CloudWatch Events 在排程間隔啟動。

目標架構

CloudWatch 事件啟動 Lambda RDS 函數,以排程資料庫執行個體的任務。

工具

  • AWS Lambda 是一種運算服務,可讓您執行程式碼,而無需佈建或管理伺服器。AWS Lambda 只會在需要時執行程式碼,並自動擴展,從每天的幾個請求擴展到每秒數千個請求。您只需為使用的運算時間付費;程式碼未執行時無需付費。使用 AWS Lambda,您可以為幾乎任何類型的應用程式或後端服務執行程式碼,無需管理。AWS Lambda 在高可用性運算基礎設施上執行程式碼,並管理所有運算資源,包括伺服器和作業系統維護、容量佈建和自動擴展、程式碼監控和記錄。您只需使用 AWS Lambda 支援的語言之一提供程式碼即可

  • Amazon CloudWatch Events 提供近乎即時的系統事件串流,描述AWS資源的變更。使用您可以快速設定的簡單規則,您可以比對事件並將其路由至一或多個目標函數或串流。 CloudWatch 事件會在發生操作變更時知道。它回應這些操作變更,並在必要時採取修正動作,透過傳送訊息來回應環境、啟用函數、進行變更和擷取狀態資訊。您也可以使用 CloudWatch Events 來排程自動化動作,這些動作在特定時間使用 CronRate 表達式自行啟動。

  • AWS Secrets Manager 可協助您保護存取應用程式、服務和 IT 資源的秘密。您可以在資料庫憑證、API金鑰和其他秘密的生命週期中輕鬆輪換、管理和擷取這些密碼。使用者和應用程式透過呼叫 Secrets Manager 來擷取秘密APIs,無需以純文字硬式編碼敏感資訊。Secrets Manager 提供秘密輪換,並內建 Amazon RDS、Amazon Redshift 和 Amazon DocumentDB 的整合。服務可延伸至其他類型的秘密,包括API金鑰和OAuth權杖。Secrets Manager 可讓您使用精細許可控制對秘密的存取,並集中稽核AWS雲端、第三方服務和內部部署中的資源的秘密輪換。

史詩

任務描述所需的技能

為 Lambda 函數建立資料庫使用者。

建議您為應用程式的不同部分使用不同的資料庫使用者。如果您的 Cron 任務已存在不同的資料庫使用者,請使用 。否則,請建立新的資料庫使用者。如需詳細資訊,請參閱管理 PostgreSQL 使用者和角色 (AWS 部落格文章)。

DBA

在 Secrets Manager 中將資料庫憑證儲存為秘密。

遵循建立資料庫秘密 (Secrets Manager 文件) 中的指示。

DBA, DevOps
任務描述所需的技能

選擇 AWS Lambda 支援的程式設計語言。

如需支援的語言清單,請參閱 Lambda 執行時間 (Lambda 文件)。

開發人員

撰寫邏輯,從 Secrets Manager 擷取資料庫憑證。

如需範例程式碼,請參閱如何使用 AWS Secrets Manager 安全地提供資料庫憑證給 Lambda 函數 (AWS 部落格文章)。

開發人員

撰寫邏輯以執行排定的資料庫活動。

將您用於內部部署的排程任務的現有程式碼遷移至 AWS Lambda 函數。如需詳細資訊,請參閱部署 Lambda 函數 (Lambda 文件)。

開發人員
任務描述所需的技能

建立 Lambda 函數部署套件。

此套件包含程式碼及其相依性。如需詳細資訊,請參閱 部署套件 (Lambda 文件)。

開發人員

建立 Lambda 函數。

在 AWS Lambda 主控台中,選擇建立函數 ,輸入函數名稱,選擇執行期環境,然後選擇建立函數

DevOps

上傳部署套件。

選擇您建立的 Lambda 函數以開啟其組態。您可以直接在程式碼區段中撰寫程式碼,或上傳部署套件。若要上傳套件,請前往函數程式碼區段,選擇要上傳 .zip 檔案的程式碼項目類型,然後選擇套件。

DevOps

根據您的需求設定 Lambda 函數。

例如,您可以將逾時參數設定為您預期 Lambda 函數需要的持續時間。如需詳細資訊,請參閱設定函數選項 (Lambda 文件)。

DevOps

設定 Lambda 函數角色的許可,以存取 Secrets Manager。

如需指示,請參閱在 AWS Lambda 函數中使用秘密 (Secrets Manager 文件)。

DevOps

測試 Lambda 函數。

手動啟動函數,以確保其如預期般運作。

DevOps
任務描述所需的技能

建立規則以依排程執行 Lambda 函數。

使用 CloudWatch Events 來排程 Lambda 函數。如需指示,請參閱使用 CloudWatch 事件排程 Lambda 函數 (CloudWatch 事件教學課程)。

DevOps

相關資源