

# Amazon RDS for SQL Server DB インスタンスと Amazon S3 の統合
<a name="User.SQLServer.Options.S3-integration"></a>

Amazon RDS for SQL Server を実行する DB インスタンスと Amazon S3 バケットの間でファイルを転送できます。これにより、BULK INSERT などの SQL Server 特性で Amazon S3 を使用することができます。例えば、Amazon S3 から .csv、.xml、.txt、その他ファイルを DB インスタンスホストにダウンロードして、`D:\S3\` からデータベースにデータをインポートできます。全てのファイルは DB インスタンスの `D:\S3\` に保存されます。

以下の制限が適用されます。

**注記**  
RDS ホストと S3 間のトラフィックは、S3 を使用するすべての SQL Server 機能の RDS 内部 VPC エンドポイントを経由します。このトラフィックは RDS インスタンスエンドポイント ENI を使用しません。S3 バケットポリシーは、ネットワーク条件によって RDS トラフィックを制限することはできません。
+ `D:\S3` フォルダ内のファイルは、マルチ AZ インスタンスでのフェイルオーバー後にスタンバイレプリカで削除されます。詳細については、「[S3 統合のマルチ AZ の制限](#S3-MAZ)」を参照してください。
+ DB インスタンスと S3 バケットが同じ AWS リージョンに存在する必要があります。
+ 一度に複数の S3 統合タスクを実行する場合、タスクは並列ではなく順次に実行されます。
**注記**  
S3 統合タスクは、ネイティブバックアップおよび復元タスクと同じキューを共有します。このキューでは、一度に最大2つのタスクまで同時進行させることができます。したがって、実行中の 2 つのネイティブバックアップおよび復元タスクによって S3 統合タスクがブロックされます。
+ S3 統合機能を復元インスタンスで再度有効にする必要があります。S3 統合は元のインスタンスから復元インスタンスに伝搬されることはありません。`D:\S3` のファイルは、復元インスタンスで削除されます。
+ DB インスタンスへのダウンロードは、最大 100 ファイルまでです。言い換えれば、`D:\S3\` 内には 100 ファイル以上は入れておけません。
+ ファイル拡張子がない、または次のファイル拡張子があるファイルのみがダウンロードできます。.abf、.asdatabase、.bcp、.configsettings、.csv、.dat、.deploymentoptions、.deploymenttargets、.fmt、.info、.ispac、.lst、.tbl、.txt、.xml、および.xmla
+ S3 バケットは、関連の AWS Identity and Access Management (IAM) 役割に関連した同じオーナーである必要があります。したがって、クロスアカウント S3 統合はサポートされていません。
+ S3 バケットは一般に公開できません。
+ RDS から S3 へのアップロードのファイルサイズは、1 ファイルあたり 50 GB に制限されます。
+ S3 から RDS へのダウンロードのファイルサイズは、S3 でサポートされている最大サイズに制限されます。

**Topics**
+ [RDS for SQL Server を S3 と統合するための前提条件](Appendix.SQLServer.Options.S3-integration.preparing.md)
+ [RDS for SQL Server と S3 の統合を有効にする](Appendix.SQLServer.Options.S3-integration.enabling.md)
+ [RDS for SQL Server と Amazon S3 間のファイル転送](Appendix.SQLServer.Options.S3-integration.using.md)
+ [RDS DB インスタンスでのファイル一覧表示](Appendix.SQLServer.Options.S3-integration.using.listing-files.md)
+ [RDS DB インスタンスでのファイル削除](Appendix.SQLServer.Options.S3-integration.using.deleting-files.md)
+ [ファイル転送タスクのステータスをモニタリングする](Appendix.SQLServer.Options.S3-integration.using.monitortasks.md)
+ [タスクのキャンセル](Appendix.SQLServer.Options.S3-integration.canceltasks.md)
+ [S3 統合のマルチ AZ の制限](#S3-MAZ)
+ [RDS for SQL Server と S3 の統合を無効にする](Appendix.SQLServer.Options.S3-integration.disabling.md)

Amazon S3 でのファイルの操作の詳細については、「[Amazon Simple Storage Service の開始方法](https://docs.aws.amazon.com/AmazonS3/latest/userguide/GetStartedWithS3)」を参照してください。

# RDS for SQL Server を S3 と統合するための前提条件
<a name="Appendix.SQLServer.Options.S3-integration.preparing"></a>

開始する前に、使用するS3バケットを選択してください。また、許可を追加してRDS DBインスタンスがS3バケットにアクセスできるようにしてください。このアクセスを設定するには、IAMポリシーとIAMロールの両方を作成します。

## コンソール
<a name="Appendix.SQLServer.Options.S3-integration.preparing.console"></a>

**Amazon S3にアクセスするための IAM ポリシーを作成します。**

1. [IAMマネジメントコンソール](https://console.aws.amazon.com/iam/home?#home)のナビゲーションペインで、**ポリシー** を選択します。

1. 新しいポリシーを作成し、**ビジュアルエディタ**タブを使用して以下の手順を行ってください。

1. **サービス**のため、**S3**を入力して**S3**サービスを選択します。

1. **実行**のため，以下を選択してDBインスタンス要件にアクセスできるようにします。
   + `ListAllMyBuckets` – 必須
   + `ListBucket` – 必須
   + `GetBucketAcl` – 必須
   + `GetBucketLocation` – 必須
   + `GetObject` – S3 から にファイルをダウンロードする際に必須`D:\S3\`
   + `PutObject` – `D:\S3\` から S3 にファイルをアップロードする際に必須
   + `ListMultipartUploadParts` – `D:\S3\` から S3 にファイルをアップロードする際に必須
   + `AbortMultipartUpload` – `D:\S3\` から S3 にファイルをアップロードする際に必須

1. [**リソース**] では、表示されるオプションは、前の手順で選択した内容により異なります。[**バケット**]、[**オブジェクト**]、またはその両方に対するオプションが表示されます。それぞれ、適切な Amazon リソースネーム (ARN) を加えてください。

   [**バケット**] は、使用したいバケットに対する ARN を追加します。例えば、バケットの名前が *amzn-s3-demo-bucket* の場合、ARN を `arn:aws:s3:::amzn-s3-demo-bucket` に設定します。

   [**オブジェクト**] は、バケットの ARN を入力してから以下のいずれかを選択します。
   + 特定のバケット内のすべてのファイルへのアクセスを許可するには、[**バケット名**] および [**オブジェクト名**] の両方に対して [**すべて**] を選択してください。
   + バケット内の特定のファイルやフォルダへのアクセスを許可する場合は、SQL Server からのアクセスを希望する特定のバケットやオブジェクトに、ARN を提供します。

1. ポリシーの作成が完了するまで、コンソール内の指示に従ってください。

   前述の部分は、ポリシーの簡略設定ガイドです。IAM ポリシーを作成する詳細な手順については、*IAM ユーザーガイド*の [IAM ポリシーの作成](https://docs.aws.amazon.com/IAM/latest/UserGuide/access_policies_create.html)を参照してください。

**前の手順からの IAM ポリシーを使用する IAM ロールを作成します。**

1. [[IAM 管理コンソール](https://console.aws.amazon.com/iam/home?#home)] で、ナビゲーションペインから [**ロール**] を選択します。

1. 新しい IAM ロールを作成し、コンソール内に表示された以下のオプションを選択してください。
   + **AWS サービス**
   + **RDS**
   + **RDS – ロールをデータベースに加える**

   次に、下部の [**次: 許可**] を選択します。

1. **アクセス権限ポリシーをアタッチする** で、事前に作成した IAM ポリシーの名前を入力してください。次にリストからポリシーを選択します。

1. ロールの作成が完了するまで、コンソール内の指示に従ってください。

   前述の部分は、ロールの簡略設定ガイドです。ロールを作成する詳細な手順については、*IAM ユーザーガイド*の [IAM ロール](https://docs.aws.amazon.com/IAM/latest/UserGuide/id_roles.html)を参照してください。

## AWS CLI
<a name="Appendix.SQLServer.Options.S3-integration.preparing.CLI"></a>

Amazon RDS に Amazon S3 バケットへのアクセスを付与するには、次のプロセスを使用します。

1. S3 バケットに Amazon RDS アクセスを付与する IAM ポリシーを作成します。

1. S3 バケットにアクセスするには、お客様に代わって Amazon RDS が引き受けることのできる IAM ロールを作成します。

   詳細については、*IAM ユーザーガイド*の「[IAM ユーザーにアクセス許可を委任するロールの作成](https://docs.aws.amazon.com/IAM/latest/UserGuide/id_roles_create_for-user.html)」を参照してください。

1. 作成した IAM ポリシーを、作成した IAM ロールにアタッチします。

**IAM ポリシーを作成するには**

DB インスタンスが必要とするアクセスを付与するための適切なアクションが含まれるようにしてください。
+ `ListAllMyBuckets` – 必須
+ `ListBucket` – 必須
+ `GetBucketAcl` – 必須
+ `GetBucketLocation` – 必須
+ `GetObject` – S3 から にファイルをダウンロードする際に必須`D:\S3\`
+ `PutObject` – `D:\S3\` から S3 にファイルをアップロードする際に必須
+ `ListMultipartUploadParts` – `D:\S3\` から S3 にファイルをアップロードする際に必須
+ `AbortMultipartUpload` – `D:\S3\` から S3 にファイルをアップロードする際に必須

1. 以下の AWS CLI コマンドでは、これらのオプションを指定して、`rds-s3-integration-policy` という名前の IAM ポリシーを作成します。*amzn-s3-demo-bucket* という名前のバケットへのアクセスを許可します。  
**Example**  

   Linux、macOS、Unix の場合:

   ```
   aws iam create-policy \
   	 --policy-name rds-s3-integration-policy \
   	 --policy-document '{
   	        "Version": "2012-10-17",		 	 	 
   	        "Statement": [
   	            {
   	                "Effect": "Allow",
   	                "Action": "s3:ListAllMyBuckets",
   	                "Resource": "*"
   	            },
   	            {
   	                "Effect": "Allow",
   	                "Action": [
   	                    "s3:ListBucket",
   	                    "s3:GetBucketAcl",
   	                    "s3:GetBucketLocation"
   	                ],
   	                "Resource": "arn:aws:s3:::amzn-s3-demo-bucket"
   	            },
   	            {
   	                "Effect": "Allow",
   	                "Action": [
   	                    "s3:GetObject",
   	                    "s3:PutObject",
   	                    "s3:ListMultipartUploadParts",
   	                    "s3:AbortMultipartUpload"
   	                ],
   	                "Resource": "arn:aws:s3:::amzn-s3-demo-bucket/key_prefix/*"
   	            }
   	        ]
   	    }'
   ```

   Windows の場合:

   インターフェイスでサポートされた改行コードに、必ず変更してください (`^`ではなく`\`)。また Windows では、すべてのダブルクオテーションを `\` にエスケープしてください。JSON のクオーツをエスケープしなくても済むようにするには、代わりにファイルに保存し、パラメータとしてパスします。

   最初に、以下の許可ポリシーで `policy.json` ファイルを作成してください。

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

****  

   ```
   {
       "Version":"2012-10-17",		 	 	 
       "Statement": [
           {
               "Effect": "Allow",
               "Action": "s3:ListAllMyBuckets",
               "Resource": "*"
           },
           {
               "Effect": "Allow",
               "Action": [
                   "s3:ListBucket",
                   "s3:GetBucketACL",
                   "s3:GetBucketLocation"
               ],
               "Resource": "arn:aws:s3:::amzn-s3-demo-bucket"
           },
           {
               "Effect": "Allow",
               "Action": [
                   "s3:GetObject",
                   "s3:PutObject",
                   "s3:ListMultipartUploadParts",
                   "s3:AbortMultipartUpload"
               ],
               "Resource": "arn:aws:s3:::amzn-s3-demo-bucket/key_prefix/*"
           }
       ]
   }
   ```

------

   次のコマンドを使用してポリシーを作成します。

   ```
   aws iam create-policy ^
        --policy-name rds-s3-integration-policy ^
        --policy-document file://file_path/assume_role_policy.json
   ```

1. ポリシーが作成されたら、そのポリシーの Amazon リソースネーム (ARN) を書き留めます。この ARN は、後のステップで必要になります。

**IAM ロールを作成するには**
+ 次の AWS CLI コマンドでは、この目的で `rds-s3-integration-role` IAM ロールを作成します。  
**Example**  

  Linux、macOS、Unix の場合:

  ```
  aws iam create-role \
  	   --role-name rds-s3-integration-role \
  	   --assume-role-policy-document '{
  	     "Version": "2012-10-17",		 	 	 
  	     "Statement": [
  	       {
  	         "Effect": "Allow",
  	         "Principal": {
  	            "Service": "rds.amazonaws.com"
  	          },
  	         "Action": "sts:AssumeRole"
  	       }
  	     ]
  	   }'
  ```

  Windows の場合:

  インターフェイスでサポートされた改行コードに、必ず変更してください (`^`ではなく`\`)。また Windows では、すべてのダブルクオテーションを `\` にエスケープしてください。JSON のクオーツをエスケープしなくても済むようにするには、代わりにファイルに保存し、パラメータとしてパスします。

  最初に、次のポリシーで、`assume_role_policy.json` ファイルを作成します。

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

****  

  ```
  {
      "Version":"2012-10-17",		 	 	 
      "Statement": [
          {
              "Effect": "Allow",
              "Principal": {
                  "Service": [
                      "rds.amazonaws.com"
                  ]
              },
              "Action": "sts:AssumeRole"
          }
      ]
  }
  ```

------

  次に、以下のコマンドを使用して IAM ロールを作成します。

  ```
  aws iam create-role ^
       --role-name rds-s3-integration-role ^
       --assume-role-policy-document file://file_path/assume_role_policy.json
  ```  
**Example グローバル条件コンテキストキーを使用した IAM ロールの作成**  

  リソースポリシー内では [https://docs.aws.amazon.com/IAM/latest/UserGuide/reference_policies_condition-keys.html#condition-keys-sourcearn](https://docs.aws.amazon.com/IAM/latest/UserGuide/reference_policies_condition-keys.html#condition-keys-sourcearn) および [https://docs.aws.amazon.com/IAM/latest/UserGuide/reference_policies_condition-keys.html#condition-keys-sourceaccount](https://docs.aws.amazon.com/IAM/latest/UserGuide/reference_policies_condition-keys.html#condition-keys-sourceaccount) のグローバル条件コンテキストキーを使用して、サービスに付与するリソースへのアクセス許可を制限することをお勧めします。これは、[混乱した使節の問題](https://docs.aws.amazon.com/IAM/latest/UserGuide/confused-deputy.html)に対する最も効果的な保護方法です。

  両方のグローバル条件コンテキストキーを使用し、`aws:SourceArn` 値にアカウント ID を含めます。この場合、同じポリシーステートメントで使用する際に、`aws:SourceAccount` 値と `aws:SourceArn` 値のアカウントで同じアカウント ID を使用する必要があります。
  + 単一リソースに対するクロスサービスアクセスが必要な場合は `aws:SourceArn` を使用します。
  + そのアカウント内の任意のリソースをクロスサービス使用に関連付けることを許可する場合、`aws:SourceAccount`を使用します。

  ポリシーでは、ロールにアクセスするリソースの完全な ARN を持つ `aws:SourceArn` グローバル条件コンテキストキーを必ず使用してください。S3 統合の場合、次の例に示すように DB インスタンスの ARN を必ず含めてください。

  Linux、macOS、Unix の場合:

  ```
  aws iam create-role \
  	   --role-name rds-s3-integration-role \
  	   --assume-role-policy-document '{
  	     "Version": "2012-10-17",		 	 	 
  	     "Statement": [
  	       {
  	         "Effect": "Allow",
  	         "Principal": {
  	            "Service": "rds.amazonaws.com"
  	          },
  	         "Action": "sts:AssumeRole",
                  "Condition": {
                      "StringEquals": {
                          "aws:SourceArn":"arn:aws:rds:Region:my_account_ID:db:db_instance_identifier"
                      }
                  }
  	       }
  	     ]
  	   }'
  ```

  Windows の場合:

  `assume_role_policy.json` にグローバル条件コンテキストキーを追加します。

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

****  

  ```
  {
      "Version":"2012-10-17",		 	 	 
      "Statement": [
          {
              "Effect": "Allow",
              "Principal": {
                  "Service": [
                      "rds.amazonaws.com"
                  ]
              },
              "Action": "sts:AssumeRole",
              "Condition": {
                  "StringEquals": {
                      "aws:SourceArn":"arn:aws:rds:Region:my_account_ID:db:db_instance_identifier"
                  }
              }
          }
      ]
  }
  ```

------

**IAM ポリシーを IAM ロールにアタッチするには**
+ 以下の AWS CLI コマンドでは、`rds-s3-integration-role` という名前のロールにこのポリシーをアタッチします。`your-policy-arn` を、以前のステップで書き留めたポリシー ARN に置き換えます。  
**Example**  

  Linux、macOS、Unix の場合:

  ```
  aws iam attach-role-policy \
  	   --policy-arn your-policy-arn \
  	   --role-name rds-s3-integration-role
  ```

  Windows の場合:

  ```
  aws iam attach-role-policy ^
  	   --policy-arn your-policy-arn ^
  	   --role-name rds-s3-integration-role
  ```

# RDS for SQL Server と S3 の統合を有効にする
<a name="Appendix.SQLServer.Options.S3-integration.enabling"></a>

このセクションでは、Amazon RDS for SQL Server と Amazon S3 の統合を有効にする方法を確認できます。S3 統合を行うには、`S3_INTEGRATION` FeatureName パラメータを使用する前に、事前に作成した IAM ロールに DB インスタンスが関連付けられていなければなりません。

**注記**  
IAM ロールを DB インスタンスに追加するには、DB インスタンスのステータスが [**有効**] である必要があります。

## コンソール
<a name="Appendix.SQLServer.Options.S3-integration.enabling.console"></a>

**IAM ロールを DB インスタンスに関連付けるには**

1. AWS マネジメントコンソール にサインインし、Amazon RDS コンソール ([https://console.aws.amazon.com/rds/](https://console.aws.amazon.com/rds/)) を開きます。

1. RDS for SQL Server DB インスタンスの名前を選択して詳細を表示します。

1. [**接続とセキュリティ**] タブの [**IAM ロールの管理**] セクションで、[**このインスタンスに IAM ロールを追加**] で追加する IAM ロールを選択します。

1. [**機能**] で、[**S3\$1INTEGRATION**] を選択します。  
![\[S3_INTEGRATION ロールを追加する\]](http://docs.aws.amazon.com/ja_jp/AmazonRDS/latest/UserGuide/images/ora-s3-integration-role.png)

1. [**Add role**] を選択します。

## AWS CLI
<a name="Appendix.SQLServer.Options.S3-integration.enabling.cli"></a>

**IAM ロールを RDS for SQL Server DB インスタンスに追加するには**
+ 以下の AWS CLI コマンドは、IAM ロールを `mydbinstance` と名前の付いた RDS for SQL Server DB インスタンスに追加します。  
**Example**  

  Linux、macOS、Unix の場合:

  ```
  aws rds add-role-to-db-instance \
  	   --db-instance-identifier mydbinstance \
  	   --feature-name S3_INTEGRATION \
  	   --role-arn your-role-arn
  ```

  Windows の場合:

  ```
  aws rds add-role-to-db-instance ^
  	   --db-instance-identifier mydbinstance ^
  	   --feature-name S3_INTEGRATION ^
  	   --role-arn your-role-arn
  ```

  `your-role-arn` を、以前のステップで書き留めたロール ARN に置き換えます。`S3_INTEGRATION` オプションには `--feature-name` が指定されている必要があります。

# RDS for SQL Server と Amazon S3 間のファイル転送
<a name="Appendix.SQLServer.Options.S3-integration.using"></a>

Amazon RDS ストアドプロシージャを使用して、Amazon S3 と RDS DB インスタンス間でファイルのダウンロードおよびアップロードを行います。また、Amazon RDS ストアドプロシージャを使用して、RDS インスタンスのファイルを記入および削除することができます。

S3 からダウンロードまたは S3 へアップロードするファイルは、`D:\S3` フォルダに保存します。このフォルダは、ファイルにアクセスする際に使用できる唯一のフォルダとなります。ダウンロード時に対象フォルダを設定する際に作成したサブフォルダ内でファイルを構成することができます。

ストアドプロシージャによっては、Amazon Resource Name (ARN) を S3 バケットおよびファイルに指定する必要があります。ARN の形式は `arn:aws:s3:::amzn-s3-demo-bucket/file_name` です。Amazon S3 には、ARN のアカウント番号または AWS リージョンは不要です。

S3 統合タスクは順次実行され、同じキューをネイティブバックアップとして共有し、タスクの復元を行います。このキューでは、一度に最大2つのタスクまで同時進行させることができます。タスクが処理を開始するまでに、最大 5 分かかります。

## Amazon S3 バケットから SQL Server DB インスタンスにファイルをダウンロードする
<a name="Appendix.SQLServer.Options.S3-integration.using.download"></a>

S3 バケットから RDS for SQL Server DB インスタンスにファイルをダウンロードするには、Amazon RDS ストアドプロシージャ `msdb.dbo.rds_download_from_s3` を使用してください。


| パラメータ名 | データ型 | デフォルト | 必須 | 説明 | 
| --- | --- | --- | --- | --- | 
|  `@s3_arn_of_file`  |  NVARCHAR  |  –  |  必須  |  ダウンロードするファイルの S3 ARN 例: `arn:aws:s3:::amzn-s3-demo-bucket/mydata.csv`  | 
|  `@rds_file_path`  |  NVARCHAR  |  –  |  オプション  |  RDS インスタンスのファイルパス。指定されなかった場合、ファイルパスは `D:\S3\<filename in s3>` です。RDS は、絶対パスと相対パスをサポートしています。サブフォルダを作成したい場合、ファイルパス内に含めます。  | 
|  `@overwrite_file`  |  INT  |  0  |  オプション  | 既存のファイルを上書きしてください。 0 = 上書きしないでください 1 = 上書きしてください | 

ファイル拡張子のないファイルと、ファイル拡張子が .bcp、.csv、.dat、.fmt、.info、.lst、.tbl、.txt、.xml のファイルをダウンロードできます。

**注記**  
SQL Server Integration Services が有効になっている場合、ファイル拡張子が .ispac のファイルのダウンロードがサポートされます。SSIS の有効化の詳細については、「[SQL Server Integration Services](Appendix.SQLServer.Options.SSIS.md)」を参照してください。  
SQL Server Analysis Services が有効になっている場合、ファイル拡張子が .abf、.asdatabase、.configsettings、.deploymentoptions、.deploymenttargets、.xmla のファイルのダウンロードがサポートされます。SSAS の有効化の詳細については、「[SQL Server Analysis Services](Appendix.SQLServer.Options.SSAS.md)」を参照してください。

以下の例は S3 からファイルをダウンロードするためのストアドプロシージャを表します。

```
exec msdb.dbo.rds_download_from_s3
	    @s3_arn_of_file='arn:aws:s3:::amzn-s3-demo-bucket/bulk_data.csv',
	    @rds_file_path='D:\S3\seed_data\data.csv',
	    @overwrite_file=1;
