2017-12-04 24 views
0

EC2またはRDSインスタンスをバッチまたはPowerShellで作成する場合は、組み込みのaws rds wait db-instance-available --db-instance-identifier 'myDbInstance'を実行して、それに対してさらなるコマンドを実行する前に利用可能になるまで待つことができます。AWS RDSネイティブSQLバックアップの完了を待ちます

RDSスナップショットを新しいインスタンス($ devInstanceDnsName)に復元し、そのインスタンス(MS SQLのインスタンス)からS3に単一のデータベースをバックアップするスクリプトがあります。 powershellでは、ネイティブバックアップを実行するために、sqlcmd -X -b -S "tcp:$devInstanceDnsName,1433" -d dbName -U dbUser -P dbPwd -Q "exec msdb.dbo.rds_backup_database @source_db_name='dbName', @s3_arn_to_backup_to='arn:aws:s3:::backupsbucket/$backupFileName', @overwrite_S3_backup_file=1"を実行します。

これは非同期タスクで、バックアップをスケジュールしてすぐに戻ります。しかし、ネイティブバックアップが完了したときにスクリプトはどのようにして、実行を同期して続けることができますか?このよう

Wait-RdsNativeBackupSuccess -server "$devInstanceDnsName,1433" -database dbName -user dbUser -pwd dbPwd 

と定義される:

答えて

0

は、私はこのように呼ばれる簡単なPowerShellの機能をやった

function Wait-RdsNativeBackupSuccess($server, $database, $user, $pwd) 
{ 
    $startDate = Get-Date 
    $timeOutminutes = 45 
    $retryIntervalSeconds = 30 

    do { 
      $awsResponse = Invoke-Sqlcmd -ServerInstance $server -Database $database -Username $user -Password $pwd -Query "exec msdb.dbo.rds_task_status @db_name='clarinet'" -DisableCommands -AbortOnError 
      Write-Host $awsResponse.lifecycle $awsResponse."% complete" 

      if($awsResponse.lifecycle -eq "SUCCESS") {break} 
      start-sleep -seconds $retryIntervalSeconds 

    } while ($startDate.AddMinutes($timeOutminutes) -gt (Get-Date)) 

} 

それはX分の最大のために、rds_task_status SPROCをX秒ごとに呼び出し、ライフサイクルの値が「成功」に達するまで繰り返されます。

あなたはもちろん、これを改善することができます

  • は多分エラーになりますtask_infoの値を示し、エラーのライフサイクル値を扱う、タイムアウトの場合にはリターンコードを追加したり、投げますそれ。

    Task created successfully. 
    Task Id: 1 
    CREATED 0 
    CREATED 0 
    CREATED 0 
    IN_PROGRESS 0 
    IN_PROGRESS 0 
    IN_PROGRESS 5 
    IN_PROGRESS 5 
    IN_PROGRESS 10 
    ... 
    
    :など(タイムアウトと再試行のポート番号のような)それをより汎用的にするために多くのパラメータで
  • パス、

出力は次のようになります

関連する問題