本文為英文版的機器翻譯版本,如內容有任何歧義或不一致之處,概以英文版為準。
使用 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- 相容資料庫
限制
任務必須在 15 分鐘內完成,也就是 Lambda 函數逾時限制。如需其他限制,請參閱AWS Lambda 文件 。
工作代碼必須以 Lambda 支援的語言撰寫。
架構
來源技術堆疊
此堆疊以 Bash、Python 和 Java 等語言撰寫的任務。資料庫憑證會儲存在 屬性檔案中,而任務是使用 Linux cron 排程。
目標技術堆疊
此堆疊具有 Lambda 函數,該函數使用儲存在 Secrets Manager 中的憑證來連線至資料庫並執行活動。Lambda 函數是使用 Amazon CloudWatch Events 在排程間隔啟動。
目標架構
工具
AWS Lambda 是一種運算服務,可讓您執行程式碼,而無需佈建或管理伺服器。AWS Lambda 只會在需要時執行程式碼,並自動擴展,從每天的幾個請求擴展到每秒數千個請求。您只需為使用的運算時間付費;程式碼未執行時無需付費。使用 AWS Lambda,您可以為幾乎任何類型的應用程式或後端服務執行程式碼,無需管理。AWS Lambda 在高可用性運算基礎設施上執行程式碼,並管理所有運算資源,包括伺服器和作業系統維護、容量佈建和自動擴展、程式碼監控和記錄。您只需使用 AWS Lambda 支援的語言之一提供程式碼即可。
Amazon CloudWatch Events 提供近乎即時的系統事件串流,描述AWS資源的變更。使用您可以快速設定的簡單規則,您可以比對事件並將其路由至一或多個目標函數或串流。 CloudWatch 事件會在發生操作變更時知道。它回應這些操作變更,並在必要時採取修正動作,透過傳送訊息來回應環境、啟用函數、進行變更和擷取狀態資訊。您也可以使用 CloudWatch Events 來排程自動化動作,這些動作在特定時間使用 Cron 或 Rate 表達式自行啟動。
AWS Secrets Manager 可協助您保護存取應用程式、服務和 IT 資源的秘密。您可以在資料庫憑證、API金鑰和其他秘密的生命週期中輕鬆輪換、管理和擷取這些密碼。使用者和應用程式透過呼叫 Secrets Manager 來擷取秘密APIs,無需以純文字硬式編碼敏感資訊。Secrets Manager 提供秘密輪換,並內建 Amazon RDS、Amazon Redshift 和 Amazon DocumentDB 的整合。服務可延伸至其他類型的秘密,包括API金鑰和OAuth權杖。Secrets Manager 可讓您使用精細許可控制對秘密的存取,並集中稽核AWS雲端、第三方服務和內部部署中的資源的秘密輪換。
史詩
任務 | 描述 | 所需的技能 |
---|---|---|
為 Lambda 函數建立資料庫使用者。 | 建議您為應用程式的不同部分使用不同的資料庫使用者。如果您的 Cron 任務已存在不同的資料庫使用者,請使用 。否則,請建立新的資料庫使用者。如需詳細資訊,請參閱管理 PostgreSQL 使用者和角色 | DBA |
在 Secrets Manager 中將資料庫憑證儲存為秘密。 | 遵循建立資料庫秘密 (Secrets Manager 文件) 中的指示。 | DBA, DevOps |
任務 | 描述 | 所需的技能 |
---|---|---|
選擇 AWS Lambda 支援的程式設計語言。 | 如需支援的語言清單,請參閱 Lambda 執行時間 (Lambda 文件)。 | 開發人員 |
撰寫邏輯,從 Secrets Manager 擷取資料庫憑證。 | 如需範例程式碼,請參閱如何使用 AWS Secrets Manager 安全地提供資料庫憑證給 Lambda 函數 | 開發人員 |
撰寫邏輯以執行排定的資料庫活動。 | 將您用於內部部署的排程任務的現有程式碼遷移至 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 |