```

例 `rds_download_from_s3` の操作は、フォルダがまだない場合、`seed_data` に `D:\S3\` という名前のフォルダを作成します。次に例ではソースファイル `bulk_data.csv` を S3 から DB インスタンスの `data.csv` という名前の新しいファイルにダウンロードします。`@overwrite_file` パラメータが `1` に設定されているため、すでにファイルが存在する場合は上書きされます。

## SQL Server DB インスタンスから Amazon S3 バケットにファイルをアップロードする
<a name="Appendix.SQLServer.Options.S3-integration.using.upload"></a>

RDS for SQL Server DB インスタンスから S3 バケットにファイルをアップロードするには、Amazon RDS ストアドプロシージャ `msdb.dbo.rds_upload_to_s3` を以下のパラメータで使用してください。


| パラメータ名 | データ型 | デフォルト | 必須 | 説明 | 
| --- | --- | --- | --- | --- | 
|  `@s3_arn_of_file`  |  NVARCHAR  |  –  |  必須  |  ファイルの S3 ARN が S3 内で作成されます (例: `arn:aws:s3:::amzn-s3-demo-bucket/mydata.csv`)。  | 
|  `@rds_file_path`  |  NVARCHAR  |  –  |  必須  | S3 にアップロードするファイルのファイルパス。絶対パスと相対パスの両方をサポートしています。 | 
|  `@overwrite_file`  |  INT  |  –  |  オプション  |  既存のファイルを上書きしてください。 0 = 上書きしないでください 1 = 上書きしてください  | 

以下の例では、`data.csv` という名前のファイルを `D:\S3\seed_data\` 内の指定の場所から、ARN が指定する S3 バケットに、ファイル `new_data.csv` をアップロードします。

```
exec msdb.dbo.rds_upload_to_s3 
		@rds_file_path='D:\S3\seed_data\data.csv',
		@s3_arn_of_file='arn:aws:s3:::amzn-s3-demo-bucket/new_data.csv',
		@overwrite_file=1;
