AWS Builder Center: Learn, Build and Connect with builders in the AWS community
AWS Builder Center is the official home for builders on AWS. Share and read what others are working on, follow people who inspire you, explore training and workshops, and find tools to support what you're building.
如何使用 Lambda 函式,將 Amazon RDS 執行個體停止超過七天?
我想使用 AWS Lambda,將 Amazon Relational Database Service (Amazon RDS) 停止超過七天。
簡短說明
根據預設,您一次最多可以停止 Amazon RDS 資料庫執行個體七天。七天後,執行個體會重新啟動,以免錯過任何維護更新。
若要將執行個體停止超過七天,您可以使用 Step Functions 自動執行工作流程,同時避免錯過維護時段。
**注意:**如需其他解決方法,請參閱如何使用 Step Functions 將 Amazon RDS 執行個體停止超過七天?
解決方法
設定 IAM 權限
建立 AWS Identity and Access Management (IAM) 政策,允許 Lambda 啟動和停止執行個體,以及擷取執行個體的相關資訊。
1. 開啟 IAM console (IAM 主控台)。
2. 在導覽窗格中,選擇 Policies (政策)。
3. 選擇 Create Policy (建立政策)。
4. 選擇 JSON 索引標籤。
5. 若要授予所需的 IAM 權限,請在 JSON 索引標籤下輸入以下政策:
{ "Version": "2012-10-17", "Statement": [ { "Sid": "VisualEditor0", "Effect": "Allow", "Action": [ "rds:StartDBCluster", "rds:StopDBCluster", "rds:ListTagsForResource", "rds:DescribeDBInstances", "rds:StopDBInstance", "rds:DescribeDBClusters", "rds:StartDBInstance" ], "Resource": "*" } ] }
6. 選擇 Next: Tags (下一步:標籤)。
7. (選用) 若要新增標籤,請選擇 Add tag (新增標籤),然後在 Key (索引鍵) 和 Value - optional (值 - 選用) 欄位中輸入適當的值。
8. 選擇 Next: Review (下一步:檢閱)。
9. 在 Review policy (檢閱政策) 頁面上,於 Name (名稱),輸入政策名稱。檢閱 Summary (摘要) 區段,查看政策授予的權限。
10. 選擇 Create policy (建立政策)。
如需更多資訊,請參閱使用 JSON 編輯器建立政策。
建立 IAM 角色,然後連接所需政策
1. 開啟 IAM console (IAM 主控台)。
2. 在導覽窗格中,選擇 Roles (角色)。
3. 選擇 Create role (建立角色)。
4. 在 Select type of trusted entity (選取信任實體類型),選取 AWS service (AWS 服務)。
5. 在 Or select a service to view its use cases (或選取服務以檢視其使用案例) 下,選取 Lambda。
6. 選擇 Next: Permissions (下一步:權限)。
7. 在 Filter-policies (篩選政策),輸入您在上一節中建立的政策名稱。政策出現後,選取該政策。在 Filter-policies (篩選政策),輸入 AWSLambdaBasicExecutionRole。政策出現後,選取 AWSLambdaBasicExecutionRole 受管政策。
8. 選擇 Next: Tags (下一步:標籤)。
9. (選用) 若要新增標籤,請在 Key (索引鍵) 和 Value (optional) (值 (選用)) 欄位中輸入適當的值。
10. 選擇 Next: Review (下一步:檢閱)。
11. 在 Create role (建立角色) 頁面上,在 Role name (角色名稱),輸入您要建立的角色名稱。
12. 選擇 Create role (建立角色)。
如需更多資訊,請參閱為 AWS 服務建立角色 (主控台)。
為資料庫執行個體新增標籤
1. 開啟 Amazon Aurora and RDS console (Amazon Aurora 和 RDS 主控台)。
2. 在導覽窗格中,選擇 Databases (資料庫)。
3. 選擇您要自動啟動和停止的資料庫執行個體。
4. 在詳細資訊區段中,向下捲動至 Tags (標籤) 區段。
5. 在 Tags (標籤) 索引標籤下,選擇 Add (新增)。在 Tag key (標籤索引鍵),輸入 autostart。在 Value (值),輸入 yes。選擇 Add (新增) 以儲存變更。
6. 再次選擇 Add (新增)。在 Tag key (標籤索引鍵),輸入 autostop。在 Value (值),輸入 yes。選擇 Add (新增) 以儲存變更。
如需更多資訊,請參閱新增、列出和移除標籤。
建立 Lambda 函式,以啟動已加上標籤的資料庫執行個體
1. 開啟 Lambda console (Lambda 主控台)。
2. 在導覽窗格中,選擇 Functions (函式)。
3. 選擇 Create function (建立函式)。
4. 選擇 Author from scratch (從頭開始撰寫)。
5. 在 Function name (函式名稱),輸入函式名稱。
6. 在 Runtime (執行時期),選取 Python 3.7。
7. 在 Architecture (架構),保留預設選取的 x86_64。
8. 展開 Change default execution role (變更預設執行角色)。
9. 在 Execution role (執行角色),選取 Use an existing role (使用現有角色)。
10. 在 Existing role (現有角色),選取您建立的 IAM 角色。
11. 選擇 Create function (建立函式)。
12. 選擇 Code (程式碼) 索引標籤。
13. 在 Code source (程式碼來源) 編輯器中,刪除範例程式碼並輸入以下程式碼:
import boto3 rds = boto3.client('rds') def lambda_handler(event, context): #Start DB Instances dbs = rds.describe_db_instances() for db in dbs['DBInstances']: #Check if DB instance stopped. Start it if eligible. if (db['DBInstanceStatus'] == 'stopped'): try: GetTags=rds.list_tags_for_resource(ResourceName=db['DBInstanceArn'])['TagList'] for tags in GetTags: #if tag "autostart=yes" is set for instance, start it if(tags['Key'] == 'autostart' and tags['Value'] == 'yes'): result = rds.start_db_instance(DBInstanceIdentifier=db['DBInstanceIdentifier']) print ("Starting instance: {0}.".format(db['DBInstanceIdentifier'])) except Exception as e: print ("Cannot start instance {0}.".format(db['DBInstanceIdentifier'])) print(e) if __name__ == "__main__": lambda_handler(None, None)
14. 選擇 File (檔案)、選擇 Save (儲存),然後選擇 Deploy (部署)。
15. 選擇 Configuration (組態) 索引標籤、選擇 General configuration (一般組態),然後選擇 Edit (編輯)。
16. 在 Timeout (逾時) 下,完成以下欄位:
在 min (分鐘),選取 0。
在 sec (秒),選取 10。
17. 選擇 Save (儲存)。
建立 Lambda 函式,以停止已加上標籤的資料庫執行個體
若要建立 Lambda 函式,以停止已加上標籤的資料庫執行個體,請參閱上一節建立 Lambda 函式,以啟動已加上標籤的資料庫執行個體。依照相同步驟操作,但在步驟 12 中使用不同的程式碼。
在 Code source (程式碼來源) 編輯器中,刪除範例程式碼並輸入以下程式碼:
import boto3 rds = boto3.client('rds') def lambda_handler(event, context): #Stop DB instances dbs = rds.describe_db_instances() for db in dbs['DBInstances']: #Check if DB instance is not already stopped if (db['DBInstanceStatus'] == 'available'): try: GetTags=rds.list_tags_for_resource(ResourceName=db['DBInstanceArn'])['TagList'] for tags in GetTags: #if tag "autostop=yes" is set for instance, stop it if(tags['Key'] == 'autostop' and tags['Value'] == 'yes'): result = rds.stop_db_instance(DBInstanceIdentifier=db['DBInstanceIdentifier']) print ("Stopping instance: {0}.".format(db['DBInstanceIdentifier'])) except Exception as e: print ("Cannot stop instance {0}.".format(db['DBInstanceIdentifier'])) print(e) if __name__ == "__main__": lambda_handler(None, None)
執行函式測試
對於處於 Stopped (已停止) 狀態且已加上標籤的資料庫執行個體,請完成以下步驟以執行函式測試:
1. 開啟 Lambda Functions (Lambda 函式) 清單。
2. 選擇您建立用來啟動資料庫執行個體的函式。
3. 選擇 Actions (動作),然後選擇 Test (測試)。
4. 在 Test (測試) 索引標籤下,在 Name (名稱),輸入事件名稱。
5. 選擇 Save changes (儲存變更),然後選擇 Test (測試)。
建立排程
您可以建立規則來設定排程。例如,如果已加上標籤之資料庫執行個體的每週維護時段為星期日 22:00 - 22:30,則可以建立以下規則:
- 在維護時段開始前 30 分鐘自動啟動資料庫執行個體。
- 在維護時段結束後 30 分鐘自動停止資料庫執行個體。
若要建立規則,在維護時段開始前 30 分鐘自動啟動資料庫執行個體,請完成以下步驟:
1. 開啟 Lambda Functions (Lambda 函式) 清單。
2. 選擇您建立用來啟動資料庫執行個體的函式。
3. 在 Function overview (函式概觀) 下,選擇 Add trigger (新增觸發程序)。
4. 選取 EventBridge (CloudWatch Events),然後選取 Create a new rule (建立新規則)。
5. 在 Rule name (規則名稱),輸入您要建立的規則名稱。
6. 在 Schedule Expression (排程表達式),新增自動排程的 cron 表達式 (範例:cron(30 21 ? * SUN *))。
7. 選擇 Add (新增)。
依照相同指示建立另一個規則,在維護時段結束後 30 分鐘自動停止資料庫執行個體。請務必據此變更規則名稱和自動排程的 cron 表達式 (範例:cron(00 23 ? * SUN *))。
相關資訊
相關內容
已提問 3 年前
AWS 官方已更新 1 年前