2017-12-04 9 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

나는이 같은라는 간단한 파워 쉘 기능을 수행 한

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의 초 호출 , "SUCCESS"의 라이프 사이클 값을 얻을 때까지.

당신은 물론이를 향상시킬 수

  • 은 아마 오류가있을 것이다 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 
    ... 
    
    : 이상의 매개 변수에
  • 패스는 더 일반적인

출력이 보이는 등, (시간 제한 및 재시도 포트 번호와 같은) 만들려면