

# Teradata Vantage 接続
<a name="aws-glue-programming-etl-connect-teradata-home"></a>

AWS Glue for Spark を使用して、AWS Glue 4.0 以降のバージョンの Teradata Vantage の既存のテーブルからの読み取りとテーブルへの書き込みを行うことができます。SQL クエリを使用して、Teradata から何を読み取るかを定義できます。AWS Glue 接続を介して AWS Secrets Manager で保存されているユーザー名およびパスワードの認証情報を使用して Teradata に接続できます。

Teradata の詳細については、[Teradata ドキュメント](https://docs.teradata.com/)を参照してください。

## Teradata 接続の設定
<a name="aws-glue-programming-etl-connect-teradata-configure"></a>

AWS Glue から Teradata に接続するには、Teradata 認証情報を作成して AWS Secrets Manager シークレットに保存し、そのシークレットを Teradata AWS Glue 接続に関連付ける必要があります。Teradata インスタンスが Amazon VPC 内にある場合は、AWS Glue Teradata 接続にネットワークオプションを提供する必要もあります。

AWS Glue から Teradata に接続するには、いくつかの前提条件を満たす必要がある場合があります。
+ Amazon VPC を通じて Teradata 環境にアクセスしている場合は、AWS Glue ジョブが Teradata 環境と通信できるように Amazon VPC を設定します。パブリックインターネット経由で Teradata 環境にアクセスすることは推奨されていません。

  Amazon VPC で、AWS Glue がジョブの実行中に使用する **[VPC]**、**[サブネット]**、および **[セキュリティグループ]** を特定または作成します。さらに、Teradata インスタンスとこの場所の間のネットワークトラフィックを許可するように Amazon VPC が設定されているようにする必要があります。ジョブでは、Teradata クライアントポートとの TCP 接続を確立する必要があります。Teradata ポートの詳細については、[Teradata のドキュメント](https://docs.teradata.com/r/Teradata-VantageTM-on-AWS-DIY-Installation-and-Administration-Guide/April-2020/Before-Deploying-Vantage-on-AWS-DIY/Security-Groups-and-Ports)を参照してください。

  ネットワークレイアウトに応じて、安全な VPC 接続を実現するには、Amazon VPC および他のネットワークサービスの変更が必要な場合があります。AWS 接続の詳細については、Teradata ドキュメントの「[AWS 接続オプション](https://docs.teradata.com/r/Teradata-VantageCloud-Enterprise/Get-Started/Connecting-Your-Environment/AWS-Connectivity-Options)」を参照してください。

**AWS Glue Teradata 接続を設定するには:**

1. Teradata 設定で、AWS Glue が接続するユーザーとパスワード (*teradataUser* および *teradataPassword*) を識別または作成します。詳細については、Teradata ドキュメントの「[Vantage セキュリティの概要](https://docs.teradata.com/r/Configuring-Teradata-VantageTM-After-Installation/January-2021/Security-Overview/Vantage-Security-Overview)」を参照してください。

1. AWS Secrets Manager で、Teradata 認証情報を使用してシークレットを作成します。Secrets Manager でシークレットを作成するには、AWS Secrets Manager ドキュメントの [AWS Secrets Manager シークレットを作成する](https://docs.aws.amazon.com//secretsmanager/latest/userguide/create_secret.html) にあるチュートリアルに従ってください。シークレットを作成したら、次のステップのためにシークレット名 *secretName* を保存しておきます。
   + **[key/value ペア]** を選択する際に、*teradataUsername* という値を持つキー `user` のペアを作成します。
   + **[key/value ペア]** を選択する際に、*teradataPassword* という値を持つキー `password` のペアを作成します。

1. AWS Glue コンソールで、「[AWS Glue 接続の追加](console-connections.md)」にあるステップに従って接続を作成します。接続を作成したら、次のステップのために接続名 *connectionName* を保存しておきます。
   + **[接続タイプ]** を選択する際に、[Teradata] を選択します。
   + **[JDBC URL]** を入力する場合は、インスタンスの URL を入力します。JDBC URL に特定のカンマ区切りの接続パラメータをハードコーディングすることもできます。URL は次の形式に準拠する必要があります: `jdbc:teradata://teradataHostname/ParameterName=ParameterValue,ParameterName=ParameterValue`

     サポートされる URL パラメータには次が含まれます。
     + `DATABASE` – デフォルトでアクセスするホスト上のデータベースの名前。
     + `DBS_PORT` – データベースポート。非標準ポートで実行する場合に使用されます。
   + **[認証情報タイプ]** を選択する場合は、**[AWS Secrets Manager]** を選択し、**[AWS シークレット]** を *secretName* に設定します。

1. 次の状況では、追加の設定が必要になる場合があります。
   + 

     Amazon VPC の AWS でホストされている Teradata インスタンスの場合
     + Teradata セキュリティ認証情報を定義する AWS Glue 接続に、Amazon VPC 接続に関する情報を提供する必要があります。接続を作成または更新する際に、**[ネットワークオプション]** で **[VPC]**、**[サブネット]**、および **[セキュリティグループ]** を設定します。

AWS Glue Teradata 接続を作成した後、接続メソッドを呼び出す前に次のステップを実行する必要があります。
+ AWS Glue ジョブに関連付けられている IAM ロールに *secretName* を読み取るアクセス許可を付与します。
+ AWS Glue ジョブ設定で、**追加のネットワーク接続**として *connectionName* を指定します。

## Teradata からの読み取り
<a name="aws-glue-programming-etl-connect-teradata-read"></a>

**前提条件:**
+ 読み取り元とする Teradata テーブル。テーブル名 *tableName* が必要になります。
+ 認証情報を提供するように設定された AWS Glue Teradata 接続。認証情報を設定するには、「Teradata に対する接続を設定するには」のステップを実行します。AWS Glue 接続、*connectionName* の名前が必要になります。

例えば、次のようになります。

```
teradata_read_table = glueContext.create_dynamic_frame.from_options(
    connection_type="teradata",
    connection_options={
        "connectionName": "connectionName",
        "dbtable": "tableName"
    }
)
```

SELECT SQL クエリを指定して、DynamicFrame に返される結果をフィルタリングすることもできます。`query` を設定する必要があります。

例えば、次のようになります。

```
teradata_read_query = glueContext.create_dynamic_frame.from_options(
    connection_type="teradata",
    connection_options={
        "connectionName": "connectionName",
        "query": "query"
    }
)
```

## Teradata テーブルへの書き込み
<a name="aws-glue-programming-etl-connect-teradata-write"></a>

**前提条件:** 書き込み先とする Teradata テーブルである *tableName*。**接続メソッドを呼び出す前にテーブルを作成する必要があります。**

例えば、次のようになります。

```
teradata_write = glueContext.write_dynamic_frame.from_options(
    connection_type="teradata",
    connection_options={
        "connectionName": "connectionName", 
        "dbtable": "tableName"
    }
)
```

## Teradata 接続オプションのリファレンス
<a name="aws-glue-programming-etl-connect-teradata-reference"></a>
+ `connectionName` — 必須。読み込み/書き込みに使用されます。認証およびネットワークの情報を接続方法に提供するように設定された AWS Glue Teradata 接続の名前。
+ `dbtable` — 書き込みの場合は必須。`query` が指定されていない限り、読み取りの場合は必須。読み込み/書き込みに使用されます。接続メソッドがインタラクションするテーブルの名前。
+ `query` — 読み取りに使用。Teradata から読み取るときに何を取得するかを定義する SELECT SQL クエリ。