

本文為英文版的機器翻譯版本，如內容有任何歧義或不一致之處，概以英文版為準。

# `AWSEC2-SQLServerDBRestore`
<a name="automation-awsec2-sqlserverdbrestore"></a>

**Description**

`AWSEC2-SQLServerDBRestore` Runbook 會將存放在 Amazon S3 中的 Microsoft SQL Server 資料庫備份還原至在 Amazon Elastic Compute Cloud (EC2) Linux 執行個體上執行的 SQL Server 2017。您可以提供自己的執行 SQL Server 2017 Linux 的 EC2 執行個體。如果未提供 EC2 執行個體，自動化會啟動並設定具有 SQL Server 2017 的新 Ubuntu 16.04 EC2 執行個體。自動化支援還原完整、差異和交易日誌備份。此自動化接受多個資料庫備份檔案，並可自動還原所提供檔案中每個資料庫最新有效的備份。

若要將現場部署 SQL Server 資料庫的備份和還原自動化至執行 SQL Server 2017 Linux 的 EC2 執行個體，您可以使用 AWS簽署的 PowerShell 指令碼 [https://awsec2-server-upgrade-prod.s3.us-west-1.amazonaws.com/MigrateSQLServerToEC2Linux.ps1](https://awsec2-server-upgrade-prod.s3.us-west-1.amazonaws.com/MigrateSQLServerToEC2Linux.ps1)。

**重要**  
此 Runbook 會在每次自動化執行時重設 SQL Server 伺服器管理員 (SA) 使用者密碼。自動化完成後，您必須先再次設定自己的 SA 使用者密碼，才能連線至 SQL Server 執行個體。

[執行此自動化 （主控台）](https://console.aws.amazon.com/systems-manager/automation/execute/AWSEC2-SQLServerDBRestore)

**文件類型**

 自動化

**擁有者**

Amazon

**平台**

Linux

## 先決條件
<a name="sql-server-db-restore-prerequisites"></a>

若要執行此自動化，您必須符合下列先決條件：
+ 執行此自動化的 IAM 使用者或角色必須具有與 中所述許可連接的內嵌政策[所需的 IAM 許可](#sql-server-db-restore-policy)。
+ 如果您提供自己的 EC2 執行個體：
  + 您提供的 EC2 執行個體必須是執行 Microsoft SQL Server 2017 的 Linux 執行個體。
  + 您提供的 EC2 執行個體必須使用已連接 `AmazonSSMManagedInstanceCore`受管政策的 AWS Identity and Access Management (IAM) 執行個體描述檔進行設定。如需詳細資訊，請參閱[建立 Systems Manager 的 IAM 執行個體設定檔](https://docs.aws.amazon.com/systems-manager/latest/userguide/setup-instance-profile.html)。
  + SSM Agent 必須安裝在 EC2 執行個體上。如需詳細資訊，請參閱[在適用於 Linux 的 EC2 執行個體上安裝和設定 SSM Agent](https://docs.aws.amazon.com/systems-manager/latest/userguide/sysman-install-ssm-agent.html)。
  + EC2 執行個體必須有足夠的可用磁碟空間，才能下載和還原 SQL Server 備份。

## 限制
<a name="sql-server-db-restore-limitations"></a>

此自動化不支援還原至 Windows Server 的 EC2 執行個體上執行的 SQL Server。此自動化只能還原與 SQL Server Linux 2017 相容的資料庫備份。如需詳細資訊，請參閱 [SQL Server 2017 在 Linux 上的版本和支援的功能](https://docs.microsoft.com/en-us/sql/linux/sql-server-linux-editions-and-components-2017?view=sql-server-2017)。

## Parameters
<a name="sql-server-db-restore-parameters"></a>

此自動化具有下列參數：
+ **DatabaseNames**

  類型：字串

  描述：(選用) 要還原之資料庫的名稱逗號分隔清單。
+ **DataDirectorySize**

  類型：字串

  描述：(選用) SQL Server Data 目錄在新 EC2 執行個體上所需的磁碟區大小 (GiB)。

  預設值：100
+ **KeyPair**

  類型：字串

  描述：(選用) 建立新 EC2 執行個體時要使用的鍵組。
+ **IamInstanceProfileName**

  類型：字串

  描述：（選用） 要連接到新 EC2 執行個體的 IAM 執行個體描述檔。IAM 執行個體描述檔必須連接 `AmazonSSMManagedInstanceCore`受管政策。
+ **InstanceId**

  類型：字串

  描述：(選用) 在 Linux 上執行 SQL Server 2017 的執行個體。如果未提供 InstanceId，自動化將使用提供的 InstanceType 和 SQLServerEdition 啟動新的 EC2 執行個體。
+ **InstanceType**

  類型：字串

  描述：(選用) 要啟動之 EC2 執行個體的執行個體類型。
+ **IsS3PresignedUrl**

  類型：字串

  描述：（選用） 如果 S3Input 是預先簽章的 S3 URL，請指出 `yes`。

  預設值：否

  有效值：是 \| 否 
+ **LogDirectorySize**

  類型：字串

  描述：(選用) SQL Server Log 目錄在新 EC2 執行個體上所需的磁碟區大小 (GiB)。

  預設值：100
+ **S3Input**

  類型：字串

  描述：(必要) S3 儲存貯體名稱、S3 物件金鑰的逗號分隔清單，或包含要還原之 SQL 備份檔案的預先簽章 S3 URL 逗號分隔清單。
+ **SQLServerEdition**

  類型：字串

  描述：(選用) 要在新建立的 EC2 執行個體上安裝的 SQL Server 2017 版本。

  有效值：標準 \| 企業 \| Web \| Express
+ **SubnetId**

  類型：字串

  描述：(選用) 要啟動新 EC2 執行個體的子網路。子網路必須具有 AWS 服務的傳出連線。如果未提供 SubnetId 的值，自動化將使用預設子網路。
+ **TempDbDirectorySize**

  類型：字串

  描述：(選用) SQL Server TempDB 目錄在新 EC2 執行個體上所需的磁碟區大小 (GiB)。

  預設值：100

## 所需的 IAM 許可
<a name="sql-server-db-restore-policy"></a>

`AutomationAssumeRole` 參數需要下列動作才能成功使用 Runbook。

------
#### [ JSON ]

****  

```
{
    "Version":"2012-10-17",		 	 	 
    "Statement": [
        {
            "Effect": "Allow",
            "Action": [
                "ec2:CreateTags",
                "ec2:DescribeImages",
                "ec2:DescribeInstanceStatus",
                "ec2:DescribeInstances",
                "ec2:RebootInstances",
                "ec2:RunInstances",
                "ssm:DescribeInstanceInformation",
                "ssm:GetAutomationExecution",
                "ssm:ListCommandInvocations",
                "ssm:ListCommands",
                "ssm:SendCommand",
                "ssm:StartAutomationExecution"
            ],
            "Resource": "*"
        },
        {
            "Effect": "Allow",
            "Action": "iam:PassRole",
            "Resource": "arn:aws:iam::{{111122223333}}:role/{{ROLENAME}}"
        }
    ]
}
```

------

## 文件步驟
<a name="sql-server-db-restore-steps"></a>

若要使用此自動化，請遵循適用於執行個體類型的步驟：

**對於新的 EC2 執行個體：**

1. `aws:executeAwsApi` - 在 Ubuntu 16.04 上擷取 SQL Server 2017 的 AMI ID。

1. `aws:runInstances` - 啟動 Linux 的新 EC2 執行個體。

1. `aws:waitForAwsResourceProperty` - 等待新建立的 EC2 執行個體準備就緒。

1. `aws:executeAwsApi` - 如果執行個體尚未就緒，請重新啟動執行個體。

1. `aws:assertAwsResourceProperty` - 確認已安裝 SSM Agent。

1. `aws:runCommand` - 在 PowerShell 中執行 SQL Server 還原指令碼。

**對於現有的 EC2 執行個體：**

1. `aws:waitForAwsResourceProperty` - 確認 EC2 執行個體已就緒。

1. `aws:executeAwsApi` - 如果執行個體尚未就緒，請重新啟動執行個體。

1. `aws:assertAwsResourceProperty` - 確認已安裝 SSM Agent。

1. `aws:runCommand` - 在 PowerShell 中執行 SQL Server 還原指令碼。

**輸出**

getInstance.InstanceId

restoreToNewInstance.Output

restoreToExistingInstance.Output