本文為英文版的機器翻譯版本,如內容有任何歧義或不一致之處,概以英文版為準。
使用 Lambda 和 Secrets Manager 排程亞馬遜 RDS 和 Aurora PostgreSQL 的工作
由亞澤拉賈(AWS)創建
R 類型:N/A | 來源:資料庫:關聯 | 目標:AWS 上的 PostgreSQL |
建立者:AWS | 環境:PoC 或試驗 | 技術:資料庫 |
工作負載:開放原始碼 | AWS 服務:亞馬遜 RDS; 亞馬遜 AWS Lambda; AWS Secrets Manager 器 |
Summary
對於託管在 Amazon Elastic Compute Cloud (Amazon EC2) 執行個體上託管的內部部署資料庫和資料庫,資料庫管理員通常會使用Cron公用程式來排程工作。
例如,數據提取工作或數據清除工作可以很容易地使用Cron。對於這些工作,資料庫認證通常是硬式編碼或儲存在內容檔中。但是,當您遷移到 Amazon Relational Database Service (Amazon RDS) 或與 Amazon Aurora PostgreQ 相容的版本時,您將失去登入主機執行個體以排程Cron任務。
此模式說明如何在遷移後使用 AWS Lambda 和 AWS Secrets Manager 排程 Amazon RDS for PostgreSQL 和 Aurora PostgreSQL 相容資料庫的工作。
先決條件和限制
先決條件
作用中的 AWS 帳戶
Amazon RDS for PostgreSQL 或 Aurora 相容資料庫
限制
工作必須在 15 分鐘內完成,也就是 Lambda 函數逾時限制。如需其他限制,請參閱AWS Lambda 文件。
Job 代碼必須寫入由 Lambda 支持的語言。
Architecture
原始碼技術堆疊
此堆疊的特點是以 Bash、Python 和 Java 等語言編寫的任務。資料庫憑證儲存在屬性檔案中,並使用 Linux 排程工作Cron。
目標技術堆疊
這個堆疊具有 Lambda 函式,會使用儲存在 Secrets Manager 中的認證來連線到資料庫,並執行活動。使用亞馬遜 CloudWatch 事件在排定的間隔啟動 Lambda 函數。
目標架構