```

@overwrite\$1file パラメータが `1` に設定されているため、ファイルが S3 にすでに存在している場合は上書きされます。

# RDS DB インスタンスでのファイル一覧表示
<a name="Appendix.SQLServer.Options.S3-integration.using.listing-files"></a>

DB インスタンスで使用可能なファイルをリスト表示するには、ストアドプロシージャと機能の両方を使用します。最初に、以下のストアドプロシージャを実行して `D:\S3\` 内のファイルから詳細を集めます。

```
exec msdb.dbo.rds_gather_file_details;
```

ストアドプロシージャは、タスクの ID を返します。保管のタスクと同様、ストアドプロシージャも同期せずに実行されます。タスクのステータスが `SUCCESS` になるとすぐに、`rds_fn_list_file_details` 機能のタスク ID を使用して、 D:\$1S3\$1 内の既存のファイルやディレクトリのリスト表示ができます。以下を参照してください。

```
SELECT * FROM msdb.dbo.rds_fn_list_file_details(TASK_ID);
```

`rds_fn_list_file_details` 機能は、次の列があるテーブルを返します。


| 出力パラメータ | 説明 | 
| --- | --- | 
| filepath | ファイルの絶対パス (例: D:\$1S3\$1mydata.csv) | 
| size\$1in\$1bytes | ファイルサイズ (バイト単位) | 
| last\$1modified\$1utc | UTC 形式での最終変更を行った日時 | 
| is\$1directory | アイテムがディレクトリ (true/false) かどうかを表示するオプション | 

# RDS DB インスタンスでのファイル削除
<a name="Appendix.SQLServer.Options.S3-integration.using.deleting-files"></a>

DB インスタンスで使用可能なファイルを削除するには、Amazon RDS ストアドプロシージャ `msdb.dbo.rds_delete_from_filesystem` を以下のパラメータで使用します。


| パラメータ名 | データ型 | デフォルト | 必須 | 説明 | 
| --- | --- | --- | --- | --- | 
|  `@rds_file_path`  |  NVARCHAR  |  –  |  必須  | 削除するファイルのファイルパス。絶対パスと相対パスの両方をサポートしています。 | 
|  `@force_delete`  |  INT  | 0 |  オプション  |  ディレクトリを削除するには、このフラグが `1` に含まれ設定されている必要があります。 `1` = ディレクトリを削除する ファイルを削除する場合、このパラメータは無視されます。  | 

ディレクトリを削除するには、`@rds_file_path` がバックスラッシュ (`\`) で終了し、`@force_delete` が `1` に設定される必要があります。

次の例では、ファイル `D:\S3\delete_me.txt` が削除されます。

```
exec msdb.dbo.rds_delete_from_filesystem
    @rds_file_path='D:\S3\delete_me.txt';
