簡體   English   中英

由於 DB 狀態,Python 腳本不會關閉或打開電源

[英]Python script wont power off or on due to DB status

我在使用 AWS Lambda 的 AWS Gateway 中創建了一個 API。 Lambda 使用 python 腳本。 我可以使用 API 網關來調用 Lambda 可以打開或關閉 RDS 集群。 在我的 AWS 賬戶中,我有 4 個 RDS 集群。 如果所有 4 個都關閉,我可以使用 API 一次將它們全部打開如果所有 4 個都打開,我可以使用 API 一次將它們全部關閉

但是我遇到的問題是,如果其中一個集群已打開電源但其他 3 個未啟動,我的腳本將不會啟動其他 3 個,因為它告訴我一個集群不在正確的 state 中(它已經打開)

如果一個集群已經關閉並且我想關閉其他所有東西,我的腳本再次失敗,因為其中一個集群已經關閉

我收到這個錯誤
[錯誤] InvalidDBClusterStateFault:調用 StartDBCluster 操作時發生錯誤(InvalidDBClusterStateFault):DbCluster集群名稱未停止

這是我的腳本,如果一切都關閉或打開,它可以關閉或打開。 誰能告訴我應該添加什么可以解決我的問題? 基本上我試圖添加到我的腳本中,如果狀態可用,腳本將關閉集群,如果停止,它將啟動它。 “方法”是我用於 api 的參數。 基本上 api 有一個調用 URL 我可以編輯它有 Method=StopAll 或 Method=StartAll


           def handler(event, context):
              response = rds_client.describe_db_clusters(
                  MaxRecords=100
              )
              allClusters = [] 
              allClusters.append(response['DBClusters'])
              
              while 'Marker' in response:
                  old_marker = response['Marker']
                  response = rds_client.describe_db_clusters(
                      MaxRecords=100,
                      Marker = old_marker
                  )
                  allClusters.append(response['DBClusters'])
    if event['Method'] == "StopAll":
                  for cluster in allClusters:
                      for key in cluster:
                          rds_client.stop_db_cluster(
                                      DBClusterIdentifier=key['DBClusterIdentifier']
                                  )
                                  
              if event['Method'] == "StartAll":
                  for cluster in allClusters:
                      for key in cluster:
                          rds_client.start_db_cluster(
                                      DBClusterIdentifier=key['DBClusterIdentifier']
                                  )```

每當您調用start_db_clusterstop_db_cluster時,您都可以包裝在 try/except 中,這樣即使一個調用失敗,它仍會嘗試創建 rest:

try:
    rds_client.start_db_cluster(DBClusterIdentifier=cluster_id)
except rds_client.exceptions.InvalidDBClusterStateFault:
    print(f"Cluster {cluster_id} in invalid state")
except Exception as e:
    print(f"Error updating cluster {cluster_id}: {repr(e)}")

暫無
暫無

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

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