

# Azure SQL 接続
<a name="aws-glue-programming-etl-connect-azuresql-home"></a>

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

Azure SQL の詳細については、[Azure SQL のドキュメント](https://azure.microsoft.com/en-us/products/azure-sql)を参照してください。

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

AWS Glue から Azure SQL に接続するには、Azure SQL 認証情報を作成して AWS Secrets Manager シークレットに保存し、そのシークレットを Azure SQL AWS Glue 接続に関連付ける必要があります。

**Azure SQL に対する接続を設定するには:**

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

1. AWS Glue コンソールで、「[AWS Glue 接続の追加](console-connections.md)」にあるステップに従って接続を作成します。接続を作成したら、将来的に AWS Glue で使用するために、接続名 *connectionName* を維持します。
   + **[接続タイプ]** を選択する際に、[Azure SQL] を選択します。
   + **Azure SQL URL** を指定する場合は、JDBC エンドポイント URL を入力します。

      URL は、次のような形式になります: `jdbc:sqlserver://databaseServerName:databasePort;databaseName=azuresqlDBname;`。

     AWS Glue には次の URL プロパティが必要です。
     + `databaseName` – 接続先の Azure SQL のデフォルトデータベース。

     Azure SQL Managed Instances の JDBC URL の詳細については、[Microsoft のドキュメント](https://learn.microsoft.com/en-us/sql/connect/jdbc/building-the-connection-url?view=azuresqldb-mi-current)を参照してください。
   + **[AWS Secret]** をクリックして、*secretName* を入力します。

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

## Azure SQL テーブルからの読み取り
<a name="aws-glue-programming-etl-connect-azuresql-read"></a>

**前提条件:** 
+ 読み取り元とする Azure SQL テーブル。テーブルの識別情報である *databaseName* および *tableIdentifier* が必要になります。

  Azure SQL テーブルは、データベース、スキーマ、テーブル名によって識別されます。Azure SQL に接続する際には、データベース名とテーブル名を指定する必要があります。スキーマがデフォルトの「public」でない場合は、スキーマも指定する必要があります。データベースは、*connectionName* の URL プロパティ、`dbtable` を通じたスキーマおよびテーブル名を介して指定されます。
+ 認証情報を提供するように設定された AWS Glue Azure SQL 接続。認証情報を設定するには、前の手順「Azure SQL に対する接続を設定するには」のステップを実行します。AWS Glue 接続、*connectionName* の名前が必要になります。

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

```
azuresql_read_table = glueContext.create_dynamic_frame.from_options(
    connection_type="azuresql",
    connection_options={
        "connectionName": "connectionName",
        "dbtable": "tableIdentifier"
    }
)
```

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

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

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

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

この例では、既存の DynamicFrame である *dynamicFrame* から Azure SQL に情報を書き込みます。テーブルに既に情報がある場合、AWS Glue は DynamicFrame からのデータを付加します。

**前提条件:** 
+ 書き込み先とする Azure SQL テーブル。テーブルの識別情報である *databaseName* および *tableIdentifier* が必要になります。

  Azure SQL テーブルは、データベース、スキーマ、テーブル名によって識別されます。Azure SQL に接続する際には、データベース名とテーブル名を指定する必要があります。スキーマがデフォルトの「public」でない場合は、スキーマも指定する必要があります。データベースは、*connectionName* の URL プロパティ、`dbtable` を通じたスキーマおよびテーブル名を介して指定されます。
+ Azure SQL 認証情報。認証情報を設定するには、前の手順「Azure SQL に対する接続を設定するには」のステップを実行します。AWS Glue 接続、*connectionName* の名前が必要になります。

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

```
azuresql_write = glueContext.write_dynamic_frame.from_options(
    connection_type="azuresql",
    connection_options={
        "connectionName": "connectionName",
        "dbtable": "tableIdentifier"
    }
)
```

## Azure SQL 接続オプションのリファレンス
<a name="aws-glue-programming-etl-connect-azuresql-reference"></a>
+ `connectionName` — 必須。読み込み/書き込みに使用されます。認証情報を接続方法に提供するように設定された AWS Glue Azure SQL 接続の名前。
+ `databaseName` — 読み込み/書き込みに使用されます。有効な値: Azure SQL データベース名。接続先の Azure SQL のデータベースの名前。
+ `dbtable` — 書き込みの場合は必須。`query` が指定されていない限り、読み取りの場合は必須。読み込み/書き込みに使用されます。有効な値: Azure SQL テーブルの名前、またはピリオドで区切られたスキーマ/テーブル名の組み合わせ。接続先のテーブルを識別するテーブルとスキーマを指定するために使用されます。デフォルトのスキーマは「public」です。テーブルがデフォルト以外のスキーマにある場合は、この情報を `schemaName.tableName` の形式で入力します。
+ `query` — 読み取りに使用。Azure SQL から読み取るときに何を取得するかを定義する Transact-SQL SELECT クエリ。詳細については、[Microsoft のドキュメント](https://learn.microsoft.com/en-us/sql/t-sql/queries/select-transact-sql?view=azuresqldb-mi-current)を参照してください。