7 日間を超える期間にわたって Amazon Aurora クラスターを停止するにはどうすればよいですか?
7 日間を超える期間にわたって Amazon Relational Database Service (Amazon Aurora クラスター) を停止したいと考えています。
簡単な説明
Amazon Aurora クラスターは、数分以内に簡単に開始および停止できます。この機能は、常時実行している必要がないデータベースのコスト削減をサポートします。データベース (DB) クラスターは最大 7 日間まで停止できます。7 日間が経過した後に DB クラスターを手動で起動しない場合、DB クラスターは自動的に起動されます。これは、クラスターの必要なメンテナンス更新が遅れないようにするためです。
必要なメンテナンス更新を逃すことなく、Aurora クラスターを 7 日間を超える期間にわたって停止するには、次を実行します。
1. AWS Identity Access Management (IAM) の許可を設定して、AWS Lambda が次のことを実行できるようにします。インスタンスを起動します。インスタンスを停止します。インスタンスに関する情報を取得します。
2. 自動的に開始および停止する Aurora クラスターのタグを追加します。
3. Lambda 関数を作成してクラスターを起動します。
4. Lambda 関数を作成してクラスターを停止します。
5. 次のことを実行するスケジュールを作成します。毎週のメンテナンスウィンドウの始めに Aurora クラスターを開始します。メンテナンスウィンドウの最後に Aurora クラスターを停止します。
解決方法
IAM 許可の設定
IAM ポリシーを作成して、Lambda がクラスターを開始および停止し、クラスターに関する情報を取得することを許可します。
1. IAM コンソールを開きます。
2. ナビゲーションペインで、[Policies] を選択します。
3. [Create policy] (ポリシーを作成) を選択します。
4. [JSON] タブを選択します。
5. 次のポリシーをコピーし、[JSON] タブの下にポリシーを貼り付けて、必要な IAM アクセス許可を付与します。
{ "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. [次へ: レビュー] を選択します。
9. [ポリシーの確認] ページで、[名前] に ポリシーの名前を入力します。[Summary] セクションで、ポリシーによって付与されているアクセス許可を確認します。
10. [Create policy] (ポリシーを作成) を選択します。
詳細については、「JSON タブでのポリシーの作成」を参照してください。
IAM ロールを作成し、必要なポリシーをアタッチする
1. IAM コンソールを開きます。
2. ナビゲーションペインで [Roles] を選択します。
3. [ロールの作成] を選択します。
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 のサービス用ロールの作成 (コンソール)」を参照してください。
DB クラスターのタグを追加する
1. Amazon RDS コンソールを開きます。
2. ナビゲーションペインで、[Databases] (データベース) を選択します。
3. 自動的に開始および停止する DB クラスターを選択します。
4. 詳細セクションで、[Tags] (タグ) セクションまでスクロールします。
5. [Tags] (タグ) タブで、[Add] (追加) を選択します。[Tag key] に「autostart」と入力します。[Value] に「yes」と入力します。[Add] (追加) を選択して変更を保存します。
6. 再度 [Add] (追加) を選択します。[Tag key] に「autostop」と入力します。[Value] に「yes」と入力します。[Add] を選択して変更を保存します。
詳細については、「タグの追加、一覧表示、および削除」をご参照ください。
Lambda 関数を作成してタグ付けされた DB インスタンスを起動する
1. Lambda コンソールを開きます。
2. ナビゲーションペインで [Functions] を選択します。
3. [Create function] を選択します。
4. [Author from scratch] を選択します。
5. [Function-name] に関数の名前を入力します。
6. [Runtime] で Python 3.7 を選択します。
7. [アーキテクチャ] は、デフォルトの選択である「x86_64」のままにします。
7. [Change default execution role] を展開します。
8. [実行ロール] で [既存のロールを使用する] を選択します。
9. [Existing role] で、前に作成した IAM ロールを選択します。
10. [Create function] を選択します。
11. [Code] タブを選択します。
12. [Code source] エディタで、サンプルコードを削除し、次のコードを貼り付けます。
import boto3 rds = boto3.client('rds') def lambda_handler(event, context): #Start DB clusters dbs = rds.describe_db_clusters() for db in dbs['DBClusters']: #Check if DB cluster stopped. Start it if eligible. if (db['Status'] == 'stopped'): doNotStart=1 try: GetTags=rds.list_tags_for_resource(ResourceName=db['DBClusterArn'])['TagList'] for tags in GetTags: #if tag "autostart=yes" is set for cluster, start it if(tags['Key'] == 'autostart' and tags['Value'] == 'yes'): result = rds.start_db_cluster(DBClusterIdentifier=db['DBClusterIdentifier']) print ("Starting cluster: {0}.".format(db['DBClusterIdentifier'])) if(doNotStart == 1): doNotStart=1 except Exception as e: print ("Cannot start cluster {0}.".format(db['DBClusterIdentifier'])) print(e) if __name__ == "__main__": lambda_handler(None, None)
13. [File]、[Save] を選択した後、[Deploy] を選択します。
15. [Configuration] タブ、[General configuration] を選択し、その後 [Edit] を選択します。
16. [タイムアウト] で、次の操作を行います。[分] に [0] を選択します。[秒] は [10] を選択します。17. [保存] を選択します。
Lambda 関数を作成してタグ付けされた DB インスタンスを停止する
前のセクション「タグ付けされた DB クラスターを開始する Lambda 関数を作成する」で説明した手順に従って、タグ付き DB クラスターを停止します。次の変更を行う必要があります。
[Code source] (コードソース) エディタで、サンプルコードを削除し、次のコードを貼り付けます。
import boto3 rds = boto3.client('rds') def lambda_handler(event, context): #Stop DB clusters dbs = rds.describe_db_clusters() for db in dbs['DBClusters']: #Check if DB cluster started. Stop it if eligible. if (db['Status'] == 'available'): doNotStop=1 try: GetTags=rds.list_tags_for_resource(ResourceName=db['DBClusterArn'])['TagList'] for tags in GetTags: #if tag "autostop=yes" is set for cluster, stop it if(tags['Key'] == 'autostop' and tags['Value'] == 'yes'): result = rds.stop_db_cluster(DBClusterIdentifier=db['DBClusterIdentifier']) print ("Stopping cluster: {0}.".format(db['DBClusterIdentifier'])) if(doNotStop == 1): doNotStop=1 except Exception as e: print ("Cannot stop cluster {0}.".format(db['DBClusterIdentifier'])) print(e) if __name__ == "__main__": lambda_handler(None, None)
関数テストを実行する
タグ付けされた DB クラスターが [Stopped] (停止) 状態であるとします。関数テストを実行するには、次を実行します。
1. [Lambda functions] (Lambda 関数) リストを開きます。
2. DB クラスターを起動するために作成した関数を選択します。
3. [Actions]、[Test] の順にクリックします。
4. [Test] (テスト) タブの [Name] (名前) で、イベントの名前を入力します。
5. [Save changes] (変更を保存) を選択し、その後 [Test] (テスト) を選択します。
スケジュールを作成する
タグ付けされた DB クラスターの毎週のメンテナンスウィンドウが日曜日の午後 10 時~午後 10 時 30 分であるとします。スケジュールを設定するには、次についての 2 つのルールを作成します。
- メンテナンスウィンドウが開始する 30 分前に DB クラスターを自動的に起動する
- メンテナンスウィンドウが終了してから 30 分後に DB クラスターを自動的に停止する
メンテナンスウィンドウの 30 分前に DB インスタンスを自動的に起動するルールを作成するには、次を実行します。
1. [Lambda functions] (Lambda 関数) リストを開きます。
2. DB インスタンスを起動するために作成した関数を選択します。
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 分後に DB クラスターを自動的に停止する別のルールを作成します。必ず自動スケジュールのルール名と cron 式を適宜変更してください (例: cron(00 23 ? * SUN *))。
関連情報
How can I stop an Amazon RDS instance for longer than seven days? (7 日間を超える期間にわたって Amazon RDS インスタンスを停止する方法を教えてください)
関連するコンテンツ
- 質問済み 10ヶ月前lg...
- AWS公式更新しました 2年前
- AWS公式更新しました 2年前
- AWS公式更新しました 3年前
- AWS公式更新しました 2年前