Tools
AWS Lambda–AWS Lambda是一項運算服務,可讓您執行程式碼,無需佈建或管理伺服器。AWS Lambda 只有在需要時才會執行程式碼,可自動從每天數項請求擴展成每秒數千項請求。只需為使用的運算時間支付費用,一旦未執行程式碼,就會停止計費。有了 AWS Lambda,您幾乎可以為任何類型的應用程式或後端服務執行程式碼,而且無須管理。AWS Lambda 在高可用性的運算基礎設施上執行您的程式碼,並管理所有運算資源,包括伺服器和作業系統維護,容量佈建與自動擴展、程式碼監控和記錄。您唯一需要做的就是在其中一個語言。
CloudWatch 活動–Amazon CloudWatch Events會交付近乎即時的系統事件串流,描述 AWS 資源中的變更。使用您可以快速設定的簡單規則,您可以比對事件並將它們路由到一或多個目標函數或串流。CloudWatch Events 在操作變更時會查覺到。它會回應這些操作變更並視需要進行修正動作,透過傳送訊息來回應環境、啟用功能、執行變更和擷取狀態資訊。您也可使用 CloudWatch Events 排定自動化動作,讓動作使用Cron或RATE表達式。
Secrets Manager–AWS Secrets Manager可協助您保護存取您的應用程式、服務和 IT 資源的秘密。您能夠在資料庫登入資料、API 金鑰和其他機密的整個生命週期輕鬆進行輪換、管理和擷取。使用者和應用程式藉由呼叫機 Secrets Manager API 擷取機密,這樣就不需要以純文字硬式編碼敏感資訊。Secrets Manager 器為亞馬遜 RDS,Amazon Redshift 和亞馬 Amazon DocumentDB 的內置集成提供了秘密輪替。該服務可擴展到其他類型的秘密,包括 API 密鑰和 OAuth 令牌。Secrets Manager 可讓您使用細微的權限來控制機密的存取,並針對 AWS 雲端、第三方服務和內部部署集中稽核機密輪換。
Epics
任務 | 描述 | 所需技能 |
---|---|---|
建立 Lambda 函數的資料庫使用者。 | 這是使用單獨的資料庫使用者為您的應用程式的不同部分的最佳實務。如果您的 cron 作業已經存在一個單獨的數據庫用戶,請使用它; 否則,請創建一個新的數據庫用戶。如需有關使用者和權限的詳細資訊,請參閱 < 參考及說明 > 一節中的連結。 | DBA |
在 Secrets Manager 秘密存放資料庫登入資料 | 遵循 Secrets Manager 教學課程中的步驟。如需連結,請參閱 < 相關資源 > 一節。 | DBA, DevOps |
任務 | 描述 | 所需技能 |
---|---|---|
選擇 AWS Lambda 支援的程式設計語言。 | 如需支援語言清單的連結,請參閱 < 相關資源 > 一節。 | 開發人員 |
編寫邏輯從 Secrets Manager 獲取數據庫憑據。 | 如需範例程式碼,請參閱 < 相關資源 > 一節中的連結。 | 開發人員 |
撰寫邏輯以執行排定的資料庫活動。 | 將您在內部部署使用的排程工作的現有程式碼移轉至 AWS Lambda 函數。 | 開發人員 |
任務 | 描述 | 所需技能 |
---|---|---|
建立 Lambda 函數部署套件。 | 此套件包含程式碼和相依項目。如需詳細資訊,請參閱 < 相關資源 > 一節中的連結。 | 開發人員 |
建立 Lambda 函數。 | 在 AWS Lambda 主控台中,選擇「建立函數」,輸入函數名稱,選擇執行階段環境,然後選擇「建立函數」。 | DevOps |
上傳部署套件。 | 選擇您建立的 Lambda 函數以開啟其組態。您可以直接在程式碼區段中撰寫程式碼,或上傳您的部署套件。若要上傳套件,請移至「函數碼」區段,選擇「程式碼輸入類型」以上傳 .zip 檔案,然後選取套件。 | DevOps |
根據您的需求配置 Lambda 函數。 | 例如,您可以將「Timeout」參數設定為您期望 Lambda 函數採用的持續時間。如需有關 Lambda 組態的詳細資訊,請參閱 < 相關資源 > 一節中的連結。 | DevOps |
設定 Lambda 函數角色存取 Secrets Manager 的權限。 | 如需指示,請參閱 < 相關資源 > 一節中的連結。 | DevOps |
測試 Lambda 函數。 | 手動起始函數,以確定函數如預期般運作。 | DevOps |
任務 | 描述 | 所需技能 |
---|---|---|
建立規則以依排程執行 Lambda 函數。 | 使用 CloudWatch 事件排程 Lambda 函數。如需指示,請參閱 < 相關資源 > 一節中的連結。 | DevOps |
相關資源
史詩和任務的說明
建立使用者並設定權限:管理 PostgreSQL 使用者和角色
(部落格文章) 儲存資料庫登入資料:在 AWS Secrets Manager 建立並存放您的秘密
支援 Lambda 的程式設計語言:AWS Lambda 執行時間
從 Secrets Manager 獲取數據庫憑據:如何使用 AWS Secrets Manager 安全地將資料庫登入資料提供給 Lambda 函數
(部落格文章) 建立 Lambda 部署套件:部署套件
設定 Lambda 函數:設定 AWS Lambda 函數
存取 Secrets Manager:設定 Lambda 函數角色存取 Secrets Manager 的權限
排定 Lambda 函數:教學課程:使用 CloudWatch Events 排定 AWS Lambda 函數
其他資源