# Amazon S3 Import Integration V2

Amazon S3向けインポートデータコネクタにより、S3バケットに保存されているJSON、TSV、CSVファイルからデータをインポートすることができます。Amazon S3 Import Integration v2とv1の主な違いとメリットは、*assume_role*認証のサポートが追加されたことです。

## Amazon S3 Import Integration v2とv1の認証方式について

以下の表の情報を確認して、v2とv1の認証の違いを理解してください。v1の詳細については、[Amazon S3 Import Integration v1](/int/amazon-s3-import-integration-v1)を参照してください。

| 認証方式 | Amazon S3 v2 | Amazon S3 v1 |
|  --- | --- | --- |
| **basic** | **x** | **x** |
| **anonymous** |  | **x** |
| **session** | **x** | **x** |
| **assume_role** | **x** |  |


## 前提条件

- Treasure Dataの基本的な知識


## S3 Bucket Policy 設定

TD リージョンと同じリージョンにある AWS S3 バケットを使用している場合、TD がバケットにアクセスする IP アドレスはプライベートで動的に変化します。アクセスを制限したい場合は、静的 IP アドレスではなく VPC の ID を指定してください。例えば、US リージョンの場合は vpc-df7066ba 経由でアクセスを設定し、Tokyo リージョンの場合は vpc-e630c182 経由、EU01 リージョンの場合は vpc-f54e6a9e 経由でアクセスを設定してください。

Treasure コンソール にログインする URL から Treasure コンソール のリージョンを確認し、URL 内のリージョンのデータコネクターを参照してください。