```

次の例では、ディレクトリ `D:\S3\example_folder\` が削除されます。

```
exec msdb.dbo.rds_delete_from_filesystem
    @rds_file_path='D:\S3\example_folder\',
    @force_delete=1;
```

# ファイル転送タスクのステータスをモニタリングする
<a name="Appendix.SQLServer.Options.S3-integration.using.monitortasks"></a>

S3 統合タスクのステータスを追跡するには、`rds_fn_task_status` 機能を呼び出してください。2 つのパラメータを使用します。1 つめのパラメータは常に `NULL` を選択してください。これは、S3 統合に適用されないためです。2 つめのパラメータは、タスク ID を受け入れます。

全タスクのリストを見るには、以下の例にあるように、初期のパラメータを `NULL` に設定し、2 つめのパラメータを `0` に設定します。

```
SELECT * FROM msdb.dbo.rds_fn_task_status(NULL,0);
```

特定のタスクを受け取るには、以下の例にあるように、初期のパラメータを `NULL` に設定し、2 つめのパラメータをタスク ID に設定します。

```
SELECT * FROM msdb.dbo.rds_fn_task_status(NULL,42);
```

`rds_fn_task_status` 機能は次の情報を返します。


|  出力パラメータ  |  説明  | 
| --- | --- | 
|  `task_id`  |  タスクの ID。  | 
|  `task_type`  |  S3 統合では、タスクには以下のタスクタイプがあります。 [\[See the AWS documentation website for more details\]](http://docs.aws.amazon.com/ja_jp/AmazonRDS/latest/UserGuide/Appendix.SQLServer.Options.S3-integration.using.monitortasks.html)  | 
|  `database_name`  | S3 統合タスクには適用できません。 | 
|  `% complete`  |  タスクの進行状況の割合。  | 
|  `duration(mins)`  |  タスクにかかった時間 (分単位)。  | 
|  `lifecycle`  |  タスクのステータス。有効な状態には以下のものがあります。 [\[See the AWS documentation website for more details\]](http://docs.aws.amazon.com/ja_jp/AmazonRDS/latest/UserGuide/Appendix.SQLServer.Options.S3-integration.using.monitortasks.html)  | 
|  `task_info`  |  タスクに関する追加情報。処理中にエラーが発生した場合、この列にエラーに関する情報が含まれます。  | 
|  `last_updated`  |  タスクのステータスが最後に更新された日時。  | 
|  `created_at`  |  タスクが作成された日時。  | 
|  `S3_object_arn`  |  S3 オブジェクトの ARN はダウンロードまたはアップロードされます。  | 
|  `overwrite_S3_backup_file`  |  S3 統合タスクには適用できません。  | 
|  `KMS_master_key_arn`  |  S3 統合タスクには適用できません。  | 
|  `filepath`  |  RDS DB インスタンスのファイルパス。  | 
|  `overwrite_file`  |  既存のファイルが上書きされるかどうかを表示するオプション  | 
|  `task_metadata`  |  S3 統合タスクには適用できません。  | 

# タスクのキャンセル
<a name="Appendix.SQLServer.Options.S3-integration.canceltasks"></a>

S3 統合タスクをキャンセルするには、`msdb.dbo.rds_cancel_task` パラメータで `task_id` ストアドプロシージャを使用します。進行中の削除およびリスト作成タスクは、キャンセルできません。以下の例は、タスクをキャンセルするリクエストを示します。

```
exec msdb.dbo.rds_cancel_task @task_id = 1234;
```

すべてのタスクとそのタスク ID の概要を表示するには、 `rds_fn_task_status` に記載のように [ファイル転送タスクのステータスをモニタリングする](Appendix.SQLServer.Options.S3-integration.using.monitortasks.md) 機能を使用してください。

## S3 統合のマルチ AZ の制限
<a name="S3-MAZ"></a>

マルチ AZ インスタンスでは、`D:\S3` フォルダ内のファイルはフェイルオーバー後にスタンバイレプリカから削除されます。フェイルオーバーは、例えば、インスタンスクラスの変更やエンジンバージョンのアップグレードなど、DB インスタンスの変更中に計画できます。または、プライマリの停止中にフェイルオーバーが予定外になることがあります。

**注記**  
`D:\S3` フォルダをファイルストレージに使用することはお勧めしません。ベストプラクティスは、作成したファイルを Amazon S3 にアップロードして耐久性を保持し、データをインポートする必要があるときにファイルをダウンロードすることです。

最後のフェイルオーバー時間を決定するには、`msdb.dbo.rds_failover_time` ストアドプロシージャを使用できます。詳細については、「[Amazon RDS for SQL Server の最終フェイルオーバー時間の決定](Appendix.SQLServer.CommonDBATasks.LastFailover.md)」を参照してください。

**Example 最近のフェイルオーバーがない例**  
この例は、エラーログに最近のフェイルオーバーが存在しない場合の出力を示しています。2020-04-29 23:59:00.01 以降、フェイルオーバーは発生していません。  
したがって、`rds_delete_from_filesystem` ストアドプロシージャを使用して削除されていない、その時間の後にダウンロードされたすべてのファイルは、現在のホストで引き続きアクセスできます。それ以前にダウンロードされたファイルも利用可能になる場合があります。  


| errorlog\$1available\$1from | recent\$1failover\$1time | 
| --- | --- | 
|  2020-04-29 23:59:00.0100000  |  null  | 

**Example 最近のフェイルオーバーの**  
この例は、エラーログにフェイルオーバーが存在する場合の出力を示しています。最新のフェイルオーバーは、2020-05-05 18:57:51.89 に発生しています。  
`rds_delete_from_filesystem` ストアドプロシージャを使用して削除されていない、その時間以降にダウンロードされたすべてのファイルは、現在のホストで引き続きアクセスできます。  


| errorlog\$1available\$1from | recent\$1failover\$1time | 
| --- | --- | 
|  2020-04-29 23:59:00.0100000  |  2020-05-05 18:57:51.8900000  | 

# RDS for SQL Server と S3 の統合を無効にする
<a name="Appendix.SQLServer.Options.S3-integration.disabling"></a>

ここでは、Amazon RDS for SQL Server と Amazon S3 の統合を無効にする方法について説明します。S3 統合を無効化するときは、`D:\S3\` のファイルは削除されません。

**注記**  
IAM ロールを DB インスタンスから削除するには、DB インスタンスのステータスが `available` である必要があります。

## コンソール
<a name="Appendix.SQLServer.Options.S3-integration.disabling.console"></a>

**IAM ロールと DB インスタンスの関連を外す**

1. AWS マネジメントコンソール にサインインし、Amazon RDS コンソール ([https://console.aws.amazon.com/rds/](https://console.aws.amazon.com/rds/)) を開きます。

1. RDS for SQL Server DB インスタンスの名前を選択して詳細を表示します。

1. [**接続とセキュリティ**] タブの [**IAM ロールの管理**] セクションで、削除する IAM ロールを選択します。

1. [**削除**] を選択します。

## AWS CLI
<a name="Appendix.SQLServer.Options.S3-integration.disabling.cli"></a>

**IAM ロールを RDS for SQL Server DB インスタンスから削除するには**
+ 以下の AWS CLI コマンドが、IAM ロールを `mydbinstance` と名前の付いたRDS for SQL Server DB インスタンスから削除します。  
**Example**  

  Linux、macOS、Unix の場合:

  ```
  aws rds remove-role-from-db-instance \
  	   --db-instance-identifier mydbinstance \
  	   --feature-name S3_INTEGRATION \
  	   --role-arn your-role-arn
  ```

  Windows の場合:

  ```
  aws rds remove-role-from-db-instance ^
  	   --db-instance-identifier mydbinstance ^
  	   --feature-name S3_INTEGRATION ^
  	   --role-arn your-role-arn
  ```

  `your-role-arn` を、`--feature-name` オプションにとって適した IAM ロール ARN に交換します。