詳細については、[API ドキュメント](/apis/endpoints/ip-addresses-integrations-result-workers#s3-bucket-policy-configuration-for-export-and-import-integrations)を参照してください。

## Treasure Data Integration の静的 IP アドレス

セキュリティポリシーで IP ホワイトリストが必要な場合は、接続を成功させるために Treasure Data の IP アドレスを許可リストに追加する必要があります。

リージョンごとに整理された静的 IP アドレスの完全なリストは、次のリンクにあります:
[IP Addresses for Integrations](/apis/endpoints/ip-addresses-integrations-result-workers)

## インポート並列処理

非常に大きなファイルをインポートする場合、このインテグレーションが提供する並列インポートサポートを利用できます。これを行うには、大きなファイルを小さなファイルに分割し、小さなファイルをバッチで同時にアップロードします。ただし、非常に小さなファイルを大量にインポートしようとすると、パフォーマンスに悪影響を及ぼすことに注意してください。したがって、Treasure Dataでは、50MB未満のファイルサイズで並列入力を実行しないことを推奨しています。
使用できる並列インポートスレッドのデフォルトの最大数は16です。

## Treasure コンソールを使用したAWS S3からのインポート

Treasure コンソールを使用してデータコネクタを作成できます。

### 新しい認証の作成

1. **Treasure コンソール**を開きます。
2. **Integrations Hub** > **Catalog**に移動します。
3. **S3 v2**を検索し、Amazon S3 (v2)を選択します。
4. **Create Authentication**を選択します。


![](/assets/amazons3v2_b.159e893620e0c382d8217ff5d34162e687c00cced1f9998ec81f8b7128879b08.71fd65e8.png)

新しいAuthenticationダイアログが開きます。選択した認証方式によって、ダイアログは次のいずれかの画面のように表示される場合があります：

![](/assets/basic.a40f8fdb7d5da59cebad60061a7a57f41030506b340a4afd45975125551421a0.71fd65e8.png)

![](/assets/session.a2dea82cde621dbca0f47964e53b2f2e1af4cc2a6fd675bfd0ac27d49e1eaeb4.71fd65e8.png)

![](/assets/assume.cfe6bda430fc4bb1d38ab27c22a1f2245415fa2d419f46589c76dd7893fc7132.71fd65e8.png)

1. 認証フィールドを設定し、**Continue**を選択します。


以下の表は、Amazon S3 Import Integration v2の認証設定パラメータについて説明しています。

| **パラメータ** | **説明** |
|  --- | --- |
| **Endpoint**
 | S3サービスエンドポイントの上書き。リージョンとエンドポイント情報は、[AWS service endpoints](http://docs.aws.amazon.com/general/latest/gr/rande.html#s3_region)ドキュメントから確認できます。（例：[*s3.ap-northeast-1.amazonaws.com*](https://s3.ap-northeast-1.amazonaws.com/)）
指定すると、リージョン設定が上書きされます。
 |
| **Region** | AWSリージョン |
| **Authentication Method** | - **basic**: access_key_idとsecret_access_keyを使用して認証します。[AWS Programmatic access](https://docs.aws.amazon.com/general/latest/gr/managing-aws-access-keys.html)を参照してください。必須パラメータ：
  - Access Key ID
  - Secret access key
- **session**（推奨）: 一時的に生成されたaccess_key_id、secret_access_key、session_tokenを使用します。必須パラメータ：
  - Access Key ID
  - Secret access key
  - Secret token
- **assume_role**: ロールアクセスを使用します。[AWS AssumeRole](https://docs.aws.amazon.com/STS/latest/APIReference/API_AssumeRole.html)を参照してください。必須パラメータ：
  - TD's Instance Profile
  - Account ID
  - Your Role Name
  - External ID
  - Duration In Seconds
- **anonymous**: サポートされていません。

 |
| **Access Key ID** | AWS S3が発行 |
| **Secret Access Key** | AWS S3が発行 |
| **Secret token** | 一時認証情報用のセッショントークン |
| **TD's Instance Profile** | この値はTreasure コンソールから提供されます。この値の数値部分が、IAMロールを作成する際に使用するAccount IDになります。 |
| **Account ID** | あなたのAWSアカウントID |
| **Your Role Name** | あなたのAWSロール名 |
| **External ID** | あなたのシークレット外部ID |
| **Duration In Seconds** | 一時認証情報の有効期間 |


1. 新しいAWS S3接続に名前を付け、**Done**を選択します。


### assume_role認証方式を使用した認証の作成

1. assume_role認証方式で新しい認証を作成します。
2. TD's Instance Profileフィールドの値の数値部分をメモしておきます。


![](/assets/4f8559a3-4f70-4c83-b8b9-adaaec64662f_1_201_a.1331328bd097ab94743fc3d5f53d63f8cbc98ad689475b3adc5b21335a2e22e3.71fd65e8.jpeg)

1. AWS IAMロールを作成します。


![](/assets/ea9e1f37-be45-4ac6-97fa-4b46f65b0388_1_201_a.99af6c7efd4bcd9e50a04d5457e1febf3da2f104b7a090d9bcc307dc3dc8d8c3.71fd65e8.jpeg)

![](/assets/45c6048c-cc9e-40c1-b0f4-529e356d6e16_1_201_a.bb869c9c9ad66cdecbebc9b2b1231acd5f24c98517c6bc2cfb6ec67efcd884ef.71fd65e8.jpeg)

### AWS S3データをTreasure Dataに転送する

認証済み接続を作成すると、自動的にAuthenticationsページに移動します。

1. 作成した接続を検索します。
2. **New Source**を選択します。


![](/assets/image-20191014-185537.a673857cd3d7cd4d6249e93718c2c0b501d3da0ab1a5cfef2dd54c1fb6478775.71fd65e8.png)

#### Connection

1. Data Transferフィールドに**Source**の名前を入力します**。**
2. **Next**をクリックします。


![](/assets/s3_new.5fa3911b9f90a38cdf2daddcdf9cb8cebe026cc85658ca1f4da2ba69f80fc138.71fd65e8.png)

#### Source Table

Sourceダイアログが開きます。

1. 以下のパラメータを編集します。


![](/assets/image-20200714-230936.8f5e75b81b4ba3f8922f5ade1c5d5d06284c8f229cde7360b413f9e024fecf27.71fd65e8.png)

| **パラメータ** | **説明** |
|  --- | --- |
| **Bucket** | - S3バケット名を指定します（例：*your_bucket_name*）

 |
| **Path Prefix** | - ターゲットキーのプレフィックスを指定します。（例：*logs/data_*）

 |
| **Path Regex** | - 正規表現を使用してファイルパスをマッチングします。ファイルパスが指定されたパターンにマッチしない場合、そのファイルはスキップされます。例えば、パターン *.csv$* # を指定した場合、パスがそのパターンにマッチしないファイルはスキップされます。[正規表現](https://developer.mozilla.org/en-US/docs/Web/JavaScript/Guide/Regular_Expressions)について詳しくは、こちらをご覧ください。

 |
| **Skip Glacier Objects** | - Amazon Glacierストレージクラスに保存されているオブジェクトの処理をスキップする場合に選択します。オブジェクトがGlacierストレージクラスに保存されているにもかかわらず、このオプションがチェックされていない場合、例外がスローされます。

 |
| **Filter by Modified Time** | - 取り込むファイルをフィルタリングする方法を選択します：

 |
| 未チェック（デフォルト）： | - **Start after path**: last_path パラメータを挿入して、最初の実行時にこのパスより前のファイルをスキップします。（例：logs/data_20170101.csv）
- **Incremental**: インクリメンタルローディングを有効にします。インクリメンタルローディングが有効な場合、次回実行時の設定差分には last_path パラメータが含まれるため、次回実行時にそのパスより前のファイルがスキップされます。それ以外の場合、last_path は含まれません。

 |
| チェック済み： | - **Modified after:** last_modified_time パラメータを挿入して、最初の実行時に指定されたタイムスタンプより前に変更されたファイルをスキップします（例：2019-06-03T10:30:19.806Z）
- **Incremental by Modified Time:** 変更時刻によるインクリメンタルローディングを有効にします。インクリメンタルローディングが有効な場合、次回実行時の設定差分には last_modified_time パラメータが含まれるため、次回実行時にその時刻より前に変更されたファイルがスキップされます。それ以外の場合、last_modified_time は含まれません。設定差分が設定されると、この値を変更することはできません

 |


ディレクトリ（トップレベルディレクトリ「/」など）内のすべてのファイルをスキャンする必要がある場合があります。このような場合は、CLIを使用してインポートを実行する必要があります。

**例**

Amazon CloudFrontは、静的および動的Webコンテンツの配信を高速化するWebサービスです。CloudFrontを設定して、CloudFrontが受信するすべてのユーザーリクエストに関する詳細情報を含むログファイルを作成できます。ロギングを有効にすると、CloudFrontを次のようにログファイルを保存するように設定できます：


```
[your_bucket] - [logging] - [E231A697YXWD39.2017-04-23-15.a103fd5a.gz][your_bucket] - [logging] - [E231A697YXWD39.2017-04-23-15.b2aede4a.gz][your_bucket] - [logging] - [E231A697YXWD39.2017-04-23-16.594fa8e6.gz][your_bucket] - [logging] - [E231A697YXWD39.2017-04-23-16.d12f42f9.gz]
```

この場合、Source Tableの設定は次のようになります：

- **Bucket**: your_bucket
- **Path Prefix**: logging/
- **Path Regex**: *.gz$* （必須ではありません）
- **Start after path**: logging/E231A697YXWD39.2017-04-23-15.b2aede4a.gz （2017-04-23-16からログファイルをインポートする場合）
- **Incremental**: true （このジョブをスケジュール設定する場合）


BZip2デコーダープラグインはデフォルトでサポートされています。[File Decoder Function](/products/customer-data-platform/integration-hub/batch/import/decoder/file-decoder-function)を参照してください。

#### Data Settings

1. **Next**を選択します。
Data Settingsページが開きます。
2. 必要に応じて、データ設定を編集するか、このダイアログのページをスキップします。


![](/assets/screenshot-2025-01-07-at-21.02.14.6aa2eac7a1fefcc0630398e0eec37ae0693703af3231fd00a30c26779a405617.71fd65e8.png)

### Filters

Filters は、S3、FTP、または SFTP コネクターの Create Source または Edit Source インポート設定で使用できます。

Import Integration Filters を使用すると、インポート用の[データ設定の編集](https://docs.treasuredata.com/smart/project-product-documentation/editing-data-settings)を完了した後、インポートされたデータを変更できます。

import integration filters を適用するには:

1. Data Settings で **Next** を選択します。Filters ダイアログが開きます。
2. 追加したいフィルターオプションを選択します。![](/assets/image-20200609-201955.eed6c6da800ba40d1d98b92e767d9a8f7500cad8a9d4079121190b7d34c23294.c7246827.png)
3. **Add Filter** を選択します。そのフィルターのパラメーターダイアログが開きます。
4. パラメーターを編集します。各フィルタータイプの情報については、次のいずれかを参照してください:


- Retaining Columns Filter
- Adding Columns Filter
- Dropping Columns Filter
- Expanding JSON Filter
- Digesting Filter


1. オプションで、同じタイプの別のフィルターを追加するには、特定の列フィルターダイアログ内で **Add** を選択します。
2. オプションで、別のタイプの別のフィルターを追加するには、リストからフィルターオプションを選択して、同じ手順を繰り返します。
3. 追加したいフィルターを追加した後、**Next** を選択します。Data Preview ダイアログが開きます。


### Data Preview

インポートを実行する前に、Generate Preview を選択してデータの[プレビュー](/products/customer-data-platform/integration-hub/batch/import/previewing-your-source-data)を表示できます。Data preview はオプションであり、選択した場合はダイアログの次のページに安全にスキップできます。

1. **Next** を選択します。Data Preview ページが開きます。
2. データをプレビューする場合は、**Generate Preview** を選択します。
3. データを確認します。


### Data Placement

データの配置について、データを配置したいターゲット database と table を選択し、インポートを実行する頻度を指定します。

1. **Next** を選択します。Storage の下で、インポートされたデータを配置する新しい database を作成するか、既存の database を選択し、新しい table を作成するか、既存の table を選択します。
2. **Database** を選択 > **Select an existing** または **Create New Database** を選択します。
3. オプションで、database 名を入力します。
4. **Table** を選択 > **Select an existing** または **Create New Table** を選択します。
5. オプションで、table 名を入力します。
6. データをインポートする方法を選択します。
  - **Append** (デフォルト) - データインポートの結果は table に追加されます。
table が存在しない場合は作成されます。
  - **Always Replace** - 既存の table の全体の内容をクエリの結果出力で置き換えます。table が存在しない場合は、新しい table が作成されます。
  - **Replace on New Data** - 新しいデータがある場合のみ、既存の table の全体の内容をクエリの結果出力で置き換えます。
7. **Timestamp-based Partition Key** 列を選択します。
デフォルトキーとは異なるパーティションキーシードを設定したい場合は、long または timestamp 列をパーティショニング時刻として指定できます。デフォルトの時刻列として、add_time フィルターで upload_time を使用します。
8. データストレージの **Timezone** を選択します。
9. **Schedule** の下で、このクエリを実行するタイミングと頻度を選択できます。


#### 一度だけ実行

1. **Off** を選択します。
2. **Scheduling Timezone** を選択します。
3. **Create & Run Now** を選択します。


#### 定期的に繰り返す

1. **On** を選択します。
2. **Schedule** を選択します。UI では、*@hourly*、*@daily*、*@monthly*、またはカスタム *cron* の 4 つのオプションが提供されます。
3. **Delay Transfer** を選択して、実行時間の遅延を追加することもできます。
4. **Scheduling Timezone** を選択します。
5. **Create & Run Now** を選択します。


転送が実行された後、**Data Workbench** > **Databases** で転送の結果を確認できます。

## Data Connector ジョブの検証

### データインポートの問題をトラブルシューティングするには?

ジョブログを確認してください。警告とエラーは、インポートの成功に関する情報を提供します。例えば、[インポートエラーに関連する source ファイル名を特定](https://docs.treasuredata.com/smart/project-product-documentation/data-import-error-troubleshooting)できます。

特定のジョブの詳細を確認するには、そのジョブを選択して詳細を表示します。ジョブのタイプに応じて、次のいずれか、またはすべてを確認できます: 結果、クエリ、出力ログ、エンジンログ、詳細、および宛先。

1. Treasure コンソール を開きます。
2. **Jobs** に移動します。ページの右上に記載されているジョブの数を確認できます。


![](/assets/managing_jobs__360001457707__mceclip0.da001c56a934e6cb6001326ffbcf4a0e84c98aeebcb735879d974db1df660a4c.22d00320.png)
3. オプションで、フィルターを使用してジョブのリストを絞り込み、ジョブ所有者、日付、database 名などでフィルタリングして、関心のあるものを見つけます。
4. ジョブを選択して開き、結果、クエリ定義、ログ、その他の詳細を表示します。

![](/assets/managing_jobs__360001457707__mceclip1.8d80bfeb65a6425ba20c1ae0657bc6024a69694a10772e71c54baccf74c5c7f7.22d00320.png)
5. 各タブには、ジョブに関する異なる情報が表示されます。

| タブ名 | 説明 |
|  --- | --- |
| Results | - ジョブからインポートされたデータを表示します。
- ここから、結果をクリップボードにコピーしたり、CSV ファイルとしてダウンロードしたりできます。

 |
| Query | - ジョブのクエリ構文を表示します
- クエリエディターを起動します
- クエリをコピーして、新しいクエリや workflow を作成するために使用します
- クエリを改良して効率を向上させます

 |
| Output および Engine Logs | - ログ情報は、実行時間、クエリ結果の数、エラーコードについて確認できます
- ログ情報はクリップボードにコピーできます

 |
| Details | 詳細情報を表示します:- クエリ名
- タイプ
- ジョブ ID
- ステータス
- 期間
- スケジュールされた時刻と実際の時刻
- 結果の数とサイズ
- ランナー
- クエリされた database
- 優先度

 |
| Destination | ここでは、エクスポート integration 設定の詳細を表示できます（インポート integration には適用されません）:   - integration - タイプ - 設定 |


## Workflowを使用したAWS S3からのインポート

Amazon S3 Import Integration v2のv1に対する主な違いと利点は、assume_role認証のサポートが追加されたことです。認証方法としてassume_roleを使用する場合、認証を明示的に宣言することはできません。認証を再利用したWorkflow設定については、[既存の認証の再利用](/products/customer-data-platform/integration-hub/authentications/reusing-an-existing-authentication)を参照してください。

Workflowは、一意のIDでジョブを開始できます。詳細については、[td_load](/products/customer-data-platform/data-workbench/workflows/operators/td_load)を参照してください。

## CLI (Toolbelt)を使用したAWS S3からのインポート

オプションで、TD Toolbeltを使用して接続の設定、ジョブの作成、ジョブ実行のスケジュール設定を行うことができます。

### CLIを使用したコネクタの設定

コネクタを設定する前に、最新のTD Toolbeltをインストールしてください。

CLIとYAMLファイルを使用して増分ロードを計画している場合は、Treasure コンソールで既存のソースコネクタを使用する必要があります。増分ロード機能は、コンソールで処理された最後のレコードに関する情報を保持するためです。

#### Seed設定ファイル(seed.yml)の作成

以下の例に示すように、AWSアクセスキーを使用して*seed.yml*ファイルを設定します。バケット名とソースファイル名も指定する必要があります。オプションで、複数のファイルに一致させるためにpath_prefixを指定できます。以下の例では、path_prefix: `path/to/sample_fileは以下に一致します`

- `path/to/sample_201501.csv.gz`
- `path/to/sample_201502.csv.gz`
- `path/to/sample_201505.csv.gz`
- `など`


path_prefixを先頭の'/'付きで使用すると、意図しない結果になる可能性があります。例えば、「path_prefix: /path/to/sample_file」とすると、プラグインはs3://sample_bucket//path/to/sample_fileでファイルを探すことになり、これはS3上では意図したパスs3://sample_bucket/path/to/sample_fileとは異なります。


```yaml
in:
  type: s3_v2
  access_key_id: XXXXXXXXXX
  secret_access_key: YYYYYYYYYY
  bucket: sample_bucket
  # path to the *.json or *.csv or *.tsv file on your s3 bucket
  path_prefix: path/to/sample_file
  path_match_pattern: \.csv$ # a file will be skipped if its path doesn't match with this pattern
  ## some examples of regexp:
  #path_match_pattern: /archive/ # match files in .../archive/... directory
  #path_match_pattern: /data1/|/data2/ # match files in .../data1/... or .../data2/... directory
  #path_match_pattern: .csv$|.csv.gz$ # match files whose suffix is .csv or .csv.gz
out:
  mode: append
```

既存の認証を再利用する場合は、**td_authentication_id**設定キーの値に認証IDを設定します。これは、assume-role認証方法に必要です。[既存の認証の再利用](#%E6%97%A2%E5%AD%98%E3%81%AEauthentication%E3%81%AE%E5%86%8D%E5%88%A9%E7%94%A8)を参照してください。

#### フィールドの推測(load.ymlの生成)

*connector:guess*は、ソースファイルを自動的に読み取り、ファイル形式とフィールドおよび列を評価します。


```bash
td connector:guess seed.yml -o load.yml
```

load.ymlファイルを確認すると、ファイル形式、エンコーディング、カラム名、型を含む「推測された」ファイル形式定義が表示されます。


```yaml
in:
  type: s3_v2
  access_key_id: XXXXXXXXXX
  secret_access_key: YYYYYYYYYY
  bucket: sample_bucket
  path_prefix: path/to/sample_file
  parser:
    charset: UTF-8
    newline: CRLF
    type: csv
    delimiter: ','
    quote: '"'
    escape: ''
    skip_header_lines: 1
    columns:
    - name: id
      type: long
    - name: company
      type: string
    - name: customer
      type: string
    - name: created_at
      type: timestamp
      format: '%Y-%m-%d %H:%M:%S'
out:
  mode: append
```

*td connector:preview*コマンドを使用してデータのプレビューを表示できます。


```bash
td connector:preview load.yml
```

connector:guessコマンドはソースデータから3行以上、2カラム以上のデータを必要とします。これは、コマンドがソースデータのサンプル行を使用してカラム定義を評価するためです。

システムがカラム名またはカラムタイプを予期せず検出した場合は、load.ymlを直接変更して再度プレビューしてください。

現在、Data Connectorは"boolean"、"long"、"double"、"string"、"timestamp"タイプの解析をサポートしています。

#### Load Jobの実行

Load Jobを送信します。データのサイズによっては数時間かかる場合があります。データを保存するTreasure Dataのデータベースとテーブルを指定します。

Treasure Dataのストレージは時刻でパーティション化されているため、`--time-column`オプションを指定することが推奨されます（[data partitioning](/products/customer-data-platform/data-workbench/queries/data-partitioning-in-treasure-data)を参照）。このオプションが指定されていない場合、Data Connectorは最初の*long*または*timestamp*カラムをパーティション化時刻として選択します。`--time-column`で指定するカラムの型は、*long*または*timestamp*のいずれかでなければなりません。

データに時刻カラムがない場合は、*add_time*フィルタオプションを使用して時刻カラムを追加できます。詳細については、[add_time filter plugin](/products/customer-data-platform/integration-hub/batch/import/filter/add_time-filter-function)を参照してください。


```bash
td connector:issue load.yml \
--database td_sample_db --table td_sample_table \
--time-column created_at
```

以下の例では、connector:issueコマンドは、すでに*database(td_sample_db)*と*table(td_sample_table)*を作成していることを前提としています。データベースまたはテーブルがTDに存在しない場合、このコマンドは失敗します。データベースとテーブルを手動で作成するか、*td connector:issue*コマンドで*--auto-create-table*オプションを使用してデータベースとテーブルを自動作成してください：


```bash
td connector:issue load.yml \
--database td_sample_db --table td_sample_table \
--time-column created_at --auto-create-table
```

データコネクタはサーバーサイドでレコードをソートしません。時間ベースのパーティショニングを効果的に使用するには、事前にファイル内のレコードをソートしておいてください。

*time*という名前のフィールドがある場合は、*--time-column*オプションを指定する必要はありません。


```bash
td connector:issue load.yml --database td_sample_db --table td_sample_table
```

#### インポートモード

load.ymlファイルのoutセクションでファイルインポートモードを指定できます。

out:セクションは、データがTreasure Dataテーブルにどのようにインポートされるかを制御します。

たとえば、Treasure Dataの既存のテーブルにデータを追加するか、データを置き換えるかを選択できます。

| **モード** | **説明** | **例** |
|  --- | --- | --- |
| Append | レコードがターゲットテーブルに追加されます。 | `in:  ...out:  mode: append` |
| Always Replace | ターゲットテーブルのデータを置き換えます。ターゲットテーブルに加えられた手動のスキーマ変更はそのまま保持されます。 | `in:  ...out:  mode: replace` |
| Replace on new data | インポートする新しいデータがある場合にのみ、ターゲットテーブルのデータを置き換えます。 | `in:  ...out:  mode: replace_on_new_data` |


### スケジュール実行

増分ファイルインポートのために、データコネクタの定期実行をスケジュールできます。高可用性を確保するために、スケジューラーを慎重に設定しています。

スケジュールされたインポートでは、指定されたprefixに一致するすべてのファイルを、以下のいずれかのフィールドの条件でインポートできます：

- use_modified_timeが無効の場合、最後のパスが次の実行のために保存されます。2回目以降の実行では、コネクタはアルファベット順で最後のパスの後にあるファイルのみをインポートします。
- それ以外の場合、ジョブが実行された時刻が次の実行のために保存されます。2回目以降の実行では、コネクタはその実行時刻以降にアルファベット順で変更されたファイルのみをインポートします。


### TD Toolbeltを使用したスケジュールの作成

*td connector:create*コマンドを使用して新しいスケジュールを作成できます。


```bash
td connector:create daily_import "10 0 * * *" \
td_sample_db td_sample_table load.yml
```

Treasure Dataのストレージは時間でパーティション化されているため、*--time-column*オプションを指定することをお勧めします（[data partitioning](/products/customer-data-platform/data-workbench/queries/data-partitioning-in-treasure-data)も参照してください）。


```bash
td connector:create daily_import "10 0 * * *" \
td_sample_db td_sample_table load.yml \
--time-column created_at
```

`cron`パラメータは、`@hourly`、`@daily`、`@monthly`の3つの特別なオプションも受け入れます。

デフォルトでは、スケジュールはUTCタイムゾーンで設定されます。-tまたは--timezoneオプションを使用して、タイムゾーンでスケジュールを設定できます。`--timezone`オプションは、'Asia/Tokyo'、'America/Los_Angeles'などの拡張タイムゾーン形式のみをサポートします。PST、CSTなどのタイムゾーンの略語は*サポートされておらず*、予期しないスケジュールにつながる可能性があります。

### すべてのスケジュールの一覧表示

*td connector:list*コマンドを実行すると、現在スケジュールされているエントリのリストを確認できます。


```bash
td connector:list
```

### スケジュール設定と履歴の表示


```
td connector:show daily_importName
```

`td connector:history`はスケジュールエントリの実行履歴を表示します。各実行の結果を調査するには、td job jobidを使用してください。


```
td connector:history
```

### スケジュールの削除

td connector:deleteはスケジュールを削除します。


```
td connector:delete daily_import
```

### IAM権限の設定

*connector:guess*および*connector:issue*コマンドで使用されるYML設定ファイルに指定されたIAM認証情報は、アクセスする必要があるAWS S3リソースに対する権限を持っている必要があります。IAMユーザーがこれらの権限を持っていない場合は、事前定義されたポリシー定義のいずれかでユーザーを設定するか、JSON形式で新しいポリシー定義を作成してください。

以下の例は、[Policy Definition reference](http://docs.aws.amazon.com/IAM/latest/UserGuide/reference_policies_elements.html)形式に基づいています。これは、IAMユーザーに「your-bucket」への*読み取り専用*権限（GetObjectおよびListBucketアクション経由）を与えます。


```json
{
  "Version": "2012-10-17",
  "Statement": [
    {
      "Effect": "Allow",
      "Action": [
        "s3:GetObject",
        "s3:ListBucket"
      ],
      "Resource": [
        "arn:aws:s3:::your-bucket",
        "arn:aws:s3:::your-bucket/*"
      ]
    }
  ]
}
```

「`your-bucket`」を実際のS3バケット名に置き換えてください。

### 一時的な認証情報プロバイダとしてAWS Security Token Service (STS)を使用する

特定の場合において、access_key_idとsecret_access_keyによるIAM基本認証はリスクが高すぎる可能性があります（ジョブの実行時やセッションの作成後にsecret_access_keyが明示的に表示されることはありませんが）。

S3データコネクタは、AWS Secure Token Service (STS)を使用して[Temporary Security Credentials](http://docs.aws.amazon.com/IAM/latest/UserGuide/id_credentials_temp.html)を提供できます。AWS STSを使用すると、任意のIAMユーザーが自身のaccess_key_idとsecret_access_keyを使用して、特定の有効期限を持つ以下の一時キーを作成できます：

- new_access_key_id
- new_secret_access_key
- session_token keys


以下はTemporary Security Credentialsのタイプです：

- [**Session Token**](http://docs.aws.amazon.com/IAM/latest/UserGuide/id_credentials_temp_control-access_getsessiontoken.html)
有効期限が指定された最もシンプルなSecurity Credentialsです。temporary credentialsは、それを生成したIAMユーザーと同じアクセス権を持ちます。これらのcredentialsは、有効期限が切れておらず、元のIAMユーザーの権限が変更されていない限り有効です。
- [**Federation Token**](http://docs.aws.amazon.com/IAM/latest/UserGuide/id_credentials_temp_control-access_getfederationtoken.html)
これは上記のSession Tokenに対して追加の権限制御レイヤーを追加します。Federation Tokenを生成する際、IAMユーザーはPermission Policy定義を指定する必要があります。このスコープを使用して、Federation Tokenの所有者がアクセスできるリソースを制限できます（トークンを付与するIAMユーザーのアクセス権より少なくすることができます）。任意の[Permission Policy](http://docs.aws.amazon.com/IAM/latest/UserGuide/reference_policies_elements.html)定義を使用できますが、権限のスコープはトークンを生成したIAMユーザーの権限と同じか、そのサブセットに制限されます。Session Tokenと同様に、Federation Token credentialsは有効期限が切れておらず、元のIAM credentialsに関連付けられた権限が変更されていない限り有効です。


AWS STS Temporary Security Credentialsは、[AWS CLI](https://aws.amazon.com/cli/)または任意の言語の[AWS SDK](https://aws.amazon.com/tools/)を使用して生成できます。

#### Session Token


```bash
aws sts get-session-token --duration-seconds 900
```

#### Federation Token

この例では、

- `temp_creds`はFederated tokenまたはユーザーのtemp credentialsの名前です。
- `bucketname`はアクセスが許可されるS3バケットの名前です。（詳細については[ARN specification](http://docs.aws.amazon.com/general/latest/gr/aws-arns-and-namespaces.html#arn-syntax-s3)を参照してください）
- `s3:GetObject`と`s3:ListBucket`はAWS S3バケットの基本的な読み取り操作です。



```bash
aws sts get-federation-token --name temp_creds --duration-seconds 900 \
--policy '{"Statement": [{"Effect": "Allow", "Action": ["s3:GetObject", "s3:ListBucket"], "Resource": "arn:aws:s3:::bucketname"}]}'
```

AWS STS credentialsは取り消すことができません。有効期限が切れるか、credentialsを生成するために使用した元のIAMユーザーの権限を削除または取り消すまで有効です。

Temporary Security Credentialsが生成されたら、*seed.yml*ファイルに`SecretAccessKey`、`AccessKeyId`、`SessionToken`を含め、通常通りS3用のData Connectorを実行します。


```
in:
  type: s3_v2
  auth_method: session
  access_key_id: XXXXXXXXXX
  secret_access_key: YYYYYYYYYY
  session_token: ZZZZZZZZZZ
  bucket: sample_bucket
  path_prefix: path/to/sample_file
```

#### Credential Expiration

STS credentialsは指定された時間後に有効期限が切れるため、credentialを使用するdata connector jobは最終的に失敗し始める可能性があります。現在、STS credentialsの有効期限が切れたと報告された場合、data connector jobは最大回数（5回）までリトライし、最終的に「error」のstatusで完了します。

インポートを確認するには、[Validating Your Data Connector Jobs](/int/amazon-s3-import-integration-v2)の手順を参照してください。

## 既存のAuthenticationの再利用

この機能により、Treasure コンソール UIで定義された既存のauthenticationを再利用できます。

1. [Treasure コンソールを使用したAWS S3からのインポート](/ja/int/amazon-s3-import-integration-v2)の手順に従ってauthenticationを作成します。
2. **Integrations Hub** > **Authentications**画面に移動します
3. 保存されたAuthenticationをクリックします。
4. Authentication IDはブラウザのURLに表示される番号です
![](/assets/assume_role.b8145f783521c29da2c5b02358d1f5d696da7eef4b05bf71608d33bd43055686.71fd65e8.png)
5. 上記のAuthentication IDをconfig キー**td_authentication_id**として使用し、Treasure ワークフローまたはCLI（Toolbelt）の設定を作成します。
6. Authenticationを再利用した設定の例


## Workflow設定


```yaml
+import_from_s3_assume_role_with_existing_connection:
  td_load>: cfg_load.yml
  database: test_db
  table: test_tbl

## cfg_load.yml
in:
  type: s3_v2
  bucket: sample_bucket
  path_prefix: path/to/sample_file
  td_authentication_id: 287355
  parser:
    charset: UTF-8
    newline: CRLF
    type: csv
    delimiter: ","
    quote: "\""
    escape: "\""
    trim_if_not_quoted: false
    skip_header_lines: 1
    allow_extra_columns: false
    allow_optional_columns: false
    columns:
    - name: col_1
      type: string
    - name: col_2
      type: string
```

### CLI設定

Seed設定の例（seed.yml）


```yaml
in:
  type: s3_v2
  td_authentication_id: 287355
  bucket: sample_bucket
  path_prefix: path/to/sample_file
```