

# AWS Glue 接続の追加
<a name="console-connections"></a>

 AWS Glue for Spark のデータソースにはプログラム的に接続できます。詳細については、[AWS Glue for Spark での ETL の接続タイプとオプション](aws-glue-programming-etl-connect.md)を参照してください。

また、AWS Glue コンソールを使用して、接続の追加、編集、削除、およびテストを行うことができます。AWS Glue 接続の詳細については、「[データへの接続](glue-connections.md)」を参照してください。

**Topics**
+ [Adobe Analytics に対する接続](connecting-to-adobe-analytics.md)
+ [Adobe Marketo Engage への接続](connecting-to-data-adobe-marketo-engage.md)
+ [AWS Glue Studio の Amazon Redshift に接続する](connecting-to-data-redshift.md)
+ [Asana に対する接続](connecting-to-asana.md)
+ [AWS Glue Studio での Azure Cosmos DB に対する接続](connecting-to-data-azurecosmos.md)
+ [AWS Glue Studio での Azure SQL に対する接続](connecting-to-data-azuresql.md)
+ [Blackbaud Raiser's Edge NXT への接続](connecting-to-data-blackbaud.md)
+ [CircleCI への接続](connecting-to-data-circleci.md)
+ [Datadog に対する接続](connecting-to-datadog.md)
+ [Docusign Monitor への接続](connecting-to-data-docusign-monitor.md)
+ [Domo への接続](connecting-to-data-domo.md)
+ [Dynatrace への接続](connecting-to-data-dynatrace.md)
+ [Facebook 広告への接続](connecting-to-data-facebook-ads.md)
+ [Facebook Page Insights に対する接続](connecting-to-data-facebook-page-insights.md)
+ [Freshdesk に対する接続](connecting-to-data-freshdesk.md)
+ [Freshsales に対する接続](connecting-to-data-freshsales.md)
+ [Google 広告に対する接続](connecting-to-googleads.md)
+ [Google Analytics 4 への接続](connecting-to-googleanalytics.md)
+ [AWS Glue Studio で Google BigQuery に接続する](connecting-to-data-bigquery.md)
+ [Google 検索コンソールに対する接続](connecting-to-data-google-search-console.md)
+ [Google Sheets への接続](connecting-to-googlesheets.md)
+ [HubSpot への接続](connecting-to-data-hubspot.md)
+ [Instagram 広告への接続](connecting-to-data-instagram-ads.md)
+ [AWS Glue Studio での Intercom への接続](connecting-to-data-intercom.md)
+ [Jira Cloud への接続](connecting-to-data-jira-cloud.md)
+ [Kustomer への接続](connecting-to-data-kustomer.md)
+ [LinkedIn に対する接続](connecting-to-linkedin.md)
+ [Mailchimp への接続](connecting-to-mailchimp.md)
+ [Microsoft Dynamics 365 CRM への接続](connecting-to-microsoft-dynamics-365.md)
+ [Microsoft Teams への接続](connecting-to-microsoft-teams.md)
+ [Mixpanel に対する接続](connecting-to-mixpanel.md)
+ [Monday への接続](connecting-to-monday.md)
+ [AWS Glue Studio での MongoDB に対する接続](connecting-to-data-mongodb.md)
+ [Oracle NetSuite への接続](connecting-to-data-oracle-netsuite.md)
+ [AWS Glue Studio での OpenSearch Service に対する接続](connecting-to-data-opensearch.md)
+ [Okta への接続](connecting-to-okta.md)
+ [PayPal に対する接続](connecting-to-data-paypal.md)
+ [Pendo への接続](connecting-to-pendo.md)
+ [Pipedrive への接続](connecting-to-pipedrive.md)
+ [Productboard への接続](connecting-to-productboard.md)
+ [QuickBooks に対する接続](connecting-to-data-quickbooks.md)
+ [REST API への接続](connecting-to-data-rest-api.md)
+ [Salesforce への接続](connecting-to-data-salesforce.md)
+ [Salesforce Marketing Cloud への接続](connecting-to-data-salesforce-marketing-cloud.md)
+ [Salesforce Commerce Cloud への接続](connecting-to-salesforce-commerce-cloud.md)
+ [Salesforce Marketing Cloud Account Engagement への接続](connecting-to-data-salesforce-marketing-cloud-account-engagement.md)
+ [AWS Glue Studio での SAP HANA に対する接続](connecting-to-data-saphana.md)
+ [SAP OData への接続](connecting-to-data-sap-odata.md)
+ [SendGrid に対する接続](connecting-to-data-sendgrid.md)
+ [ServiceNow への接続](connecting-to-data-servicenow.md)
+ [AWS Glue Studio での Slack への接続](connecting-to-data-slack.md)
+ [Smartsheet に対する接続](connecting-to-smartsheet.md)
+ [AWS Glue Studio での Snapchat 広告への接続](connecting-to-data-snapchat-ads.md)
+ [AWS Glue Studio での Snowflake への接続](connecting-to-data-snowflake.md)
+ [AWS Glue Studio での Stripe への接続](connecting-to-data-stripe.md)
+ [AWS Glue Studio での Teradata Vantage に対する接続](connecting-to-data-teradata.md)
+ [Twilio に対する接続](connecting-to-data-twilio.md)
+ [AWS Glue Studio での Vertica に対する接続](connecting-to-data-vertica.md)
+ [WooCommerce に対する接続](connecting-to-data-woocommerce.md)
+ [Zendesk への接続](connecting-to-data-zendesk.md)
+ [Zoho CRM への接続](connecting-to-data-zoho-crm.md)
+ [Zoom Meetings に対する接続](connecting-to-data-zoom-meetings.md)
+ [独自の JDBC ドライバーを使用した JDBC 接続の追加](console-connections-jdbc-drivers.md)

# Adobe Analytics に対する接続
<a name="connecting-to-adobe-analytics"></a>

Adobe Analytics は、カスタマージャーニーをサポートするマルチチャネルデジタルエクスペリエンスからデータを収集し、データを分析するためのツールを提供する堅牢なデータ分析プラットフォームです。これは、マーケティング担当者やビジネスアナリストがビジネス分析の目的で一般的に使用するプラットフォームです。Adobe Analytics ユーザーの場合は、Adobe Analytics アカウントに AWS Glue を接続できます。その後、Adobe Analytics を ETL ジョブのデータソースとして使用できます。これらのジョブを実行して、Adobe Analytics と AWS サービス、またはその他のサポートされているアプリケーション間でデータを転送します。

**Topics**
+ [Adobe Analytics の AWS Glue サポート](adobe-analytics-support.md)
+ [接続を作成および使用するための API オペレーションを含むポリシー](adobeanalytics-configuring-iam-permissions.md)
+ [Adobe Analytics の設定](adobeanalytics-configuring.md)
+ [Adobe Analytics 接続の設定](adobeanalytics-configuring-connections.md)
+ [Adobe Analytics エンティティからの読み取り](adobeanalytics-reading-from-entities.md)
+ [Adobe Analytics の接続オプション](adobeanalytics-connection-options.md)
+ [Adobe Analytics アカウントの作成](adobeanalytics-create-account.md)
+ [制限](adobeanalytics-connector-limitations.md)

# Adobe Analytics の AWS Glue サポート
<a name="adobe-analytics-support"></a>

AWS Glue は、次のように Adobe Analytics をサポートします。

**ソースとしてサポートされていますか?**  
はい。AWS Glue ETL ジョブを使用して、Adobe Analytics からデータをクエリできます。

**ターゲットとしてサポートされていますか?**  
いいえ。

**サポートされている Adobe Analytics API バージョン**  
 v2.0 

# 接続を作成および使用するための API オペレーションを含むポリシー
<a name="adobeanalytics-configuring-iam-permissions"></a>

次のサンプル ポリシーで、接続の作成と使用に必要な AWS の権限について説明します。新しいロールを作成する場合は、以下を含むポリシーを作成します。

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

****  

```
{
  "Version":"2012-10-17",		 	 	 
  "Statement": [
    {
      "Effect": "Allow",
      "Action": [
        "glue:ListConnectionTypes",
        "glue:DescribeConnectionType",
        "glue:RefreshOAuth2Tokens",
        "glue:ListEntities",
        "glue:DescribeEntity"
      ],
      "Resource": "*"
    }
  ]
}
```

------

上記の方法を使用しない場合は、代わりに次のマネージド IAM ポリシーを使用します。
+  [ AWSGlueServiceRole ](https://console.aws.amazon.com/iam/home#policies/arn:aws:iam::aws:policy/service-role/AWSGlueServiceRole) – さまざまな AWS Glue プロセスを実行するために必要なリソースへのアクセス権をユーザーに代わって付与します。これらのリソースには、AWS Glue、Amazon S3、IAM、CloudWatch Logs、および Amazon EC2 が含まれます。このポリシーで指定されたリソースの命名規則に従った場合、AWS Glue プロセスは必要なアクセス許可を使用できます。このポリシーは、通常、クローラー、ジョブ、開発エンドポイントを定義するときに指定されたロールにアタッチされます。
+  [ AWSGlueConsoleFullAccess ](https://console.aws.amazon.com/iam/home#policies/arn:aws:iam::aws:policy/AWSGlueConsoleFullAccess) — ポリシーがアタッチされているアイデンティティが AWS マネージメントコンソールを使用するときは、AWS Glue リソースへのフルアクセスを許可します。このポリシーで指定されたリソースの命名規則に従った場合、ユーザーは完全なコンソール機能を使用できます。このポリシーは、通常 AWS Glue コンソールのユーザーにアタッチされています。

# Adobe Analytics の設定
<a name="adobeanalytics-configuring"></a>

AWS Glue を使用して Adobe Analytics からデータを転送できるようにするには、次の要件を満たす必要があります。

## 最小要件
<a name="adobeanalytics-configuring-min-requirements"></a>
+ E メールとパスワードを持つ Adobe Analytics アカウントがある。アカウントの作成の詳細については、「[Adobe Analytics アカウントの作成](adobeanalytics-create-account.md)」を参照してください。
+  Adobe Analytics アカウントで API アクセスが有効になっている。Select、Prime、Ultimate エディションでは、API アクセスがデフォルトで有効になっています。

これらの要件を満たすと、Adobe Analytics アカウントに AWS Glue を接続する準備が整います。一般的な接続では、Adobe Analytics で他に何もする必要はありません。

# Adobe Analytics 接続の設定
<a name="adobeanalytics-configuring-connections"></a>

 Adobe Analytics は、`OAuth2` の `AUTHORIZATION_CODE` グラントタイプをサポートしています。

このグラントタイプは、ユーザーを認証するためにサードパーティーの認証サーバーにユーザーをリダイレクトすることから、「three-legged」の `OAuth` と見なされます。ユーザーは、Adobe Analytics で独自の接続アプリを作成し、AWS Glue コンソールを介して接続を作成するときに独自のクライアント ID とクライアントシークレットを指定することを選択できます。このシナリオでは、引き続き Adobe Analytics にリダイレクトされてログインし、リソースへアクセスするために AWS Glue を承認します。

このグラントタイプは、更新トークンとアクセストークンになります。アクセストークンの有効期間は短く、更新トークンを使用してユーザーとやり取りすることなく自動的に更新される場合があります。

 AUTHORIZATION\$1CODE OAuth フローの接続アプリケーションの作成に関する Adobe Analytics の公開ドキュメントについては、「[Adobe Analytics API](https://adobedocs.github.io/analytics-2.0-apis/)」を参照してください。

Adobe Analytics 接続を設定するには:

1. AWS Secrets Manager で、次の詳細を含むシークレットを作成します。

   カスタマーマネージド接続アプリケーションの場合 – シークレットには、`USER_MANAGED_CLIENT_APPLICATION_CLIENT_SECRET` を使用して接続されたアプリケーションのコンシューマーシークレットをキーとして含める必要があります。
**注記**  
AWS Glue で接続ごとにシークレットを作成する必要があります。

1. AWS Glue Studio で、以下の手順に従って **[データ接続]** の下に接続を作成します。

   1. **[接続タイプ]** を選択する際に、[Adobe Analytics] を選択します。

   1. 接続先の Adobe Analytics の `x_api_key, instanceUrl` を指定します。

   1. AWS Glue が次のアクションを担い、その権限を持つことができる IAM ロールを選択します。

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

****  

      ```
      {
        "Version":"2012-10-17",		 	 	 
        "Statement": [
          {
            "Effect": "Allow",
            "Action": [
              "secretsmanager:DescribeSecret",
              "secretsmanager:GetSecretValue",
              "secretsmanager:PutSecretValue",
              "ec2:CreateNetworkInterface",
              "ec2:DescribeNetworkInterfaces",
              "ec2:DeleteNetworkInterface"
            ],
            "Resource": "*"
          }
        ]
      }
      ```

------

   1. AWS Glue でこの接続に使用する `secretName` を選択して、トークンを配置します。

   1.  ネットワークを使用する場合は、ネットワークオプションを選択します。

1. AWS Glue ジョブに関連付けられている IAM ロールに `secretName` を読み取るアクセス許可を付与します。

# Adobe Analytics エンティティからの読み取り
<a name="adobeanalytics-reading-from-entities"></a>

 **前提条件** 

読み取り元の Adobe Analytics オブジェクト。使用可能なエンティティを確認するには、以下のサポートされているエンティティの表を参照してください。

 **サポートされているエンティティ** 


| エンティティ | フィルタリング可能 | 制限をサポートする | Order By をサポートする | Select \$1 をサポートする | パーティショニングをサポートする | 
| --- | --- | --- | --- | --- | --- | 
| 注釈 | あり | はい | はい | あり | なし | 
| 計算メトリクス | あり | はい | はい | あり | なし | 
| 計算指標の関数 | はい | なし | なし | あり | なし | 
| コンポーネントのメタデータ共有 | あり | あり | なし | あり | なし | 
| 日付範囲 | あり | あり | なし | あり | なし | 
| ディメンション | はい | なし | なし | あり | なし | 
| メトリクス | はい | なし | なし | あり | なし | 
| プロジェクト | はい | なし | なし | あり | なし | 
| レポート上位項目 | あり | あり | なし | あり | なし | 
| セグメント | あり | はい | はい | あり | なし | 
| 使用状況ログ | あり | あり | なし | あり | なし | 

 **例** 

```
adobeAnalytics_read = glueContext.create_dynamic_frame.from_options( 
     connection_type="adobeanalytics", 
     connection_options={ 
        "connectionName": "connectionName", 
        "ENTITY_NAME": "annotation/ex*****", 
        "API_VERSION": "v2.0" 
 })
```

 **Adobe Analytics エンティティとフィールドの詳細** 
+ [注釈](https://adobedocs.github.io/analytics-2.0-apis/#/Annotations)
+ [計算メトリクス](https://adobedocs.github.io/analytics-2.0-apis/#/Calculated%20Metrics)
+ [コンポーネントのメタデータ](https://adobedocs.github.io/analytics-2.0-apis/#/Component%20Meta%20Data)
+ [日付範囲](https://adobedocs.github.io/analytics-2.0-apis/#/Date%20Ranges)
+ [ディメンション](https://adobedocs.github.io/analytics-2.0-apis/#/Dimensions)
+ [メトリクス](https://adobedocs.github.io/analytics-2.0-apis/#/Metrics)
+ [プロジェクト](https://adobedocs.github.io/analytics-2.0-apis/#/Projects)
+ [レポート](https://adobedocs.github.io/analytics-2.0-apis/#/Reports)
+ [セグメント](https://adobedocs.github.io/analytics-2.0-apis/#/Segments)
+ [[ユーザー]](https://adobedocs.github.io/analytics-2.0-apis/#/Users)
+ [使用状況ログ](https://adobedocs.github.io/analytics-2.0-apis/#/Usage%20Logs)

# Adobe Analytics の接続オプション
<a name="adobeanalytics-connection-options"></a>

Adobe Analytics の接続オプションは次のとおりです。
+  `ENTITY_NAME`(文字列) – (必須) 読み取り / 書き込みに使用されます。Adobe Analytics のオブジェクトの名前。
+  `API_VERSION`(文字列) – (必須) 読み取り / 書き込みに使用されます。使用する Adobe Analytics Rest API バージョン。例: v2.0。
+  `X_API_KEY`(文字列) – (必須) 読み取り / 書き込みに使用されます。API にリクエストを行う開発者またはアプリケーションを認証する必要があります。
+  `SELECTED_FIELDS`(List<String>) – Default: empty(SELECT \$1). 読み込みに使用されます。オブジェクトに選択する列です。
+  `FILTER_PREDICATE`(文字列) – デフォルト: 空 読み込みに使用されます。Spark SQL 形式である必要があります。
+  `QUERY`(文字列) – デフォルト: 空 読み込みに使用されます。完全な Spark SQL クエリです。

# Adobe Analytics アカウントの作成
<a name="adobeanalytics-create-account"></a>

1. [Adobe パートナープログラム](https://partners.adobe.com/exchangeprogram/creativecloud.html)にアクセスして、交換パートナープログラムに登録します。

1. **[Join Exchange Program]** を選択します。

1. 会社の E メールアドレスを使用してアカウントを登録または作成します。

1. 提案ボックスから、Adobe Analytics 製品サブスクリプションを持つ適切な会社を選択します。

1. アカウントが、アクティブな Adobe Analytics サブスクリプションを持つ有効な組織 (利用可能なリストから) に登録されていることを確認します。

1. 会社管理者の承認後、承認 E メールのリンクをクリックしてアカウントをアクティブ化します。

**作成したアカウントが Adobe Analytics サービスにアクセスできるかどうかの確認**

1. [Adobe 管理コンソール](https://adminconsole.adobe.com/)にログインします。

1. ページの右上隅にある組織名をチェックして、正しい会社にログインしていることを確認します。

1. **[製品]** を選択し、Adobe Analytics が使用可能かどうかを確認します。
**注記**  
利用可能な組織がない場合、または Adobe Analytics 製品がグレー表示または使用できない場合は、アカウントが組織に関連付けられていないか、アクティブな Adobe Analytics サブスクリプションがない可能性があります。システム管理者に連絡して、アカウントのこのサービスのアクセスをリクエストしてください。

**プロジェクトと `OAuth2.0` 認証情報の作成**

1. [OAuth 2.0 アプリ](https://developer.adobe.com/developer-console/docs/guides/services/services-add-api-oauth/)を作成する Adobe Analytics アカウントにログインします。

1. **[プロジェクト]** を選択して、**[プロジェクトの新規作成]** を選択します。

1. プロジェクトを追加するには、**[プロジェクトに追加]** を選択し、**[API]** を選択します。

1. **[Adobe Analytics API]** を選択します。

1. ユーザー認証として **[OAUTH]** を選択します。

1. `OAUTH` として **[ウェブ]** を選択し、リダイレクト URI を指定します。

   リダイレクト URI とそのパターンについては、以下を参照してください。
   + `OAuth 2.0` デフォルトのリダイレクト URI – デフォルトのリダイレクト URI は、認証プロセス中に Adobe がアクセスするページの URL です。例: `https://ap-southeast-2.console.aws.amazon.com/appflow/oauth` 
   + OAuth 2.0 リダイレクト URI パターン – リダイレクト URI パターンは、ログインフローが完了したときに Adobe がリダイレクト (リクエストされた場合) できる URI パス (またはカンマ区切りのパスのリスト) です。例: `https://ap-southeast-2\\.console\\.aws\\.amazon\\.com`

1. 以下のスコープを追加します。
   + `openid`
   + `read_organizations`
   + `additional_info.projectedProductContext`
   + `additional_info.job_function`

1. **[認証情報を保存]** を選択します。

1. アプリケーションを作成したら、`Client ID` および `Client Secret` の値をテキストファイルにコピーします。

# 制限
<a name="adobeanalytics-connector-limitations"></a>

Adobe Analytics コネクタの制限事項は次のとおりです:
+ Adobe Analytics は、フィールドベースおよびレコードベースのパーティショニングをサポートしていません。フィールドベースのパーティショニングは、パーティション化するフィールドをクエリできないため、サポートされていません。ページ分割の「オフセット」を取得するプロビジョニングがないため、レコードベースのパーティショニングはサポートできません。
+ `Report Top Item` エンティティで、`startDate` および `endDate` クエリパラメータが期待どおりに機能していません。これらのパラメータに基づいてレスポンスがフィルタリングされていないため、このエンティティのフィルターと増分フローに問題が発生しています。
+ `Annotation`、`Calculated Metrics`、`Calculated Metrics Function`、`Date Ranges`、`Dimension`、`Metric`、`Project`、`Report Top Items`、および `Segment` エンティティの場合、`locale` クエリパラメータは、レスポンスのローカライズされたセクションに使用する言語を指定し、レコードをフィルタリングしません。たとえば、`locale="ja_JP"` はデータを日本語で表示します。
+ `Report Top Item` エンティティ – `dateRange` フィールドと `lookupNoneValues` フィールドのフィルターは現在機能していません。
+ `Segment` エンティティ: フィルター値 `includeType=“templates”` の場合、他のフィールドのフィルターは機能しません。
+ `Date Range` エンティティ – `curatedRsid` フィールドのフィルターが機能していません。
+ `Metric entity` エンティティ – 「false」値を持つセグメント化可能なフィールドでフィルタリングすると、true 値と false 値の両方の結果が得られます。

# Adobe Marketo Engage への接続
<a name="connecting-to-data-adobe-marketo-engage"></a>

Adobe Marketo Engage は、マーケティング担当者が見込み客や顧客向けにパーソナライズされたマルチチャネルプログラムやキャンペーンを管理できるようにするマーケティング自動化プラットフォームです。

**Topics**
+ [Adobe Marketo Engage の AWS Glue サポート](adobe-marketo-engage-support.md)
+ [接続を作成および使用するための API オペレーションを含むポリシー](adobe-marketo-engage-configuring-iam-permissions.md)
+ [Adobe Marketo Engage の設定](adobe-marketo-engage-configuring.md)
+ [Adobe Marketo Engage 接続の設定](adobe-marketo-engage-configuring-connections.md)
+ [Adobe Marketo Engage エンティティからの読み取り](adobe-marketo-engage-reading-from-entities.md)
+ [Adobe Marketo Engage エンティティへの書き込み](adobe-marketo-engage-writing-to-entities.md)
+ [Adobe Marketo Engage 接続オプション](adobe-marketo-engage-connection-options.md)
+ [Adobe Marketo Engage コネクタの制限事項と注意事項](adobe-marketo-engage-connector-limitations.md)

# Adobe Marketo Engage の AWS Glue サポート
<a name="adobe-marketo-engage-support"></a>

AWS Glue は、次のように Adobe Marketo Engage をサポートします。

**ソースとしてサポートされていますか?**  
はい。AWS Glue ETL ジョブを使用して、Adobe Marketo Engage からデータをクエリできます。

**ターゲットとしてサポートされているかどうか**  
はい。AWS Glue ETL ジョブを使用して、Adobe Marketo にデータを書き込むことができます。

**サポートされている Adobe Marketo Engage API バージョン**  
次の Adobe Marketo Engage API バージョンがサポートされています。
+ v1

バージョン固有のエンティティサポートについては、「ソースに対応するエンティティ」を参照してください。

# 接続を作成および使用するための API オペレーションを含むポリシー
<a name="adobe-marketo-engage-configuring-iam-permissions"></a>

次のサンプル ポリシーで、接続の作成と使用に必要な AWS IAM 権限について説明します。新しいロールを作成する場合は、以下を含むポリシーを作成します。

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

****  

```
{
  "Version":"2012-10-17",		 	 	 
  "Statement": [
    {
      "Effect": "Allow",
      "Action": [
        "glue:ListConnectionTypes",
        "glue:DescribeConnectionType",
        "glue:RefreshOAuth2Tokens",
        "glue:ListEntities",
        "glue:DescribeEntity"
      ],
      "Resource": "*"
    }
  ]
}
```

------

上記の方法を使用しない場合は、代わりに次のマネージド IAM ポリシーを使用します:
+ [AWSGlueServiceRole](https://console.aws.amazon.com/iam/home#policies/arn:aws:iam::aws:policy/service-role/AWSGlueServiceRole) – さまざまな AWS Glue プロセスを実行するために必要なリソースへのアクセス権をユーザーに代わって付与します。これらのリソースには AWS Glue 、Amazon S3、IAM、CloudWatch Logs、および Amazon EC2 が含まれます。このポリシーで指定されたリソースの命名規則に従った場合、AWS Glue プロセスは必要なアクセス権限を使用できます。このポリシーは、通常、クローラ、ジョブ、開発エンドポイントを定義するときに指定されたロールにアタッチされます。
+ [AWSGlueConsoleFullAccess](https://console.aws.amazon.com/iam/home#policies/arn:aws:iam::aws:policy/AWSGlueConsoleFullAccess) — ポリシーがアタッチされているアイデンティティが AWS マネージメントコンソールを使用するときは、AWS Glue リソースへのフルアクセスを許可します。このポリシーで指定されたリソースの命名規則に従った場合、ユーザーは完全なコンソール機能を使用できます。このポリシーは、通常 AWS Glue コンソールのユーザーにアタッチされています。

# Adobe Marketo Engage の設定
<a name="adobe-marketo-engage-configuring"></a>

AWS Glue を使用して Adobe Marketo Engage からデータを転送できるようにするには、次の要件を満たす必要があります。

## 最小要件
<a name="adobe-marketo-engage-configuring-min-requirements"></a>

以下に、最小要件を示します。
+ クライアント認証情報を持つ Adobe Marketo Engage アカウントがあること。
+ Adobe Marketo Engage アカウントに、有効なライセンスで API アクセスがあること。

これらの要件を満たしている場合、AWS Glue を Adobe Marketo Engage アカウントに接続する準備ができています。一般的な接続の場合、Adobe Market Engage で他に何もする必要はありません。

## OAuth 2.0 認証情報の取得
<a name="adobe-marketo-engage-configuring-creating-adobe-marketo-engage-oauth2-credentials"></a>

インスタンスに対して認証された呼び出しを行うための API 認証情報を取得するには、「[Adobe Marketo Rest API](https://experienceleague.adobe.com/en/docs/marketo-developer/marketo/rest/rest-api)」を参照してください

# Adobe Marketo Engage 接続の設定
<a name="adobe-marketo-engage-configuring-connections"></a>

Adobe Marketo Engage は、OAuth2 の CLIENT CREDENTIALS グラントタイプをサポートしています。
+ このグラントタイプは、クライアントがユーザーのコンテキスト外でアクセストークンを取得するために使用するため、2-legged の OAuth 2.0 と見なされます。AWS Glue は、クライアント ID とクライアントシークレットを使用して、定義したカスタムサービスによって提供される Adobe Marketo Engage API を認証できます。
+ 各カスタムサービスは、特定のアクションを実行することをサービスに許可する一連のロールとアクセス許可を持つ API 専用ユーザーによって所有されます。アクセストークンは 1 つのカスタムサービスに関連付けられています。
+ このグラントタイプは、有効期間が短いアクセストークンになり、ID エンドポイントを呼び出すことで更新される場合があります。
+ クライアント認証情報を使用した OAuth 2.0 の Adobe Marketo Engage の公開ドキュメントについては、「Adobe Marketo Engage デベロッパーガイド」の「[認証](https://developers.adobe-marketo-engage.com/rest-api/authentication/)」を参照してください。

Adobe Marketo Engage 接続を設定するには:

1. AWS Secrets Manager で、次の詳細を含むシークレットを作成します。

   1. カスタマーマネージド接続アプリケーションの場合、シークレットには、`USER_MANAGED_CLIENT_APPLICATION_CLIENT_SECRET` を使用して接続されたアプリケーションのコンシューマーシークレットをキーとして含める必要があります。

   1. 注: AWS Glue で接続ごとにシークレットを作成する必要があります。

1. AWS Glue Glue Studio で、以下の手順に従って **[データ接続]** の下に接続を作成します。

   1. **[接続タイプ]** を選択する際に、Adobe Marketo Engage を選択します。

   1. 接続先の Adobe Marketo Engage インスタンスの `INSTANCE_URL` を指定します。

   1. AWS Glue が次のアクションを引き受けて、その権限を持つことができる AWS IAM ロールを選択します。

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

****  

      ```
      {
        "Version":"2012-10-17",		 	 	 
        "Statement": [
          {
            "Effect": "Allow",
            "Action": [
              "secretsmanager:DescribeSecret",
              "secretsmanager:GetSecretValue",
              "secretsmanager:PutSecretValue",
              "ec2:CreateNetworkInterface",
              "ec2:DescribeNetworkInterfaces",
              "ec2:DeleteNetworkInterface"
            ],
            "Resource": "*"
          }
        ]
      }
      ```

------

   1. AWS Glue でこの接続に使用する `secretName` を選択して、トークンを配置します。

   1. ネットワークを使用する場合は、ネットワークオプションを選択します。

1. AWS Glue ジョブに関連付けられている IAM ロールに `secretName` を読み取るアクセス許可を付与します。

# Adobe Marketo Engage エンティティからの読み取り
<a name="adobe-marketo-engage-reading-from-entities"></a>

**前提条件**

読み取り元の Adobe Marketo Engage オブジェクト。leads、activities、customobjects などのオブジェクト名が必要になります。次の表は、サポートされているエンティティを示しています。

**ソース (同期) でサポートされているエンティティ**:


| エンティティ | フィルタリング可能 | 制限をサポートする | Order By をサポートする | Select \$1 をサポートする | パーティション分割をサポートする | 
| --- | --- | --- | --- | --- | --- | 
| leads | あり | あり | なし | あり | なし | 
| アクティビティ | あり | あり | なし | あり | なし | 
| customobjects | あり | あり | なし | あり | なし | 

**ソース (非同期) でサポートされているエンティティ**:


| エンティティ | フィルタリング可能 | 制限をサポートする | Order By をサポートする | Select \$1 をサポートする | パーティション分割をサポートする | 
| --- | --- | --- | --- | --- | --- | 
| leads | あり | なし | なし | あり | あり | 
| アクティビティ | あり | なし | なし | あり | なし | 
| customobjects | あり | なし | なし | あり | あり | 

**例**:

```
adobe-marketo-engage_read = glueContext.create_dynamic_frame.from_options(
    connection_type="adobe-marketo-engage",
    connection_options={
        "connectionName": "connectionName",
        "ENTITY_NAME": "leads",
        "API_VERSION": "v2",
        "INSTANCE_URL": "https://539-t**-6**.mktorest.com"
    }
```

**Adobe Marketo Engage エンティティとフィールドの詳細**:

**静的メタデータを持つエンティティ**: 

[\[See the AWS documentation website for more details\]](http://docs.aws.amazon.com/ja_jp/glue/latest/dg/adobe-marketo-engage-reading-from-entities.html)

**動的メタデータを持つエンティティ**:

以下のエンティティの場合、Adobe Marketo Engage はメタデータを動的にフェッチするエンドポイントを備えているため、演算子のサポートは各エンティティのデータ型レベルでキャプチャされます。

[\[See the AWS documentation website for more details\]](http://docs.aws.amazon.com/ja_jp/glue/latest/dg/adobe-marketo-engage-reading-from-entities.html)

## パーティショニングクエリ
<a name="adobe-marketo-engage-reading-partitioning-queries"></a>

Spark で同時実行を使用する場合は、追加の Spark オプション `PARTITION_FIELD`、`LOWER_BOUND`、`UPPER_BOUND`、および `NUM_PARTITIONS` を指定できます。これらのパラメータを使用すると、元のクエリは Spark タスクで同時に実行できるサブクエリの `NUM_PARTITIONS` の数に分割されます。
+ `PARTITION_FIELD`: クエリのパーティション化に使用するフィールドの名前。
+ `LOWER_BOUND`: 選択したパーティションフィールドの**包括的な**下限値。

  DateTime フィールドでは、ISO 形式の値を受け入れます。

  有効な値の例:

  ```
  "2024-07-01T00:00:00.000Z"
  ```
+ `UPPER_BOUND`: 選択したパーティションフィールドの**排他的**上限値。
+ `NUM_PARTITIONS`: パーティション数。

次の表に、エンティティパーティション分割フィールドのサポートの詳細を示します:

[\[See the AWS documentation website for more details\]](http://docs.aws.amazon.com/ja_jp/glue/latest/dg/adobe-marketo-engage-reading-from-entities.html)

例:

```
adobe-marketo-engage_read = glueContext.create_dynamic_frame.from_options(
    connection_type="adobe-marketo-engage",
    connection_options={
        "connectionName": "connectionName",
        "ENTITY_NAME": "leads",
        "API_VERSION": "v1",
        "PARTITION_FIELD": "createdAt"
        "LOWER_BOUND": "2024-07-01T00:00:00.000Z"
        "UPPER_BOUND": "2024-07-02T00:00:00.000Z"
        "NUM_PARTITIONS": "10"
    }
```

# Adobe Marketo Engage エンティティへの書き込み
<a name="adobe-marketo-engage-writing-to-entities"></a>

**前提条件**
+ 書き込み先の Adobe Marketo オブジェクト。`leads` または `customobjects` などのオブジェクト名が必要です。
+ Adobe Marketo コネクタは、次の 3 つの書き込みオペレーションをサポートしています。
  + INSERT
  + UPSERT
  + UPDATE
+ `UPSERT` および `UPDATE` 書き込みオペレーションでは、レコードの ID フィールドを指定する `ID_FIELD_NAMES` オプションを指定する必要があります。`leads` エンティティを使用する場合は、`email` を `ID_FIELD_NAMES` として `UPSERT` オペレーションに、`id` を `UPDATE` オペレーションに使用します。`customobjects` エンティティの場合は、`UPDATE` オペレーションと `UPSERT` オペレーションの両方に `marketoGUID` を `ID_FIELD_NAMES` として使用します。

**Destination (Synchronous) でサポートされているエンティティ**


| エンティティ名 | Destination Connector としてサポートされます | 挿入可能 | 更新可能 | アップサート可能 | 
| --- | --- | --- | --- | --- | 
| leads | はい | はい (バルク) | はい (バルク) | はい (バルク) | 
| customobjects | はい | はい (バルク) | はい (バルク) | はい (バルク) | 

**例**:

**INSERT オペレーション:**

```
marketo_write = glueContext.write_dynamic_frame.from_options(
    frame=frameToWrite,
    connection_type="marketo",
    connection_options={
        "connectionName": "connectionName",
        "ENTITY_NAME": "leads",
        "API_VERSION": "v1",
        "WRITE_OPERATION": "INSERT"
    }
```

**Update オペレーション:**

```
marketo_write = glueContext.write_dynamic_frame.from_options(
    frame=frameToWrite,
    connection_type="marketo",
    connection_options={
        "connectionName": "connectionName",
        "ENTITY_NAME": "leads",
        "API_VERSION": "v1",
        "WRITE_OPERATION": "UPDATE",
        "ID_FIELD_NAMES": "id"
    }
```

**注記**  
`leads` および `customobjects` エンティティの場合、Adobe Marketo はメタデータを動的に取得するエンドポイントを提供するため、書き込み可能なフィールドは Marketo API レスポンスから識別されます。

# Adobe Marketo Engage 接続オプション
<a name="adobe-marketo-engage-connection-options"></a>

Adobe Marketo Engage の接続オプションは次のとおりです。
+ `ENTITY_NAME`(文字列) – (必須) 読み取りに使用されます。Adobe Marketo Engage のオブジェクトの名前。
+ `API_VERSION`(文字列) – (必須) 読み取りに使用されます。使用する Adobe Marketo Engage Rest API バージョン。例: v1。
+ `SELECTED_FIELDS`(List<String>) – Default: empty(SELECT \$1). 読み込みに使用されます。オブジェクトに選択する列です。
+ `FILTER_PREDICATE`(文字列) – デフォルト: 空 読み込みに使用されます。Spark SQL 形式である必要があります。
+ `QUERY`(文字列) - デフォルト: 空 読み込みに使用されます。完全な Spark SQL クエリです。
+ `PARTITION_FIELD`(文字列) - 読み取りに使用されます。クエリをパーティション化するために使用するフィールドです。
+ `LOWER_BOUND`(文字列) - 読み取りに使用されます。選択したパーティションフィールドの包括的な下限値。
+ `UPPER_BOUND` (文字列) - 読み取りに使用されます。選択したパーティションフィールドの排他的上限値。
+ `NUM_PARTITIONS`(整数) – デフォルト: 1。読み込みに使用されます。読み取り用のパーティションの数です。
+ `TRANSFER_MODE` (文字列) – デフォルト: SYNC。非同期読み取りに使用されます。
+ `WRITE_OPERATION`(文字列) - デフォルト: INSERT。書き込みに使用されます。値は INSERT、UPDATE、UPSERT である必要があります。
+ `ID_FIELD_NAMES`(文字列) - デフォルト: null。UPDATE および UPSERT に必要です。

# Adobe Marketo Engage コネクタの制限事項と注意事項
<a name="adobe-marketo-engage-connector-limitations"></a>

Adobe Marketo Engage コネクタの制限事項または注意事項は次のとおりです。
+ 'sinceDatetime' と 'activityTypeId' は、同期アクティビティエンティティの必須フィルターパラメータです。
+ サブスクリプションには、1 日あたり 50,000 件の API コールが割り当てられます (中部標準時で毎日午前 12:00 にリセットされます)。Adobe Marketo Engage サブスクリプションの一部として、1 日あたりの容量を追加購入できます。リファレンスについては、「[Adobe Marketo Rest API](https://experienceleague.adobe.com/en/docs/marketo-developer/marketo/rest/rest-api)」を参照してください。
+ 日付範囲フィルター (`createdAt` または `updatedAt`) の最大期間は 31 日間です。リファレンスについては、「[一括抽出 - Marketo 開発者](https://experienceleague.adobe.com/en/docs/marketo-developer/marketo/rest/bulk-extract/bulk-extract)」を参照してください。
+ サブスクリプションには、いつでもキューに最大 10 個の一括抽出ジョブが割り当てられます。リファレンスについては、「[一括抽出 - Marketo 開発者](https://experienceleague.adobe.com/en/docs/marketo-developer/marketo/rest/bulk-extract/bulk-extract)」を参照してください。
+ デフォルトでは、抽出ジョブは 1 日あたり 500 MB に制限されています (中部標準時で毎日午前 12:00 にリセットされます)。Adobe Marketo Engage サブスクリプションの一部として、1 日あたりの容量を追加購入できます。リファレンスについては、「[一括抽出 - Marketo 開発者](https://experienceleague.adobe.com/en/docs/marketo-developer/marketo/rest/bulk-extract/bulk-extract)」を参照してください。
+ 同時エクスポートジョブの最大数は 2 です。リファレンスについては、「[一括抽出 - Marketo 開発者](https://experienceleague.adobe.com/en/docs/marketo-developer/marketo/rest/bulk-extract/bulk-extract)」を参照してください。
+ キューに入れられたエクスポートジョブ (現在エクスポート中のジョブを含む) の最大数は 10 です。リファレンスについては、「[一括抽出 - Marketo 開発者](https://experienceleague.adobe.com/en/docs/marketo-developer/marketo/rest/bulk-extract/bulk-extract)」を参照してください。
+ 一括ジョブから抽出できる最大許容ファイルサイズは 1 GB です。
+ 非同期ジョブが作成されると、ファイル保持期間は有効期限の 7 日前になります。リファレンスについては、「[一括抽出 - Marketo 開発者](https://experienceleague.adobe.com/en/docs/marketo-developer/marketo/rest/bulk-extract/bulk-extract)」を参照してください。
+ `createdAt` または `updatedAt` は、非同期リードエンティティの必須フィルターパラメータです。
+ `createdAt` は、非同期アクティビティエンティティの必須フィルターパラメータです。
+ `updatedAt` は、非同期カスタムオブジェクトエンティティの必須フィルターパラメータです。
+ AWS Glue SaaS コネクタを使用する場合、ユーザーは、部分的な障害が発生した場合に、送信先 SaaS プラットフォームへの書き込みオペレーション中に失敗した特定のレコードを特定できません。
+ Sync 書き込みオペレーションを使用する場合、入力ファイル内の null 値を持つフィールドは自動的に削除され、SaaS プラットフォームに送信されません。
+ Sync 書き込みでは、バッチで最大 300 個のレコードを作成または更新できます。

詳細については、「[Adobe Marketo Engage 統合ベストプラクティス](https://experienceleague.adobe.com/en/docs/marketo-developer/marketo/rest/marketo-integration-best-practices)」および「[一括抽出](https://https://experienceleague.adobe.com/en/docs/marketo-developer/marketo/rest/bulk-extract/bulk-activity-extract)」を参照してください。

# AWS Glue Studio の Amazon Redshift に接続する
<a name="connecting-to-data-redshift"></a>

**注記**  
 AWS Glue for Spark を使用して AWS Glue Studio の Amazon Redshift データベース内のテーブルに対する読み取りと書き込みを行うことができます。AWS Glue ジョブで Amazon Redshift をプログラム的に設定する方法については、「[Redshift 接続](aws-glue-programming-etl-connect-redshift-home.md)」を参照してください。

 AWS Glue には、Amazon Redshift に対するサポートが組み込まれています。AWS Glue Studio には、Amazon Redshift に接続してデータ統合ジョブをオーサリングし、AWS Glue Studio の Spark ランタイム上でジョブをサーバーレスで実行できる、ビジュアルインターフェイスが用意されています。

**Topics**
+ [Amazon Redshift 接続の作成](creating-redshift-connection.md)
+ [Amazon Redshift ソースノードの作成](creating-redshift-source-node.md)
+ [Amazon Redshift ターゲットノードの作成](creating-redshift-target-node.md)
+ [詳細オプション](creating-redshift-connection-advanced-options.md)

# Amazon Redshift 接続の作成
<a name="creating-redshift-connection"></a>

## 必要となる許可
<a name="creating-redshift-connection-permissions"></a>

 Amazon Redshift クラスターおよび Amazon Redshift サーバーレス環境を使用するには、追加の許可が必要です。ETL ジョブに許可を追加する方法の詳細については、「[ETL ジョブに必要な IAM アクセス許可を確認する](https://docs.aws.amazon.com/glue/latest/ug/setting-up.html#getting-started-min-privs-job)」を参照してください。
+  redshift:DescribeClusters 
+  redshift-serverless:ListWorkgroups 
+  redshift-serverless:ListNamespaces 

## 概要:
<a name="w2aac25c27c13c11b5"></a>

 Amazon Redshift 接続を追加するには、既存の Amazon Redshift 接続を選択するか、AWS Glue Studio で**データソース - Redshift** ノードを追加するときに、新しい接続を作成します。

 AWS Glue は、Amazon Redshift クラスターと Amazon Redshift サーバーレス環境の両方をサポートします。接続を作成すると、Amazon Redshift サーバーレス環境では、接続オプションの横に **[serverless]** ラベルが表示されます。

 Amazon Redshift 接続を作成する方法について詳しくは、「[Amazon Redshift との間でのデータの移動](https://docs.aws.amazon.com/glue/latest/dg/aws-glue-programming-etl-redshift.html#aws-glue-programming-etl-redshift-using)」を参照してください。

# Amazon Redshift ソースノードの作成
<a name="creating-redshift-source-node"></a>

## 必要となる許可
<a name="creating-redshift-source-node-permissions"></a>

 Amazon Redshift データソースを使用する AWS Glue Studio ジョブには追加の許可が必要です。ETL ジョブに許可を追加する方法の詳細については、「[ETL ジョブに必要な IAM アクセス許可を確認する](https://docs.aws.amazon.com/glue/latest/ug/setting-up.html#getting-started-min-privs-job)」を参照してください。

 Amazon Redshift 接続を使用するには、次の許可が必要です。
+  redshift-data:ListSchemas 
+  redshift-data:ListTables 
+  redshift-data:DescribeTable 
+  redshift-data:ExecuteStatement 
+  redshift-data:DescribeStatement 
+  redshift-data:GetStatementResult 

## Amazon Redshift データソースの追加
<a name="creating-redshift-source-node-add"></a>

****データソース — Amazon Redshift** ノードを追加するには**

1.  Amazon Redshift アクセスタイプを選択します。
   +  直接データ接続 (推奨) — Amazon Redshift データに直接アクセスする場合は、このオプションを選択してください。これは推奨されるオプションで、デフォルトでもあります。
   +  Data Catalog tables — 使用したいデータカタログテーブルがある場合は、このオプションを選択してください。

1.  [直接データ接続] を選択した場合は、Amazon Redshift データソースへの接続を選択します。既に接続が存在していて、それらの接続から選択できることが前提です。接続の作成が必要な場合は、**[Redshift 接続の作成]** を選択します。詳細については、「[コネクタと接続の使用に関する概要](https://docs.aws.amazon.com/glue/latest/ug/connectors-chapter.html#using-connectors-overview)」を参照してください。

    接続を選択したあとは、**[プロパティを表示]** をクリックすると、接続のプロパティを表示できます。URL、セキュリティグループ、サブネット、アベイラビリティーゾーン、説明、作成時刻 (UTC) と最終更新時刻 (UTC) のタイムスタンプなど、接続についての情報が表示されます。

1.  Amazon Redshift のソースオプションを選択してください。
   +  **[Choose a single table]** - これは、単一の Amazon Redshift テーブルからアクセスするデータを含むテーブルです。
   +  **カスタムクエリを入力** — カスタムクエリに基づき、Amazon Redshift の複数のテーブルからデータセットにアクセスできます。

1.  単一のテーブルを選択した場合は、Amazon Redshift のスキーマを選択します。選択したテーブルによって、使えるスキーマのリストが決まります。

    または、**[カスタムクエリを入力]** を選択します。このオプションを選択すると、Amazon Redshift の複数のテーブルから、カスタムデータセットにアクセスできます。このオプションを選択した場合は、Amazon Redshift クエリを入力します。

    Amazon Redshift サーバーレス環境に接続するときに、カスタムクエリに次の許可を追加します。

   ```
               GRANT SELECT ON ALL TABLES IN <schema> TO PUBLIC
   ```

    **[スキーマを推測]** を選択すると、入力したクエリに基づいてスキーマを読み取ることができます。**[Redshift クエリエディタを開く]** を選択して、Amazon Redshift クエリを入力することもできます。詳細については、「[クエリエディタを使用してデータベースのクエリを実行する](https://docs.aws.amazon.com/redshift/latest/mgmt/query-editor.html)」を参照してください。

1.  **[パフォーマンスとセキュリティ]** で、Amazon S3 のステージングディレクトリと IAM ロールを選択します。
   +  **Amazon S3 ステージングディレクトリ** — データを一時的にステージングする、Amazon S3 の場所を選択します。
   +  **IAM ロール** — 選択した Amazon S3 に書き込める IAM ロールを選択します。

1.  **[カスタム Redshift パラメータ - オプション]** に、パラメータと値を入力します。

# Amazon Redshift ターゲットノードの作成
<a name="creating-redshift-target-node"></a>

## 必要となる許可
<a name="creating-redshift-target-node-permissions"></a>

 Amazon Redshift データターゲットを使用する AWS Glue Studio ジョブには追加の許可が必要です。ETL ジョブに許可を追加する方法の詳細については、「[ETL ジョブに必要な IAM アクセス許可を確認する](https://docs.aws.amazon.com/glue/latest/ug/setting-up.html#getting-started-min-privs-job)」を参照してください。

 Amazon Redshift 接続を使用するには、次の許可が必要です。
+  redshift-data:ListSchemas 
+  redshift-data:ListTables 

## Amazon Redshift ターゲットノードの追加
<a name="w2aac25c27c13c15b5"></a>

**Amazon Redshift ターゲットノードを作成するには**

1.  既存の Amazon Redshift テーブルをターゲットとして選択するか、新しいテーブル名を入力します。

1.  **データターゲット - Redshift** ターゲットノードを使用する場合、次のオプションから選択できます。
   +  **APPEND** — テーブルがすでに存在している場合は、新しいデータをテーブルにすべて挿入してダンプします。テーブルが存在しない場合は、新規にテーブルを作成し、そこに新しいデータをすべて挿入します。

      またターゲットのテーブルで、既存のレコードを更新 (UPSERT) する場合は、このチェックボックスにチェックを入れてください。まずテーブルが存在している必要があります。存在しない場合には、操作は失敗します。
   +  **MERGE** — 指定した条件に基づいて、AWS Glue がターゲットとなるテーブルのデータを更新するか、またはデータを追加します。
**注記**  
 AWS Glue でマージアクションを使用するには、Amazon Redshift のマージ機能を有効にする必要があります。Amazon Redshift インスタンスのマージを有効にする方法については、「[MERGE (プレビュー)](https://docs.aws.amazon.com/redshift/latest/dg/r_MERGE.html)」を参照してください。

      [オプション] を選択します。
     + **キーと簡単なアクションの選択** — ソースデータとターゲットデータセットとの、マッチングキーとして使用する列を選択します。

       一致した場合、次のオプションを指定します。
       + ターゲットのデータセットにあるレコードを、ソースのデータで更新します。
       + ターゲットのデータセットにあるレコードを削除します。

       一致しない場合、次のオプションを指定します。
       + ターゲットのデータセットに、新しい行としてソースデータを挿入します。
       + 何もしない。
     + **カスタム MERGE ステートメントの入力** — その後 **[MERGE ステートメントの検証]** を選択し、ステートメントが有効か、無効かを検証できます。
   +  **TRUNCATE** — 既にテーブルが存在している場合は、ターゲットのテーブルの内容を削除してから、ターゲットのテーブルを削除します。削除が成功してから、すべてのデータを挿入します。テーブルが存在していない場合、テーブルを作成し、すべてのデータを挿入します。削除が成功しなかった場合、操作は失敗します。
   +  **DROP** — 既にテーブルが存在している場合は、テーブルのメタデータとデータを削除します。削除が成功してから、すべてのデータを挿入します。テーブルが存在していない場合、テーブルを作成し、すべてのデータを挿入します。削除が成功しなかった場合、操作は失敗します。
   +  **CREATE** — 新しいテーブルを、デフォルトの名前を使用して作成します。既にテーブル名が存在する場合は、接尾辞として `job_datetime` を名前につけたうえで新しいテーブルを作成し、一意性を保ちます。これで、すべてのデータが新しいテーブルに挿入されます。テーブルが存在する場合、最終的なテーブル名には接尾辞が付きます。テーブルが存在しない場合、テーブルが作成されます。いずれの場合も、テーブルが新しく作成されます。

# 詳細オプション
<a name="creating-redshift-connection-advanced-options"></a>

 「[AWS Glue で Amazon Redshift Spark コネクターを使用する](https://docs.aws.amazon.com/glue/latest/dg/aws-glue-programming-etl-redshift.html#aws-glue-programming-etl-redshift-using)」を参照してください。

# Asana に対する接続
<a name="connecting-to-asana"></a>

Asana は、チームがタスクやプロジェクトを編成、計画、完了するのに役立つクラウドベースのチームコラボレーションソリューションです。Asana ユーザーの場合、アカウントにはワークスペース、プロジェクト、タスク、チームなどに関するデータが含まれます。Asana から特定の AWS サービスやその他のサポートされているアプリケーションにデータを転送できます。

**Topics**
+ [Asana の AWS Glue サポート](asana-support.md)
+ [接続を作成および使用するための API オペレーションを含むポリシー](asana-configuring-iam-permissions.md)
+ [Asana の設定](asana-configuring.md)
+ [Asana 接続の設定](asana-configuring-connections.md)
+ [Asana エンティティからの読み取り](asana-reading-from-entities.md)
+ [Asana 接続オプション](asana-connection-options.md)
+ [Asana アカウントの作成](asana-create-account.md)
+ [制限](asana-connector-limitations.md)

# Asana の AWS Glue サポート
<a name="asana-support"></a>

AWS Glue は、次のように Asana をサポートします。

**ソースとしてサポートされていますか?**  
はい。AWS Glue ETL ジョブを使用して、Asana からデータをクエリできます。

**ターゲットとしてサポートされていますか?**  
いいえ。

**サポートされている Asana API バージョン**  
 1.0 

# 接続を作成および使用するための API オペレーションを含むポリシー
<a name="asana-configuring-iam-permissions"></a>

次のサンプル ポリシーで、接続の作成と使用に必要な AWS の権限について説明します。新しいロールを作成する場合は、以下を含むポリシーを作成します。

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

****  

```
{
  "Version":"2012-10-17",		 	 	 
  "Statement": [
    {
      "Effect": "Allow",
      "Action": [
        "glue:ListConnectionTypes",
        "glue:DescribeConnectionType",
        "glue:RefreshOAuth2Tokens",
        "glue:ListEntities",
        "glue:DescribeEntity"
      ],
      "Resource": "*"
    }
  ]
}
```

------

上記の方法を使用しない場合は、代わりに次のマネージド IAM ポリシーを使用します。
+  [ AWSGlueServiceRole ](https://console.aws.amazon.com/iam/home#policies/arn:aws:iam::aws:policy/service-role/AWSGlueServiceRole) – さまざまな AWS Glue プロセスを実行するために必要なリソースへのアクセス権をユーザーに代わって付与します。これらのリソースには、AWS Glue、Amazon S3、IAM、CloudWatch Logs、および Amazon EC2 が含まれます。このポリシーで指定されたリソースの命名規則に従った場合、AWS Glue プロセスは必要なアクセス許可を使用できます。このポリシーは、通常、クローラー、ジョブ、開発エンドポイントを定義するときに指定されたロールにアタッチされます。
+  [ AWSGlueConsoleFullAccess ](https://console.aws.amazon.com/iam/home#policies/arn:aws:iam::aws:policy/AWSGlueConsoleFullAccess) — ポリシーがアタッチされているアイデンティティが AWS マネージメントコンソールを使用するときは、AWS Glue リソースへのフルアクセスを許可します。このポリシーで指定されたリソースの命名規則に従った場合、ユーザーは完全なコンソール機能を使用できます。このポリシーは、通常 AWS Glue コンソールのユーザーにアタッチされています。

# Asana の設定
<a name="asana-configuring"></a>

AWS Glue を使用して Asana から転送できるようにするには、次の要件を満たす必要があります。

## 最小要件
<a name="asana-configuring-min-requirements"></a>
+ E メールとパスワードが設定された Asana アカウントがある。アカウントの作成の詳細については、「[Asana アカウントの作成](asana-create-account.md)」を参照してください。
+ AWS Glue へのサービスアクセスで AWS アカウントを作成する必要があります。
+ Asana アカウントに次のいずれかのリソースが作成されていることを確認します。
  + `OAuth 2.0` 認証をサポートするデベロッパーアプリ。詳細については、「Asana 開発者ドキュメント」の「[OAuth](https://developers.asana.com/docs/oauth)」を参照してください。または「[Asana アカウントの作成](asana-create-account.md)」を参照してください｡ 
  + 個人アクセストークン。詳細については、「Asana 開発者ドキュメント」の「個人用アクセストークン[https://developers.asana.com/docs/personal-access-token](https://developers.asana.com/docs/personal-access-token)」を参照してください。

これらの要件を満たすと、Adobe Analytics アカウントに AWS Glue を接続する準備が整います。一般的な接続では、Adobe Analytics で他に何もする必要はありません。

# Asana 接続の設定
<a name="asana-configuring-connections"></a>

Asana は、`OAuth2` の `AUTHORIZATION_CODE` グラントタイプをサポートしています。

このグラントタイプは、ユーザーを認証するためにサードパーティーの認証サーバーにユーザーをリダイレクトすることから、「three-legged」の `OAuth` と見なされます。ユーザーは、Asana で独自の接続アプリを作成し、AWS Glue コンソールを介して接続を作成するときに独自のクライアント ID とクライアントシークレットを指定することを選択できます。このシナリオでは、引き続き Asana にリダイレクトされてログインし、リソースへアクセスするために AWS Glue を承認します。

このグラントタイプは、更新トークンとアクセストークンになります。アクセストークンの有効期間は短く、更新トークンを使用してユーザーとやり取りすることなく自動的に更新される場合があります。

`AUTHORIZATION_CODE OAuth` フロー用の接続アプリケーションの作成に関する Asana の公開ドキュメントについては、「[Asana API](https://developers.asana.com/docs/oauth)」を参照してください。

Asana 接続を設定するには:

1. AWS Secrets Manager で、次の詳細を含むシークレットを作成します。
   + カスタマーマネージド接続アプリケーションの場合 – シークレットには、`USER_MANAGED_CLIENT_APPLICATION_CLIENT_SECRET` を使用して接続されたアプリケーションのコンシューマーシークレットをキーとして含める必要があります。
   + 
**注記**  
AWS Glue で接続ごとにシークレットを作成する必要があります。

1. AWS Glue Studio で、以下の手順に従って **[データ接続]** の下に接続を作成します。

   1. **[接続タイプ]** を選択する際に、[Asana] を選択します。

   1. Asana 環境を指定します。

   1. AWS Glue が次のアクションを担い、その権限を持つことができる IAM ロールを選択します。

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

****  

      ```
      {
        "Version":"2012-10-17",		 	 	 
        "Statement": [
          {
            "Effect": "Allow",
            "Action": [
              "secretsmanager:DescribeSecret",
              "secretsmanager:GetSecretValue",
              "secretsmanager:PutSecretValue",
              "ec2:CreateNetworkInterface",
              "ec2:DescribeNetworkInterfaces",
              "ec2:DeleteNetworkInterface"
            ],
            "Resource": "*"
          }
        ]
      }
      ```

------

   1. AWS Glue でこの接続に使用する `secretName` を選択して、トークンを配置します。

   1.  ネットワークを使用する場合は、ネットワークオプションを選択します。

1. AWS Glue ジョブに関連付けられている IAM ロールに `secretName` を読み取るアクセス許可を付与します。

# Asana エンティティからの読み取り
<a name="asana-reading-from-entities"></a>

 **前提条件** 

読み取り元の Asana オブジェクト。使用可能なエンティティを確認するには、以下のサポートされているエンティティの表を参照してください。

 **ソースに対応するエンティティ** 


| エンティティ | フィルタリング可能 | 制限をサポートする | Order By をサポートする | Select \$1 をサポートする | パーティショニングをサポートする | 
| --- | --- | --- | --- | --- | --- | 
|  ワークスペース  | いいえ | あり | なし | あり | なし | 
| タグ | いいえ | あり | なし | あり | なし | 
| ユーザー | いいえ | あり | なし | あり | なし | 
|  ポートフォリオ  | いいえ | あり | なし | あり | なし | 
| チーム | いいえ | あり | なし | あり | なし | 
| プロジェクト | はい | あり | なし | あり | なし | 
| セクション | いいえ | あり | なし | あり | なし | 
| タスク  | はい | なし | なし | はい | はい | 
| 目標 | あり | あり | なし | あり | なし | 
|  AuditLogEvent  | あり | あり | なし | あり | なし | 
|  ステータスの更新  | あり | あり | なし | あり | なし | 
|  カスタムフィールド  | いいえ | あり | なし | あり | なし | 
|  プロジェクトの概要  | はい | なし | なし | はい | はい | 

 **例** 

```
read_read = glueContext.create_dynamic_frame.from_options(
    connection_type="Asana",
    connection_options={
        "connectionName": "connectionName",
        "ENTITY_NAME": "task/workspace:xxxx",
        "API_VERSION": "1.0",
        "PARTITION_FIELD": "created_at",
        "LOWER_BOUND": "2024-02-05T14:09:30.115Z",
        "UPPER_BOUND": "2024-06-07T13:30:00.134Z",
        "NUM_PARTITIONS": "3"
    }
```

 **Asana エンティティとフィールドの詳細** 
+ [ワークスペース](https://developers.asana.com/docs/workspaces)
+ [タグ](https://developers.asana.com/docs/tags):
+ [ユーザー](https://developers.asana.com/docs/users)
+ [ポートフォリオ](https://developers.asana.com/docs/portfolios)
+ [チーム](https://developers.asana.com/docs/teams)
+ [プロジェクト](https://developers.asana.com/docs/get-all-projects-in-a-workspace)
+ [セクション](https://developers.asana.com/docs/get-sections-in-a-project)
+ [タスク](https://developers.asana.com/docs/search-tasks-in-a-workspace) 
+ [目標](https://developers.asana.com/docs/get-goals)
+ [AuditLogEvent](https://developers.asana.com/docs/audit-log-api)
+ [ステータスの更新](https://developers.asana.com/reference/status-updates)
+ [カスタムフィールド](https://developers.asana.com/reference/custom-fields)
+ [プロジェクトの概要](https://developers.asana.com/reference/project-briefs)

 **パーティショニングクエリ** 

Spark で同時実行を使用する場合は、追加の Spark オプション `PARTITION_FIELD`、`LOWER_BOUND`、`UPPER_BOUND`、および `NUM_PARTITIONS` を指定できます。これらのパラメータを使用すると、元のクエリは Spark タスクで同時に実行できるサブクエリの `NUM_PARTITIONS` の数に分割されます。
+ `PARTITION_FIELD`: クエリのパーティション化に使用するフィールドの名前。
+ `LOWER_BOUND`: 選択したパーティションフィールドの包括的な下限値。

  日付については、Spark SQL クエリで使用される Spark の日付形式を受け入れます。有効な値の例: `2024-06-07T13:30:00.134Z`。
+ `UPPER_BOUND`: 選択したパーティションフィールドの排他的上限値。
+ `NUM_PARTITIONS`: パーティション数。

 エンティティごとのパーティション分割フィールドのサポートの詳細は、次の表にまとめられています。


| エンティティ名 | Partitioning Field | データタイプ | 
| --- | --- | --- | 
| タスク |  created\$1at  | DateTime | 
| タスク |  modified\$1at  | DateTime | 

 **例** 

```
read_read = glueContext.create_dynamic_frame.from_options(
    connection_type="Asana",
    connection_options={
        "connectionName": "connectionName",
        "ENTITY_NAME": "task/workspace:xxxx",
        "API_VERSION": "1.0",
        "PARTITION_FIELD": "created_at",
        "LOWER_BOUND": "2024-02-05T14:09:30.115Z",
        "UPPER_BOUND": "2024-06-07T13:30:00.134Z",
        "NUM_PARTITIONS": "3"
    }
```

# Asana 接続オプション
<a name="asana-connection-options"></a>

Asana の接続オプションは次のとおりです。
+  `ENTITY_NAME`(文字列) – (必須) 読み取り / 書き込みに使用されます。Asana のオブジェクトの名前。
+  `API_VERSION`(文字列) – (必須) 読み取り / 書き込みに使用されます。使用する Asana Rest API バージョン。(例: 1.0)。
+  `SELECTED_FIELDS`(List<String>) – Default: empty(SELECT \$1). 読み込みに使用されます。オブジェクトに選択する列です。
+  `FILTER_PREDICATE`(文字列) – デフォルト: 空 読み込みに使用されます。Spark SQL 形式である必要があります。
+  `QUERY`(文字列) – デフォルト: 空 読み込みに使用されます。完全な Spark SQL クエリです。
+ `PARTITION_FIELD`(文字列) - 読み取りに使用されます。クエリをパーティション化するために使用するフィールドです。
+  `LOWER_BOUND`(文字列) - 読み取りに使用されます。選択したパーティションフィールドの包括的な下限値。
+  `UPPER_BOUND` (文字列) - 読み取りに使用されます。選択したパーティションフィールドの排他的上限値。
+  `NUM_PARTITIONS`(整数) – デフォルト: 1。読み込みに使用されます。読み取り用のパーティションの数です。

# Asana アカウントの作成
<a name="asana-create-account"></a>

1. [Asana アカウント](https://asana.com/create-account)にサインアップし、**[サインアップ]** を選択します。

1. ログインすると、[アカウントのセットアップ](https://app.asana.com/0/account_setup)ページにリダイレクトされます。以下のステップを実行します。
   + アカウント設定フォームを確認します。
   + 関連するすべての詳細を入力して、Asana アカウントを作成します。
   + 情報が正しいことを再確認します。

1. **[アカウントを作成]** または **[送信]** (正確なボタンのテキストは異なる場合があります) を選択して、アカウントの設定を確定します。

**`OAuth2.0` の Asana でのアプリの作成**

1. [Asana 顧客認証情報](https://app.asana.com/-/login)を使用して Asana アカウントにログインします。

1. 右上隅にあるユーザープロファイルアイコンを選択し、ドロップダウンメニューから **[マイ設定]** を選択します。

1. **[アプリ]** タブを選択し、**[開発者アプリを管理]** を選択します。

1. **[アプリの新規作成]** を選択し、関連する詳細を入力します。

1. **[アプリを作成]** を選択します。

1. **[マイアプリ]** ページで、次の操作を行います。

   1. **[OAuth]** を選択し、**[アプリ認証情報]** セクションで、クライアント ID とクライアントシークレットを書き留めます。

   1. **[リダイレクト URL]** セクションで、必要なリダイレクト URL (複数可) を追加します。
**注記**  
次の形式を使用してリダイレクト URI を入力します: `https://{aws-region-code}.console.aws.amazon.com/gluestudio/oauth`。たとえば、米国東部 (バージニア北部) の場合は次を使用します: `https://us-east-1.console.aws.amazon.com/gluestudio/oauth`

**Asana での `PAT` トークン用アプリの作成**

1. [Asana 顧客認証情報](https://app.asana.com/-/login)を使用して Asana アカウントにログインします。

1. 右上隅のユーザープロファイルアイコンを選択し、ドロップダウンメニューから **[マイプロファイル設定]** を選択します。

1. **[アプリ]** タブを選択し、**[サービスアカウント]** を選択します。

1. **[アプリの新規作成]** を選択し、関連する詳細を入力します。

1. **[サービスアカウントを追加]** を選択します。

1. 次のページにはトークンが表示されます。トークンをコピーして安全に保管します。
**重要**  
このトークンは 1 回だけ表示されます。必ずコピーして安全に保管してください。

# 制限
<a name="asana-connector-limitations"></a>

Asana コネクタの制限は次のとおりです:
+ エンタープライズドメインのサービスアカウントは、監査ログ API エンドポイントにのみアクセスできます。これらのエンドポイントにアクセスするには、サービスアカウントの個人アクセストークンによる認証が必要です。
+ Goal エンティティは、Premium プラン以上のユーザーアカウントでのみアクセスできます。
+ `Audit Log Event Entity` – コネクタでは、`start_at` フィールドと `end_at` フィールドが 1 つのフィールド「start\$1end\$1at」に結合され、フィルタリングと増分転送をサポートします。
+ パーティショニングは、大なりイコール演算子と小なりイコール演算子をサポートしている場合でも、`Date` フィールドではサポートできません。シナリオ: `partitionField` を `due_on` (データ型: 日付)、`lowerBound` を `2019-09-14`、`upperBound` を `2019-09-16`、`numPartition` を `2` としてジョブを作成しました。エンドポイント URL のフィルター部分は次のように作成されます。
  + partition1: due\$1on.before=2019-09-14&due\$1on.after=2019-09-14
  + partition2: due\$1on.before=2019-09-15&due\$1on.after=2019-09-15 出力:
  + partition1 では、due\$1date が 2019-09-14 および 2019-09-15 のデータを取得します。
  + partition2 では、due\$1date が (partition1 にあった) 2019-09-15 と同じデータが他のデータとともに取得され、データの重複が発生します。
+ SaaS エンドから不正なリクエストエラーがスローされるため、同じフィールドでフィルタリングとパーティショニングをサポートすることはできません。
+ Task エンティティには、フィルター条件に少なくとも 1 つのフィールドが必要です。Asana には、時間ベースのフィールドに基づいてレコードをソートしないとページ分割が識別されないという制限があります。したがって、Created\$1at field は、次のレコードセットを区別するためにページ分割とともに使用されます。Created\$1at field はフィルターで必須としてマークされ、指定されていない場合、デフォルト値は 2000-01-01T00:00:00Z です。ページ分割の詳細については、「[ワークスペースのタスク](https://developers.asana.com/reference/searchtasksforworkspace)」を参照してください。

# AWS Glue Studio での Azure Cosmos DB に対する接続
<a name="connecting-to-data-azurecosmos"></a>

 AWS Glue は、Azure Cosmos DB のための組み込みサポートを提供します。AWS Glue Studio は、Azure Cosmos DB for NoSQL に接続してデータ統合ジョブをオーサリングし、AWS Glue Studio サーバーレス Spark ランタイム上でそれらのジョブを実行するためのビジュアルインターフェイスを提供します。

**Topics**
+ [Azure Cosmos DB 接続の作成](creating-azurecosmos-connection.md)
+ [Azure Cosmos DB ソースノードの作成](creating-azurecosmos-source-node.md)
+ [Azure Cosmos DB ターゲットノードの作成](creating-azurecosmos-target-node.md)
+ [詳細オプション](#creating-azurecosmos-connection-advanced-options)

# Azure Cosmos DB 接続の作成
<a name="creating-azurecosmos-connection"></a>

**前提条件**:
+ Azure では、AWS Glue で使用する Azure Cosmos DB キー (`cosmosKey`) を特定または生成する必要があります。詳細については、Azure ドキュメントの「[Azure Cosmos DB のデータへのアクセスをセキュリティで保護する](https://learn.microsoft.com/en-us/azure/cosmos-db/secure-access-to-data?tabs=using-primary-key)」を参照してください。

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

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

1. AWS Glue コンソールで、「[AWS Glue 接続の追加](console-connections.md)」にあるステップに従って接続を作成します。接続を作成したら、将来的に AWS Glue で使用するために、接続名 *connectionName* を維持します。
   + **[接続タイプ]** を選択する際に、[Azure Cosmos DB] を選択します。
   + **[AWS Secret]** をクリックして、*secretName* を入力します。

# Azure Cosmos DB ソースノードの作成
<a name="creating-azurecosmos-source-node"></a>

## 必要な前提条件
<a name="creating-azurecosmos-source-node-prerequisites"></a>
+ 前のセクション [Azure Cosmos DB 接続の作成](creating-azurecosmos-connection.md) で説明したように、AWS Secrets Manager シークレットを使用して設定された AWS Glue Azure Cosmos DB 接続。
+ 接続で使用されるシークレットを読み取るためのジョブに対する適切なアクセス許可。
+ 読み取り元とする Azure Cosmos DB for NoSQL コンテナ。コンテナの識別情報が必要になります。

  Azure Cosmos for NoSQL コンテナは、データベースとコンテナによって識別されます。Azure Cosmos for NoSQL API に接続する際には、データベース *cosmosDBName* とコンテナ *cosmosContainerName* の名前を指定する必要があります。

## Azure Cosmos DB データソースの追加
<a name="creating-azurecosmos-source-node-add"></a>

****[データソース — Azure Cosmos DB]** ノードを追加するには:**

1.  Azure Cosmos DB データソース用の接続を選択します。すでに作成したので、ドロップダウンに表示されているはずです。接続を作成する必要がある場合は、**[Azure Cosmos DB 接続を作成]** を選択します。詳細については、前の「[Azure Cosmos DB 接続の作成](creating-azurecosmos-connection.md)」セクションを参照してください。

    接続を選択したあとは、**[プロパティを表示]** をクリックすると、接続のプロパティを表示できます。

1. **[Cosmos DB データベース名]** を選択します。読み取り元のデータベースの名前である *cosmosDBName* を指定します。

1. **[Azure Cosmos DB コンテナ]** を選択します。読み取り元のコンテナの名前である *cosmosContainerName* を指定します。

1. 必要に応じて、**[Azure Cosmos DB カスタムクエリ]** を選択します。Azure Cosmos DB から特定の情報を取得するには、SQL SELECT クエリを指定します。

1.  **[Azure Cosmos のカスタムプロパティ]** で、必要に応じてパラメータと値を入力します。

# Azure Cosmos DB ターゲットノードの作成
<a name="creating-azurecosmos-target-node"></a>

## 必要な前提条件
<a name="creating-azurecosmos-target-node-prerequisites"></a>
+ 前のセクション [Azure Cosmos DB 接続の作成](creating-azurecosmos-connection.md) で説明したように、AWS Secrets Manager シークレットを使用して設定された AWS Glue Azure Cosmos DB 接続。
+ 接続で使用されるシークレットを読み取るためのジョブに対する適切なアクセス許可。
+ 書き込み先とする Azure Cosmos DB テーブル。コンテナの識別情報が必要になります。**接続メソッドを呼び出す前にコンテナを作成する必要があります。**

  Azure Cosmos for NoSQL コンテナは、データベースとコンテナによって識別されます。Azure Cosmos for NoSQL API に接続する際には、データベース *cosmosDBName* とコンテナ *cosmosContainerName* の名前を指定する必要があります。

## Azure Cosmos DB データターゲットの追加
<a name="creating-azurecosmos-target-node-add"></a>

****[データターゲット — Azure Cosmos DB]** ノードを追加するには:**

1.  Azure Cosmos DB データソース用の接続を選択します。すでに作成したので、ドロップダウンに表示されているはずです。接続を作成する必要がある場合は、**[Azure Cosmos DB 接続を作成]** を選択します。詳細については、前の「[Azure Cosmos DB 接続の作成](creating-azurecosmos-connection.md)」セクションを参照してください。

    接続を選択したあとは、**[プロパティを表示]** をクリックすると、接続のプロパティを表示できます。

1. **[Cosmos DB データベース名]** を選択します。読み取り元のデータベースの名前である *cosmosDBName* を指定します。

1. **[Azure Cosmos DB コンテナ]** を選択します。読み取り元のコンテナの名前である *cosmosContainerName* を指定します。

1.  **[Azure Cosmos のカスタムプロパティ]** で、必要に応じてパラメータと値を入力します。

## 詳細オプション
<a name="creating-azurecosmos-connection-advanced-options"></a>

Azure Cosmos DB ノードを作成する際に、高度なオプションを指定できます。これらのオプションは Spark AWS Glue スクリプトのプログラミング時に使用できるオプションと同じです。

「[Azure Cosmos DB 接続](aws-glue-programming-etl-connect-azurecosmos-home.md)」を参照してください。

# AWS Glue Studio での Azure SQL に対する接続
<a name="connecting-to-data-azuresql"></a>

 AWS Glue は、Azure SQL のための組み込みサポートを提供します。AWS Glue Studio は、Azure SQL に接続してデータ統合ジョブをオーサリングし、AWS Glue Studio サーバーレス Spark ランタイム上でそれらのジョブを実行するためのビジュアルインターフェイスを提供します。

**Topics**
+ [Azure SQL 接続の作成](creating-azuresql-connection.md)
+ [Azure SQL ソースノードの作成](creating-azuresql-source-node.md)
+ [Azure SQL ターゲットノードの作成](creating-azuresql-target-node.md)
+ [詳細オプション](#creating-azuresql-connection-advanced-options)

# Azure SQL 接続の作成
<a name="creating-azuresql-connection"></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* を入力します。

# Azure SQL ソースノードの作成
<a name="creating-azuresql-source-node"></a>

## 必要な前提条件
<a name="creating-azuresql-source-node-prerequisites"></a>
+ 前のセクション [Azure SQL 接続の作成](creating-azuresql-connection.md) で説明したように、AWS Secrets Manager シークレットを使用して設定された AWS Glue Azure SQL 接続。
+ 接続で使用されるシークレットを読み取るためのジョブに対する適切なアクセス許可。
+ 読み取り元とする Azure SQL テーブル (*tableName*)。

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

## Azure SQL データソースの追加
<a name="creating-azuresql-source-node-add"></a>

****[データソース — Azure SQL]** ノードを追加するには:**

1.  Azure SQL データソース用の接続を選択します。すでに作成したので、ドロップダウンに表示されているはずです。接続を作成する必要がある場合は、**[Azure SQL 接続を作成]** を選択します。詳細については、前の「[Azure SQL 接続の作成](creating-azuresql-connection.md)」セクションを参照してください。

    接続を選択したあとは、**[プロパティを表示]** をクリックすると、接続のプロパティを表示できます。

1.  **[Azure SQL ソース]** オプションを選択します。
   +  **[単一のテーブルを選択]** – 単一のテーブルからすべてのデータにアクセスします。
   +  **[カスタムクエリを入力]** — カスタムクエリに基づいて、複数のテーブルからデータセットにアクセスします。

1.  単一のテーブルを選択した場合は、*tableName* を入力します。

    **[カスタムクエリを入力]** を選択した場合は、TransactSQL SELECT クエリを入力します。

1.  **[Azure SQL のカスタムプロパティ]** で、必要に応じてパラメータと値を入力します。

# Azure SQL ターゲットノードの作成
<a name="creating-azuresql-target-node"></a>

## 必要な前提条件
<a name="creating-azuresql-target-node-prerequisites"></a>
+ 前のセクション [Azure SQL 接続の作成](creating-azuresql-connection.md) で説明したように、AWS Secrets Manager シークレットを使用して設定された AWS Glue Azure SQL 接続。
+ 接続で使用されるシークレットを読み取るためのジョブに対する適切なアクセス許可。
+ 書き込み先とする Azure SQL テーブル (*tableName*)。

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

## Azure SQL データターゲットの追加
<a name="creating-azuresql-target-node-add"></a>

****[データターゲット — Azure SQL]** ノードを追加するには:**

1.  Azure SQL データソース用の接続を選択します。すでに作成したので、ドロップダウンに表示されているはずです。接続を作成する必要がある場合は、**[Azure SQL 接続を作成]** を選択します。詳細については、前の「[Azure SQL 接続の作成](creating-azuresql-connection.md)」セクションを参照してください。

    接続を選択したあとは、**[プロパティを表示]** をクリックすると、接続のプロパティを表示できます。

1. *tableName* を指定して **[テーブル名]** を設定します。

1.  **[Azure SQL のカスタムプロパティ]** で、必要に応じてパラメータと値を入力します。

## 詳細オプション
<a name="creating-azuresql-connection-advanced-options"></a>

Azure SQL ノードを作成する際に、高度なオプションを指定できます。これらのオプションは Spark AWS Glue スクリプトのプログラミング時に使用できるオプションと同じです。

「[Azure SQL 接続](aws-glue-programming-etl-connect-azuresql-home.md)」を参照してください。

# Blackbaud Raiser's Edge NXT への接続
<a name="connecting-to-data-blackbaud"></a>

Blackbaud Raiser's Edge NXT は、非営利団体やソーシャルグッドコミュニティ全体向けに特別に構築された、包括的なクラウドベースの資金集めおよび寄付者管理ソフトウェアソリューションです。このコネクタは、Blackbaud Raiser's Edge NXT の SKY API 上に構築されており、Rayers Edge NXT 内のエンティティの管理に役立つオペレーションを提供します。

**Topics**
+ [Blackbaud Raiser's Edge NXT の AWS Glue サポート](blackbaud-support.md)
+ [接続を作成および使用するための API オペレーションを含むポリシー](blackbaud-configuring-iam-permissions.md)
+ [Blackbaud Raiser's Edge NXT の設定](blackbaud-configuring.md)
+ [Blackbaud Raiser's Edge NXT 接続の設定](blackbaud-configuring-connections.md)
+ [Blackbaud Raiser's Edge NXT エンティティからの読み取り](blackbaud-reading-from-entities.md)
+ [Blackbaud Raiser's Edge NXT 接続オプション](blackbaud-connection-options.md)
+ [Blackbaud Raiser's Edge NXT の制限事項](blackbaud-connection-limitations.md)

# Blackbaud Raiser's Edge NXT の AWS Glue サポート
<a name="blackbaud-support"></a>

AWS Glue は、次のように Blackbaud Raiser's Edge NXT をサポートしています。

**ソースとしてサポートされていますか?**  
はい。AWS Glue ETL ジョブを使用して、Blackbaud Raiser's Edge NXT からデータをクエリできます。

**ターゲットとしてサポートされていますか?**  
いいえ。

**サポートされている Blackbaud Raiser's Edge NXT API バージョン**  
次の Blackbaud Raiser's Edge NXT API バージョンがサポートされています。
+ v1

# 接続を作成および使用するための API オペレーションを含むポリシー
<a name="blackbaud-configuring-iam-permissions"></a>

次のサンプル ポリシーで、接続の作成と使用に必要な AWS IAM 権限について説明します。新しいロールを作成する場合は、以下を含むポリシーを作成します。

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

****  

```
{
  "Version":"2012-10-17",		 	 	 
  "Statement": [
    {
      "Effect": "Allow",
      "Action": [
        "glue:ListConnectionTypes",
        "glue:DescribeConnectionType",
        "glue:RefreshOAuth2Tokens",
        "glue:ListEntities",
        "glue:DescribeEntity"
      ],
      "Resource": "*"
    }
  ]
}
```

------

上記の方法を使用しない場合は、代わりに次のマネージド IAM ポリシーを使用します:
+ [AWSGlueServiceRole](https://console.aws.amazon.com/iam/home#policies/arn:aws:iam::aws:policy/service-role/AWSGlueServiceRole) – さまざまな AWS Glue プロセスを実行するために必要なリソースへのアクセス権をユーザーに代わって付与します。これらのリソースには AWS Glue 、Amazon S3、IAM、CloudWatch Logs、および Amazon EC2 が含まれます。このポリシーで指定されたリソースの命名規則に従った場合、AWS Glue プロセスは必要なアクセス権限を使用できます。このポリシーは、通常、クローラ、ジョブ、開発エンドポイントを定義するときに指定されたロールにアタッチされます。
+ [AWSGlueConsoleFullAccess](https://console.aws.amazon.com/iam/home#policies/arn:aws:iam::aws:policy/AWSGlueConsoleFullAccess) — ポリシーがアタッチされているアイデンティティが AWS マネージメントコンソールを使用するときは、AWS Glue リソースへのフルアクセスを許可します。このポリシーで指定されたリソースの命名規則に従った場合、ユーザーは完全なコンソール機能を使用できます。このポリシーは、通常 AWS Glue コンソールのユーザーにアタッチされています。

# Blackbaud Raiser's Edge NXT の設定
<a name="blackbaud-configuring"></a>

AWS Glue を使用して Blackbaud Raiser's Edge NXT からデータを転送できるようにするには、次の要件を満たす必要があります。

## 最小要件
<a name="blackbaud-configuring-min-requirements"></a>

以下に、最小要件を示します。
+ Blackbaud Raiser's Edge NXT アカウントを持っている。
+ API にアクセスするために割り当てられた適切な読み取り/書き込みスコープを使用して、Blackbaud Raiser's Edge NXT アカウントにアクセストークンを生成した。詳細については、「[Authorization](https://developer.blackbaud.com/skyapi/docs/authorization)」を参照してください。

これらの要件を満たすと、Blackbaud Raiser's Edge NXT アカウントに AWS Glue を接続する準備が整います。

# Blackbaud Raiser's Edge NXT 接続の設定
<a name="blackbaud-configuring-connections"></a>

Blackbaud Raiser's Edge NXT は、OAuth2 の AUTHORIZATION\$1CODE グラントタイプをサポートしています。
+ このグラントタイプは、ユーザーを認証するためにサードパーティーの認証サーバーにユーザーをリダイレクトすることから、「three-legged」の OAuth と見なされます。AWS Glue コンソール経由で接続を作成するときに使用されます。AWS Glue コンソールでは、ユーザーが Blackbaud Raiser's Edge NXT にリダイレクトされます。ここではユーザーがログインし、Blackbaud Raiser's Edge NXT インスタンスにアクセスするためのリクエストされたアクセス許可を AWS Glue に許可する必要があります。
+ ユーザーは、Blackbaud Raiser's Edge NXT で独自の接続アプリを作成し、AWS Glue コンソールを介して接続を作成するときに独自のクライアント ID、サブスクリプションキー、およびインスタンス URL を指定することを選択できます。このシナリオでは、引き続き Blackbaud Raiser's Edge NXT にリダイレクトされてログインし、リソースへアクセスするために AWS Glue を承認します。
+ このグラントタイプは、更新トークンとアクセストークンになります。アクセストークンの有効期間は短く、更新トークンを使用してユーザーとやり取りすることなく自動的に更新される場合があります。
+ 認可コード OAuth フロー用の接続アプリの作成に関する Blackbaud Raiser's Edge NXT の公開ドキュメントについては、「[Authorization](https://developer.blackbaud.com/skyapi/docs/authorization)」を参照してください。

Blackbaud Raiser's Edge NXT 接続を設定するには:

1. AWS Secrets Manager で、次の詳細を含むシークレットを作成します。

   1. カスタマーマネージド接続アプリケーションの場合、シークレットには、`USER_MANAGED_CLIENT_APPLICATION_CLIENT_SECRET` を使用して接続されたアプリケーションの API キーをキーとして含める必要があります。

   1. 注: AWS Glue で接続にシークレットを作成する必要があります。

1. AWS Glue Glue Studio で、以下の手順に従って **[データ接続]** の下に接続を作成します。

   1. **[データソース]** を選択する際に、[Blackbaud Raiser's Edge NXT] を選択します。

   1. 接続する Blackbaud Raiser's Edge NXT アカウントの `INSTANCE_URL` を指定します。

   1. ユーザーマネージドクライアントアプリケーション `clientId` を指定します。

   1. アカウントに関連付けられたサブスクリプションキーを指定します。

   1. 次のアクションを実行でき、AWS Glue がその権限を持つ AWS IAM ロールを選択します。

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

****  

      ```
      {
        "Version":"2012-10-17",		 	 	 
        "Statement": [
          {
            "Effect": "Allow",
            "Action": [
              "secretsmanager:DescribeSecret",
              "secretsmanager:GetSecretValue",
              "secretsmanager:PutSecretValue",
              "ec2:CreateNetworkInterface",
              "ec2:DescribeNetworkInterfaces",
              "ec2:DeleteNetworkInterface"
            ],
            "Resource": "*"
          }
        ]
      }
      ```

------

   1. AWS Glue でこの接続に使用する `secretName` を選択して、トークンを配置します。

   1. ネットワークを使用する場合は、ネットワークオプションを選択します。

1. AWS Glue ジョブに関連付けられている IAM ロールに `secretName` を読み取るアクセス許可を付与します。

# Blackbaud Raiser's Edge NXT エンティティからの読み取り
<a name="blackbaud-reading-from-entities"></a>

**前提条件**

読み取り元の Blackbaud Raiser's Edge NXT オブジェクト。オブジェクト名が必要になります。

**ソースに対応するエンティティ**:


| エンティティ | フィルタリング可能 | 制限をサポートする | Order By をサポートする | Select \$1 をサポートする | パーティション分割をサポートする | 
| --- | --- | --- | --- | --- | --- | 
| 構成員アドレス | はい | あり | なし | あり | あり | 
| 構成員教育 | はい | あり | なし | あり | あり | 
| 構成員 E メールアドレス | はい | あり | なし | あり | あり | 
| 構成員電話 | はい | あり | なし | あり | あり | 
| 構成員ノート | はい | あり | なし | あり | あり | 
| 構成員関係 | はい | あり | なし | あり | あり | 
| 構成員オンラインプレゼンス | はい | あり | なし | あり | あり | 
| 機会 | はい | あり | なし | あり | あり | 
| アピール | はい | あり | なし | あり | あり | 
| キャンペーン | はい | あり | なし | あり | あり | 
| 資金 | はい | あり | なし | あり | あり | 
| パッケージ | はい | あり | なし | あり | あり | 
| ギフトバッチ | はい | あり | なし | あり | なし | 
| イベント参加者 | はい | あり | あり | あり | あり | 
| 構成員ファンドレイザー割り当て | なし | なし | なし | あり | なし | 
| ギフト | はい | あり | あり | あり | あり | 
| メンバーシップ | はい | あり | なし | あり | あり | 
| アクション | はい | あり | なし | あり | なし | 
| 構成員 | はい | あり | あり | あり | あり | 
| 構成員物品 | はい | あり | なし | あり | あり | 
| イベント | はい | あり | あり | あり | あり | 
| ギフトカスタムフィールド | はい | あり | なし | あり | あり | 

**例**:

```
blackbaud_read = glueContext.create_dynamic_frame.from_options(
    connection_type="BLACKBAUD",
    connection_options={
        "connectionName": "connectionName",
        "ENTITY_NAME": "entityName",
        "API_VERSION": "v1",
        "SUBSCRIPTION_KEY": <Subscription key associated with one's developer account>
    }
```

## Blackbaud Raiser's Edge NXT エンティティとフィールドの詳細
<a name="blackbaud-reading-entity-field-details"></a>

エンティティとフィールドの詳細については、以下を参照してください:
+ [アクション](https://developer.blackbaud.com/skyapi/renxt/constituent/entities#Action)
+ [構成員](https://developer.blackbaud.com/skyapi/renxt/constituent/entities#Constituent)
+ [構成員アドレス](https://developer.blackbaud.com/skyapi/renxt/constituent/entities#Address)
+ [構成員メンバーシップ](https://developer.blackbaud.com/skyapi/renxt/constituent/entities#Membership)
+ [構成員ファンドレイザー割り当て](https://developer.blackbaud.com/skyapi/renxt/constituent/entities#FundraiserAssignment)
+ [構成員教育](https://developer.blackbaud.com/skyapi/renxt/constituent/entities#Education)
+ [構成員 E メールアドレス](https://developer.blackbaud.com/skyapi/renxt/constituent/entities#EmailAddress)
+ [構成員電話](https://developer.blackbaud.com/skyapi/renxt/constituent/entities#Phone)
+ [構成員ノート](https://developer.blackbaud.com/skyapi/renxt/constituent/entities#Note)
+ [構成員オンラインプレゼンス](https://developer.blackbaud.com/skyapi/renxt/constituent/entities#OnlinePresence)
+ [構成員関係](https://developer.blackbaud.com/skyapi/renxt/constituent/entities#Relationship)
+ [イベント](https://developer.blackbaud.com/skyapi/renxt/event/entities#Event)
+ [イベント参加者](https://developer.blackbaud.com/skyapi/renxt/event/entities#Participant)
+ [アピール](https://developer.blackbaud.com/skyapi/renxt/fundraising/entities#Appeal)
+ [Campaign](https://developer.blackbaud.com/skyapi/renxt/fundraising/entities#Campaign)
+ [資金](https://developer.blackbaud.com/skyapi/renxt/fundraising/entities#Fund)
+ [パッケージ](https://developer.blackbaud.com/skyapi/renxt/fundraising/entities#Package)
+ [ギフト](https://developer.blackbaud.com/skyapi/renxt/gift/entities#Gift)
+ [ギフトカスタムフィールド](https://developer.blackbaud.com/skyapi/renxt/gift/entities#CustomField)
+ [ギフトバッチ](https://developer.blackbaud.com/skyapi/renxt/gift-batch/entities#GiftBatch)
+ [機会](https://developer.blackbaud.com/skyapi/renxt/opportunity/entities#Opportunity)
+ [構成員コード](https://developer.sky.blackbaud.com/api#api=56b76470069a0509c8f1c5b3)

**注記**  
構造体データ型とリストデータ型は、コネクタの応答で文字列データ型に変換され、DateTime データ型は Timestamp に変換されます。

## パーティショニングクエリ
<a name="blackbaud-reading-partitioning-queries"></a>

**フィールドベースのパーティション分割**:

Blackbaud Raiser's Edge NXT は、フィールドベースまたはレコードベースのパーティショニングをサポートしていません。

**レコードベースのパーティション分割**:

Spark で並行処理を使用する場合は、追加の Spark オプション `NUM_PARTITIONS` を指定できます。これらのパラメータを使用すると、元のクエリは Spark タスクで同時に実行できるサブクエリの `NUM_PARTITIONS` の数に分割されます。

レコードベースのパーティショニングでは、存在するレコードの合計数が Blackbaud Raiser's Edge NXT API からクエリされ、指定された `NUM_PARTITIONS` 数で割られます。その後、結果のレコード数は、各サブクエリによって同時に取得されます。
+ `NUM_PARTITIONS`: パーティション数。

例:

```
blackbaud_read = glueContext.create_dynamic_frame.from_options(
    connection_type="BLACKBAUD",
    connection_options={
        "connectionName": "connectionName",
        "ENTITY_NAME": "entityName",
        "API_VERSION": "v1",
        "NUM_PARTITIONS": "2",
        "SUBSCRIPTION_KEY": <Subscription key associated with one's developer account>
    }
```

# Blackbaud Raiser's Edge NXT 接続オプション
<a name="blackbaud-connection-options"></a>

Blackbaud Raiser's Edge NXT の接続オプションは次のとおりです。
+ `ENTITY_NAME`(文字列) – (必須) 読み取りに使用されます。Blackbaud Raiser's Edge NXT のオブジェクトの名前。
+ `API_VERSION`(文字列) – (必須) 読み取りに使用されます。使用する Blackbaud Raiser's Edge NXT Rest API バージョン。
+ `SELECTED_FIELDS`(List<String>) – Default: empty(SELECT \$1). 読み込みに使用されます。オブジェクトに選択する列です。
+ `FILTER_PREDICATE`(文字列) – デフォルト: 空 読み込みに使用されます。Spark SQL 形式である必要があります。
+ `QUERY`(文字列) - デフォルト: 空 読み込みに使用されます。完全な Spark SQL クエリです。
+ `NUM_PARTITIONS`(整数) – デフォルト: 1。読み込みに使用されます。読み取り用のパーティションの数です。値の例: 10。
+ `SUBSCRIPTION_KEY` (文字列) - (必須) デフォルト: 空。読み込みに使用されます。デベロッパーアカウントに関連付けられたサブスクリプションキー。

# Blackbaud Raiser's Edge NXT の制限事項
<a name="blackbaud-connection-limitations"></a>

Blackbaud Raiser's Edge NXT の制限事項または注意事項は次のとおりです。
+ SaaS は `EQUAL_TO` 演算子のみをサポートし、指定された日付以降に作成または変更された結果を返します。さらに、「id」フィールドは文字列データ型です。また、null 非許容フィールドの識別も行われません。したがって、フィールドベースのパーティショニングはサポートされていません。
+ 増分プルは、毎日、毎月、毎週の頻度で `Event` エンティティによってのみサポートされます。
+ 構成員ファンドレイザー割り当てエンティティは、最大 20 個のレコードを返します。
+ レコードベースのパーティション分割:
  + `Action`、`Constituent Fundraiser Assignment` または `Gift Batch` エンティティではサポートされていません。
  + フィルター述語を使用したレコードベースのパーティショニングは、`Event` および `Event Participant` エンティティでのみサポートされます。フィルター述語が他のレコードベースのサポートされているエンティティと共に使用されている場合、例外がスローされます。
+ `Gift Custom Field` エンティティでは、フィールド「value」をフィールド「category」と組み合わせて使用する必要があります。そうしないと、フィルタリングされていないレスポンスが発生します。したがって、「value」フィールドでフィルタリングしながら「category」フィールドをプラグインするようにユーザーに強制するために、前述の要件に従わない場合、例外がスローされます。
+ 該当するすべてのエンティティの `date_added` および `last_modified` フィールドは、比較演算子をサポートしていません。これらは、等値演算子のみをサポートします。また、前述のフィールドと組み合わせてレコードの範囲を指定できるフィールドはありません。したがって、これらのフィールドはクエリのみ可能で、増分転送をサポートすることはできません。
+ `Gift Batch` エンティティの `added_by` フィールドは、正しい結果を出力しない可能性があるため、フィルタリング可能とは見なされません。
+ `Gift` エンティティにデータを挿入すると、`/GET Gift List` エンドポイントを介してレコードが取得されるまでに約 30 分のレイテンシーがあります。
+ データソース側の制限により、ギフトエンティティの増分転送のサポートは廃止されました。
+ 機会エンティティのステータスフィールドには 10 分のレイテンシーがあります。
+ `Fundraiser Assignment` エンティティには、依存エンティティとして `Constituent` があります。コネクタは、最大 5,000 ID をロードして、レスポンスサイズが最大許容ペイロードサイズを超えないようにします。

# CircleCI への接続
<a name="connecting-to-data-circleci"></a>

CircleCI は、継続的インテグレーションおよび継続的デリバリープラットフォームです。CircleCI アカウントには、プロジェクト、パイプライン、ワークフローなどに関するデータが含まれています。CircleCI ユーザーの場合は、CircleCI アカウントに AWS Glue を接続できます。その後、CircleCI を ETL ジョブのデータソースとして使用できます。これらのジョブを実行して、CircleCI と AWS サービス、またはその他のサポートされているアプリケーション間でデータを転送します。

**Topics**
+ [CircleCI の AWS Glue サポート](circleci-support.md)
+ [接続を作成および使用するための API オペレーションを含むポリシー](circleci-configuring-iam-permissions.md)
+ [CircleCI の設定](circleci-configuring.md)
+ [CircleCI 接続の設定](circleci-configuring-connections.md)
+ [CircleCI エンティティからの読み取り](circleci-reading-from-entities.md)
+ [CircleCI 接続オプション](circleci-connection-options.md)
+ [CircleCI の制限事項](circleci-connection-limitations.md)

# CircleCI の AWS Glue サポート
<a name="circleci-support"></a>

AWS Glue は、次のように CircleCI をサポートしています。

**ソースとしてサポートされていますか?**  
はい。AWS Glue ETL ジョブを使用して、CircleCI からデータをクエリできます。

**ターゲットとしてサポートされていますか?**  
いいえ。

**サポートされている CircleCI API バージョン**  
次の CircleCI API バージョンがサポートされています。
+ v2

# 接続を作成および使用するための API オペレーションを含むポリシー
<a name="circleci-configuring-iam-permissions"></a>

次のサンプル ポリシーで、接続の作成と使用に必要な AWS IAM 権限について説明します。新しいロールを作成する場合は、以下を含むポリシーを作成します。

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

****  

```
{
  "Version":"2012-10-17",		 	 	 
  "Statement": [
    {
      "Effect": "Allow",
      "Action": [
        "glue:ListConnectionTypes",
        "glue:DescribeConnectionType",
        "glue:RefreshOAuth2Tokens",
        "glue:ListEntities",
        "glue:DescribeEntity"
      ],
      "Resource": "*"
    }
  ]
}
```

------

上記の方法を使用しない場合は、代わりに次のマネージド IAM ポリシーを使用します:
+ [AWSGlueServiceRole](https://console.aws.amazon.com/iam/home#policies/arn:aws:iam::aws:policy/service-role/AWSGlueServiceRole) – さまざまな AWS Glue プロセスを実行するために必要なリソースへのアクセス権をユーザーに代わって付与します。これらのリソースには AWS Glue 、Amazon S3、IAM、CloudWatch Logs、および Amazon EC2 が含まれます。このポリシーで指定されたリソースの命名規則に従った場合、AWS Glue プロセスは必要なアクセス権限を使用できます。このポリシーは、通常、クローラ、ジョブ、開発エンドポイントを定義するときに指定されたロールにアタッチされます。
+ [AWSGlueConsoleFullAccess](https://console.aws.amazon.com/iam/home#policies/arn:aws:iam::aws:policy/AWSGlueConsoleFullAccess) — ポリシーがアタッチされているアイデンティティが AWS マネージメントコンソールを使用するときは、AWS Glue リソースへのフルアクセスを許可します。このポリシーで指定されたリソースの命名規則に従った場合、ユーザーは完全なコンソール機能を使用できます。このポリシーは、通常 AWS Glue コンソールのユーザーにアタッチされています。

# CircleCI の設定
<a name="circleci-configuring"></a>

AWS Glue を使用して CircleCI からデータを転送できるようにするには、次の要件を満たす必要があります。

## 最小要件
<a name="circleci-configuring-min-requirements"></a>

以下に、最小要件を示します。
+ 転送するデータを含む CircleCI のアカウントを持っている。
+ アカウントのユーザー設定で、個人用 API トークンを作成した。詳細については、「[Creating a personal API token](https://circleci.com/docs/managing-api-tokens/#creating-a-personal-api-token)」を参照してください。
+ 接続の作成時に、個人用 API トークンを AWS Glue に提供します。

これらの要件を満たすと、CircleCI アカウントに AWS Glue を接続する準備が整います。

# CircleCI 接続の設定
<a name="circleci-configuring-connections"></a>

CircleCI はカスタム認可をサポートしています。

CircleCI 接続を設定するには:

1. AWS Secrets Manager で、次の詳細を含むシークレットを作成します。

   1. カスタマーマネージド接続アプリケーションの場合、シークレットには、`Circle-Token` を使用して接続されたアプリケーションの API キーをキーとして含める必要があります。

   1. 注: AWS Glue で接続にシークレットを作成する必要があります。

1. AWS Glue Glue Studio で、以下の手順に従って **[データ接続]** の下に接続を作成します。

   1. **[データソース]** を選択する際に、[CircleCI] を選択します。

   1. 次のアクションを実行でき、AWS Glue がその権限を持つ AWS IAM ロールを選択します。

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

****  

      ```
      {
        "Version":"2012-10-17",		 	 	 
        "Statement": [
          {
            "Effect": "Allow",
            "Action": [
              "secretsmanager:DescribeSecret",
              "secretsmanager:GetSecretValue",
              "secretsmanager:PutSecretValue",
              "ec2:CreateNetworkInterface",
              "ec2:DescribeNetworkInterfaces",
              "ec2:DeleteNetworkInterface"
            ],
            "Resource": "*"
          }
        ]
      }
      ```

------

   1. AWS Glue でこの接続に使用する `secretName` を選択して、トークンを配置します。

   1. ネットワークを使用する場合は、ネットワークオプションを選択します。

1. AWS Glue ジョブに関連付けられている IAM ロールに `secretName` を読み取るアクセス許可を付与します。

# CircleCI エンティティからの読み取り
<a name="circleci-reading-from-entities"></a>

**前提条件**

読み取り元の CircleCI オブジェクト。オブジェクト名が必要になります。

**ソースに対応するエンティティ**:


| エンティティ | フィルタリング可能 | 制限をサポートする | Order By をサポートする | Select \$1 をサポートする | パーティション分割をサポートする | 
| --- | --- | --- | --- | --- | --- | 
| Context | あり | なし | なし | あり | なし | 
| 組織概要メトリクス | あり | なし | なし | あり | なし | 
| パイプライン | なし | なし | なし | あり | なし | 
| パイプラインワークフロー | あり | なし | なし | あり | なし | 
| プロジェクトブランチ | あり | なし | なし | あり | なし | 
| プロジェクトフレーキーテスト | なし | なし | なし | あり | なし | 
| プロジェクト概要メトリクス | あり | なし | なし | あり | なし | 
| スケジュール | なし | なし | なし | あり | なし | 
| ワークフロージョブの時系列 | あり | なし | なし | あり | なし | 
| ワークフローのメトリクスと傾向 | あり | なし | なし | あり | なし | 
| ワークフローの最近の実行 | あり | なし | なし | あり | なし | 
| ワークフロー概要メトリクス | あり | なし | なし | あり | なし | 
| ワークフローテストメトリクス | あり | なし | なし | あり | なし | 

**例**:

```
circleci_read = glueContext.create_dynamic_frame.from_options(
    connection_type="circleci",
    connection_options={
        "connectionName": "connectionName",
        "ENTITY_NAME": "context/e7ea2945-dccb-4205-b673-8391fe1b3a4c",
        "API_VERSION": "v2"
    }
```

## CircleCI エンティティとフィールドの詳細
<a name="circleci-reading-from-entities-field-details"></a>

エンティティとフィールドの詳細については、以下を参照してください:
+ [コンテキスト](https://circleci.com/docs/api/v2/#operation/listContexts)
+ [プロジェクト概要メトリクス](https://circleci.com/docs/api/v2/#operation/getProjectWorkflowsPageData)
+ [ワークフロージョブの時系列](https://circleci.com/docs/api/v2/#operation/getJobTimeseries)
+ [組織概要メトリクス](https://circleci.com/docs/api/v2/#operation/getOrgSummaryData)
+ [プロジェクトブランチ](https://circleci.com/docs/api/v2/#operation/getAllInsightsBranches)
+ [プロジェクトフレーキーテスト](https://circleci.com/docs/api/v2/#operation/getFlakyTests)
+ [ワークフローの最近の実行](https://circleci.com/docs/api/v2/#operation/getProjectWorkflowRuns)
+ [ワークフロー概要メトリクス](https://circleci.com/docs/api/v2/#operation/getProjectWorkflowMetrics)
+ [ワークフローのメトリクスと傾向](https://circleci.com/docs/api/v2/#operation/getWorkflowSummary)
+ [ワークフローテストメトリクス](https://circleci.com/docs/api/v2/#operation/getProjectWorkflowTestMetrics)
+ [Pipelines](https://circleci.com/docs/api/v2/#operation/listPipelinesForProject)
+ [パイプラインワークフロー](https://circleci.com/docs/api/v2/#operation/listWorkflowsByPipelineId)
+ [スケジュール](https://circleci.com/docs/api/v2/#operation/listSchedulesForProject)

静的メタデータを持つエンティティ:

[\[See the AWS documentation website for more details\]](http://docs.aws.amazon.com/ja_jp/glue/latest/dg/circleci-reading-from-entities.html)

**注記**  
構造体データ型とリストデータ型は、コネクタの応答で文字列データ型に変換されます。

**パーティショニングクエリ**

CircleCI は、フィールドベースまたはレコードベースのパーティショニングをサポートしていません。

# CircleCI 接続オプション
<a name="circleci-connection-options"></a>

CircleCI の接続オプションは次のとおりです。
+ `ENTITY_NAME`(文字列) – (必須) 読み取りに使用されます。CircleCI のオブジェクトの名前。
+ `API_VERSION`(文字列) – (必須) 読み取りに使用されます。使用する CircleCI Rest API バージョン。
+ `SELECTED_FIELDS`(List<String>) – Default: empty(SELECT \$1). 読み込みに使用されます。オブジェクトに選択する列です。
+ `FILTER_PREDICATE`(文字列) – デフォルト: 空 読み込みに使用されます。Spark SQL 形式である必要があります。
+ `QUERY`(文字列) - デフォルト: 空 読み込みに使用されます。完全な Spark SQL クエリです。

# CircleCI の制限事項
<a name="circleci-connection-limitations"></a>

CircleCI の制限事項または注意事項は次のとおりです。
+ CircleCI は、フィールドベースまたはレコードベースのパーティション分割をサポートしていません。
+ '-' (ハイフン) を含むフィルターフィールドは、バッククオートでラップされている場合にのみ機能します。例: `workflow-name` = "abc"
+ GitLab VCS エンティティパスに必要な「プロジェクト ID」を取得するプログラム的な方法がないため、GitLab VCS タイプをサポートできません。

# Datadog に対する接続
<a name="connecting-to-datadog"></a>

Datadog は、インフラストラクチャ、アプリケーション、サービス、ツールなど、クラウドスケールのアプリケーション向けのモニタリングおよび分析プラットフォームです。

**Topics**
+ [Datadog 向けの AWS Glue サポート](datadog-support.md)
+ [接続を作成および使用するための API オペレーションを含むポリシー](datadog-configuring-iam-permissions.md)
+ [Datadog の設定](datadog-configuring.md)
+ [Datadog 接続の設定](datadog-configuring-connections.md)
+ [Datadog エンティティからの読み取り](datadog-reading-from-entities.md)
+ [Datadog 接続オプション](datadog-connection-options.md)
+ [Datadog アカウントの作成](datadog-create-account.md)
+ [制限](datadog-connector-limitations.md)

# Datadog 向けの AWS Glue サポート
<a name="datadog-support"></a>

AWS Glue は、次のように Datadog をサポートします。

**ソースとしてサポートされていますか?**  
はい。AWS Glue ETL ジョブを使用して、Datadog からデータをクエリできます。

**ターゲットとしてサポートされていますか?**  
いいえ。

**サポートされている Datadog API バージョン**  
 
+ v1
+ v2

# 接続を作成および使用するための API オペレーションを含むポリシー
<a name="datadog-configuring-iam-permissions"></a>

次のサンプル ポリシーで、接続の作成と使用に必要な AWS の権限について説明します。新しいロールを作成する場合は、以下を含むポリシーを作成します。

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

****  

```
{
  "Version":"2012-10-17",		 	 	 
  "Statement": [
    {
      "Effect": "Allow",
      "Action": [
        "glue:ListConnectionTypes",
        "glue:DescribeConnectionType",
        "glue:RefreshOAuth2Tokens",
        "glue:ListEntities",
        "glue:DescribeEntity"
      ],
      "Resource": "*"
    }
  ]
}
```

------

上記の方法を使用しない場合は、代わりに次のマネージド IAM ポリシーを使用します。
+  [ AWSGlueServiceRole ](https://console.aws.amazon.com/iam/home#policies/arn:aws:iam::aws:policy/service-role/AWSGlueServiceRole) – さまざまな AWS Glue プロセスを実行するために必要なリソースへのアクセス権をユーザーに代わって付与します。これらのリソースには、AWS Glue、Amazon S3、IAM、CloudWatch Logs、および Amazon EC2 が含まれます。このポリシーで指定されたリソースの命名規則に従った場合、AWS Glue プロセスは必要なアクセス許可を使用できます。このポリシーは、通常、クローラー、ジョブ、開発エンドポイントを定義するときに指定されたロールにアタッチされます。
+  [ AWSGlueConsoleFullAccess ](https://console.aws.amazon.com/iam/home#policies/arn:aws:iam::aws:policy/AWSGlueConsoleFullAccess) — ポリシーがアタッチされているアイデンティティが AWS マネージメントコンソールを使用するときは、AWS Glue リソースへのフルアクセスを許可します。このポリシーで指定されたリソースの命名規則に従った場合、ユーザーは完全なコンソール機能を使用できます。このポリシーは、通常 AWS Glue コンソールのユーザーにアタッチされています。

# Datadog の設定
<a name="datadog-configuring"></a>

AWS Glue を使用して Datadog からデータを転送できるようにするには、次の要件を満たす必要があります。

## 最小要件
<a name="datadog-configuring-min-requirements"></a>
+ DD-API-KEY と DD-APPLICATION-KEY を持つ Datadog アカウントがある。アカウントの作成の詳細については、[「Datadog アカウントの作成](datadog-create-account.md)」を参照してください。
+  Datadog アカウントに、有効なライセンスを持つ API アクセスがある。

   

Datadog は、次の 6 つの URL をサポートしている。すべての Datadog API クライアントは、デフォルトで Datadog US1 サイト API を使用するように設定されている。Datadog EU サイトを使用している場合、API にアクセスするには、Datadog EU サイトの `DD-API-KEY` と `DD-APPLICATION-KEY` を含む https://api.datadoghq.eu の URL を選択する必要があります。同様に、他のサイトの場合は、それぞれのサイトの `DD-API-KEY and DD-APPLICATION-KEY` でそれぞれの URL を選択する必要があります。
+ US1 API URL — [https://api.datadoghq.com](https://api.datadoghq.com)https://api.datadoghq.com
+ EU API URL — [https://api.datadoghq.eu ](https://api.datadoghq.eu)
+ US3 API URL — [https://api.us3.datadoghq.com](https://api.us3.datadoghq.com) 
+ US5 API URL — [https://api.us5.datadoghq.com](https://api.us5.datadoghq.com)
+ S1-FED API URL – [https://api.ddog-gov.com](https://api.ddog-gov.com)
+ Japan API URL — [https://api.ap1.datadoghq.com](https://api.ap1.datadoghq.com)

これらの要件を満たすと、Datadog アカウントに AWS Glue を接続する準備が整います。

# Datadog 接続の設定
<a name="datadog-configuring-connections"></a>

Datadog はカスタム認証をサポートしています。Datadog 接続を設定する手順は次のとおりです。

Datadog 接続を設定するには:

1. AWS Secrets Manager で、次の詳細を含むシークレットを作成します。

   カスタマーマネージド接続アプリケーションの場合 – シークレットには、`API_KEY` と `APPLICATION_KEY` を使用して接続されたアプリケーションのコンシューマーシークレットをキーとして含める必要があります。
**注記**  
AWS Glue で接続ごとにシークレットを作成する必要があります。

1. AWS Glue Studio で、以下の手順に従って **[データ接続]** の下に接続を作成します。

   1. **[接続タイプ]** を選択する際に、[Datadog] を選択します。

   1. 接続先の Datadog の `Instance_Url` を指定します。

   1. AWS Glue が次のアクションを担い、その権限を持つことができる IAM ロールを選択します。

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

****  

      ```
      {
        "Version":"2012-10-17",		 	 	 
        "Statement": [
          {
            "Effect": "Allow",
            "Action": [
              "secretsmanager:DescribeSecret",
              "secretsmanager:GetSecretValue",
              "secretsmanager:PutSecretValue",
              "ec2:CreateNetworkInterface",
              "ec2:DescribeNetworkInterfaces",
              "ec2:DeleteNetworkInterface"
            ],
            "Resource": "*"
          }
        ]
      }
      ```

------

   1. AWS Glue でこの接続に使用する `secretName` を選択して、トークンを配置します。

   1.  ネットワークを使用する場合は、ネットワークオプションを選択します。

1. AWS Glue ジョブに関連付けられている IAM ロールに `secretName` を読み取るアクセス許可を付与します。

# Datadog エンティティからの読み取り
<a name="datadog-reading-from-entities"></a>

 **前提条件** 

読み取り元の Datadog オブジェクト。使用可能なエンティティを確認するには、以下のサポートされているエンティティの表を参照してください。

 **サポートされているエンティティ** 


| エンティティ | フィルタリング可能 | 制限をサポートする | Order By をサポートする | Select \$1 をサポートする | パーティショニングをサポートする | 
| --- | --- | --- | --- | --- | --- | 
|  メトリクスの時系列  | はい | なし | なし | あり | なし | 
|  ログクエリ  | あり | はい | はい | あり | なし | 

 **例** 

```
Datadog_read = glueContext.create_dynamic_frame.from_options(
    connection_type="datadog",
    connection_options={
        "connectionName": "connectionName",
        "ENTITY_NAME": "log-queries",
        "API_VERSION": "v2",
        "INSTANCE_URL": "https://api.datadoghq.com",
        "FILTER_PREDICATE": "from = `2023-10-03T09:00:26Z`"
    }
```

 **Datadog エンティティとフィールドの詳細** 

[\[See the AWS documentation website for more details\]](http://docs.aws.amazon.com/ja_jp/glue/latest/dg/datadog-reading-from-entities.html)

# Datadog 接続オプション
<a name="datadog-connection-options"></a>

Datadog の接続オプションは次のとおりです。
+  `ENTITY_NAME`(文字列) – (必須) 読み取り / 書き込みに使用されます。Datadog のオブジェクトの名前。
+  `API_VERSION`(文字列) – (必須) 読み取り / 書き込みに使用されます。使用する Datadog Rest API バージョン。`v1` バージョンは `metrics-timeseries` エンティティをサポートし、`v2` バージョンは `log-queries` エンティティをサポートします。
+  `INSTANCE_URL`(文字列) – (必須) 読み取りに使用されます。Datadog インスタンス URL。Datadog インスタンスの URL はリージョンによって異なります。
+  `SELECTED_FIELDS`(List<String>) – Default: empty(SELECT \$1). 読み込みに使用されます。オブジェクトに選択する列です。
+  `FILTER_PREDICATE`(文字列) – デフォルト: 空 読み込みに使用されます。Spark SQL 形式である必要があります。
+  `QUERY`(文字列) – デフォルト: 空 読み込みに使用されます。完全な Spark SQL クエリです。

# Datadog アカウントの作成
<a name="datadog-create-account"></a>

1. [https://www.datadoghq.com/](https://api.datadoghq.com) に移動します。

1. **[無料で開始する]** を選択します。

1. 必須事項を入力し、サインアップします。

1. 提案に従って **[Datadog エージェントインストーラ]** をインストールします。

1. アカウントが、アクティブな Datadog サブスクリプションを持つ有効な組織 (利用可能なリストから) に登録されていることを確認します。

1. Datadog アカウントにログインしたら、右上隅のユーザー名にカーソルを合わせると、**[キー]** の詳細が表示されます。

   1. API キーを取得するには、**[API キー]** を選択します。

   1. アプリケーションキーを取得するには、**[アプリケーションキー]** を選択します。

# 制限
<a name="datadog-connector-limitations"></a>

Datadog コネクタの制限は次のとおりです:
+ Datadog は、フィールドベースまたはレコードベースのパーティション分割をサポートしていません。
+ `from` は `Log Queries` エンティティの必須フィルターパラメータです。
+ `from_to_date` および `query` は `Metrics Timeseries` エンティティの必須フィルターパラメータです。

# Docusign Monitor への接続
<a name="connecting-to-data-docusign-monitor"></a>

Docusign Monitor は、24 時間体制でアクティビティを追跡し、組織が契約を保護するのを支援します。Monitor API は、このアクティビティ追跡情報を既存のセキュリティスタックまたはデータ可視化ツールに直接配信します。これにより、チームは不正なアクティビティを検出し、インシデントを調査し、検証済みの脅威に迅速に対応できます。また、セキュリティチームが特定のビジネスニーズに合わせてダッシュボードとアラートをカスタマイズするために必要な柔軟性も提供します。

**Topics**
+ [Docusign Monitor の AWS Glue サポート](docusign-monitor-support.md)
+ [接続を作成および使用するための API オペレーションを含むポリシー](docusign-monitor-configuring-iam-permissions.md)
+ [Docusign Monitor の設定](docusign-monitor-configuring.md)
+ [Docusign Monitor 接続の設定](docusign-monitor-configuring-connections.md)
+ [Docusign Monitor エンティティからの読み取り](docusign-monitor-reading-from-entities.md)
+ [Docusign Monitor 接続オプション](docusign-monitor-connection-options.md)
+ [Docusign Monitor の制限事項](docusign-monitor-connection-limitations.md)

# Docusign Monitor の AWS Glue サポート
<a name="docusign-monitor-support"></a>

AWS Glue は、次のように Docusign Monitor をサポートしています。

**ソースとしてサポートされていますか?**  
はい。AWS Glue ETL ジョブを使用して、Docusign Monitor からデータをクエリできます。

**ターゲットとしてサポートされていますか?**  
いいえ。

**サポートされている Docusign Monitor API バージョン**  
次の Docusign Monitor API バージョンがサポートされています。
+ v2.0

# 接続を作成および使用するための API オペレーションを含むポリシー
<a name="docusign-monitor-configuring-iam-permissions"></a>

次のサンプル ポリシーで、接続の作成と使用に必要な AWS IAM 権限について説明します。新しいロールを作成する場合は、以下を含むポリシーを作成します。

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

****  

```
{
  "Version":"2012-10-17",		 	 	 
  "Statement": [
    {
      "Effect": "Allow",
      "Action": [
        "glue:ListConnectionTypes",
        "glue:DescribeConnectionType",
        "glue:RefreshOAuth2Tokens",
        "glue:ListEntities",
        "glue:DescribeEntity"
      ],
      "Resource": "*"
    }
  ]
}
```

------

上記の方法を使用しない場合は、代わりに次のマネージド IAM ポリシーを使用します:
+ [AWSGlueServiceRole](https://console.aws.amazon.com/iam/home#policies/arn:aws:iam::aws:policy/service-role/AWSGlueServiceRole) – さまざまな AWS Glue プロセスを実行するために必要なリソースへのアクセス権をユーザーに代わって付与します。これらのリソースには AWS Glue 、Amazon S3、IAM、CloudWatch Logs、および Amazon EC2 が含まれます。このポリシーで指定されたリソースの命名規則に従った場合、AWS Glue プロセスは必要なアクセス権限を使用できます。このポリシーは、通常、クローラ、ジョブ、開発エンドポイントを定義するときに指定されたロールにアタッチされます。
+ [AWSGlueConsoleFullAccess](https://console.aws.amazon.com/iam/home#policies/arn:aws:iam::aws:policy/AWSGlueConsoleFullAccess) — ポリシーがアタッチされているアイデンティティが AWS マネージメントコンソールを使用するときは、AWS Glue リソースへのフルアクセスを許可します。このポリシーで指定されたリソースの命名規則に従った場合、ユーザーは完全なコンソール機能を使用できます。このポリシーは、通常 AWS Glue コンソールのユーザーにアタッチされています。

# Docusign Monitor の設定
<a name="docusign-monitor-configuring"></a>

AWS Glue を使用して Docusign Monitor からサポートされている送信先にデータを転送できるようにするには、次の要件を満たす必要があります。

## 最小要件
<a name="docusign-monitor-configuring-min-requirements"></a>

以下に、最小要件を示します。
+ Docusign Monitor で Docusign Software 製品を使用する Docusign アカウントを持っている。
+ Docusign アカウントのデベロッパーコンソールで、AWS Glue 用の OAuth 2.0 統合アプリケーションを作成した。

  このアプリにより、AWS Glue がお客様のアカウントに対して認可呼び出しを行うときに、お客様のデータに安全にアクセスするために使用するクライアントの認証情報が提供されます。詳細については、Docusign Monitor ドキュメントの「[OAuth 2.0](https://developers.docusign.com/platform/webhooks/connect/validation-and-security/oauth-connect/)」を参照してください。

これらの要件を満たすと、Docusign Monitor アカウントに AWS Glue を接続する準備が整います。

# Docusign Monitor 接続の設定
<a name="docusign-monitor-configuring-connections"></a>

Docusign Monitor は、AUTHORIZATION\$1CODE グラントタイプをサポートしています。
+ このグラントタイプは、ユーザーを認証するためにサードパーティーの認証サーバーにユーザーをリダイレクトすることから、three-legged の OAuth と見なされます。AWS Glue コンソール経由で接続を作成するときに使用されます。
+ ユーザーは、Docusign Monitor で独自の接続アプリを作成し、AWS Glue コンソールを介して接続を作成するときに独自のクライアント ID とクライアントシークレットを指定することを選択できます。このシナリオでは、引き続き Docusign Monitor にリダイレクトされてログインし、リソースへアクセスするために AWS Glue を認可します。
+ このグラントタイプは、更新トークンとアクセストークンになります。アクセストークンの有効期間は短く、更新トークンを使用してユーザーとやり取りすることなく自動的に更新される場合があります。
+ 認可コード OAuth フロー用の接続アプリの作成に関する Docusign Monitor の公開ドキュメントについては、「[OAuth for Docusign Connect](https://developers.docusign.com/platform/webhooks/connect/validation-and-security/oauth-connect/)」を参照してください。

Docusign Monitor 接続を設定するには:

1. AWS Secrets Manager で、次の詳細を含むシークレットを作成します。

   1. カスタマーマネージド接続アプリケーションの場合、シークレットには、`USER_MANAGED_CLIENT_APPLICATION_CLIENT_SECRET` を使用して接続されたアプリケーションの API キーをキーとして含める必要があります。

   1. 注: AWS Glue で接続にシークレットを作成する必要があります。

1. AWS Glue Glue Studio で、以下の手順に従って **[データ接続]** の下に接続を作成します。

   1. **[接続]** で **[接続を作成]** を選択します。

   1. **[データソース]** を選択する際に、[Docusign Monitor] を選択します。

   1. 次のアクションを実行でき、AWS Glue がその権限を持つ AWS IAM ロールを選択します。

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

****  

      ```
      {
        "Version":"2012-10-17",		 	 	 
        "Statement": [
          {
            "Effect": "Allow",
            "Action": [
              "secretsmanager:DescribeSecret",
              "secretsmanager:GetSecretValue",
              "secretsmanager:PutSecretValue",
              "ec2:CreateNetworkInterface",
              "ec2:DescribeNetworkInterfaces",
              "ec2:DeleteNetworkInterface"
            ],
            "Resource": "*"
          }
        ]
      }
      ```

------

   1. Docusign Monitor アプリの **[ユーザー管理クライアントアプリケーション ClientId]** を指定します。

   1. AWS Glue でこの接続に使用する `secretName` を選択して、トークンを配置します。

   1. ネットワークを使用する場合は、ネットワークオプションを選択します。

1. AWS Glue ジョブに関連付けられている IAM ロールに `secretName` を読み取るアクセス許可を付与します。

# Docusign Monitor エンティティからの読み取り
<a name="docusign-monitor-reading-from-entities"></a>

**前提条件**

読み取り元の Docusign Monitor オブジェクト。

**ソースに対応するエンティティ**:


| エンティティ | フィルタリング可能 | 制限をサポートする | Order By をサポートする | Select \$1 をサポートする | パーティション分割をサポートする | 
| --- | --- | --- | --- | --- | --- | 
| データのモニタリング | はい | あり | なし | あり | なし | 

**例**:

```
docusignmonitor_read = glueContext.create_dynamic_frame.from_options(
    connection_type="docusign_monitor",
    connection_options={
        "connectionName": "connectionName",
        "ENTITY_NAME": "monitoring-data",
        "API_VERSION": "v2.0"
    }
```

## Docusign Monitor エンティティとフィールドの詳細
<a name="docusign-monitor-reading-from-entities-field-details"></a>

静的メタデータを持つエンティティ:

[\[See the AWS documentation website for more details\]](http://docs.aws.amazon.com/ja_jp/glue/latest/dg/docusign-monitor-reading-from-entities.html)

**パーティショニングクエリ**

Docusign Monitor は、フィールドベースまたはレコードベースのパーティショニングをサポートしていません。

# Docusign Monitor 接続オプション
<a name="docusign-monitor-connection-options"></a>

Docusign Monitor の接続オプションは次のとおりです。
+ `ENTITY_NAME`(文字列) – (必須) 読み取りに使用されます。Docusign Monitor のオブジェクトの名前。
+ `API_VERSION`(文字列) – (必須) 読み取りに使用されます。使用する Docusign Monitor Rest API バージョン。
+ `SELECTED_FIELDS`(List<String>) – Default: empty(SELECT \$1). 読み込みに使用されます。オブジェクトに選択する列です。
+ `QUERY`(文字列) – デフォルト: 空 読み込みに使用されます。完全な Spark SQL クエリです。
+ `FILTER_PREDICATE`(文字列) – デフォルト: 空 読み込みに使用されます。Spark SQL 形式である必要があります。

# Docusign Monitor の制限事項
<a name="docusign-monitor-connection-limitations"></a>

Docusign Monitor の制限または注意事項は次のとおりです。
+ `cursor` フィールドを使用してフィルターを適用すると、API は指定された日付から 7 日間のレコードを取得します。
+ フィルターが指定されていない場合、API は API リクエストの現在の日付から過去 7 日間のレコードを取得します。
+ Docusign Monitor は、フィールドベースまたはレコードベースのパーティショニングをサポートしていません。
+ Docusign Monitor は Order By 機能をサポートしていません。

# Domo への接続
<a name="connecting-to-data-domo"></a>

Domo はクラウドベースのダッシュボードツールです。Domo のエンタープライズアプリケーションプラットフォームでは、Domo を拡張するために必要な基盤が整っているため、カスタムソリューションをより迅速に構築できます。

**Topics**
+ [Domo の AWS Glue サポート](domo-support.md)
+ [接続を作成および使用するための API オペレーションを含むポリシー](domo-configuring-iam-permissions.md)
+ [Domo の設定](domo-configuring.md)
+ [Domo 接続の設定](domo-configuring-connections.md)
+ [Domo エンティティからの読み取り](domo-reading-from-entities.md)
+ [Domo 接続オプション](domo-connection-options.md)
+ [Domo の制限事項](domo-connection-limitations.md)

# Domo の AWS Glue サポート
<a name="domo-support"></a>

AWS Glue は、次のように Domo をサポートします。

**ソースとしてサポートされていますか?**  
はい。AWS Glue ETL ジョブを使用して、Domo からデータをクエリできます。

**ターゲットとしてサポートされていますか?**  
いいえ。

**サポートされている Domo API バージョン**  
次の Domo API バージョンがサポートされています。
+ v1

# 接続を作成および使用するための API オペレーションを含むポリシー
<a name="domo-configuring-iam-permissions"></a>

次のサンプル ポリシーで、接続の作成と使用に必要な AWS IAM 権限について説明します。新しいロールを作成する場合は、以下を含むポリシーを作成します。

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

****  

```
{
  "Version":"2012-10-17",		 	 	 
  "Statement": [
    {
      "Effect": "Allow",
      "Action": [
        "glue:ListConnectionTypes",
        "glue:DescribeConnectionType",
        "glue:RefreshOAuth2Tokens",
        "glue:ListEntities",
        "glue:DescribeEntity"
      ],
      "Resource": "*"
    }
  ]
}
```

------

上記の方法を使用しない場合は、代わりに次のマネージド IAM ポリシーを使用します:
+ [AWSGlueServiceRole](https://console.aws.amazon.com/iam/home#policies/arn:aws:iam::aws:policy/service-role/AWSGlueServiceRole) – さまざまな AWS Glue プロセスを実行するために必要なリソースへのアクセス権をユーザーに代わって付与します。これらのリソースには AWS Glue 、Amazon S3、IAM、CloudWatch Logs、および Amazon EC2 が含まれます。このポリシーで指定されたリソースの命名規則に従った場合、AWS Glue プロセスは必要なアクセス権限を使用できます。このポリシーは、通常、クローラ、ジョブ、開発エンドポイントを定義するときに指定されたロールにアタッチされます。
+ [AWSGlueConsoleFullAccess](https://console.aws.amazon.com/iam/home#policies/arn:aws:iam::aws:policy/AWSGlueConsoleFullAccess) — ポリシーがアタッチされているアイデンティティが AWS マネージメントコンソールを使用するときは、AWS Glue リソースへのフルアクセスを許可します。このポリシーで指定されたリソースの命名規則に従った場合、ユーザーは完全なコンソール機能を使用できます。このポリシーは、通常 AWS Glue コンソールのユーザーにアタッチされています。

# Domo の設定
<a name="domo-configuring"></a>

AWS Glue を使用して Domo からサポートされている送信先にデータを転送できるようにするには、次の要件を満たす必要があります。

## 最小要件
<a name="domo-configuring-min-requirements"></a>

以下に、最小要件を示します。
+ API アクセスが有効になっている Domo アカウントがある。
+ Domo デベロッパーアカウントの下には、AWS Glue がアカウントに対して認可呼び出しを行うときにデータに安全にアクセスするために使用するクライアント認証情報を提供するアプリケーションがある。詳細については、「[Domo デベロッパーアプリケーションの作成](#domo-configuring-creating-developer-app)」を参照してください。

これらの要件を満たすと、Domo アカウントに AWS Glue を接続する準備が整います。

## Domo デベロッパーアプリケーションの作成
<a name="domo-configuring-creating-developer-app"></a>

[クライアント ID] と [クライアントシークレット] を取得するには、デベロッパーアカウントを作成します。

1. [Domo デベロッパーログインページ](https://developer.domo.com/manage-clients)に移動します。

1. [**ログイン**] を選択します。

1. ドメイン名を指定し、**[Continue]** をクリックします。

1. **[My Account]** にカーソルを合わせ、**[New Client]** を選択します。

1. 名前と説明を入力し、スコープ (「データ」) を選択して、**[Create]** を選択します。

1. 作成された新しいクライアントから、生成された **[クライアント ID]** と **[クライアントシークレット]** を取得します。

# Domo 接続の設定
<a name="domo-configuring-connections"></a>

Domo は、OAuth2 の CLIENT\$1CREDENTIALS グラントタイプをサポートしています。
+ このグラントタイプは、クライアントアプリケーションのみがサーバーに対して自身を認可し、ユーザーには関与しないため、2 レッグの OAuth と見なされます。
+ ユーザーは、Domo で独自の接続アプリを作成し、AWS Glue コンソールを介して接続を作成するときに独自のクライアント ID とクライアントシークレットを指定することを選択できます。
+ 認可コード OAuth フロー用の接続アプリの作成に関する Domo の公開ドキュメントについては、「[OAuth Authentication](https://developer.domo.com/portal/1845fc11bbe5d-api-authentication)」を参照してください。

Domo 接続を設定するには:

1. AWS Secrets Manager で、次の詳細を含むシークレットを作成します。

   1. カスタマーマネージド接続アプリの場合、シークレットには接続アプリのアクセストークン、`client_id`、および `client_secret` を含める必要があります。

   1. 注: AWS Glue で接続にシークレットを作成する必要があります。

1. AWS Glue Glue Studio で、以下の手順に従って **[データ接続]** の下に接続を作成します。

   1. **[接続]** で **[接続を作成]** を選択します。

   1. **[データソース]** を選択する際に、[Domo] を選択します。

   1. 次のアクションを実行でき、AWS Glue がその権限を持つ AWS IAM ロールを選択します。

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

****  

      ```
      {
        "Version":"2012-10-17",		 	 	 
        "Statement": [
          {
            "Effect": "Allow",
            "Action": [
              "secretsmanager:DescribeSecret",
              "secretsmanager:GetSecretValue",
              "secretsmanager:PutSecretValue",
              "ec2:CreateNetworkInterface",
              "ec2:DescribeNetworkInterfaces",
              "ec2:DeleteNetworkInterface"
            ],
            "Resource": "*"
          }
        ]
      }
      ```

------

   1. AWS Glue でこの接続に使用する `secretName` を選択して、トークンを配置します。

   1. ネットワークを使用する場合は、ネットワークオプションを選択します。

1. AWS Glue ジョブに関連付けられている IAM ロールに `secretName` を読み取るアクセス許可を付与します。

# Domo エンティティからの読み取り
<a name="domo-reading-from-entities"></a>

**前提条件**

読み取り元の Domo オブジェクト。Data Set や Data Permission Policies などのオブジェクト名が必要です。次の表に、サポートされているエンティティを示します。

**ソースに対応するエンティティ**:


| エンティティ | フィルタリング可能 | 制限をサポートする | Order By をサポートする | Select \$1 をサポートする | パーティション分割をサポートする | 
| --- | --- | --- | --- | --- | --- | 
| データセット | はい | あり | あり | あり | あり | 
| Data Permission Policies | なし | なし | なし | あり | なし | 

**例**:

```
Domo_read = glueContext.create_dynamic_frame.from_options(
    connection_type="domo",
    connection_options={
        "connectionName": "connectionName",
        "ENTITY_NAME": "dataset",
        "API_VERSION": "v1"
    }
```

## Domo エンティティとフィールドの詳細
<a name="domo-reading-from-entities-field-details"></a>

静的メタデータを持つエンティティ:

[\[See the AWS documentation website for more details\]](http://docs.aws.amazon.com/ja_jp/glue/latest/dg/domo-reading-from-entities.html)

次のエンティティについて、Domo はメタデータを動的に取得するエンドポイントを提供するため、演算子のサポートはエンティティのデータ型レベルでキャプチャされます。

[\[See the AWS documentation website for more details\]](http://docs.aws.amazon.com/ja_jp/glue/latest/dg/domo-reading-from-entities.html)

## パーティショニングクエリ
<a name="domo-reading-from-partitioning"></a>

**フィールドベースのパーティション分割**

Spark で同時実行を使用する場合は、追加の Spark オプション `PARTITION_FIELD`、`LOWER_BOUND`、`UPPER_BOUND`、および `NUM_PARTITIONS` を指定できます。これらのパラメータを使用すると、元のクエリは Spark タスクで同時に実行できるサブクエリの `NUM_PARTITIONS` の数に分割されます。
+ `PARTITION_FIELD`: クエリのパーティション化に使用するフィールドの名前。
+ `LOWER_BOUND`: 選択したパーティションフィールドの**包括的な**下限値。

  DateTime フィールドでは、ISO 形式の値を受け入れます。

  有効な値の例:

  ```
  "2023-01-15T11:18:39.205Z"
  ```

  Date フィールドでは、ISO 形式の値を受け入れます。

  有効な値の例:

  ```
  "2023-01-15"
  ```
+ `UPPER_BOUND`: 選択したパーティションフィールドの**排他的**上限値。

  有効な値の例:

  ```
  "2023-02-15T11:18:39.205Z"
  ```
+ `NUM_PARTITIONS`: パーティション数。

エンティティごとのパーティション分割フィールドのサポートの詳細は、次の表にまとめられています。

[\[See the AWS documentation website for more details\]](http://docs.aws.amazon.com/ja_jp/glue/latest/dg/domo-reading-from-entities.html)

例:

```
Domo_read = glueContext.create_dynamic_frame.from_options(
    connection_type="domo",
    connection_options={
        "connectionName": "connectionName",
        "ENTITY_NAME": "dataset",
        "API_VERSION": "v1",
        "PARTITION_FIELD": "permissionTime"
        "LOWER_BOUND": "2023-01-15T11:18:39.205Z"
        "UPPER_BOUND": "2023-02-15T11:18:39.205Z"
        "NUM_PARTITIONS": "2"
    }
```

**レコードベースのパーティション分割**

Spark で並行処理を使用する場合は、追加の Spark オプション `NUM_PARTITIONS` を指定できます。これらのパラメータを使用すると、元のクエリは Spark タスクで同時に実行できるサブクエリの `NUM_PARTITIONS` の数に分割されます。

レコードベースのパーティショニングでは、存在するレコードの合計数が Domo からクエリされ、指定された `NUM_PARTITIONS` 数で割られます。その後、結果のレコード数は、各サブクエリによって同時に取得されます。

例:

```
Domo_read = glueContext.create_dynamic_frame.from_options(
    connection_type="domo",
    connection_options={
        "connectionName": "connectionName",
        "ENTITY_NAME": "dataset",
        "API_VERSION": "v1",
        "NUM_PARTITIONS": "2"
    }
```

# Domo 接続オプション
<a name="domo-connection-options"></a>

Domo の接続オプションは次のとおりです。
+ `ENTITY_NAME`(文字列) – (必須) 読み取りに使用されます。Domo のオブジェクトの名前。
+ `API_VERSION`(文字列) – (必須) 読み取りに使用されます。使用する Domo Rest API バージョン。
+ `SELECTED_FIELDS`(List<String>) – Default: empty(SELECT \$1). 読み込みに使用されます。オブジェクトに選択する列です。
+ `FILTER_PREDICATE`(文字列) – デフォルト: 空 読み込みに使用されます。Spark SQL 形式である必要があります。
+ `QUERY`(文字列) - デフォルト: 空 読み込みに使用されます。完全な Spark SQL クエリです。
+ `PARTITION_FIELD` (文字列) – 読み取りに使用されます。クエリをパーティション化するために使用するフィールドです。
+ `LOWER_BOUND` (文字列)– 読み取りに使用されます。選択したパーティションフィールドの包括的な下限値。
+ `UPPER_BOUND` (文字列) – 読み取りに使用されます。選択したパーティションフィールドの排他的上限値。
+ `NUM_PARTITIONS`(整数) – デフォルト: 1。読み込みに使用されます。読み取り用のパーティションの数です。

# Domo の制限事項
<a name="domo-connection-limitations"></a>

Domo の制限事項または注意事項は次のとおりです。
+ SDK の制限により、「\$1」で始まるクエリ可能なフィールド (\$1BATCH\$1ID など) では、フィルタリングが期待どおりに機能しません。
+ API の制限により、フィルタリングは指定された日付より前の日付で機能します。これは増分プルにも影響します。この制限を回避するには、UTC を基準にしたタイムゾーンに従って日付を選択し、必要な日付のデータを取得します。

# Dynatrace への接続
<a name="connecting-to-data-dynatrace"></a>

Dynatrace は、包括的なオブザーバビリティとセキュリティのための分析と自動化を提供するプラットフォームです。アプリケーションのパフォーマンス、インフラストラクチャ、ユーザーエクスペリエンスのモニタリングと最適化に特化しています。

**Topics**
+ [Dynatrace の AWS Glue サポート](dynatrace-support.md)
+ [接続を作成および使用するための API オペレーションを含むポリシー](dynatrace-configuring-iam-permissions.md)
+ [Dynatrace の設定](dynatrace-configuring.md)
+ [Dynatrace 接続の設定](dynatrace-configuring-connections.md)
+ [Dynatrace エンティティからの読み取り](dynatrace-reading-from-entities.md)
+ [Dynatrace の接続オプション](dynatrace-connection-options.md)
+ [Dynatrace の制限事項](dynatrace-connection-limitations.md)

# Dynatrace の AWS Glue サポート
<a name="dynatrace-support"></a>

AWS Glue は、次のように Dynatrace をサポートしています。

**ソースとしてサポートされていますか?**  
はい。AWS Glue ETL ジョブを使用して、Dynatrace からデータをクエリできます。

**ターゲットとしてサポートされていますか?**  
いいえ。

**サポートされている Dynatrace API バージョン**  
次の Dynatrace API バージョンがサポートされています。
+ v2

# 接続を作成および使用するための API オペレーションを含むポリシー
<a name="dynatrace-configuring-iam-permissions"></a>

次のサンプル ポリシーで、接続の作成と使用に必要な AWS IAM 権限について説明します。新しいロールを作成する場合は、以下を含むポリシーを作成します。

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

****  

```
{
  "Version":"2012-10-17",		 	 	 
  "Statement": [
    {
      "Effect": "Allow",
      "Action": [
        "glue:ListConnectionTypes",
        "glue:DescribeConnectionType",
        "glue:RefreshOAuth2Tokens",
        "glue:ListEntities",
        "glue:DescribeEntity"
      ],
      "Resource": "*"
    }
  ]
}
```

------

上記の方法を使用しない場合は、代わりに次のマネージド IAM ポリシーを使用します:
+ [AWSGlueServiceRole](https://console.aws.amazon.com/iam/home#policies/arn:aws:iam::aws:policy/service-role/AWSGlueServiceRole) – さまざまな AWS Glue プロセスを実行するために必要なリソースへのアクセス権をユーザーに代わって付与します。これらのリソースには AWS Glue 、Amazon S3、IAM、CloudWatch Logs、および Amazon EC2 が含まれます。このポリシーで指定されたリソースの命名規則に従った場合、AWS Glue プロセスは必要なアクセス権限を使用できます。このポリシーは、通常、クローラ、ジョブ、開発エンドポイントを定義するときに指定されたロールにアタッチされます。
+ [AWSGlueConsoleFullAccess](https://console.aws.amazon.com/iam/home#policies/arn:aws:iam::aws:policy/AWSGlueConsoleFullAccess) — ポリシーがアタッチされているアイデンティティが AWS マネージメントコンソールを使用するときは、AWS Glue リソースへのフルアクセスを許可します。このポリシーで指定されたリソースの命名規則に従った場合、ユーザーは完全なコンソール機能を使用できます。このポリシーは、通常 AWS Glue コンソールのユーザーにアタッチされています。

# Dynatrace の設定
<a name="dynatrace-configuring"></a>

AWS Glue を使用して Dynatrace からデータを転送できるようにするには、次の要件を満たす必要があります。

## 最小要件
<a name="dynatrace-configuring-min-requirements"></a>

以下に、最小要件を示します。
+ Dynatrace アカウントがある。
+ API にアクセスするために割り当てられた適切な読み取り/書き込みスコープを使用して、Dynatrace アカウントにアクセストークンを生成している。詳細については、「[Generate a token](https://docs.dynatrace.com/docs/discover-dynatrace/references/dynatrace-api/basics/dynatrace-api-authentication#create-token)」を参照してください。

これらの要件を満たすと、Dynatrace アカウントに AWS Glue を接続する準備が整います。

# Dynatrace 接続の設定
<a name="dynatrace-configuring-connections"></a>

Dynatrace はカスタム認可をサポートしています。

Dynatrace 接続を設定するには

1. AWS Secrets Manager で、次の詳細を含むシークレットを作成します。

   1. カスタマーマネージド接続アプリケーションの場合、シークレットには、`apiToken` を使用して接続されたアプリケーションの API キーをキーとして含める必要があります。

   1. 注: AWS Glue で接続にシークレットを作成する必要があります。

1. AWS Glue Glue Studio で、以下の手順に従って **[データ接続]** の下に接続を作成します。

   1. **[データソース]** を選択するときは、[Dynatrace] を選択します。

   1. 接続先の Dynatrace アカウントの `INSTANCE_URL` を指定します。

   1. 次のアクションを実行でき、AWS Glue がその権限を持つ AWS IAM ロールを選択します。

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

****  

      ```
      {
        "Version":"2012-10-17",		 	 	 
        "Statement": [
          {
            "Effect": "Allow",
            "Action": [
              "secretsmanager:DescribeSecret",
              "secretsmanager:GetSecretValue",
              "secretsmanager:PutSecretValue",
              "ec2:CreateNetworkInterface",
              "ec2:DescribeNetworkInterfaces",
              "ec2:DeleteNetworkInterface"
            ],
            "Resource": "*"
          }
        ]
      }
      ```

------

   1. AWS Glue でこの接続に使用する `secretName` を選択して、トークンを配置します。

   1. ネットワークを使用する場合は、ネットワークオプションを選択します。

1. AWS Glue ジョブに関連付けられている IAM ロールに `secretName` を読み取るアクセス許可を付与します。

# Dynatrace エンティティからの読み取り
<a name="dynatrace-reading-from-entities"></a>

**前提条件**

読み取り元の Dynatrace オブジェクト。「problem」などのオブジェクト名が必要です。

**ソースに対応するエンティティ**:


| エンティティ | フィルタリング可能 | 制限をサポートする | Order By をサポートする | Select \$1 をサポートする | パーティション分割をサポートする | 
| --- | --- | --- | --- | --- | --- | 
| 問題 | はい | あり | あり | あり | なし | 

**例**:

```
Dynatrace_read = glueContext.create_dynamic_frame.from_options(
    connection_type="Dynatrace",
    connection_options={
        "connectionName": "connectionName",
        "ENTITY_NAME": "problem",
        "API_VERSION": "v2",
        "INSTANCE_URL": "https://[instanceName].live.dynatrace.com"
    }
```

**Dynatrace エンティティとフィールドの詳細**:

Dynatrace では、サポートされているエンティティのメタデータを動的に取得するためのエンドポイントが提供されます。したがって、オペレータのサポートはデータ型レベルでキャプチャされます。

[\[See the AWS documentation website for more details\]](http://docs.aws.amazon.com/ja_jp/glue/latest/dg/dynatrace-reading-from-entities.html)

## パーティショニングクエリ
<a name="dynatrace-reading-partitioning-queries"></a>

Dynatrace は、フィールドベースまたはレコードベースのパーティショニングをサポートしていません。

# Dynatrace の接続オプション
<a name="dynatrace-connection-options"></a>

Dynatrace の接続オプションは次のとおりです。
+ `ENTITY_NAME`(文字列) – (必須) 読み取りに使用されます。Dynatrace のオブジェクトの名前。
+ `API_VERSION`(文字列) – (必須) 読み取りに使用されます。使用する Dynatrace Rest API バージョン。
+ `INSTANCE_URL`(文字列) - 読み取りに使用されます。有効な Dynatrace インスタンス URL。
+ `SELECTED_FIELDS`(List<String>) – Default: empty(SELECT \$1). 読み込みに使用されます。オブジェクトに選択する列です。
+ `FILTER_PREDICATE`(文字列) – デフォルト: 空 読み込みに使用されます。Spark SQL 形式である必要があります。
+ `QUERY`(文字列) - デフォルト: 空 読み込みに使用されます。完全な Spark SQL クエリです。

# Dynatrace の制限事項
<a name="dynatrace-connection-limitations"></a>

Dynatrace の制限事項または注意事項は次のとおりです。
+ Dynatrace は、フィールドベースまたはレコードベースのパーティション化をサポートしていません。
+ Select All 機能では、フィルターに「field」を指定した場合、レコード数はページあたり 10 を超えることはできません。
+ サポートされる最大ページサイズは 500 です。フローの作成時に [`evidenceDetails, impactAnalysis, recentComments`] フィールドのいずれかを選択すると、ページあたりのレコード数はデフォルトで 10 になります。

# Facebook 広告への接続
<a name="connecting-to-data-facebook-ads"></a>

Facebook 広告は、あらゆる規模の企業がターゲットオーディエンスに到達し、さまざまなマーケティング目標を達成するために使用する強力なデジタル広告プラットフォームです。このプラットフォームにより、広告主は、Facebook や Messenger などのFacebook のアプリやサービス群全体で表示できるカスタマイズされた広告を作成できます。Facebook 広告は高度なターゲティング機能を備えているため、企業は特定のターゲット層、関心、行動、場所にまでリーチすることができます。

**Topics**
+ [AWS Glue による Facebook 広告のサポート](facebook-ads-support.md)
+ [接続を作成および使用するための API オペレーションを含むポリシー](facebook-ads-configuring-iam-permissions.md)
+ [Facebook 広告の設定](facebook-ads-configuring.md)
+ [Facebook 広告接続の設定](facebook-ads-configuring-connections.md)
+ [Facebook 広告エンティティからの読み取り](facebook-ads-reading-from-entities.md)
+ [Facebook 広告の接続オプション](facebook-ads-connection-options.md)
+ [Facebook 広告コネクタの制限と注意事項](facebook-ads-connector-limitations.md)

# AWS Glue による Facebook 広告のサポート
<a name="facebook-ads-support"></a>

AWS Glue は、次のように Facebook 広告をサポートします:

**ソースとしてサポートされていますか?**  
はい。AWS Glue ETL ジョブを使用して、Facebook 広告からデータをクエリできます。

**ターゲットとしてサポートされていますか?**  
いいえ。

**サポートされている Facebook Ads API バージョン**  
以下の Facebook Ads API バージョンがサポートされています:
+ v17.0
+ v18.0
+ v19.0
+ v20.0

# 接続を作成および使用するための API オペレーションを含むポリシー
<a name="facebook-ads-configuring-iam-permissions"></a>

次のサンプル ポリシーで、接続の作成と使用に必要な AWS IAM 権限について説明します。新しいロールを作成する場合は、以下を含むポリシーを作成します。

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

****  

```
{
  "Version":"2012-10-17",		 	 	 
  "Statement": [
    {
      "Effect": "Allow",
      "Action": [
        "glue:ListConnectionTypes",
        "glue:DescribeConnectionType",
        "glue:RefreshOAuth2Tokens",
        "glue:ListEntities",
        "glue:DescribeEntity"
      ],
      "Resource": "*"
    }
  ]
}
```

------

上記の方法を使用しない場合は、代わりに次のマネージド IAM ポリシーを使用します:
+ [AWSGlueServiceRole](https://console.aws.amazon.com/iam/home#policies/arn:aws:iam::aws:policy/service-role/AWSGlueServiceRole) – さまざまな AWS Glue プロセスを実行するために必要なリソースへのアクセス権をユーザーに代わって付与します。これらのリソースには AWS Glue 、Amazon S3、IAM、CloudWatch Logs、および Amazon EC2 が含まれます。このポリシーで指定されたリソースの命名規則に従った場合、AWS Glue プロセスは必要なアクセス権限を使用できます。このポリシーは、通常、クローラ、ジョブ、開発エンドポイントを定義するときに指定されたロールにアタッチされます。
+ [AWSGlueConsoleFullAccess](https://console.aws.amazon.com/iam/home#policies/arn:aws:iam::aws:policy/AWSGlueConsoleFullAccess) — ポリシーがアタッチされているアイデンティティが AWS マネージメントコンソールを使用するときは、AWS Glue リソースへのフルアクセスを許可します。このポリシーで指定されたリソースの命名規則に従った場合、ユーザーは完全なコンソール機能を使用できます。このポリシーは、通常 AWS Glue コンソールのユーザーにアタッチされています。

# Facebook 広告の設定
<a name="facebook-ads-configuring"></a>

AWS Glue を使用して Facebook 広告からデータを転送できるようにするには、次の要件を満たす必要があります:

## 最小要件
<a name="facebook-ads-configuring-min-requirements"></a>

以下に、最小要件を示します。
+ Facebook スタンダードアカウントは Facebook から直接アクセスできること。
+ アクセストークンを生成するには、ユーザー認証が必要です。
+ Facebook 広告の SDK コネクタは、*ユーザーアクセストークン OAuth *フローを実装すること。
+ Facebook 広告への API リクエストの認証には OAuth2.0 を使用すること。このウェブベースの認証は、2FA 上位セットである多要素認証 (MFA) アーキテクチャに該当します。
+ ユーザーは、エンドポイントにアクセスするためのアクセス許可を付与する必要があります。ユーザーのデータにアクセスするために、エンドポイント認可は[アクセス許可](https://developers.facebook.com/docs/permissions)と[機能](https://developers.facebook.com/docs/features-reference)を通じて処理されます。

## OAuth 2.0 認証情報の取得
<a name="facebook-ads-configuring-creating-facebook-ads-oauth2-credentials"></a>

API 認証情報を取得してインスタンスに対して認証呼び出しを行うには、Facebook 広告デベロッパーガイドの「[REST API](https://developers.facebook-ads.com/rest-api/)」を参照してください。

# Facebook 広告接続の設定
<a name="facebook-ads-configuring-connections"></a>

Facebook 広告は、OAuth2 の AUTHORIZATION\$1CODE のグラントタイプをサポートしています。
+ このグラントタイプは、ユーザーを認証するためにサードパーティーの認証サーバーにユーザーをリダイレクトすることから、three-legged の OAuth と見なされます。AWS Glue コンソール経由で接続を作成するときに使用されます。
+ ユーザーは、Facebook 広告で独自の接続アプリを作成し、AWS Glue コンソールを介して接続を作成するときに独自のクライアント ID とクライアントシークレットを指定することを選択できます。このシナリオでは、引き続き Facebook 広告にリダイレクトされてログインし、リソースへアクセスするために AWS Glue を承認します。
+ このグラントタイプは、アクセストークンになります。期限切れのシステムユーザートークンは、生成または更新された日付から 60 日間有効です。継続性を作成するには、開発者は 60 日以内にアクセストークンを更新する必要があります。そうしないと、アクセストークンは失われ、開発者は API アクセスを回復するために新しいトークンを取得する必要があります。「[Refresh Access Token](https://developers.facebook.com/docs/marketing-api/system-users/install-apps-and-generate-tokens/)」を参照してください。
+ 認可コード OAuth フロー用の接続アプリの作成に関する Facebook 広告の公開ドキュメントについては、Google の開発者向けガイドの「[OAuth 2.0 を使用した Google API へのアクセス](https://developers.google.com/identity/protocols/oauth2)」を参照してください。

Facebook 広告接続を設定するには:

1. AWS Glue Glue Studio で、以下の手順に従って **[データ接続]** の下に接続を作成します。

   1. **[接続タイプ]** を選択する際に、[Facebook 広告] を選択します。

   1. 接続先の Facebook 広告インスタンスの `INSTANCE_URL` を指定します。

   1. AWS Glue が次のアクションを引き受けて、その権限を持つことができる AWS IAM ロールを選択します。

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

****  

      ```
      {
        "Version":"2012-10-17",		 	 	 
        "Statement": [
          {
            "Effect": "Allow",
            "Action": [
              "secretsmanager:DescribeSecret",
              "secretsmanager:GetSecretValue",
              "secretsmanager:PutSecretValue",
              "ec2:CreateNetworkInterface",
              "ec2:DescribeNetworkInterfaces",
              "ec2:DeleteNetworkInterface"
            ],
            "Resource": "*"
          }
        ]
      }
      ```

------

   1. AWS Glue でこの接続に使用する `secretName` を選択して、トークンを配置します。

   1. ネットワークを使用する場合は、ネットワークオプションを選択します。

1. AWS Glue ジョブに関連付けられている IAM ロールに `secretName` を読み取るアクセス許可を付与します。

# Facebook 広告エンティティからの読み取り
<a name="facebook-ads-reading-from-entities"></a>

**前提条件**

読み取り元の Facebook 広告オブジェクト。オブジェクト名が必要になります。次の表は、サポートされているエンティティを示しています。

**ソースに対応するエンティティ**:


| エンティティ | フィルタリング可能 | 制限をサポートする | Order By をサポートする | Select \$1 をサポートする | パーティション分割をサポートする | 
| --- | --- | --- | --- | --- | --- | 
| キャンペーン | はい | あり | なし | あり | あり | 
| Ad Set | はい | あり | なし | あり | あり | 
| Ads | はい | あり | なし | あり | あり | 
| Ad Creative | なし | あり | なし | あり | なし | 
| Insights - Account | なし | あり | なし | あり | なし | 
| Adaccounts | はい | あり | なし | あり | なし | 
| Insights - Ad | はい | あり | なし | あり | あり | 
| Insights - AdSet | はい | あり | なし | あり | あり | 
| Insights - Campaign | はい | あり | なし | あり | あり | 

**例**:

```
FacebookAds_read = glueContext.create_dynamic_frame.from_options(
    connection_type="FacebookAds",
    connection_options={
        "connectionName": "connectionName",
        "ENTITY_NAME": "entityName",
        "API_VERSION": "v20.0"
    }
```

## Facebook 広告エンティティとフィールドの詳細
<a name="facebook-ads-reading-entity-and-field-details"></a>

エンティティとフィールドの詳細については、以下を参照してください:
+ [Ad Account](https://developers.facebook.com/docs/marketing-api/reference/ad-account)
+ [Campaign](https://developers.facebook.com/docs/marketing-api/reference/ad-campaign-group)
+ [Ad Set](https://developers.facebook.com/docs/marketing-api/reference/ad-campaign)
+ [Ad](https://developers.facebook.com/docs/marketing-api/reference/adgroup)
+ [Ad Creative](https://developers.facebook.com/docs/marketing-api/reference/ad-creative)
+ [Insight 広告アカウント](https://developers.facebook.com/docs/marketing-api/reference/ad-account/insights)
+ [Insights 広告](https://developers.facebook.com/docs/marketing-api/reference/adgroup/insights/)
+ [Insights AdSets](https://developers.facebook.com/docs/marketing-api/reference/ad-campaign/insights)
+ [Insights キャンペーン](https://developers.facebook.com/docs/marketing-api/reference/ad-campaign-group/insights)

詳細については、「[Marketing API](https://developers.facebook.com/docs/marketing-api/reference/v21.0)」を参照してください。

**注記**  
構造体データ型とリストデータ型は、コネクタの応答で文字列データ型に変換されます。

## パーティショニングクエリ
<a name="facebook-ads-reading-partitioning-queries"></a>

Spark で同時実行を使用する場合は、追加の Spark オプション `PARTITION_FIELD`、`LOWER_BOUND`、`UPPER_BOUND`、および `NUM_PARTITIONS` を指定できます。これらのパラメータを使用すると、元のクエリは Spark タスクで同時に実行できるサブクエリの `NUM_PARTITIONS` の数に分割されます。
+ `PARTITION_FIELD`: クエリのパーティション化に使用するフィールドの名前。
+ `LOWER_BOUND`: 選択したパーティションフィールドの**包括的な**下限値。

  DateTime フィールドでは、Spark SQL クエリで使用される Spark タイムスタンプ形式を受け入れます。

  有効な値の例:

  ```
  "2022-01-01"
  ```
+ `UPPER_BOUND`: 選択したパーティションフィールドの**排他的**上限値。
+ `NUM_PARTITIONS`: パーティション数。

例:

```
FacebookADs_read = glueContext.create_dynamic_frame.from_options(
    connection_type="FacebookAds",
    connection_options={
        "connectionName": "connectionName",
        "ENTITY_NAME": "entityName",
        "API_VERSION": "v20.0",
        "PARTITION_FIELD": "created_time"
        "LOWER_BOUND": "2022-01-01"
        "UPPER_BOUND": "2024-01-02"
        "NUM_PARTITIONS": "10"
    }
```

# Facebook 広告の接続オプション
<a name="facebook-ads-connection-options"></a>

Facebook 広告の接続オプションは次のとおりです:
+ `ENTITY_NAME`(文字列) – (必須) 読み取りに使用されます。Facebook 広告内のオブジェクトの名前。
+ `API_VERSION`(文字列) – (必須) 読み取りに使用されます。使用する Facebook 広告 Rest API バージョン。例: v1。
+ `SELECTED_FIELDS`(List<String>) – Default: empty(SELECT \$1). 読み込みに使用されます。オブジェクトに選択する列です。
+ `FILTER_PREDICATE`(文字列) – デフォルト: 空 読み込みに使用されます。Spark SQL 形式である必要があります。
+ `QUERY`(文字列) - デフォルト: 空 読み込みに使用されます。完全な Spark SQL クエリです。
+ `PARTITION_FIELD` (文字列) – 読み取りに使用されます。クエリをパーティション化するために使用するフィールドです。
+ `LOWER_BOUND` (文字列)– 読み取りに使用されます。選択したパーティションフィールドの包括的な下限値。
+ `UPPER_BOUND` (文字列) – 読み取りに使用されます。選択したパーティションフィールドの排他的上限値。
+ `NUM_PARTITIONS`(整数) – デフォルト: 1。読み込みに使用されます。読み取り用のパーティションの数です。
+ `TRANSFER_MODE` (文字列) – デフォルト: SYNC。非同期読み取りに使用されます。

# Facebook 広告コネクタの制限と注意事項
<a name="facebook-ads-connector-limitations"></a>

Facebook 広告コネクタの制限事項または注意事項は次のとおりです:
+ Facebook 広告は動的メタデータをサポートしているため、すべてのフィールドをクエリできます。すべてのフィールドがフィルタリングをサポートしており、データが利用可能な場合はレコードが取得されます。それ以外の場合、Facebook は適切なエラーメッセージとともに Bad リクエスト (400) レスポンスを返します。
+ アプリの呼び出し回数は、1 時間のウィンドウ 200 中にユーザーが実行できる呼び出しの回数に、ユーザー数を掛けたものです。レート制限の詳細については、「[Rate Limits](https://developers.facebook.com/docs/graph-api/overview/rate-limiting/)」と「[Business Use Case Rate Limits](https://developers.facebook.com/docs/graph-api/overview/rate-limiting/#buc-rate-limits)」を参照してください。

# Facebook Page Insights に対する接続
<a name="connecting-to-data-facebook-page-insights"></a>

Facebook ページを使用すると、企業やその他の利害関係者グループは Facebook.com ソーシャルネットワークのページを作成できます。企業はこれらのページを使用して、営業時間の共有、公表、オンラインによる顧客とのやりとりを行います。Facebook Page Insights ユーザーの場合は、AWS Glue を Facebook Page Insights アカウントに接続できます。Facebook Page Insights は、ETL ジョブのデータソースとして使用できます。これらのジョブを実行して、Facebook Page Insights から AWS サービスまたはその他のサポートされているアプリケーションにデータを転送します。

**Topics**
+ [Facebook Page Insights の AWS Glue サポート](facebook-page-insights-support.md)
+ [接続を作成および使用するための API オペレーションを含むポリシー](facebook-page-insights-configuring-iam-permissions.md)
+ [Facebook Page Insights の設定](facebook-page-insights-configuring.md)
+ [Facebook Page Insights 接続の設定](facebook-page-insights-configuring-connections.md)
+ [Facebook Page Insights エンティティからの読み取り](facebook-page-insights-reading-from-entities.md)
+ [Facebook Page Insights 接続オプション](facebook-page-insights-connection-options.md)
+ [Facebook Page Insights コネクタの制限事項と注意事項](facebook-page-insights-connector-limitations.md)

# Facebook Page Insights の AWS Glue サポート
<a name="facebook-page-insights-support"></a>

AWS Glue は、次のように Facebook Page Insights をサポートします。

**ソースとしてサポートされていますか?**  
はい。AWS Glue ETL ジョブを使用して、Facebook Page Insights からデータをクエリできます。

**ターゲットとしてサポートされていますか?**  
いいえ。

**サポートされている Facebook Page Insights API バージョン**  
次の Facebook Page Insights API バージョンがサポートされています。
+ v17
+ v18
+ v19
+ v20
+ v21

# 接続を作成および使用するための API オペレーションを含むポリシー
<a name="facebook-page-insights-configuring-iam-permissions"></a>

次のサンプル ポリシーで、接続の作成と使用に必要な AWS IAM 権限について説明します。新しいロールを作成する場合は、以下を含むポリシーを作成します。

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

****  

```
{
  "Version":"2012-10-17",		 	 	 
  "Statement": [
    {
      "Effect": "Allow",
      "Action": [
        "glue:ListConnectionTypes",
        "glue:DescribeConnectionType",
        "glue:RefreshOAuth2Tokens",
        "glue:ListEntities",
        "glue:DescribeEntity"
      ],
      "Resource": "*"
    }
  ]
}
```

------

上記の方法を使用しない場合は、代わりに次のマネージド IAM ポリシーを使用します:
+ [AWSGlueServiceRole](https://console.aws.amazon.com/iam/home#policies/arn:aws:iam::aws:policy/service-role/AWSGlueServiceRole) – さまざまな AWS Glue プロセスを実行するために必要なリソースへのアクセス権をユーザーに代わって付与します。これらのリソースには AWS Glue 、Amazon S3、IAM、CloudWatch Logs、および Amazon EC2 が含まれます。このポリシーで指定されたリソースの命名規則に従った場合、AWS Glue プロセスは必要なアクセス権限を使用できます。このポリシーは、通常、クローラ、ジョブ、開発エンドポイントを定義するときに指定されたロールにアタッチされます。
+ [AWSGlueConsoleFullAccess](https://console.aws.amazon.com/iam/home#policies/arn:aws:iam::aws:policy/AWSGlueConsoleFullAccess) — ポリシーがアタッチされているアイデンティティが AWS マネージメントコンソールを使用するときは、AWS Glue リソースへのフルアクセスを許可します。このポリシーで指定されたリソースの命名規則に従った場合、ユーザーは完全なコンソール機能を使用できます。このポリシーは、通常 AWS Glue コンソールのユーザーにアタッチされています。

# Facebook Page Insights の設定
<a name="facebook-page-insights-configuring"></a>

AWS Glue を使用して Facebook Page Insights からデータを転送できるようにするには、次の要件を満たす必要があります。

## 最小要件
<a name="facebook-page-insights-configuring-min-requirements"></a>

以下に、最小要件を示します。
+ Facebook スタンダードアカウントは Facebook から直接アクセスできること。
+ アクセストークンを生成するには、ユーザー認証が必要です。
+ Facebook Page Insights コネクタは、ユーザーアクセストークン OAuth フローを実装しています。
+ コネクタは OAuth2.0 を使用して Facebook Page Insights への API リクエストを認証します。これは、2FA 上位セットである多要素認証 (MFA) アーキテクチャに該当します。これはウェブベースの認証です。
+ ユーザーは、エンドポイントにアクセスするためのアクセス許可を付与する必要があります。ユーザーのデータにアクセスするために、エンドポイント認可はアクセス許可と機能を通じて処理されます。

# Facebook Page Insights 接続の設定
<a name="facebook-page-insights-configuring-connections"></a>

Facebook Page Insights 接続を設定するには:

1. AWS Glue Glue Studio で、以下の手順に従って **[データ接続]** の下に接続を作成します。

   1. **[接続タイプ]** を選択する際に、[Facebook Page Insights] を選択します。

   1. 次のアクションを実行でき、AWS Glue がその権限を持つ AWS IAM ロールを選択します。

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

****  

      ```
      {
        "Version":"2012-10-17",		 	 	 
        "Statement": [
          {
            "Effect": "Allow",
            "Action": [
              "secretsmanager:DescribeSecret",
              "secretsmanager:GetSecretValue",
              "secretsmanager:PutSecretValue",
              "ec2:CreateNetworkInterface",
              "ec2:DescribeNetworkInterfaces",
              "ec2:DeleteNetworkInterface"
            ],
            "Resource": "*"
          }
        ]
      }
      ```

------

   1. 認可コード URL を選択します。

   1. AWS Glue でこの接続に使用する `secretName` を選択して、トークンを配置します。

   1. ネットワークを使用する場合は、ネットワークオプションを選択します。

1. AWS Glue ジョブに関連付けられている IAM ロールに `secretName` を読み取るアクセス許可を付与します。

# Facebook Page Insights エンティティからの読み取り
<a name="facebook-page-insights-reading-from-entities"></a>

**前提条件**

読み取り元の Facebook Page Insights オブジェクト。オブジェクト名が必要になります。

**ソースに対応するエンティティ**:


| エンティティ | フィルタリング可能 | 制限をサポートする | Order By をサポートする | Select \$1 をサポートする | パーティション分割をサポートする | 
| --- | --- | --- | --- | --- | --- | 
| ページの内容 | あり | なし | あり | あり | あり | 
| ページ CTA クリック | あり | なし | なし | あり | あり | 
| ページエンゲージメント | あり | なし | なし | あり | あり | 
| ページインプレッション | あり | なし | なし | あり | あり | 
| ページの投稿 | あり | なし | なし | あり | あり | 
| ページ投稿のエンゲージメント | なし | なし | なし | あり | なし | 
| ページ投稿のリアクション | なし | なし | なし | あり | なし | 
| ページのリアクション | あり | なし | なし | あり | あり | 
| ストーリー | あり | なし | なし | あり | あり | 
| ページユーザー属性 | あり | なし | なし | あり | あり | 
| ページビデオビュー | あり | なし | なし | あり | あり | 
| ページビュー | あり | なし | なし | あり | あり | 
| ページの動画投稿 | あり | なし | なし | あり | あり | 
| ページ | なし | あり | なし | あり | なし | 
| フィード | はい | あり | なし | あり | あり | 

**例**:

```
facebookPageInsights_read = glueContext.create_dynamic_frame. from options(
    connection_type="facebookpageinsights",
    connection_options={
        "connectionName": "connectionName",
        "ENTITY_NAME": "entityName",
        "API_VERSION": "v21"
   }
```

**Facebook Page Insights フィールドの詳細**:

[\[See the AWS documentation website for more details\]](http://docs.aws.amazon.com/ja_jp/glue/latest/dg/facebook-page-insights-reading-from-entities.html)

## パーティショニングクエリ
<a name="facebook-page-insights-reading-partitioning-queries"></a>

**フィルターベースのパーティション分割**:

Spark で同時実行を使用する場合は、追加の Spark オプション `PARTITION_FIELD`、`LOWER_BOUND`、`UPPER_BOUND`、および `NUM_PARTITIONS` を指定できます。これらのパラメータを使用すると、元のクエリは Spark タスクで同時に実行できるサブクエリの `NUM_PARTITIONS` の数に分割されます。
+ `PARTITION_FIELD`: クエリのパーティション化に使用するフィールドの名前。
+ `LOWER_BOUND`: 選択したパーティションフィールドの**包括的な**下限値。

  Datetime フィールドでは、Spark SQL クエリで使用される Spark タイムスタンプ形式を受け入れます。

  有効な値の例は次のとおりです:

  ```
  "2024-09-30T01:01:01.000Z"
  ```
+ `UPPER_BOUND`: 選択したパーティションフィールドの**排他的**上限値。
+ `NUM_PARTITIONS`: パーティション数。

例:

```
facebookPageInsights_read = glueContext.create_dynamic_frame.from_options(
     connection_type="facebookpageinsights",
     connection_options={
         "connectionName": "connectionName",
         "ENTITY_NAME": "entityName",
         "API_VERSION": "v21",
         "PARTITION_FIELD": "created_Time"
         "LOWER_BOUND": "2024-10-27T07:00:00+0000"
         "UPPER_BOUND": "2024-10-27T07:00:00+0000"
         "NUM_PARTITIONS": "10"
     }
```

# Facebook Page Insights 接続オプション
<a name="facebook-page-insights-connection-options"></a>

Facebook Page Insights の接続オプションは次のとおりです。
+ `ENTITY_NAME`(文字列) – (必須) 読み取りに使用されます。Facebook Page Insights のオブジェクトの名前。
+ `API_VERSION`(文字列) – (必須) 読み取りに使用されます。使用する Facebook Page Insights Rest API バージョン。
+ `SELECTED_FIELDS`(List<String>) – Default: empty(SELECT \$1). 読み込みに使用されます。オブジェクトに選択する列です。
+ `FILTER_PREDICATE`(文字列) – デフォルト: 空 読み込みに使用されます。Spark SQL 形式である必要があります。
+ `QUERY`(文字列) - デフォルト: 空 読み込みに使用されます。完全な Spark SQL クエリです。
+ `PARTITION_FIELD`(文字列) - 読み取りに使用されます。クエリをパーティション化するために使用するフィールドです。
+ `LOWER_BOUND`(文字列) - 読み取りに使用されます。選択したパーティションフィールドの包括的な下限値。
+ `UPPER_BOUND` (文字列) - 読み取りに使用されます。選択したパーティションフィールドの排他的上限値。
+ `NUM_PARTITIONS`(整数) – デフォルト: 1。読み込みに使用されます。読み取り用のパーティションの数です。
+ `INSTANCE_URL` (文字列) – (必須) 読み取りに使用されます。有効な Facebook Page Insights インスタンス URL。

# Facebook Page Insights コネクタの制限事項と注意事項
<a name="facebook-page-insights-connector-limitations"></a>

Facebook Page Insights コネクタの制限事項または注意事項は次のとおりです。
+ ほとんどのメトリクスは 24 時間ごとに 1 回更新されます。
+ 過去 2 年間のインサイトデータのみを使用できます。
+ `since` および `until` パラメータを使用する場合、一度に表示できるのは 90 日間のインサイトのみです。

# Freshdesk に対する接続
<a name="connecting-to-data-freshdesk"></a>

Freshdesk は、機能が豊富で使いやすいクラウドベースのカスタマーサポートソフトウェアです。ライブチャット、E メール、電話、ソーシャルメディアなど、複数のサポートチャネルを利用できるため、お客様が希望する通信方法を通じてサポートできます。Freshdesk ユーザーの場合は、Freshdesk アカウントに AWS Glue を接続できます。Freshdesk を ETL ジョブのデータソースとして使用できます。これらのジョブを実行して、Freshdesk から AWS サービス、またはその他のサポートされているアプリケーションにデータを転送します。

**Topics**
+ [Freshdesk 向けの AWS Glue サポート](freshdesk-support.md)
+ [接続を作成および使用するための API オペレーションを含むポリシー](freshdesk-configuring-iam-permissions.md)
+ [Freshdesk の設定](freshdesk-configuring.md)
+ [Freshdesk 接続の設定](freshdesk-configuring-connections.md)
+ [Freshdesk エンティティからの読み取り](freshdesk-reading-from-entities.md)
+ [Freshdesk 接続オプション](freshdesk-connection-options.md)
+ [Freshdesk コネクタの制限事項と注意事項](freshdesk-connector-limitations.md)

# Freshdesk 向けの AWS Glue サポート
<a name="freshdesk-support"></a>

AWS Glue は、次のように、Freshdesk をサポートします。

**ソースとしてサポートされていますか?**  
はい – Sync と Async。AWS Glue ETL ジョブを使用して、Freshdesk からデータをクエリできます。

**ターゲットとしてサポートされていますか?**  
いいえ。

**サポートされる Freshdesk API バージョン**  
次の Freshdesk API バージョンがサポートされています。
+ v2

# 接続を作成および使用するための API オペレーションを含むポリシー
<a name="freshdesk-configuring-iam-permissions"></a>

次のサンプル ポリシーで、接続の作成と使用に必要な AWS IAM 権限について説明します。新しいロールを作成する場合は、以下を含むポリシーを作成します。

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

****  

```
{
  "Version":"2012-10-17",		 	 	 
  "Statement": [
    {
      "Effect": "Allow",
      "Action": [
        "glue:ListConnectionTypes",
        "glue:DescribeConnectionType",
        "glue:RefreshOAuth2Tokens",
        "glue:ListEntities",
        "glue:DescribeEntity"
      ],
      "Resource": "*"
    }
  ]
}
```

------

上記の方法を使用しない場合は、代わりに次のマネージド IAM ポリシーを使用します:
+ [AWSGlueServiceRole](https://console.aws.amazon.com/iam/home#policies/arn:aws:iam::aws:policy/service-role/AWSGlueServiceRole) – さまざまな AWS Glue プロセスを実行するために必要なリソースへのアクセス権をユーザーに代わって付与します。これらのリソースには AWS Glue 、Amazon S3、IAM、CloudWatch Logs、および Amazon EC2 が含まれます。このポリシーで指定されたリソースの命名規則に従った場合、AWS Glue プロセスは必要なアクセス権限を使用できます。このポリシーは、通常、クローラ、ジョブ、開発エンドポイントを定義するときに指定されたロールにアタッチされます。
+ [AWSGlueConsoleFullAccess](https://console.aws.amazon.com/iam/home#policies/arn:aws:iam::aws:policy/AWSGlueConsoleFullAccess) — ポリシーがアタッチされているアイデンティティが AWS マネージメントコンソールを使用するときは、AWS Glue リソースへのフルアクセスを許可します。このポリシーで指定されたリソースの命名規則に従った場合、ユーザーは完全なコンソール機能を使用できます。このポリシーは、通常 AWS Glue コンソールのユーザーにアタッチされています。

# Freshdesk の設定
<a name="freshdesk-configuring"></a>

AWS Glue を使用して Freshdesk からデータを転送できるようにするには、次の要件を満たす必要があります。

## 最小要件
<a name="freshdesk-configuring-min-requirements"></a>

以下に、最小要件を示します。
+ Freshdesk アカウント。Free、Growth、Pro、Enterprise エディションから選択できます。
+ Freshdesk ユーザーの API キー。

# Freshdesk 接続の設定
<a name="freshdesk-configuring-connections"></a>

Freshdesk はカスタム認証をサポートしています。

カスタム認証に必要な API キーの生成に関する Freshdesk のパブリックドキュメントについては、「[Freshdesk authentication](https://developer.freshdesk.com/api/#authentication)」を参照してください。

Freshdesk 接続を設定する手順は次のとおりです。
+ AWS Secrets Manager で、次の詳細を含むシークレットを作成します。
  + カスタマーマネージド接続アプリケーションの場合 - シークレットには、`apiKey` を使用して接続されたアプリケーションの API キーをキーとして含める必要があります。AWS Glue で接続ごとにシークレットを作成する必要があることに注意してください。
+ AWS Glue Studio で、以下の手順に従って **[データ接続]** の下に接続を作成します。
  + **[データソース]** を選択する際に、[Freshdesk] を選択します。
  + 接続先の Freshdesk インスタンスの `INSTANCE_URL` を指定します。
  + 次のアクションを実行でき、AWS Glue がその権限を持つ AWS IAM ロールを選択します。

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

****  

    ```
    {
      "Version":"2012-10-17",		 	 	 
      "Statement": [
        {
          "Effect": "Allow",
          "Action": [
            "secretsmanager:DescribeSecret",
            "secretsmanager:GetSecretValue",
            "secretsmanager:PutSecretValue",
            "ec2:CreateNetworkInterface",
            "ec2:DescribeNetworkInterfaces",
            "ec2:DeleteNetworkInterface"
          ],
          "Resource": "*"
        }
      ]
    }
    ```

------
  + AWS Glue でこの接続に使用する `secretName` を選択して、トークンを配置します。
  + ネットワークを使用する場合は、ネットワークオプションを選択します。
+ AWS Glue ジョブに関連付けられている IAM ロールに `secretName` を読み取るアクセス許可を付与します。
+ AWS Glue ジョブ設定で、**[追加のネットワーク接続]** として `connectionName` を指定します。

# Freshdesk エンティティからの読み取り
<a name="freshdesk-reading-from-entities"></a>

**前提条件**

読み取り元の Freshdesk オブジェクト。オブジェクト名が必要になります。

**Sync ソースに対応するエンティティ**:


| エンティティ | フィルタリング可能 | 制限をサポートする | Order By をサポートする | Select \$1 をサポートする | パーティション分割をサポートする | 
| --- | --- | --- | --- | --- | --- | 
| エージェント | はい | あり | なし | あり | あり | 
| 営業時間 | なし | あり | なし | あり | あり | 
| Company | はい | あり | なし | あり | あり | 
| 問い合わせ | はい | あり | なし | あり | あり | 
| Conversations | なし | あり | なし | あり | なし | 
| E メール設定 | なし | あり | なし | あり | なし | 
| E メール受信トレイ | はい | あり | あり | あり | なし | 
| フォーラムカテゴリ | なし | あり | なし | あり | なし | 
| フォーラム | なし | あり | なし | あり | なし | 
| グループ | なし | あり | なし | あり | なし | 
| 製品 | なし | あり | なし | あり | なし | 
| ロール | なし | あり | なし | あり | なし | 
| 満足度評価 | はい | あり | なし | あり | なし | 
| スキル | なし | あり | なし | あり | なし | 
| 解決方法 | はい | あり | なし | あり | なし | 
| アンケート | なし | あり | なし | あり | なし | 
| チケット | はい | あり | あり | あり | あり | 
| 時間エントリ | はい | あり | なし | あり | なし | 
| トピック | なし | あり | なし | あり | なし | 
| トピックのコメント | なし | あり | なし | あり | なし | 

**Async ソースに対応するエンティティ**:


| エンティティ | API バージョン | フィルタリング可能 | 制限をサポートする | Order By をサポートする | Select \$1 をサポートする | パーティション分割をサポートする | 
| --- | --- | --- | --- | --- | --- | --- | 
| Companies | v2 | なし | なし | なし | なし | なし | 
| 問い合わせ | v2 | なし | なし | なし | なし | なし | 

**例**:

```
freshdesk_read = glueContext.create_dynamic_frame.from_options(
    connection_type="freshdesk",
    connection_options={
        "connectionName": "connectionName",
        "ENTITY_NAME": "entityName",
        "API_VERSION": "v2"
    }
```

**Freshdesk エンティティとフィールドの詳細**


| エンティティ | フィールド | 
| --- | --- | 
| エージェント | https://developers.freshdesk.com/api/\$1list\$1all\$1agents | 
| 営業時間 | https://developers.freshdesk.com/api/\$1list\$1all\$1business\$1hours | 
| コメント | https://developers.freshdesk.com/api/\$1comment\$1attributess | 
| Company | https://developers.freshdesk.com/api/\$1companies | 
| 問い合わせ | https://developers.freshdesk.com/api/\$1list\$1all\$1contacts | 
| Conversations | https://developers.freshdesk.com/api/\$1list\$1all\$1ticket\$1notes | 
| Email-configs | https://developers.freshdesk.com/api/\$1list\$1all\$1email\$1configs | 
| Email-inboxes | https://developers.freshdesk.com/api/\$1list\$1all\$1email\$1mailboxes | 
| Forum-categories | https://developers.freshdesk.com/api/\$1category\$1attributes | 
| フォーラム | https://developers.freshdesk.com/api/\$1forum\$1attributes | 
| グループ | https://developers.freshdesk.com/api/\$1list\$1all\$1groups | 
| 製品 | https://developers.freshdesk.com/api/\$1list\$1all\$1products | 
| ロール | https://developers.freshdesk.com/api/\$1list\$1all\$1roles | 
| Satisfaction-rating | https://developers.freshdesk.com/api/\$1view\$1all\$1satisfaction\$1ratingss | 
| スキル | https://developers.freshdesk.com/api/\$1list\$1all\$1skills | 
| 解決方法 | https://developers.freshdesk.com/api/\$1solution\$1content | 
| アンケート | https://developers.freshdesk.com/api/\$1list\$1all\$1survey | 
| チケット | https://developers.freshdesk.com/api/\$1list\$1all\$1tickets | 
| Time-entries | https://developers.freshdesk.com/api/\$1list\$1all\$1time\$1entries | 
| トピック | https://developers.freshdesk.com/api/\$1topic\$1attributes | 

## パーティショニングクエリ
<a name="freshdesk-reading-partitioning-queries"></a>

**フィルターベースのパーティション分割**:

Spark で同時実行を使用する場合は、追加の Spark オプション `PARTITION_FIELD`、`LOWER_BOUND`、`UPPER_BOUND`、および `NUM_PARTITIONS` を指定できます。これらのパラメータを使用すると、元のクエリは Spark タスクで同時に実行できるサブクエリの `NUM_PARTITIONS` の数に分割されます。
+ `PARTITION_FIELD`: クエリのパーティション化に使用するフィールドの名前。
+ `LOWER_BOUND`: 選択したパーティションフィールドの**包括的な**下限値。

  Datetime フィールドでは、Spark SQL クエリで使用される Spark タイムスタンプ形式を受け入れます。

  有効な値の例は次のとおりです:

  ```
  "2024-09-30T01:01:01.000Z"
  ```
+ `UPPER_BOUND`: 選択したパーティションフィールドの**排他的**上限値。
+ `NUM_PARTITIONS`: パーティション数。

例:

```
freshDesk_read = glueContext.create_dynamic_frame.from_options(
     connection_type="freshdesk",
     connection_options={
         "connectionName": "connectionName",
         "ENTITY_NAME": "entityName",
         "API_VERSION": "v2",
         "PARTITION_FIELD": "Created_Time"
         "LOWER_BOUND": " 2024-10-27T23:16:08Z“
         "UPPER_BOUND": " 2024-10-27T23:16:08Z"
         "NUM_PARTITIONS": "10"
     }
```

# Freshdesk 接続オプション
<a name="freshdesk-connection-options"></a>

Freshdesk の接続オプションは次のとおりです。
+ `ENTITY_NAME`(文字列) – (必須) 読み取りに使用されます。Freshdesk のオブジェクトの名前。
+ `API_VERSION`(文字列) – (必須) 読み取りに使用されます。使用する Freshdesk Rest API バージョン。
+ `SELECTED_FIELDS`(List<String>) – Default: empty(SELECT \$1). 読み込みに使用されます。オブジェクトに選択する列です。
+ `FILTER_PREDICATE`(文字列) – デフォルト: 空 読み込みに使用されます。Spark SQL 形式である必要があります。
+ `QUERY`(文字列) - デフォルト: 空 読み込みに使用されます。完全な Spark SQL クエリです。
+ `PARTITION_FIELD`(文字列) - 読み取りに使用されます。クエリをパーティション化するために使用するフィールドです。
+ `LOWER_BOUND`(文字列) - 読み取りに使用されます。選択したパーティションフィールドの包括的な下限値。
+ `UPPER_BOUND` (文字列) - 読み取りに使用されます。選択したパーティションフィールドの排他的上限値。
+ `NUM_PARTITIONS`(整数) – デフォルト: 1。読み込みに使用されます。読み取り用のパーティションの数です。
+ `INSTANCE_URL` (文字列) – (必須) 読み取りに使用されます。有効な Freshdesk インスタンス URL。
+ `TRANSFER_MODE`(文字列) - `SYNC` または `ASYNC` のような処理のタイプがデフォルトで `SYNC` に設定されているかどうかを示すために使用されます。(オプション)

# Freshdesk コネクタの制限事項と注意事項
<a name="freshdesk-connector-limitations"></a>

Freshdesk コネクタの制限事項または注意事項は次のとおりです。
+ `Company`、`Contacts`、および `Tickets` のフィルタリングされたエンティティには、ページ分割の制限があります。1 ページあたり 30 レコードのみが返され、ページ値は最大 10 個まで設定できます (最大 300 レコードを取得)。
+ `Tickets` エンティティは 30 日以上経過したレコードを取得しません。
+ `Company`、`Contacts`、および `Tickets` エンティティは、フィルタリングで「Date」データ型をサポートします。これら 3 つのエンティティの「毎日」以降のトリガー頻度を選択する必要があります。「分」または「時間単位」を選択すると、データが重複する可能性があります。また、フィルタリングのためにこれらのフィールドを選択するときは、選択したタイムスタンプの日付部分のみを考慮するため、日付値のみを選択する必要があります。
+ 1 分あたりの API コール数は、プランに基づきます。この制限は、通話に使用されるエージェントや IP アドレスの数などの要因に関係なく、アカウント全体に適用されます。すべてのトライアルユーザーについて、デフォルトの API 制限は 50 コール/分です。詳細については、「[Freshdesk](https://developer.freshdesk.com/api/#ratelimit)」を参照してください
+ どのエンティティでも、一度に処理される Export/Async ジョブは 1 つだけです。新しいジョブは、既存のジョブが正常に完了したか失敗した場合にのみ処理されます。詳細については、「[Freshdesk](https://developers.freshdesk.com/api/#export_contact)」を参照してください
+ 以下のフィールドは Sync API コールでサポートされていますが、Async API リクエストボディで渡すことはサポート/許可されていません。
  + id
  + created\$1at
  + updated\$1at
  + updated\$1since
  + ACTIVE
  + company\$1id
  + other\$1companies
  + avatar
  + view\$1all\$1tickets
  + 削除済み
  + other\$1emails
  + state
  + タグ
  + tags

# Freshsales に対する接続
<a name="connecting-to-data-freshsales"></a>

Freshsales は直感的に使用できる CRM のため、販売担当者は営業の手間を省くことができます。電話と E メール、タスク、予約、メモが組み込まれているため、営業担当者は見込み客をフォローアップするためにタブを切り替える必要はありません。パイプラインビューを使用して取引をより適切に管理し、より多くの取引を成約に導くことができます。Freshsales ユーザーの場合は、AWS Glue を Freshsales アカウントに接続できます。その後、Freshsales を ETL ジョブのデータソースとして使用できます。これらのジョブを実行して、Freshsales から AWS サービス、またはその他のサポートされているアプリケーションにデータを転送します。

**Topics**
+ [Freshsales の AWS Glue サポート](freshsales-support.md)
+ [接続を作成および使用するための API オペレーションを含むポリシー](freshsales-configuring-iam-permissions.md)
+ [Freshsales の設定](freshsales-configuring.md)
+ [Freshsales 接続の設定](freshsales-configuring-connections.md)
+ [Freshsales エンティティからの読み取り](freshsales-reading-from-entities.md)
+ [Freshsales 接続オプション](freshsales-connection-options.md)
+ [Freshsales の制限事項](freshsales-connection-limitations.md)

# Freshsales の AWS Glue サポート
<a name="freshsales-support"></a>

AWS Glue は、次のように Freshsales をサポートします。

**ソースとしてサポートされていますか?**  
はい。AWS Glue ETL ジョブを使用して、Freshsales からデータをクエリできます。

**ターゲットとしてサポートされていますか?**  
いいえ。

**サポートされる Freshsales API バージョン**  
次の Freshsales API バージョンがサポートされています。
+ v1.0

# 接続を作成および使用するための API オペレーションを含むポリシー
<a name="freshsales-configuring-iam-permissions"></a>

次のサンプル ポリシーで、接続の作成と使用に必要な AWS IAM 権限について説明します。新しいロールを作成する場合は、以下を含むポリシーを作成します。

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

****  

```
{
  "Version":"2012-10-17",		 	 	 
  "Statement": [
    {
      "Effect": "Allow",
      "Action": [
        "glue:ListConnectionTypes",
        "glue:DescribeConnectionType",
        "glue:RefreshOAuth2Tokens",
        "glue:ListEntities",
        "glue:DescribeEntity"
      ],
      "Resource": "*"
    }
  ]
}
```

------

上記の方法を使用しない場合は、代わりに次のマネージド IAM ポリシーを使用します:
+ [AWSGlueServiceRole](https://console.aws.amazon.com/iam/home#policies/arn:aws:iam::aws:policy/service-role/AWSGlueServiceRole) – さまざまな AWS Glue プロセスを実行するために必要なリソースへのアクセス権をユーザーに代わって付与します。これらのリソースには AWS Glue 、Amazon S3、IAM、CloudWatch Logs、および Amazon EC2 が含まれます。このポリシーで指定されたリソースの命名規則に従った場合、AWS Glue プロセスは必要なアクセス権限を使用できます。このポリシーは、通常、クローラ、ジョブ、開発エンドポイントを定義するときに指定されたロールにアタッチされます。
+ [AWSGlueConsoleFullAccess](https://console.aws.amazon.com/iam/home#policies/arn:aws:iam::aws:policy/AWSGlueConsoleFullAccess) — ポリシーがアタッチされているアイデンティティが AWS マネージメントコンソールを使用するときは、AWS Glue リソースへのフルアクセスを許可します。このポリシーで指定されたリソースの命名規則に従った場合、ユーザーは完全なコンソール機能を使用できます。このポリシーは、通常 AWS Glue コンソールのユーザーにアタッチされています。

# Freshsales の設定
<a name="freshsales-configuring"></a>

AWS Glue を使用して Freshsales からデータを転送できるようにするには、次の要件を満たす必要があります。

## 最小要件
<a name="freshsales-configuring-min-requirements"></a>

以下に、最小要件を示します。
+ Freshsales アカウントがある。
+ ユーザー API キーがある。

これらの要件を満たすと、Freshsales アカウントに AWS Glue を接続する準備が整います。一般的な接続では、Freshsales で他に何もする必要はありません。

# Freshsales 接続の設定
<a name="freshsales-configuring-connections"></a>

Freshsales はカスタム認証をサポートしています。

カスタム認証に必要な API キーの生成に関する Freshsales のパブリックドキュメントについては、「[認証](https://developer.freshsales.io/api/#authentication)」を参照してください。

Freshsales 接続を設定するには:

1. AWS Secrets Manager で、次の詳細を含むシークレットを作成します。

   1. カスタマーマネージド接続アプリケーションの場合、シークレットには、`apiSecretKey` を使用して接続されたアプリケーションの API キーをキーとして含める必要があります。また、シークレットには、`apiKey` をキー、`token` を値とする別のキーと値のペアを含める必要があります。

   1. 注: AWS Glue で接続にシークレットを作成する必要があります。

1. AWS Glue Glue Studio で、以下の手順に従って **[データ接続]** の下に接続を作成します。

   1. **[データソース]** を選択する際に、[Freshsales] を選択します。

   1. 接続先の Freshsales アカウントの `INSTANCE_URL` を指定します。

   1. 次のアクションを実行でき、AWS Glue がその権限を持つ AWS IAM ロールを選択します。

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

****  

      ```
      {
        "Version":"2012-10-17",		 	 	 
        "Statement": [
          {
            "Effect": "Allow",
            "Action": [
              "secretsmanager:DescribeSecret",
              "secretsmanager:GetSecretValue",
              "secretsmanager:PutSecretValue",
              "ec2:CreateNetworkInterface",
              "ec2:DescribeNetworkInterfaces",
              "ec2:DeleteNetworkInterface"
            ],
            "Resource": "*"
          }
        ]
      }
      ```

------

   1. AWS Glue でこの接続に使用する `secretName` を選択して、トークンを配置します。

   1. ネットワークを使用する場合は、ネットワークオプションを選択します。

1. AWS Glue ジョブに関連付けられている IAM ロールに `secretName` を読み取るアクセス許可を付与します。

# Freshsales エンティティからの読み取り
<a name="freshsales-reading-from-entities"></a>

**前提条件**

読み取り元の Freshsales オブジェクト。オブジェクト名が必要になります。

**ソースに対応するエンティティ**:


| エンティティ | フィルタリング可能 | 制限をサポートする | Order By をサポートする | Select \$1 をサポートする | パーティション分割をサポートする | 
| --- | --- | --- | --- | --- | --- | 
| アカウント | はい | あり | あり | あり | あり | 
| 問い合わせ | はい | あり | あり | あり | あり | 

**例**:

```
freshSales_read = glueContext.create_dynamic_frame.from_options(
     connection_type="freshsales",
     connection_options={
         "connectionName": "connectionName",
         "ENTITY_NAME": "entityName",
         "API_VERSION": "v1.0"
     }
```

**Freshsales エンティティとフィールドの詳細**:

Freshsales では、サポートされているエンティティのメタデータを動的に取得するためのエンドポイントが提供されます。したがって、オペレータのサポートはデータ型レベルでキャプチャされます。

[\[See the AWS documentation website for more details\]](http://docs.aws.amazon.com/ja_jp/glue/latest/dg/freshsales-reading-from-entities.html)

## パーティショニングクエリ
<a name="freshsales-reading-partitioning-queries"></a>

**フィルターベースのパーティション分割**:

Spark で同時実行を使用する場合は、追加の Spark オプション `PARTITION_FIELD`、`LOWER_BOUND`、`UPPER_BOUND`、および `NUM_PARTITIONS` を指定できます。これらのパラメータを使用すると、元のクエリは Spark タスクで同時に実行できるサブクエリの `NUM_PARTITIONS` の数に分割されます。
+ `PARTITION_FIELD`: クエリのパーティション化に使用するフィールドの名前。
+ `LOWER_BOUND`: 選択したパーティションフィールドの**包括的な**下限値。

  Datetime フィールドでは、ISO 形式の値を受け入れます。

  有効な値の例は次のとおりです:

  ```
  "2024-09-30T01:01:01.000Z"
  ```
+ `UPPER_BOUND`: 選択したパーティションフィールドの**排他的**上限値。
+ `NUM_PARTITIONS`: パーティション数。

例:

```
freshSales_read = glueContext.create_dynamic_frame.from_options(
     connection_type="freshsales",
     connection_options={
         "connectionName": "connectionName",
         "ENTITY_NAME": "entityName",
         "API_VERSION": "v1",
         "PARTITION_FIELD": "Created_Time"
         "LOWER_BOUND": " 2024-10-15T21:16:25Z"
         "UPPER_BOUND": " 2024-10-20T21:25:50Z"
         "NUM_PARTITIONS": "10"
     }
```

# Freshsales 接続オプション
<a name="freshsales-connection-options"></a>

Freshsales の接続オプションは次のとおりです。
+ `ENTITY_NAME`(文字列) – (必須) 読み取りに使用されます。Freshsales のオブジェクトの名前。
+ `API_VERSION`(文字列) – (必須) 読み取りに使用されます。使用する Freshsales Rest API バージョン。
+ `SELECTED_FIELDS`(List<String>) – Default: empty(SELECT \$1). 読み込みに使用されます。オブジェクトに選択する列です。
+ `FILTER_PREDICATE`(文字列) – デフォルト: 空 読み込みに使用されます。Spark SQL 形式である必要があります。
+ `QUERY`(文字列) - デフォルト: 空 読み込みに使用されます。完全な Spark SQL クエリです。
+ `PARTITION_FIELD`(文字列) - 読み取りに使用されます。クエリをパーティション化するために使用するフィールドです。
+ `LOWER_BOUND`(文字列) - 読み取りに使用されます。選択したパーティションフィールドの包括的な下限値。
+ `UPPER_BOUND` (文字列) - 読み取りに使用されます。選択したパーティションフィールドの排他的上限値。
+ `NUM_PARTITIONS`(整数) – デフォルト: 1。読み込みに使用されます。読み取り用のパーティションの数です。
+ `INSTANCE_URL`(文字列) - 読み取りに使用されます。有効な Freshsales インスタンス URL。

# Freshsales の制限事項
<a name="freshsales-connection-limitations"></a>

Freshsales の制限事項または注意事項は次のとおりです。
+ Freshsales では、API レート制限はアカウントあたり 1 時間ごとに 1000 件の API リクエストです (「[エラー](https://developer.freshsales.io/api/#error)」を参照。ただし、この制限はエンタープライズサブスクリプションプランで拡張できます (「[プランの比較](https://www.freshworks.com/crm/pricing-compare/)」を参照)。

# Google 広告に対する接続
<a name="connecting-to-googleads"></a>

 Google 広告 API は、Google 広告へのプログラムによるインターフェイスであり、大規模または複雑な Google 広告アカウントやキャンペーンの管理に使用されます。Google 広告ユーザーの場合は、AWS Glue を Google 広告アカウントに接続できます。その後、Google 広告を ETL ジョブのデータソースとして使用できます。これらのジョブを実行して、Google 広告と AWS サービス、またはその他のサポートされているアプリケーション間でデータを転送します。

**Topics**
+ [Google 広告用の AWS Glue サポート](googleads-support.md)
+ [接続を作成および使用するための API オペレーションを含むポリシー](googleads-configuring-iam-permissions.md)
+ [Google 広告の設定](googleads-configuring.md)
+ [Google 広告接続の設定](googleads-configuring-connections.md)
+ [Google 広告エンティティからの読み取り](googleads-reading-from-entities.md)
+ [Google 広告の接続オプション](googleads-connection-options.md)
+ [Google 広告アカウントの作成](googleads-create-account.md)
+ [制限](googleads-connector-limitations.md)

# Google 広告用の AWS Glue サポート
<a name="googleads-support"></a>

AWS Glue は次のように Google 広告をサポートします。

**ソースとしてサポートされていますか?**  
はい。AWS Glue ETL ジョブを使用し、Google 広告のデータをクエリできます。

**ターゲットとしてサポートされていますか?**  
いいえ。

**サポートされている Google 広告 の API バージョン**  
v18

# 接続を作成および使用するための API オペレーションを含むポリシー
<a name="googleads-configuring-iam-permissions"></a>

 次のサンプル ポリシーで、接続の作成と使用に必要な AWS の権限について説明します。新しいロールを作成する場合は、以下を含むポリシーを作成します。

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

****  

```
{
  "Version":"2012-10-17",		 	 	 
  "Statement": [
    {
      "Effect": "Allow",
      "Action": [
        "glue:ListConnectionTypes",
        "glue:DescribeConnectionType",
        "glue:RefreshOAuth2Tokens",
        "glue:ListEntities",
        "glue:DescribeEntity"
      ],
      "Resource": "*"
    }
  ]
}
```

------

また、次のマネージド IAM ポリシーを使用して、アクセスを許可できます。
+  [ AWSGlueServiceRole ](https://console.aws.amazon.com/iam/home#policies/arn:aws:iam::aws:policy/service-role/AWSGlueServiceRole) – さまざまな AWS Glue プロセスを実行するために必要なリソースへのアクセス権をユーザーに代わって付与します。これらのリソースには、AWS Glue、Amazon S3、IAM、CloudWatch Logs、および Amazon EC2 が含まれます。このポリシーで指定されたリソースの命名規則に従った場合、AWS Glue プロセスは必要なアクセス許可を使用できます。このポリシーは、通常、クローラー、ジョブ、開発エンドポイントを定義するときに指定されたロールにアタッチされます。
+  [ AWSGlueConsoleFullAccess ](https://console.aws.amazon.com/iam/home#policies/arn:aws:iam::aws:policy/AWSGlueConsoleFullAccess) — ポリシーがアタッチされているアイデンティティが AWS マネージメントコンソールを使用するときは、AWS Glue リソースへのフルアクセスを許可します。このポリシーで指定されたリソースの命名規則に従った場合、ユーザーは完全なコンソール機能を使用できます。このポリシーは、通常 AWS Glue コンソールのユーザーにアタッチされています。

# Google 広告の設定
<a name="googleads-configuring"></a>

AWS Glue を使用して Google 広告から転送できるようにするには、次の要件を満たす必要があります。

## 最小要件
<a name="googleads-configuring-min-requirements"></a>
+  E メールおよびパスワードが設定されている Google 広告アカウントを持っていること。アカウントの作成の詳細については、「[Google 広告アカウントの作成](googleads-create-account.md)」を参照してください。
+  Google 広告アカウントに API アクセスが有効になっていること。Google 広告 API の使用はすべて追加料金なしで利用できること。
+  Google 広告アカウントにより、接続されたアプリをインストールできること。この機能にアクセスできない場合、Google 広告の管理者にお問い合わせください。

 これらの要件を満たしている場合、AWS Glue を Google 広告のアカウントに接続する準備ができています。

# Google 広告接続の設定
<a name="googleads-configuring-connections"></a>

 Google 広告は OAuth2 の `AUTHORIZATION_CODE` グラントタイプをサポートしています。

 このグラントタイプは、ユーザーを認証するためにサードパーティーの認証サーバーにユーザーをリダイレクトすることから、「three-legged」の OAuth と見なされます。AWS Glue コンソール経由で接続を作成するときに使用されます。AWS Glue コンソールでは、ユーザーが Google 広告にリダイレクトされます。ここではユーザーがログインし、Google 広告インスタンスにアクセスするためのリクエストされた権限を AWS Glue に許可する必要があります。

 ユーザーは、Google 広告で独自の接続アプリを作成し、AWS Glue コンソールを介して接続を作成するときに独自のクライアント ID とクライアントシークレットを指定することを選択できます。このシナリオでは、引き続き Google 広告にリダイレクトされてログインし、リソースへアクセスするために AWS Glue を承認します。

 このグラントタイプは、更新トークンとアクセストークンになります。アクセストークンの有効期間は短く、更新トークンを使用してユーザーとやり取りすることなく自動的に更新される場合があります。

 詳細については、「[OAuth 認証コードフローでの接続されたアプリケーションの作成に関する Google 広告の公開ドキュメント](https://developers.google.com/workspace/guides/create-credentials)」を参照してください。

Google 広告の接続を設定するには:

1.  AWS Secrets Manager で、次の詳細を含むシークレットを作成します。AWS Glue で接続ごとにシークレットを作成する必要があります。

   1.  AuthorizationCode グラントタイプの場合: 
      +  カスタマーマネージド接続アプリケーションの場合 – シークレットには、`USER_MANAGED_CLIENT_APPLICATION_CLIENT_SECRET` を使用して接続されたアプリケーションのコンシューマーシークレットをキーとして含める必要があります。

1. AWS Glue Glue Studio で、以下の手順に従って **[データ接続]** の下に接続を作成します。

   1. **[接続タイプ]** を選択する際に、[Google 広告] を選択します。

   1. 接続先の Google 広告の `developer token` を指定します。

   1. マネージャーとしてログインする場合は、Google 広告の `MANAGER ID` を指定します。

   1.  AWS Glue が次のアクションを担い、その権限を持つことができる IAM ロールを選択します。

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

****  

      ```
      {
        "Version":"2012-10-17",		 	 	 
        "Statement": [
          {
            "Effect": "Allow",
            "Action": [
              "secretsmanager:DescribeSecret",
              "secretsmanager:GetSecretValue",
              "secretsmanager:PutSecretValue",
              "ec2:CreateNetworkInterface",
              "ec2:DescribeNetworkInterfaces",
              "ec2:DeleteNetworkInterface"
            ],
            "Resource": "*"
          }
        ]
      }
      ```

------

   1.  AWS Glue でこの接続に使用する `secretName` を選択して、トークンを配置します。

   1.  ネットワークを使用する場合は、ネットワークオプションを選択します。

1.  AWS Glue ジョブに関連付けられている IAM ロールに `secretName` を読み取るアクセス許可を付与します。

# Google 広告エンティティからの読み取り
<a name="googleads-reading-from-entities"></a>

 **前提条件** 
+  読み取り元の Google 広告オブジェクト。使用可能なエンティティを確認するには、以下のサポートされているエンティティの表を参照してください。

 **サポートされているエンティティ** 


| エンティティ | フィルタリング可能 | 制限をサポートする | Order By をサポートする | Select \$1 をサポートする | パーティション分割をサポートする | 
| --- | --- | --- | --- | --- | --- | 
| Ad Group Ad | はい | あり | あり | なし | あり | 
| Ad Group | はい | あり | あり | なし | あり | 
| Campaign Budget | はい | あり | あり | あり | あり | 
| Account Budget | あり | なし | あり | あり | なし | 
| キャンペーン | はい | あり | あり | あり | あり | 
| アカウント | あり | なし | あり | なし | なし | 

 **例** 

```
googleAds_read = glueContext.create_dynamic_frame.from_options(
    connection_type="googleads",
    connection_options={
        "connectionName": "connectionName",
        "ENTITY_NAME": "campaign-3467***",
        "API_VERSION": "v16"
    }
```

 **Google 広告エンティティとフィールドの詳細** 


| エンティティ | フィールド | データタイプ | サポートされている演算子 | 
| --- | --- | --- | --- | 
| アカウント | resourceName | 文字列 | \$1=, = | 
| アカウント | callReportingEnabled | ブール値 | \$1=, = | 
| アカウント | callConversionReportingEnabled | ブール値 | \$1=, = | 
| アカウント | callConversionAction | 文字列 | \$1=, = | 
| アカウント | conversionTrackingId | BigInteger | BETWEEN, =, \$1=, <, >, <=, >= | 
| アカウント | crossAccountConversionTrackingId | BigInteger | BETWEEN, =, \$1=, <, >, <=, >= | 
| アカウント | payPerConversionEligibilityFailureReasons | リスト |  | 
| アカウント | id | BigInteger | BETWEEN, =, \$1=, <, >, <=, >= | 
| アカウント | currencyCode | 文字列 | \$1=, =, LIKE | 
| アカウント | timeZone | 文字列 | \$1=, =, LIKE | 
| アカウント | autoTaggingEnabled | ブール値 | \$1=, = | 
| アカウント | hasPartnersBadge | ブール値 | \$1=, = | 
| アカウント | manager | ブール値 | \$1=, = | 
| アカウント | testAccount | ブール値 | \$1=, = | 
| アカウント | date | 日付 | BETWEEN, =, <, >, <=, >= | 
| アカウント | costMicros | BigInteger | BETWEEN, =, \$1=, <, >, <=, >= | 
| アカウント | acceptedCustomerDataTerms | ブール値 |  | 
| アカウント | conversionTrackingStatus | 文字列 | \$1=, =, LIKE | 
| アカウント | enhancedConversionsForLeadsEnabled | ブール値 |  | 
| アカウント | googleAdsConversionCustomer | 文字列 |  | 
| アカウント | ステータス | 文字列 | \$1=, = | 
| アカウント | allConversionsByConversionDate | 倍精度 | \$1=, =, <, > | 
| アカウント | allConversionsValueByConversionDate | 倍精度 | \$1=, =, <, > | 
| アカウント | conversionsByConversionDate | 倍精度 | \$1=, =, <, > | 
| アカウント | conversionsValueByConversionDate | 倍精度 | \$1=, =, <, > | 
| アカウント | valuePerAllConversionsByConversionDate | 倍精度 | \$1=, =, <, > | 
| アカウント | videoViews | BigInteger | BETWEEN, =, \$1=, <, >, <=, >= | 
| アカウント | clicks | BigInteger | BETWEEN, =, \$1=, <, >, <=, >= | 
| アカウント | invalidClicks | BigInteger | BETWEEN, =, \$1=, <, >, <=, >= | 
| アカウント | costPerAllConversions | 倍精度 | \$1=, =, <, > | 
| アカウント | costPerConversion | 倍精度 | \$1=, =, <, > | 
| アカウント | conversions | 倍精度 | \$1=, =, <, > | 
| アカウント | absoluteTopImpressionPercentage | 倍精度 | \$1=, =, <, > | 
| アカウント | IMPRESSION | BigInteger | BETWEEN, =, \$1=, <, >, <=, >= | 
| アカウント | topImpressionPercentage | 倍精度 | \$1=, =, <, > | 
| アカウント | averageCpc | 倍精度 | \$1=, =, <, > | 
| アカウント | activeViewMeasurableCostMicros | BigInteger | BETWEEN, =, \$1=, <, >, <=, >= | 
| アカウント | averageCost | 倍精度 | \$1=, =, <, > | 
| アカウント | ctr | 倍精度 | \$1=, =, <, > | 
| アカウント | activeViewCtr | 倍精度 | \$1=, =, <, > | 
| アカウント | searchImpressionShare | 倍精度 | \$1=, =, <, > | 
| アカウント | conversionAction | 文字列 | \$1=, = | 
| アカウント | conversionActionCategory | 文字列 | \$1=, = | 
| アカウント | conversionActionName | 文字列 | \$1=, =, LIKE | 
| Account Budget | resourceName | 文字列 | \$1=, = | 
| Account Budget | ステータス | 文字列 | \$1=, = | 
| Account Budget | proposedEndTimeType | 文字列 | \$1=, = | 
| Account Budget | approvedEndTimeType | 文字列 | \$1=, = | 
| Account Budget | id | BigInteger | BETWEEN, =, \$1=, <, >, <=, >= | 
| Account Budget | billingSetup | 文字列 | \$1=, = | 
| Account Budget | 名前 | 文字列 | \$1=, =, LIKE | 
| Account Budget | approvedStartDateTime |  DateTime | BETWEEN, =, <, >, <=, >= | 
| Account Budget | proposedSpendingLimitMicros | BigInteger | BETWEEN, =, \$1=, <, >, <=, >= | 
| Account Budget | approvedSpendingLimitMicros | BigInteger | BETWEEN, =, \$1=, <, >, <=, >= | 
| Account Budget | adjustedSpendingLimitMicros | BigInteger | BETWEEN, =, \$1=, <, >, <=, >= | 
| Account Budget | amountServedMicros | BigInteger | BETWEEN, =, \$1=, <, >, <=, >= | 
| Ad Group | resourceName | 文字列 | \$1=, =, LIKE | 
| Ad Group | ステータス | 文字列 | \$1=, =, LIKE | 
| Ad Group | type | 文字列 | \$1=, =, LIKE | 
| Ad Group | id | BigInteger | BETWEEN, =, \$1=, <, >, <=, >= | 
| Ad Group | 名前 | 文字列 | \$1=, =, LIKE | 
| Ad Group | キャンペーン | 文字列 | \$1=, = | 
| Ad Group | cpcBidMicros | BigInteger | BETWEEN, =, \$1=, <, >, <=, >= | 
| Ad Group | targetCpaMicros | BigInteger | BETWEEN, =, \$1=, <, >, <=, >= | 
| Ad Group | cpmBidMicros | BigInteger | BETWEEN, =, \$1=, <, >, <=, >= | 
| Ad Group | cpvBidMicros | BigInteger | BETWEEN, =, \$1=, <, >, <=, >= | 
| Ad Group | targetCpmMicros | BigInteger | BETWEEN, =, \$1=, <, >, <=, >= | 
| Ad Group | effectiveTargetCpaMicros | BigInteger | BETWEEN, =, \$1=, <, >, <=, >= | 
| Ad Group | date | 日付 | BETWEEN, =, <, >, <=, >= | 
| Ad Group | costMicros | BigInteger | BETWEEN, =, \$1=, <, >, <=, >= | 
| Ad Group | useAudienceGrouped | ブール値 | \$1=, = | 
| Ad Group | effectiveCpcBidMicros | BigInteger | BETWEEN, =, \$1=, <, >, <=, >= | 
| Ad Group | allConversionsByConversionDate | 倍精度 | \$1=, =, <, > | 
| Ad Group | allConversionsValueByConversionDate | 倍精度 | \$1=, =, <, > | 
| Ad Group | conversionsByConversionDate | 倍精度 | \$1=, =, <, > | 
| Ad Group | conversionsValueByConversionDate | 倍精度 | \$1=, =, <, > | 
| Ad Group | valuePerAllConversionsByConversionDate | 倍精度 | \$1=, =, <, > | 
| Ad Group | valuePerConversionsByConversionDate | 倍精度 | \$1=, =, <, > | 
| Ad Group | averageCost | 倍精度 | \$1=, =, <, > | 
| Ad Group | costPerAllConversions | 倍精度 | \$1=, =, <, > | 
| Ad Group | costPerConversion | 倍精度 | \$1=, =, <, > | 
| Ad Group | averagePageViews | 倍精度 | \$1=, =, <, > | 
| Ad Group | videoViews | BigInteger | BETWEEN, =, \$1=, <, >, <=, >= | 
| Ad Group | clicks | BigInteger | BETWEEN, =, \$1=, <, >, <=, >= | 
| Ad Group | allConversions | 倍精度 | \$1=, =, <, > | 
| Ad Group | averageCpc | 倍精度 | \$1=, =, <, > | 
| Ad Group | absoluteTopImpressionPercentage | 倍精度 | \$1=, =, <, > | 
| Ad Group | IMPRESSION | BigInteger | BETWEEN, =, \$1=, <, >, <=, >= | 
| Ad Group | topImpressionPercentage | 倍精度 | \$1=, =, <, > | 
| Ad Group | activeViewCtr | 倍精度 | \$1=, =, <, > | 
| Ad Group | ctr | 倍精度 | \$1=, =, <, > | 
| Ad Group | searchTopImpressionShare | 倍精度 | \$1=, =, <, > | 
| Ad Group | searchImpressionShare | 倍精度 | \$1=, =, <, > | 
| Ad Group | searchAbsoluteTopImpressionShare | 倍精度 | \$1=, =, <, > | 
| Ad Group | relativeCtr | 倍精度 | \$1=, =, <, > | 
| Ad Group | conversionAction | 文字列 | \$1=, = | 
| Ad Group | conversionActionCategory | 文字列 | \$1=, = | 
| Ad Group | conversionActionName | 文字列 | \$1=, =, LIKE | 
| Ad Group | updateMask | 文字列 |  | 
| Ad Group | 作成 | Struct |  | 
| Ad Group | 更新 | Struct |  | 
| Ad Group | primaryStatus | 文字列 | \$1=, = | 
| Ad Group | primaryStatusReasons | リスト |  | 
| Ad Group Ad | resourceName | 文字列 | \$1=, = | 
| Ad Group Ad | id | BigInteger | BETWEEN, =, \$1=, <, >, <=, >= | 
| Ad Group Ad | ステータス | 文字列 | \$1=, = | 
| Ad Group Ad | ラベル | リスト |  | 
| Ad Group Ad | adGroup | 文字列 | \$1=, = | 
| Ad Group Ad | costMicros | BigInteger | BETWEEN, =, \$1=, <, >, <=, >= | 
| Ad Group Ad | approvalStatus | 文字列 | \$1=, = | 
| Ad Group Ad | reviewStatus | 文字列 | \$1=, = | 
| Ad Group Ad | adStrength | 文字列 | \$1=, = | 
| Ad Group Ad | type | 文字列 | \$1=, = | 
| Ad Group Ad | businessName | 文字列 | \$1=, =, LIKE | 
| Ad Group Ad | date | 日付 | BETWEEN, =, <, >, <=, >= | 
| Ad Group Ad | allConversionsByConversionDate | 倍精度 | \$1=, =, <, > | 
| Ad Group Ad | allConversionsValueByConversionDate | 倍精度 | \$1=, =, <, > | 
| Ad Group Ad | conversionsByConversionDate | 倍精度 | \$1=, =, <, > | 
| Ad Group Ad | conversionsValueByConversionDate | 倍精度 | \$1=, =, <, > | 
| Ad Group Ad | valuePerAllConversionsByConversionDate | 倍精度 | \$1=, =, <, > | 
| Ad Group Ad | valuePerConversionsByConversionDate | 倍精度 | \$1=, =, <, > | 
| Ad Group Ad | activeViewMeasurableCostMicros | BigInteger | BETWEEN, =, \$1=, <, >, <=, >= | 
| Ad Group Ad | averageCost | 倍精度 | \$1=, =, <, > | 
| Ad Group Ad | costPerAllConversions | 倍精度 | \$1=, =, <, > | 
| Ad Group Ad | costPerConversion | 倍精度 | \$1=, =, <, > | 
| Ad Group Ad | clicks | BigInteger | BETWEEN, =, \$1=, <, >, <=, >= | 
| Ad Group Ad | averagePageViews | 倍精度 | \$1=, =, <, > | 
| Ad Group Ad | videoViews | BigInteger | BETWEEN, =, \$1=, <, >, <=, >= | 
| Ad Group Ad | allConversions | 倍精度 | \$1=, =, <, > | 
| Ad Group Ad | averageCpc | 倍精度 | \$1=, =, <, > | 
| Ad Group Ad | topImpressionPercentage | 倍精度 | \$1=, =, <, > | 
| Ad Group Ad | IMPRESSION | BigInteger | BETWEEN, =, \$1=, <, >, <=, >= | 
| Ad Group Ad | absoluteTopImpressionPercentage | 倍精度 | \$1=, =, <, > | 
| Ad Group Ad | activeViewCtr | 倍精度 | \$1=, =, <, > | 
| Ad Group Ad | ctr | 倍精度 | \$1=, =, <, > | 
| Ad Group Ad | conversionAction | 文字列 | \$1=, = | 
| Ad Group Ad | conversionActionCategory | 文字列 | \$1=, = | 
| Ad Group Ad | conversionActionName | 文字列 | \$1=, =, LIKE | 
| Ad Group Ad | updateMask | 文字列 |  | 
| Ad Group Ad | 作成 | Struct |  | 
| Ad Group Ad | 更新 | Struct |  | 
| Ad Group Ad | policyValidationParameter | Struct |  | 
| Ad Group Ad | primaryStatus | 文字列 | \$1=, = | 
| Ad Group Ad | primaryStatusReasons | リスト |  | 
| キャンペーン | resourceName | 文字列 | \$1=, = | 
| キャンペーン | ステータス | 文字列 | \$1=, = | 
| キャンペーン | baseCampaign | 文字列 | \$1=, = | 
| キャンペーン | 名前 | 文字列 | \$1=, =, LIKE | 
| キャンペーン | id | BigInteger | BETWEEN, =, \$1=, <, >, <=, >= | 
| キャンペーン | campaignBudget | 文字列 | \$1=, =, LIKE | 
| キャンペーン | startDate | 日付 | BETWEEN, =, <, >, <=, >= | 
| キャンペーン | endDate | 日付 | BETWEEN, =, <, >, <=, >= | 
| キャンペーン | adServingOptimizationStatus | 文字列 | \$1=, = | 
| キャンペーン | advertisingChannelType | 文字列 | \$1=, = | 
| キャンペーン | advertisingChannelSubType | 文字列 | \$1=, = | 
| キャンペーン | experimentType | 文字列 | \$1=, = | 
| キャンペーン | servingStatus | 文字列 | \$1=, = | 
| キャンペーン | biddingStrategyType | 文字列 | \$1=, = | 
| キャンペーン | domainName | 文字列 | \$1=, =, LIKE | 
| キャンペーン | languageCode | 文字列 | \$1=, =, LIKE | 
| キャンペーン | useSuppliedUrlsOnly | ブール値 | \$1=, = | 
| キャンペーン | positiveGeoTargetType | 文字列 | \$1=, = | 
| キャンペーン | negativeGeoTargetType | 文字列 | \$1=, = | 
| キャンペーン | paymentMode | 文字列 | \$1=, = | 
| キャンペーン | optimizationGoalTypes | リスト |  | 
| キャンペーン | date | 日付 | BETWEEN, =, <, >, <=, >= | 
| キャンペーン | averageCost | 倍精度 |  | 
| キャンペーン | clicks | BigInteger | BETWEEN, =, \$1=, <, >, <=, >= | 
| キャンペーン | costMicros | BigInteger | BETWEEN, =, \$1=, <, >, <=, >= | 
| キャンペーン | IMPRESSION | BigInteger | BETWEEN, =, \$1=, <, >, <=, >= | 
| キャンペーン | useAudienceGrouped | ブール値 | \$1=, = | 
| キャンペーン | activeViewMeasurableCostMicros | BigInteger | BETWEEN, =, \$1=, <, >, <=, >= | 
| キャンペーン | costPerAllConversions | 倍精度 | \$1=, =, <, > | 
| キャンペーン | costPerConversion | 倍精度 | \$1=, =, <, > | 
| キャンペーン | invalidClicks | BigInteger | BETWEEN, =, \$1=, <, >, <=, >= | 
| キャンペーン | publisherPurchasedClicks | BigInteger | BETWEEN, =, \$1=, <, >, <=, >= | 
| キャンペーン | averagePageViews | 倍精度 | \$1=, =, <, > | 
| キャンペーン | videoViews | BigInteger | BETWEEN, =, \$1=, <, >, <=, >= | 
| キャンペーン | allConversionsByConversionDate | 倍精度 | \$1=, =, <, > | 
| キャンペーン | allConversionsValueByConversionDate | 倍精度 | \$1=, =, <, > | 
| キャンペーン | conversionsByConversionDate | 倍精度 | \$1=, =, <, > | 
| キャンペーン | conversionsValueByConversionDate | 倍精度 | \$1=, =, <, > | 
| キャンペーン | valuePerAllConversionsByConversionDate | 倍精度 | \$1=, =, <, > | 
| キャンペーン | valuePerConversionsByConversionDate | 倍精度 | \$1=, =, <, > | 
| キャンペーン | allConversions | 倍精度 | \$1=, =, <, > | 
| キャンペーン | absoluteTopImpressionPercentage | 倍精度 | \$1=, =, <, > | 
| キャンペーン | searchAbsoluteTopImpressionShare | 倍精度 | \$1=, =, <, > | 
| キャンペーン | averageCpc | 倍精度 | \$1=, =, <, > | 
| キャンペーン | searchImpressionShare | 倍精度 | \$1=, =, <, > | 
| キャンペーン | searchTopImpressionShare | 倍精度 | \$1=, =, <, > | 
| キャンペーン | activeViewCtr | 倍精度 | \$1=, =, <, > | 
| キャンペーン | ctr | 倍精度 | \$1=, =, <, > | 
| キャンペーン | relativeCtr | 倍精度 | \$1=, =, <, > | 
| キャンペーン | updateMask | 文字列 |  | 
| キャンペーン | 作成 | Struct |  | 
| キャンペーン | 更新 | Struct |  | 
| Campaign Budget | resourceName | 文字列 | \$1=, = | 
| Campaign Budget | id | BigInteger | BETWEEN, =, \$1=, <, >, <=, >= | 
| Campaign Budget | ステータス | 文字列 | \$1=, = | 
| Campaign Budget | deliveryMethod | 文字列 | \$1=, = | 
| Campaign Budget | 期間 | 文字列 | \$1=, = | 
| Campaign Budget | type | 文字列 | \$1=, = | 
| Campaign Budget | 名前 | 文字列 | \$1=, =, LIKE | 
| Campaign Budget | amountMicros | BigInteger | BETWEEN, =, \$1=, <, >, <=, >= | 
| Campaign Budget | explicitlyShared | ブール値 | \$1=, = | 
| Campaign Budget | referenceCount | BigInteger | BETWEEN, =, \$1=, <, >, <=, >= | 
| Campaign Budget | hasRecommendedBudget | ブール値 | \$1=, = | 
| Campaign Budget | date | 日付 | BETWEEN, =, <, >, <=, >= | 
| Campaign Budget | costMicros | BigInteger | BETWEEN, =, \$1=, <, >, <=, >= | 
| Campaign Budget | startDate | 日付 | BETWEEN, =, <, >, <=, >= | 
| Campaign Budget | endDate | 日付 | BETWEEN, =, <, >, <=, >= | 
| Campaign Budget | maximizeConversionValueTargetRoas | 倍精度 | \$1=, =, <, > | 
| Campaign Budget | maximizeConversionsTargetCpaMicros | BigInteger | BETWEEN, =, \$1=, <, >, <=, >= | 
| Campaign Budget | selectiveOptimizationConversionActions | 文字列 |  | 
| Campaign Budget | averageCost | 倍精度 | \$1=, =, <, > | 
| Campaign Budget | costPerAllConversions | 倍精度 | \$1=, =, <, > | 
| Campaign Budget | costPerConversion | 倍精度 | \$1=, =, <, > | 
| Campaign Budget | videoViews | BigInteger | BETWEEN, =, \$1=, <, >, <=, >= | 
| Campaign Budget | clicks | BigInteger | BETWEEN, =, \$1=, <, >, <=, >= | 
| Campaign Budget | allConversions | 倍精度 | \$1=, =, <, > | 
| Campaign Budget | valuePerAllConversions | 倍精度 | \$1=, =, <, > | 
| Campaign Budget | averageCpc | 倍精度 | \$1=, =, <, > | 
| Campaign Budget | IMPRESSION | BigInteger | BETWEEN, =, \$1=, <, >, <=, >= | 
| Campaign Budget | ctr | 倍精度 | \$1=, =, <, > | 
| Campaign Budget | updateMask | 文字列 |  | 
| Campaign Budget | 作成 | Struct |  | 
| Campaign Budget | 更新 | Struct |  | 

 **パーティショニングクエリ** 

 Spark で同時実行を使用する場合は、追加の Spark オプション `PARTITION_FIELD`、`LOWER_BOUND`、`UPPER_BOUND`、および `NUM_PARTITIONS` を指定できます。これらのパラメータを使用すると、元のクエリは Spark タスクで同時に実行できるサブクエリの `NUM_PARTITIONS` の数に分割されます。
+  `PARTITION_FIELD`: クエリのパーティション化に使用するフィールドの名前。
+  `LOWER_BOUND`: 選択したパーティションフィールドの包括的な下限値。

   日付については、Spark SQL クエリで使用される Spark の日付形式を受け入れます。有効な値の例: `"2024-02-06"`。
+  `UPPER_BOUND`: 選択したパーティションフィールドの排他的上限値。
+  `NUM_PARTITIONS`: パーティション数。

 エンティティごとのパーティション分割フィールドのサポートの詳細は、次の表にまとめられています。


| エンティティ名 | Partitioning Field | データタイプ | 
| --- | --- | --- | 
| Ad Group Ad | date | 日付 | 
| Ad Group | date | 日付 | 
| キャンペーン | date | 日付 | 
| Campaign Budget | date | 日付 | 

 **例** 

```
googleads_read = glueContext.create_dynamic_frame.from_options(
    connection_type="googleads",
    connection_options={
        "connectionName": "connectionName",
        "ENTITY_NAME": "campaign-3467***",
        "API_VERSION": "v16",
        "PARTITION_FIELD": "date"
        "LOWER_BOUND": "2024-01-01"
        "UPPER_BOUND": "2024-06-05"
        "NUM_PARTITIONS": "10"
    }
)
```

# Google 広告の接続オプション
<a name="googleads-connection-options"></a>

Google 広告の接続オプションは次のとおりです。
+  `ENTITY_NAME`(文字列) – (必須) 読み取り / 書き込みに使用されます。Google 広告内のオブジェクトの名前。
+  `API_VERSION`(文字列) – (必須) 読み取り / 書き込みに使用されます。使用する Google 広告の Rest API バージョン。例: v16。
+  `DEVELOPER_TOKEN`(文字列) – (必須) 読み取り / 書き込みに使用されます。API にリクエストを行う開発者またはアプリケーションを認証するために必要です。
+  `MANAGER_ID`(文字列) – 読み取り / 書き込みに使用されます。複数の Google 広告アカウントを管理できる一意の識別子。これは、承認されたマネージャーの顧客 ID です。顧客アカウントへのアクセスがマネージャーアカウント経由である場合は、`MANAGER_ID` が必要です。詳細については、「[login-customer-id](https://developers.google.com/google-ads/api/docs/concepts/call-structure#cid)」を参照してください。
+  `SELECTED_FIELDS`(List<String>) – Default: empty(SELECT \$1). 読み込みに使用されます。オブジェクトに選択する列です。
+  `FILTER_PREDICATE`(文字列) – デフォルト: 空 読み込みに使用されます。Spark SQL 形式である必要があります。
+  `QUERY`(文字列) - デフォルト: 空 読み込みに使用されます。完全な Spark SQL クエリです。
+  `PARTITION_FIELD`(文字列) - 読み取りに使用されます。クエリをパーティション化するために使用するフィールドです。
+  `LOWER_BOUND`(文字列) - 読み取りに使用されます。選択したパーティションフィールドの包括的な下限値。
+  `UPPER_BOUND` (文字列) - 読み取りに使用されます。選択したパーティションフィールドの排他的上限値。
+  `NUM_PARTITIONS`(整数) – デフォルト: 1。読み込みに使用されます。読み取り用のパーティションの数です。

# Google 広告アカウントの作成
<a name="googleads-create-account"></a>

1.  認証情報を使用して、[Google 広告の開発者アカウント](https://console.cloud.google.com)にログインして、\$1MyProject に移動します。  
![\[スクリーンショットには、Google 広告の開発者アカウントにログインするためのウェルカム画面が示されています。\]](http://docs.aws.amazon.com/ja_jp/glue/latest/dg/images/google-ads-log-in-developer-account.png)

1.  登録済みのアプリケーションがない場合、**[新規プロジェクト]** を選択し Google プロジェクトの作成に必要な情報を入力します。  
![\[スクリーンショットには、プロジェクトページの選択が示されています。右上隅の [新規プロジェクト] を選択します。\]](http://docs.aws.amazon.com/ja_jp/glue/latest/dg/images/google-ads-new-project.png)  
![\[スクリーンショットには、プロジェクト名を入力して場所を選択するため、[新規プロジェクト] ウィンドウが示されています。\]](http://docs.aws.amazon.com/ja_jp/glue/latest/dg/images/google-ads-new-project-name-location.png)

1.  **[ナビゲーションタブ]** および **[API と設定]** を選択したら、**[クライアント ID を作成]** に加え、AWS Glue と GoogleAds の間に関連付けするために追加の設定が必要となる **[ClientSecret]** を選択します。詳細については、「[API 認証情報](https://console.cloud.google.com/apis/credentials)」を参照してください。  
![\[スクリーンショットには、API およびサービスの設定ページが示されています。\]](http://docs.aws.amazon.com/ja_jp/glue/latest/dg/images/google-ads-apis-and-services.png)

1.  **[認証情報を作成]** を選択したら、**[OAuth クライアント ID]** を選択します。  
![\[スクリーンショットには、[認証情報を作成] ドロップダウンおよび [Oauth クライアント ID] オプションが強調表示された API とサービスの設定ページが示されています。\]](http://docs.aws.amazon.com/ja_jp/glue/latest/dg/images/google-ads-create-credentials.png)

1.  **[アプリケーションタイプ]** を **[ウェブアプリケーション]** として選択します。  
![\[スクリーンショットには、ウェブアプリケーションとして OAuth クライアント ID の作成ページおよびアプリケーションタイプが示されています。\]](http://docs.aws.amazon.com/ja_jp/glue/latest/dg/images/google-ads-oauth-client-id-application-type.png)

1.  **[認可されたリダイレクト URI]** で、OAuth リダイレクト URI を追加して **[作成]** を選択します。必要に応じて複数のリダイレクト URI を追加できます。  
![\[このスクリーンショットは、[OAuth クライアント ID の作成] ページと [認可されたリダイレクト URI] セクションを示しています。ここでは、URI を追加し、必要に応じて [ADD URI] を選択します。完了したら、[作成] を選択します。\]](http://docs.aws.amazon.com/ja_jp/glue/latest/dg/images/google-ads-oauth-redirect-uris.png)

1.  **[クライアントID]** および **[クライアントシークレット]** は、AWS Glue と Google 広告の間に関連付けするときに生成されます。  
![\[このスクリーンショットは、[OAuth クライアント ID の作成] ページと [認可されたリダイレクト URI] セクションを示しています。ここでは、URI を追加し、必要に応じて [ADD URI] を選択します。完了したら、[作成] を選択します。\]](http://docs.aws.amazon.com/ja_jp/glue/latest/dg/images/google-ads-oauth-client-created.png)

1.  アプリケーションのニーズに応じてスコープを追加し、**[OAuth 同意画面]** を選択して必要な情報を指定したら、要件に基づいてスコープを追加します。  
![\[スクリーンショットには、[更新情報] の選択されたスコープページが示されています。必要に応じてスコープを選択します。\]](http://docs.aws.amazon.com/ja_jp/glue/latest/dg/images/google-ads-selected-scopes.png)

# 制限
<a name="googleads-connector-limitations"></a>

Google 広告コネクタの制限は次のとおりです:
+ `MANAGER_ID` は、接続を作成するときのオプションの入力です。ただし、特定のマネージャーの基盤となる顧客にアクセスする場合、`MANAGER_ID` は必須の入力です。以下の表では、`MANAGER_ID` が接続に含まれるかどうかに基づくアクセス制限について説明します。    
[\[See the AWS documentation website for more details\]](http://docs.aws.amazon.com/ja_jp/glue/latest/dg/googleads-connector-limitations.html)
+ マネージャーアカウントがオブジェクトとして選択されると、`Account` のみがサブオブジェクトとして表示されます。Google 広告コネクタでは、キャンペーン、広告などのエンティティは、マネージャーアカウントではなく個々のクライアントアカウントに基づいて取得されます。
+ マネージャーアカウントのメトリクスを取得することはできません。代わりに、個々のクライアントアカウントのメトリクスを取得できます。
+  各アカウントには、アクティブなキャンペーンと一時停止されたキャンペーンの両方を含め、最大 10,000 のキャンペーンを設定できます。詳細については、「[アカウントあたりのキャンペーン](https://support.google.com/google-ads/answer/6372658)」を参照してください。
+  レポートを作成するときに、表示する特定のメトリクスを選択した場合、選択したメトリクスがすべてゼロである行は返されません。詳細については、「[ゼロメトリクス](https://developers.google.com/google-ads/api/docs/reporting/zero-metrics?hl=en#exclude_zero_metrics_by_segmenting)」を参照してください。
+  以下のフィールドでは、フルマッピングフローは、アカウント、広告グループや広告グループ広告エンティティ、特に conversionAction、conversionActionCategory、conversionActionName では機能しません。詳細については、「[セグメントとメトリクス](https://developers.google.com/google-ads/api/docs/reporting/segmentation?hl=en#selectability_between_segments_and_metrics)」を参照してください。
+ `segments.date` フィールドが選択されている場合、日付範囲フィルターは必須です。

# Google Analytics 4 への接続
<a name="connecting-to-googleanalytics"></a>

 Google Analytics 4 は、アプリやウェブサイトでの訪問者のインタラクションに関するメトリクスを追跡および報告する分析サービスです。メトリクスには、ページビュー、アクティブなユーザー、イベントが含まれます。Google Analytics 4 ユーザーの場合は、Google Analytics 4 アカウントに AWS Glue を接続できます。Google Analytics 4 を ETL ジョブのデータソースとして使用できます。これらのジョブを実行して、Google Analytics 4 コンソールから AWS サービスまたはその他のサポートされているアプリケーションにデータを転送します。

**Topics**
+ [Google Analytics 4 の AWS Glue サポート](googleanalytics-support.md)
+ [接続を作成および使用するための API オペレーションを含むポリシー](googleanalytics-configuring-iam-permissions.md)
+ [Google Analytics 4 の設定](googleanalytics-configuring.md)
+ [Google Analytics 4 接続の設定](googleanalytics-configuring-connections.md)
+ [Google Analytics 4 エンティティからの読み取り](googleanalytics-reading-from-entities.md)
+ [Google Analytics 4 接続オプション](googleanalytics-connection-options.md)
+ [Google Analytics 4 アカウントの作成](googleanalytics-create-account.md)
+ [クライアントアプリおよび OAuth 2.0 認証情報を作成する方法](googleanalytics-client-app-oauth-credentials.md)
+ [制約事項と考慮事項](googleanalytics-connector-limitations.md)

# Google Analytics 4 の AWS Glue サポート
<a name="googleanalytics-support"></a>

AWS Glue は、次のように Google Analytics 4 をサポートします。

**ソースとしてサポートされていますか?**  
はい。AWS Glue ETL ジョブを使用して、Google Analytics 4 からデータをクエリできます。

**ターゲットとしてサポートされていますか?**  
いいえ。

**サポートされている Google Analytics 4 の API バージョン**  
 v1 ベータ。

# 接続を作成および使用するための API オペレーションを含むポリシー
<a name="googleanalytics-configuring-iam-permissions"></a>

 次のサンプル ポリシーで、接続の作成と使用に必要な AWS の権限について説明します。新しいロールを作成する場合は、以下を含むポリシーを作成します。

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

****  

```
{
  "Version":"2012-10-17",		 	 	 
  "Statement": [
    {
      "Effect": "Allow",
      "Action": [
        "glue:ListConnectionTypes",
        "glue:DescribeConnectionType",
        "glue:RefreshOAuth2Tokens",
        "glue:ListEntities",
        "glue:DescribeEntity"
      ],
      "Resource": "*"
    }
  ]
}
```

------

また、次のマネージド IAM ポリシーを使用して、アクセスを許可できます。
+  [ AWSGlueServiceRole ](https://console.aws.amazon.com/iam/home#policies/arn:aws:iam::aws:policy/service-role/AWSGlueServiceRole) – さまざまな AWS Glue プロセスを実行するために必要なリソースへのアクセス権をユーザーに代わって付与します。これらのリソースには、AWS Glue、Amazon S3、IAM、CloudWatch Logs、および Amazon EC2 が含まれます。このポリシーで指定されたリソースの命名規則に従った場合、AWS Glue プロセスは必要なアクセス許可を使用できます。このポリシーは、通常、クローラー、ジョブ、開発エンドポイントを定義するときに指定されたロールにアタッチされます。
+  [ AWSGlueConsoleFullAccess ](https://console.aws.amazon.com/iam/home#policies/arn:aws:iam::aws:policy/AWSGlueConsoleFullAccess) — ポリシーがアタッチされているアイデンティティが AWS マネージメントコンソールを使用するときは、AWS Glue リソースへのフルアクセスを許可します。このポリシーで指定されたリソースの命名規則に従った場合、ユーザーは完全なコンソール機能を使用できます。このポリシーは、通常 AWS Glue コンソールのユーザーにアタッチされています。

# Google Analytics 4 の設定
<a name="googleanalytics-configuring"></a>

AWS Glue を使用して Google Analytics 4 から転送できるようにするには、次の要件を満たす必要があります。

## 最小要件
<a name="googleanalytics-configuring-min-requirements"></a>
+  転送するデータを収集する 1 つ以上のデータストリームを持つ Google Analytics アカウントがあります。
+  Google Cloud Platform のアカウントと Google Cloud プロジェクトがある。
+  Google Cloud プロジェクトで次の API を有効にしました。
  +  Google Analytics API 
  +  Google Analytics Admin API 
  +  Google Analytics Data API 
+  Google Cloud プロジェクトで、外部ユーザー用の OAuth 同意画面を設定している。OAuth 同意画面の詳細については、Google Cloud Platform コンソールのヘルプの「[OAuth 同意画面の設定](https://support.google.com/cloud/answer/10311615#)」を参照してください。
+  Google Cloud プロジェクトで、OAuth 2.0 クライアント ID を設定している。詳細については、「[Setting up OAuth 2.0](https://support.google.com/cloud/answer/6158849?hl=en#zippy=)」を参照してください。

 これらの要件を満たしている場合、AWS Glue を Google Analytics 4 アカウントに接続する準備ができています。

# Google Analytics 4 接続の設定
<a name="googleanalytics-configuring-connections"></a>

Google Sheet 接続を設定するには:

1.  AWS Secrets Manager で、次の詳細を含むシークレットを作成します。AWS Glue で接続ごとにシークレットを作成する必要があります。

   1.  AuthorizationCode グラントタイプの場合: 
      +  カスタマーマネージド接続アプリケーションの場合 – シークレットには、`USER_MANAGED_CLIENT_APPLICATION_CLIENT_SECRET` を使用して接続されたアプリケーションのコンシューマーシークレットをキーとして含める必要があります。

1. AWS Glue Glue Studio で、以下の手順に従って **[データ接続]** の下に接続を作成します。

   1. **[接続タイプ]** を選択する際に、[Google Analytics 4] を選択します。

   1. 接続先の Google Analytics 4 の `INSTANCE_URL` を指定します。

   1.  AWS Glue が次のアクションを担い、その権限を持つことができる IAM ロールを選択します。

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

****  

      ```
      {
        "Version":"2012-10-17",		 	 	 
        "Statement": [
          {
            "Effect": "Allow",
            "Action": [
              "secretsmanager:DescribeSecret",
              "secretsmanager:GetSecretValue",
              "secretsmanager:PutSecretValue",
              "ec2:CreateNetworkInterface",
              "ec2:DescribeNetworkInterfaces",
              "ec2:DeleteNetworkInterface"
            ],
            "Resource": "*"
          }
        ]
      }
      ```

------

   1.  AWS Glue でこの接続に使用する `secretName` を選択して、トークンを配置します。

   1.  ネットワークを使用する場合は、ネットワークオプションを選択します。

1.  AWS Glue ジョブに関連付けられている IAM ロールに `secretName` を読み取るアクセス許可を付与します。

 `AUTHORIZATION_CODE` 付与タイプ。

 このグラントタイプは、ユーザーを認証するためにサードパーティーの認証サーバーにユーザーをリダイレクトすることから、「three-legged」の OAuth と見なされます。AWS Glue コンソール経由で接続を作成するときに使用されます。AWS Glue コンソールでは、ユーザーが Google Analytics 4 にリダイレクトされます。ここではユーザーがログインし、Google Analytics 4 インスタンスにアクセスするためのリクエストされた権限を AWS Glue に許可する必要があります。

 ユーザーは、Google Analytics 4 で独自の接続アプリを作成し、AWS Glue コンソールを介して接続を作成するときに独自のクライアント ID とクライアントシークレットを指定することを選択できます。このシナリオでは、引き続き Google Analytics 4 にリダイレクトされてログインし、リソースへアクセスするために AWS Glue を承認します。

 このグラントタイプは、更新トークンとアクセストークンになります。アクセストークンの有効期間は短く、更新トークンを使用してユーザーとやり取りすることなく自動的に更新される場合があります。

 詳細については、「[Auth 2.0 を使用した Google API へのアクセス](https://developers.google.com/identity/protocols/oauth2)」を参照してください。

# Google Analytics 4 エンティティからの読み取り
<a name="googleanalytics-reading-from-entities"></a>

 **前提条件** 
+  読み取り元の Google Analytics 4 オブジェクト。使用可能なエンティティを確認するには、以下のサポートされているエンティティの表を参照してください。

 **サポートされているエンティティ** 


| エンティティ | フィルタリング可能 | 制限をサポートする | Order By をサポートする | Select \$1 をサポートする | パーティショニングをサポートする | 
| --- | --- | --- | --- | --- | --- | 
| リアルタイムレポート | はい | あり | あり | あり | なし | 
| コアレポート | はい | あり | あり | あり | あり | 

 **例** 

```
googleAnalytics4_read = glueContext.create_dynamic_frame.from_options(
    connection_type="GoogleAnalytics4",
    connection_options={
        "connectionName": "connectionName",
        "ENTITY_NAME": "entityName",
        "API_VERSION": "v1beta"
    }
```

 **Google Analytics 4 エンティティとフィールドの詳細** 


| エンティティ | フィールド | データタイプ | サポートされている演算子 | 
| --- | --- | --- | --- | 
| コアレポート | 動的フィールド |  |  | 
| コアレポート | ディメンションフィールド | 文字列 | LIKE, = | 
| コアレポート | ディメンションフィールド | 日付 | LIKE, = | 
| コアレポート | メトリクスフィールド | 文字列 | >, <, >=, <=, = BETWEEN | 
| コアレポート | カスタムディメンションフィールドとカスタムメトリクスフィールド | 文字列 | NA | 
| リアルタイムレポート | appVersion | 文字列 | LIKE, = | 
| リアルタイムレポート | audienceId | 文字列 | LIKE, = | 
| リアルタイムレポート | audienceName | 文字列 | LIKE, = | 
| リアルタイムレポート | city | 文字列 | LIKE, = | 
| リアルタイムレポート | cityId | 文字列 | LIKE, = | 
| リアルタイムレポート | country | 文字列 | LIKE, = | 
| リアルタイムレポート | countryId | 文字列 | LIKE, = | 
| リアルタイムレポート | deviceCategory | 文字列 | LIKE, = | 
| リアルタイムレポート | eventName | 文字列 | LIKE, = | 
| リアルタイムレポート | minutesAgo | 文字列 | LIKE, = | 
| リアルタイムレポート | platform | 文字列 | LIKE, = | 
| リアルタイムレポート | streamId | 文字列 | LIKE, = | 
| リアルタイムレポート | streamName | 文字列 | LIKE, = | 
| リアルタイムレポート | unifiedScreenName | 文字列 | LIKE, = | 
| リアルタイムレポート | activeUsers | 文字列 | >, <, >=, <=, = BETWEEN | 
| リアルタイムレポート | conversions | 文字列 | >, <, >=, <=, = BETWEEN | 
| リアルタイムレポート | eventCount | 文字列 | >, <, >=, <=, = BETWEEN | 
| リアルタイムレポート | screenPageViews | 文字列 | >, <, >=, <=, = BETWEEN | 

 **パーティショニングクエリ** 

1.  **フィルターベースのパーティション** 

    Spark で同時実行を使用する場合は、追加の Spark オプション `PARTITION_FIELD`、`LOWER_BOUND`、`UPPER_BOUND`、および `NUM_PARTITIONS` を指定できます。これらのパラメータを使用すると、元のクエリは Spark タスクで同時に実行できるサブクエリの `NUM_PARTITIONS` の数に分割されます。
   +  `PARTITION_FIELD`: クエリのパーティション化に使用するフィールドの名前。
   +  `LOWER_BOUND`: 選択したパーティションフィールドの包括的な下限値。

      日付については、Spark SQL クエリで使用される Spark の日付形式を受け入れます。有効な値の例: `"2024-02-06"`。
   +  `UPPER_BOUND`: 選択したパーティションフィールドの排他的上限値。
   +  `NUM_PARTITIONS`: パーティション数。

    **例** 

   ```
   googleAnalytics4_read = glueContext.create_dynamic_frame.from_options(
       connection_type="GoogleAnalytics4",
       connection_options={
           "connectionName": "connectionName",
           "ENTITY_NAME": "entityName",
           "API_VERSION": "v1beta",
           "PARTITION_FIELD": "date"
           "LOWER_BOUND": "2022-01-01"
           "UPPER_BOUND": "2024-01-02"
           "NUM_PARTITIONS": "10"
       }
   ```

1.  **レコードベースのパーティション** 

    Spark で同時実行を使用する場合、追加の Spark オプションの `NUM_PARTITIONS` を指定できます。これらのパラメータを使用すると、元のクエリは Spark タスクで同時に実行できるサブクエリの `NUM_PARTITIONS` の数に分割されます。
   +  `NUM_PARTITIONS`: パーティション数。

    **例** 

   ```
   googleAnalytics4_read = glueContext.create_dynamic_frame.from_options(
       connection_type="GoogleAnalytics4",
       connection_options={
           "connectionName": "connectionName",
           "ENTITY_NAME": "entityName",
           "API_VERSION": "v1beta",
           "NUM_PARTITIONS": "10"
       }
   ```

# Google Analytics 4 接続オプション
<a name="googleanalytics-connection-options"></a>

Google Analytics 4 の接続オプションは次のとおりです。
+  `ENTITY_NAME`(文字列) – (必須) 読み取りに使用されます。Google Analytics 4 のオブジェクトの名前。
+  `API_VERSION`(文字列) – (必須) 読み取りに使用されます。使用する Google Analytics 4 Rest の API バージョン。
+  `SELECTED_FIELDS`(List<String>) – Default: empty(SELECT \$1). 読み込みに使用されます。オブジェクトに選択する列です。
+  `FILTER_PREDICATE`(文字列) – デフォルト: 空 読み込みに使用されます。Spark SQL 形式である必要があります。
+  `QUERY`(文字列) - デフォルト: 空 読み込みに使用されます。完全な Spark SQL クエリです。
+  `PARTITION_FIELD`(文字列) - 読み取りに使用されます。クエリをパーティション化するために使用するフィールドです。
+  `LOWER_BOUND`(文字列) - 読み取りに使用されます。選択したパーティションフィールドの包括的な下限値。
+  `UPPER_BOUND` (文字列) - 読み取りに使用されます。選択したパーティションフィールドの排他的上限値。
+  `NUM_PARTITIONS`(整数) – デフォルト: 1。読み込みに使用されます。読み取り用のパーティションの数です。
+  `INSTANCE_URL` (整数) – 読み取りに使用されます。(オプション) 

# Google Analytics 4 アカウントの作成
<a name="googleanalytics-create-account"></a>

 次の手順に従って Google Analytics 4 アカウントを作成します: [https://support.google.com/analytics/answer/9304153?hl=en](https://support.google.com/analytics/answer/9304153?hl=en) 

# クライアントアプリおよび OAuth 2.0 認証情報を作成する方法
<a name="googleanalytics-client-app-oauth-credentials"></a>

 詳細については、「[Google Analytics4 API ドキュメント](https://developers.google.com/analytics/devguides/reporting/data/v1)」を参照してください。

1.  認証情報を使用して [Google Analytics アカウント](https://analytics.google.com/)にログインし、アカウントを作成して設定します。次に、**[Admin]** > **[アカウント作成]** に移動します。

1.  **[プロパティを作成]** を選択して、作成したアカウントのプロパティを作成します。必要な情報でプロパティを設定します。必要な情報がすべて指定されたら、対応するプロパティ ID が生成されます。

1.  ドロップダウンで **[データストリーム]** > **[ストリームを追加]** > **[Web]** を選択して、作成したプロパティにデータストリームを追加します。URL やその他の必須フィールドなど、ウェブサイトの詳細を指定します。すべての情報を指定したら、対応する **[ストリーム ID]** および **[測定 ID]** が生成されます。

1.  測定 ID をコピーしてウェブサイトの設定に追加し、ウェブサイトで Google Analytics を設定します。

1.  **[レポート]** に移動して必要なレポートを生成し、Google Analytics からレポートを作成します。

1.  [console.cloud.google.com]( https://console.cloud.google.com) に移動して Google Analytics Data API を検索し、API を有効にすることでアプリを許可します。

   1.  「API とサービス」ページに移動して、**[認証情報]** > **[OAuth 2.0 クライアント ID の設定]** を選択します。

   1.  AWS Glue リダイレクト URL を追加して、リダイレクト URL を指定します。

1.  接続の作成がさらに必要となるクライアント ID およびクライアントシークレットをコピーします。

# 制約事項と考慮事項
<a name="googleanalytics-connector-limitations"></a>

Google Analytics 4 コネクタの制限事項は次のとおりです。
+  コアレポートエンティティの場合、リクエストに送信できる内容は 9 個のディメンションフィールドおよび 10 個のメトリクスフィールドのみです。フィールドの許容数を超えた場合、リクエストは失敗してコネクタがエラーメッセージをスローします。
+  リアルタイムレポートエンティティの場合、リクエストで送信できる内容は 4 個のディメンションフィールドのみです。フィールドの許容数を超えた場合、リクエストは失敗してコネクタがエラーメッセージをスローします。
+  Google Analytics 4 はベータ版の無料ツールであるため、新機能、エンティティ強化、新しいフィールドの追加、既存フィールドの廃止に関する最新情報が定期的に配信されます。
+  コアレポートフィールドは動的に入力されるため、フィールドの追加、廃止、名前変更があります。フィールドに対する新しい制限の適用はいつでも実行することができます。
+  デフォルトの開始日は 30 日で、終了日は昨日 (現在の日付から 1 日前) になります。ユーザーが値を設定しているか、フローが増分である場合、これらの日付はフィルター式コードで上書きされます。
+  ドキュメントによると、リクエストに制限が渡されない場合、リアルタイムのレポートエンティティによって 10,000 レコードが返されます。それ以外の場合、要求する行数を問わず、API はリクエストごとに最大 250,000 行を返します。詳細については、Google Analytics ドキュメントの「[メソッド: properties.runRealtimeReport](https://developers.google.com/analytics/devguides/reporting/data/v1/rest/v1beta/properties/runRealtimeReport)」を参照してください。
+  リアルタイムのレポートエンティティはページ分割をサポートしていないため、レコードベースのパーティションはサポートされません。また、定義された基準を満たすフィールドがないため、フィールドベースのパーティションはサポートされません。
+  リクエストで渡すことができるフィールド数に制限があるため。指定された制限内でデフォルトのディメンションフィールドおよびメトリクスフィールドが設定されます。「すべて選択」が選択されている場合、事前定義されたこれらのフィールドのデータのみが取得されます。
  +  コアレポート 
    +  SAAS の制限に従い、リクエストには最大 9 つのディメンションと最大 10 のメトリクスのみが許可されます。つまり、リクエストに最大 19 個のフィールド (メトリクス \$1 ディメンション) を含めることができます。
    +  実装に従い、ユーザーが SELECT\$1ALL または 25 を超える選択されたフィールドを使用する場合、デフォルトのフィールドはリクエストで渡されます。
    +  次のフィールドはコアレポートのデフォルトフィールドとして扱われます – "country"、"city"、"eventName"、"cityId"、"browser"、"date"、"currencyCode"、"deviceCategory"、"transactionId"、"active1DayUsers"、"active28DayUsers"、"active7DayUsers"、"activeUsers"、"averagePurchaseRevenue"、"averageRevenuePerUser"、"averageSessionDuration"、"engagedSessions"、"eventCount"、"engagementRate"。
  +  リアルタイムレポート 
    +  SAAS の制限に従い、リクエストには最大 4 つのディメンションが許可されます。
    +  ユーザーが SELECT\$1ALL または 15 を超える選択されたフィールドを渡す場合、デフォルトのフィールドがリクエストで渡されます。
    +  次のフィールドはリアルタイムレポートのデフォルトフィールドとして扱われます – "country"、"deviceCategory"、"city"、"cityId"、"activeUsers"、"conversions"、"eventCount"、"screenPageViews"。
+  コアレポートエンティティでは、日付フィールドのパーティションおよび startDate のフィルターが同時に存在する場合。この場合、dateRange 値は startDate フィルター値で上書きされます。ただし、パーティションを常に優先する必要があるため、日付フィールドのパーティションがすでに存在する場合は startDate フィルターを破棄します。
+  現在、cohortSpecs はコアレポートリクエスト本文の一部でもあるため、現在のコアレポートエンティティを拡張して cohortSpec 属性のサポートを含めました。cohortSpecs リクエスト本文では、ほぼすべてのフィールドにユーザー入力が必要です。これに対処するため、これらの属性/フィールドにデフォルト値が設定され、必要に応じてユーザーがこれらの値を上書きするためのプロビジョニングが提供されました。    
<a name="google-analytics-connector-limitations-table"></a>[\[See the AWS documentation website for more details\]](http://docs.aws.amazon.com/ja_jp/glue/latest/dg/googleanalytics-connector-limitations.html)
+  これらのフィルターをすべてまとめて一度に渡すか、他のフィルターと一緒に渡すことができます。
  +  例 1 – filterPredicate: startDate between "2023-05-09" and "2023-05-10" AND startOffset=1 AND endOffset=2 AND granularity="WEEKLY"
  +  例 2 – filterPredicate: city=“xyz” AND startOffset=1 AND endOffset=2 AND granularity="WEEKLY"
+  コホートリクエストにおいて: 
  +  リクエストで「cohortNthMonth」が渡された場合、内部粒度値は「MONTHLY」に設定されます。
  +  同様に、「cohortNthWeek」が渡された場合、粒度値は「WEEKLY」に設定されます。
  +  また、「cohortNthDay」の粒度値の場合、「DAILY」に設定されます。詳細については、以下を参照してください。
    +  [https://developers.google.com/analytics/devguides/reporting/data/v1/advanced](https://developers.google.com/analytics/devguides/reporting/data/v1/advanced) 
    +  [https://developers.google.com/analytics/devguides/reporting/data/v1/rest/v1beta/CohortSpec](https://developers.google.com/analytics/devguides/reporting/data/v1/rest/v1beta/CohortSpec) 
  +  ユーザーが dateRange および粒度のデフォルト値を上書きするため、プロビジョニングが与えられます。上記のテーブルを参照してください。

# AWS Glue Studio で Google BigQuery に接続する
<a name="connecting-to-data-bigquery"></a>

**注記**  
  AWS Glue for Spark を使用して、AWS Glue 4.0 以降のバージョンの Google BigQuery のテーブルからの読み取りとテーブルへの書き込みを行うことができます。AWS Glue ジョブと Google BigQuery をプログラム的に設定する方法については、「[BigQuery 接続](aws-glue-programming-etl-connect-bigquery-home.md)」を参照してください。  

 AWS Glue Studio には、BigQuery へ接続し、データ統合ジョブを作成し、AWS Glue Studio サーバーレス Spark ランタイム上でそれらを実行するビジュアルインターフェイスが用意されています。

 AWS Glue Studio で Google BigQuery への接続を作成すると、統合接続が作成されます。詳細については、「[考慮事項](using-connectors-unified-connections.md#using-connectors-unified-connections-considerations)」を参照してください。

 特定の形式 `{"credentials": "base64 encoded JSON"}` の認証情報を使用してシークレットを作成する代わりに、Google BigQuery への統合接続を使用して、Golge BigQuery の JSON を直接含むシークレットを作成できます: `{"type": "service-account", ...}`。

**Topics**
+ [BigQuery 接続を作成する](creating-bigquery-connection.md)
+ [BigQuery ソースノードの作成](creating-bigquery-source-node.md)
+ [BigQuery ターゲットノードを作成する](creating-bigquery-target-node.md)
+ [詳細オプション](#creating-bigquery-connection-advanced-options)

# BigQuery 接続を作成する
<a name="creating-bigquery-connection"></a>

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

**BigQuery への接続を設定するには:**

1. Google Cloud Platform で、関連するリソースを作成して特定します。
   + 接続したい BigQuery テーブルを含む GCP プロジェクトを作成または特定します。
   + BigQuery API を有効にします。詳細については、「[Use the BigQuery Storage Read API to read table data](https://cloud.google.com/bigquery/docs/reference/storage/#enabling_the_api)」を参照してください。

1. Google Cloud Platform で、サービスアカウントの認証情報を作成してエクスポートします。

   BigQuery 認証情報ウィザードを使用すると、[認証情報の作成](https://console.cloud.google.com/apis/credentials/wizard?api=bigquery.googleapis.com) というステップを迅速に実行できます。

   GCP でサービスアカウントを作成するには、[サービスアカウントを作成する](https://cloud.google.com/iam/docs/service-accounts-create) にあるチュートリアルに従ってください。
   + **プロジェクト** を選択するときは、BigQuery テーブルを含むプロジェクトを選択します。
   + サービスアカウントの GCP IAM ロールを選択するときは、BigQuery テーブルの読み取り、書き込み、作成を行う BigQuery ジョブを実行するための適切な権限を付与するロールを追加または作成します。

   サービスアカウントの認証情報を作成するには、[サービスアカウントキーを作成する](https://cloud.google.com/iam/docs/keys-create-delete#creating) にあるチュートリアルに従ってください。
   + キータイプを選択するときは、**[JSON]** を選択します。

   これで、サービスアカウントの認証情報が記載された JSON ファイルがダウンロードされたはずです。これは次のように表示されます。

   ```
   {
     "type": "service_account",
     "project_id": "*****",
     "private_key_id": "*****",
     "private_key": "*****",
     "client_email": "*****",
     "client_id": "*****",
     "auth_uri": "https://accounts.google.com/o/oauth2/auth",
     "token_uri": "https://oauth2.googleapis.com/token",
     "auth_provider_x509_cert_url": "https://www.googleapis.com/oauth2/v1/certs",
     "client_x509_cert_url": "*****",
     "universe_domain": "googleapis.com"
   }
   ```

1. AWS Secrets Manager で、ダウンロードした認証情報ファイルを使用してシークレットを作成します。**[プレーンテキスト]** タブを選択し、JSON 形式のファイルコンテンツを貼り付けることができます。Secrets Manager でシークレットを作成するには、AWS Secrets Manager ドキュメントの [AWS Secrets Manager シークレットを作成する](https://docs.aws.amazon.com//secretsmanager/latest/userguide/create_secret.html) にあるチュートリアルに従ってください。シークレットを作成したら、次のステップのためにシークレット名 *secretName* を保存しておきます。

1. AWS Glue データカタログで、[https://docs.aws.amazon.com/glue/latest/dg/console-connections.html](https://docs.aws.amazon.com/glue/latest/dg/console-connections.html) にある手順に従って接続を作成します。接続を作成したら、次のステップのために接続名 *connectionName* を保存しておきます。
   + **[接続タイプ]** を選択するときは、Google BigQuery を選択してください。
   + **[AWS Secret]** をクリックして、*secretName* を入力します。

1. AWS Glue ジョブに関連付けられている IAM ロールに *secretName* を読み取るアクセス許可を付与します。

1. AWS Glue ジョブ設定で、**[Additional network connection]** として *[connectionName]* を指定します。

# BigQuery ソースノードの作成
<a name="creating-bigquery-source-node"></a>

## 必要な前提条件
<a name="creating-bigquery-source-node-prerequisites"></a>
+ BigQuery タイプの AWS Glue データカタログ接続
+ 接続時に使用される Google BigQuery 認証情報の AWS Secrets Manager シークレット。
+ 接続で使用されるシークレットを読み取るためのジョブに対する適切なアクセス許可。
+ 読み取る対象のテーブルおよび対応する Google Cloud プロジェクトの名前とデータセット。

## BigQuery データソースを追加する
<a name="creating-bigquery-source-node-add"></a>

****データソース — BigQuery** ノードを追加するには**

1.  BigQuery データソースの接続を選択します。すでに作成したので、ドロップダウンに表示されているはずです。接続を作成する必要がある場合は、**[Create BigQuery connection]** を選択します。詳細については、「[コネクタと接続の使用に関する概要](https://docs.aws.amazon.com/glue/latest/ug/connectors-chapter.html#using-connectors-overview)」を参照してください。

    接続を選択したあとは、**[プロパティを表示]** をクリックすると、接続のプロパティを表示できます。

1. 読み取る BigQuery データを特定し、**[BigQuery Source]** オプションを選択します。
   + Choose a single table - テーブルからすべてのデータを取得できます。
   + Enter a custom query — クエリを指定することで、取得するデータをカスタマイズできます。

1.  読み取るデータの説明を記述します。

   **(必須)** テーブルを含むプロジェクト、または該当する場合は、請求元の親プロジェクトに**[親プロジェクト]**を設定します。

   1 つのテーブルを選択した場合は、**[テーブル]** を次の形式で Google BigQuery テーブルの名前に設定します。`[dataset].[table]`

   クエリを選択した場合は、それを **[クエリ]** に提供します。クエリでは、`[project].[dataset].[tableName]` の形式の完全修飾テーブル名の付いたテーブルを参照します。

1.  BigQuery プロパティを指定します。

   1 つのテーブルを選択した場合は、追加のプロパティを指定する必要はありません。

   クエリを選択した場合は、以下の **[Custom Google BigQuery properties]** を指定する必要があります。
   + `viewsEnabled` を true に設定します。
   + `materializationDataset` をデータセットに設定します。AWS Glue 接続を通じて提供された認証情報で認証された GCP プリンシパルは、このデータセットにテーブルを作成できる必要があります。

# BigQuery ターゲットノードを作成する
<a name="creating-bigquery-target-node"></a>

## 必要な前提条件
<a name="creating-bigquery-target-node-prerequisites"></a>
+ BigQuery タイプの AWS Glue データカタログ接続
+ 接続時に使用される Google BigQuery 認証情報の AWS Secrets Manager シークレット。
+ 接続で使用されるシークレットを読み取るためのジョブに対する適切なアクセス許可。
+ 書き込み対象のテーブルおよび対応する Google Cloud プロジェクトの名前とデータセット。

## BigQuery データターゲットを追加する
<a name="creating-bigquery-target-node-add"></a>

****[Data target – BigQuery]** ノードを追加するには:**

1.  BigQuery データターゲットの接続を選択します。すでに作成したので、ドロップダウンに表示されているはずです。接続を作成する必要がある場合は、**[Create BigQuery connection]** を選択します。詳細については、「[コネクタと接続の使用に関する概要](https://docs.aws.amazon.com/glue/latest/ug/connectors-chapter.html#using-connectors-overview)」を参照してください。

    接続を選択したあとは、**[プロパティを表示]** をクリックすると、接続のプロパティを表示できます。

1. どの BigQuery テーブルに書き込むかを特定し、**[Write method]** を選択します。
   + 直接 — BigQuery Storage Write API を使用して BigQuery に直接書き込みます。
   + 間接 — Google Cloud Storage に書き込んでから BigQuery にコピーします。

   間接的に書き込む場合は、**一時 GCS バケット**を使用して送信先の GCS ロケーションを指定します。AWS Glue 接続時に追加の設定を行う必要があります。詳細については、「[Using indirect write with Google BigQuery](https://docs.aws.amazon.com/glue/latest/dg/aws-glue-programming-etl-connect-bigquery-home.html#aws-glue-programming-etl-connect-bigquery-indirect-write)」を参照してください。

1.  読み取るデータの説明を記述します。

   **(必須)** テーブルを含むプロジェクト、または該当する場合は、請求元の親プロジェクトに**[親プロジェクト]**を設定します。

   1 つのテーブルを選択した場合は、**[テーブル]** を次の形式で Google BigQuery テーブルの名前に設定します。`[dataset].[table]`

## 詳細オプション
<a name="creating-bigquery-connection-advanced-options"></a>

BigQuery ノードを作成するときに、高度なオプションを指定できます。これらのオプションは Spark AWS Glue スクリプトのプログラミング時に使用できるオプションと同じです。

「AWS Glue デベロッパーガイド」の「[BigQuery 接続オプションリファレンス](https://docs.aws.amazon.com//glue/latest/dg/aws-glue-programming-etl-connect-bigquery-home.html)」をご覧ください。

# Google 検索コンソールに対する接続
<a name="connecting-to-data-google-search-console"></a>

Google 検索コンソールは、Google がサイトをどのように表示し、その存在を最適化するかをモニタリングするために、ウェブサイト所有者が利用できる無料のプラットフォームです。これには、参照元ドメイン、モバイルサイトのパフォーマンス、豊富な検索結果、トラフィックの多いクエリとページの表示が含まれます。Google 検索コンソールユーザーの場合は、Google 検索コンソールアカウントに AWS Glue を接続できます。Google 検索コンソールを ETL ジョブのデータソースとして使用できます。これらのジョブを実行して、Google 検索コンソールから AWS サービスまたはその他のサポートされているアプリケーションにデータを転送します。

**Topics**
+ [Google 検索コンソールの AWS Glue サポート](google-search-console-support.md)
+ [接続を作成および使用するための API オペレーションを含むポリシー](google-search-console-configuring-iam-permissions.md)
+ [Google 検索コンソールの設定](google-search-console-configuring.md)
+ [Google 検索コンソール接続の設定](google-search-console-configuring-connections.md)
+ [Google 検索コンソールエンティティからの読み取り](google-search-console-reading-from-entities.md)
+ [Google 検索コンソールの接続オプション](google-search-console-connection-options.md)
+ [Google 検索コンソールの制限](google-search-console-limitations.md)

# Google 検索コンソールの AWS Glue サポート
<a name="google-search-console-support"></a>

AWS Glue は、次のように Google 検索コンソールをサポートします。

**ソースとしてサポートされていますか?**  
はい。AWS Glue ETL ジョブを使用して、Google 検索コンソールからデータをクエリできます。

**ターゲットとしてサポートされていますか?**  
いいえ。

**サポートされている Google 検索コンソールの API バージョン**  
次の Google 検索コンソールの API バージョンがサポートされています。
+ v3

# 接続を作成および使用するための API オペレーションを含むポリシー
<a name="google-search-console-configuring-iam-permissions"></a>

次のサンプル ポリシーで、接続の作成と使用に必要な AWS IAM 権限について説明します。新しいロールを作成する場合は、以下を含むポリシーを作成します。

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

****  

```
{
  "Version":"2012-10-17",		 	 	 
  "Statement": [
    {
      "Effect": "Allow",
      "Action": [
        "glue:ListConnectionTypes",
        "glue:DescribeConnectionType",
        "glue:RefreshOAuth2Tokens",
        "glue:ListEntities",
        "glue:DescribeEntity"
      ],
      "Resource": "*"
    }
  ]
}
```

------

上記の方法を使用しない場合は、代わりに次のマネージド IAM ポリシーを使用します:
+ [AWSGlueServiceRole](https://console.aws.amazon.com/iam/home#policies/arn:aws:iam::aws:policy/service-role/AWSGlueServiceRole) – さまざまな AWS Glue プロセスを実行するために必要なリソースへのアクセス権をユーザーに代わって付与します。これらのリソースには AWS Glue 、Amazon S3、IAM、CloudWatch Logs、および Amazon EC2 が含まれます。このポリシーで指定されたリソースの命名規則に従った場合、AWS Glue プロセスは必要なアクセス権限を使用できます。このポリシーは、通常、クローラ、ジョブ、開発エンドポイントを定義するときに指定されたロールにアタッチされます。
+ [AWSGlueConsoleFullAccess](https://console.aws.amazon.com/iam/home#policies/arn:aws:iam::aws:policy/AWSGlueConsoleFullAccess) — ポリシーがアタッチされているアイデンティティが AWS マネージメントコンソールを使用するときは、AWS Glue リソースへのフルアクセスを許可します。このポリシーで指定されたリソースの命名規則に従った場合、ユーザーは完全なコンソール機能を使用できます。このポリシーは、通常 AWS Glue コンソールのユーザーにアタッチされています。

# Google 検索コンソールの設定
<a name="google-search-console-configuring"></a>

AWS Glue を使用して Google 検索コンソールからデータを転送できるようにするには、次の要件を満たす必要があります。

## 最小要件
<a name="google-search-console-configuring-min-requirements"></a>

以下に、最小要件を示します。
+ Google 検索コンソールアカウントがある。
+ Google Cloud Platform のアカウントと Google Cloud プロジェクトがある。
+ Google Cloud プロジェクトで、Google 検索コンソール API を有効にしている。
+ Google Cloud プロジェクトで、外部ユーザー用の OAuth 同意画面を設定している。詳細については、Google Cloud Platform コンソールヘルプの「[OAuth 同意画面の設定](https://support.google.com/cloud/answer/10311615)」を参照してください。
+ Google Cloud プロジェクトで、OAuth 2.0 クライアント ID を設定している。アカウントへの認証呼び出しを行うときに AWS Glue がデータに安全にアクセスするために使用するクライアント認証情報については、「[OAuth 2.0 の設定](https://support.google.com/cloud/answer/6158849)」を参照してください。

これらの要件を満たすと、Google 検索コンソールアカウントに AWS Glue を接続する準備が整います。一般的な接続では、Google 検索コンソールで他に何もする必要はありません。

# Google 検索コンソール接続の設定
<a name="google-search-console-configuring-connections"></a>

Google 検索コンソールは、OAuth2 の AUTHORIZATION\$1CODE グラントタイプをサポートしています。グラントタイプは、AWS Glue が Google 検索コンソールと通信してデータへのアクセスをリクエストする方法を決定します。
+ このグラントタイプは、ユーザーを認証するためにサードパーティーの認証サーバーにユーザーをリダイレクトすることから、「three-legged」の OAuth と見なされます。AWS Glue コンソール経由で接続を作成するときに使用されます。
+ ユーザーは、Google 検索コンソールで独自の接続アプリを作成し、AWS Glue コンソールを介して接続を作成するときに独自のクライアント ID とクライアントシークレットを指定することを選択できます。このシナリオでは、引き続き Google 検索コンソールにリダイレクトされてログインし、リソースへアクセスするために AWS Glue を承認します。
+ このグラントタイプは、更新トークンとアクセストークンになります。アクセストークンの有効期間は短く、更新トークンを使用してユーザーとやり取りすることなく自動的に更新される場合があります。
+ 認可コード OAuth フロー用の接続アプリの作成に関する Google 検索コンソールの公開ドキュメントについては、「[OAuth 2.0 を使用した Google API へのアクセス](https://developers.google.com/identity/protocols/oauth2)」を参照してください。

Google 検索コンソール接続を設定するには:

1. AWS Secrets Manager で、次の詳細を含むシークレットを作成します。

   1. カスタマーマネージド接続アプリケーションの場合、シークレットには、`USER_MANAGED_CLIENT_APPLICATION_CLIENT_SECRET` を使用して接続されたアプリケーションのコンシューマーシークレットをキーとして含める必要があります。

   1. 注: AWS Glue で接続にシークレットを作成する必要があります。

1. AWS Glue Glue Studio で、以下の手順に従って **[データ接続]** の下に接続を作成します。

   1. **[接続タイプ]** を選択する際に、[Google 検索コンソール] を選択します。

   1. 次のアクションを実行でき、AWS Glue がその権限を持つ AWS IAM ロールを選択します。

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

****  

      ```
      {
        "Version":"2012-10-17",		 	 	 
        "Statement": [
          {
            "Effect": "Allow",
            "Action": [
              "secretsmanager:DescribeSecret",
              "secretsmanager:GetSecretValue",
              "secretsmanager:PutSecretValue",
              "ec2:CreateNetworkInterface",
              "ec2:DescribeNetworkInterfaces",
              "ec2:DeleteNetworkInterface"
            ],
            "Resource": "*"
          }
        ]
      }
      ```

------

   1. AWS Glue でこの接続に使用する `secretName` を選択して、トークンを配置します。

   1. ネットワークを使用する場合は、ネットワークオプションを選択します。

1. AWS Glue ジョブに関連付けられている IAM ロールに `secretName` を読み取るアクセス許可を付与します。

# Google 検索コンソールエンティティからの読み取り
<a name="google-search-console-reading-from-entities"></a>

**前提条件**

読み取り元の Google 検索コンソールオブジェクト。オブジェクト名が必要になります。

**ソースに対応するエンティティ**:


| エンティティ | フィルタリング可能 | 制限をサポートする | Order By をサポートする | Select \$1 をサポートする | パーティション分割をサポートする | 
| --- | --- | --- | --- | --- | --- | 
| [分析] を選択する | はい | あり | なし | あり | なし | 
| サイト | なし | なし | なし | あり | なし | 
| サイトマップ | なし | なし | なし | あり | なし | 

**例**:

```
googleSearchConsole_read = glueContext.create_dynamic_frame.from_options(
    connection_type="googlesearchconsole",
    connection_options={
        "connectionName": "connectionName",
        "ENTITY_NAME": "entityName",
        "API_VERSION": "v3"
    }
```

**Google 検索コンソールのエンティティとフィールドの詳細**:

Google 検索コンソールでは、サポートされているエンティティのメタデータを動的に取得するためのエンドポイントが提供されます。したがって、オペレータのサポートはデータ型レベルでキャプチャされます。

[\[See the AWS documentation website for more details\]](http://docs.aws.amazon.com/ja_jp/glue/latest/dg/google-search-console-reading-from-entities.html)

**注記**  
フィルターの有効な値の更新リストについては、「[Google 検索コンソール](https://developers.google.com/webmaster-tools/v1/searchanalytics/query)」の API ドキュメントを参照してください。  
フィールド `start_end_date` は `start_date` と `end_date` の組み合わせです。

## パーティショニングクエリ
<a name="google-search-console-reading-partitioning-queries"></a>

フィルターベースのパーティショニングとレコードベースのパーティション分割はサポートされていません。

# Google 検索コンソールの接続オプション
<a name="google-search-console-connection-options"></a>

Google 検索コンソールの接続オプションは次のとおりです。
+ `ENTITY_NAME`(文字列) – (必須) 読み取りに使用されます。Google 検索コンソールのオブジェクトの名前。
+ `API_VERSION`(文字列) – (必須) 読み取りに使用されます。使用する Google 検索コンソールの Rest API バージョン。
+ `SELECTED_FIELDS`(List<String>) – Default: empty(SELECT \$1). 読み込みに使用されます。オブジェクトに選択する列です。
+ `FILTER_PREDICATE`(文字列) – デフォルト:「start\$1end\$1date が <現在の日付から 30 日前> と <昨日: つまり、現在の日付から 1 日前> の間」。読み込みに使用されます。Spark SQL 形式である必要があります。
+ `QUERY`(文字列) – デフォルト:「start\$1end\$1date が <現在の日付から 30 日前> と <昨日: つまり、現在の日付から 1 日前> の間」。読み取りに使用されます。完全な Spark SQL クエリです。
+ `INSTANCE_URL`(文字列) - 読み取りに使用されます。有効な Google 検索コンソールインスタンス URL。

# Google 検索コンソールの制限
<a name="google-search-console-limitations"></a>

Google 検索コンソールの制限事項または注意事項は次のとおりです。
+ Google 検索コンソールでは、API の使用制限が適用されます。詳細については、「[使用制限](https://developers.google.com/webmaster-tools/limits)」を参照してください。
+ `Search Analytics` エンティティにフィルタが渡されない場合、API は、指定されたデフォルトの日付範囲内のサイト全体のすべてのクリック、インプレッション、CTR、およびその他のデータを合計し、単一のレコードとして表示します。
+ データを小さなセグメントに分割するには、クエリにディメンションを導入する必要があります。ディメンションは、データをセグメント化する方法を API に伝えます。
  + たとえば、`filterPredicate: dimensions="country"` を追加すると、指定した期間中にサイトがトラフィックを受信した国ごとに 1 つのレコードを取得します。
  + 複数のディメンションを渡す例: `filterPredicate: dimensions="country" AND dimensions="device" AND dimensions="page"`。この場合、これら 3 つのディメンションの一意の組み合わせごとに 1 行がレスポンスに表示されます。
+ デフォルト値は、`start_end_date` および `dataState` フィールドに設定されます。    
[\[See the AWS documentation website for more details\]](http://docs.aws.amazon.com/ja_jp/glue/latest/dg/google-search-console-limitations.html)

# Google Sheets への接続
<a name="connecting-to-googlesheets"></a>

 Google Sheets は、大量のデータの整理、カスタムレポートの作成、計算の自動化、他のユーザーとのコラボレーションを可能にするオンラインスプレッドシートソフトウェアです。Google Sheets ユーザーの場合は、AWS Glue を Google Sheets アカウントに接続できます。その後、Google Sheets を ETL ジョブのデータソースとして使用できます。これらのジョブを実行して、Google Sheets と AWS サービス、またはその他のサポートされているアプリケーション間でデータを転送します。

**Topics**
+ [Google Sheets 用 AWS Glue サポート](googlesheets-support.md)
+ [接続を作成および使用するための API オペレーションを含むポリシー](googlesheets-configuring-iam-permissions.md)
+ [Google Sheets の設定](googlesheets-configuring.md)
+ [Google Sheet 接続の設定](googlesheets-configuring-connections.md)
+ [Google Sheets エンティティからの読み取り](googlesheets-reading-from-entities.md)
+ [Google Sheets 接続オプション](googlesheets-connection-options.md)
+ [Google Sheets の認可コード OAuth フローを設定する](googlesheets-oauth-authorization.md)
+ [Google Sheets コネクタの制限事項](googlesheets-connector-limitations.md)

# Google Sheets 用 AWS Glue サポート
<a name="googlesheets-support"></a>

AWS Glue は、次のように Google Sheets をサポートします。

**ソースとしてサポートされていますか?**  
はい。AWS Glue ETL ジョブを使用して、Google Sheets からデータをクエリできます。

**ターゲットとしてサポートされていますか?**  
いいえ。

**サポートされている Google Sheets の API バージョン**  
 Google Sheets API v4 と Google Drive API v3 

# 接続を作成および使用するための API オペレーションを含むポリシー
<a name="googlesheets-configuring-iam-permissions"></a>

 次のサンプル ポリシーで、接続の作成と使用に必要な AWS の権限について説明します。新しいロールを作成する場合は、以下を含むポリシーを作成します。

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

****  

```
{
  "Version":"2012-10-17",		 	 	 
  "Statement": [
    {
      "Effect": "Allow",
      "Action": [
        "glue:ListConnectionTypes",
        "glue:DescribeConnectionType",
        "glue:RefreshOAuth2Tokens",
        "glue:ListEntities",
        "glue:DescribeEntity"
      ],
      "Resource": "*"
    }
  ]
}
```

------

また、次のマネージド IAM ポリシーを使用して、アクセスを許可できます。
+  [ AWSGlueServiceRole ](https://console.aws.amazon.com/iam/home#policies/arn:aws:iam::aws:policy/service-role/AWSGlueServiceRole) – さまざまな AWS Glue プロセスを実行するために必要なリソースへのアクセス権をユーザーに代わって付与します。これらのリソースには、AWS Glue、Amazon S3、IAM、CloudWatch Logs、および Amazon EC2 が含まれます。このポリシーで指定されたリソースの命名規則に従った場合、AWS Glue プロセスは必要なアクセス許可を使用できます。このポリシーは、通常、クローラー、ジョブ、開発エンドポイントを定義するときに指定されたロールにアタッチされます。
+  [ AWSGlueConsoleFullAccess ](https://console.aws.amazon.com/iam/home#policies/arn:aws:iam::aws:policy/AWSGlueConsoleFullAccess) — ポリシーがアタッチされているアイデンティティが AWS マネージメントコンソールを使用するときは、AWS Glue リソースへのフルアクセスを許可します。このポリシーで指定されたリソースの命名規則に従った場合、ユーザーは完全なコンソール機能を使用できます。このポリシーは、通常 AWS Glue コンソールのユーザーにアタッチされています。

# Google Sheets の設定
<a name="googlesheets-configuring"></a>

AWS Glue を使用して Google Sheets から転送できるようにするには、次の要件を満たす必要があります。

## 最小要件
<a name="googlesheets-configuring-min-requirements"></a>
+ メールおよびパスワードが設定されている Google Sheets アカウントを持っていること。
+  Google Sheets アカウントで API アクセスが有効になっていること。Google Sheets API の使用はすべて追加料金なしで利用できること。
+  Google Sheets アカウントにより、接続されたアプリをインストールできこと。この機能にアクセスできない場合、Google Sheets 管理者にお問い合わせください。

 これらの要件を満たしている場合、AWS Glue を Google Sheets アカウントに接続する準備ができています。

# Google Sheet 接続の設定
<a name="googlesheets-configuring-connections"></a>

Google Sheet 接続を設定するには:

1. AWS Secrets Manager で、次の詳細を含むシークレットを作成します。

   1.  AuthorizationCode グラントタイプの場合: 
      +  カスタマーマネージド接続アプリケーションの場合 – シークレットには、`USER_MANAGED_CLIENT_APPLICATION_CLIENT_SECRET` を使用して接続されたアプリケーションのコンシューマーシークレットをキーとして含める必要があります。

1. AWS Glue Glue Studio で、以下の手順に従って **[データ接続]** の下に接続を作成します。

   1. **[データソース]** を選択する際に、[Google Sheets] を選択します。

   1. Google Sheet 環境を指定します。

      1.  AWS Glue でこの接続に使用する `secretName` を選択して、トークンを配置します。

      1.  ネットワークを使用する場合は、ネットワークオプションを選択します。

1.  AWS Glue ジョブに関連付けられている IAM ロールに `secretName` を読み取るアクセス許可を付与します。

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

****  

   ```
   {
     "Version":"2012-10-17",		 	 	 
     "Statement": [
       {
         "Effect": "Allow",
         "Action": [
           "secretsmanager:DescribeSecret",
           "secretsmanager:GetSecretValue",
           "secretsmanager:PutSecretValue",
           "ec2:CreateNetworkInterface",
           "ec2:DescribeNetworkInterfaces",
           "ec2:DeleteNetworkInterface"
         ],
         "Resource": "*"
       }
     ]
   }
   ```

------

 **AUTHORIZATION\$1CODE のグラントタイプ** 

 このグラントタイプは、ユーザーを認証するためにサードパーティーの認証サーバーにユーザーをリダイレクトすることから、「three-legged」の OAuth と見なされます。AWS Glue コンソール経由で接続を作成するときに使用されます。AWS Glue コンソールでは、ユーザーが Google Sheets にリダイレクトされます。ここではユーザーがログインし、Google Sheets インスタンスにアクセスするためのリクエストされた権限を AWS Glue に許可する必要があります。

 ユーザーは、Google Sheets で独自の接続アプリを作成し、AWS Glue コンソールを介して接続を作成するときに独自のクライアント ID とクライアントシークレットを指定することを選択できます。このシナリオでは、引き続き Google Sheets にリダイレクトされてログインし、リソースへアクセスするために AWS Glue を承認します。

 このグラントタイプは、更新トークンとアクセストークンになります。アクセストークンの有効期間は短く、更新トークンを使用してユーザーとやり取りすることなく自動的に更新される場合があります。

 詳細については、「[OAuth 認証コードフローでの接続されたアプリケーションの作成に関する Google Sheets の公開ドキュメント](https://developers.google.com/workspace/guides/create-credentials)」を参照してください。

# Google Sheets エンティティからの読み取り
<a name="googlesheets-reading-from-entities"></a>

 **前提条件** 
+  読み取り元の Google スプレッドシート。スプレッドシートの SpreadSheet ID と tabName が必要です。

 **Google Sheets エンティティとフィールドの詳細** 


| エンティティ | データタイプ | サポートされている演算子 | 
| --- | --- | --- | 
| スプレッドシート | 文字列 | 該当なし (フィルタリングはサポートされていません) | 

 **例** 

```
googleSheets_read = glueContext.create_dynamic_frame.from_options(
    connection_type="googlesheets",
    connection_options={
        "connectionName": "connectionName",
        "ENTITY_NAME": "{SpreadSheetID}#{SheetTabName}",
        "API_VERSION": "v4"
    }
```

 **パーティショニングクエリ** 

 レコードベースのパーティション分割の場合のみ、Spark で同時実行を使用する場合は、追加の Spark オプションとして `NUM_PARTITIONS` を指定できます。これらのパラメータを使用すると、元のクエリは spark タスクで同時に実行できるサブクエリの `NUM_PARTITIONS` の数に分割されます。

 **`NUM_PARTITIONS` を使用した例** 

```
googlesheets_read = glueContext.create_dynamic_frame.from_options(
    connection_type="googlesheets",
    connection_options={
        "connectionName": "connectionName",
        "ENTITY_NAME": "{SpreadSheetID}#{SheetTabName}",
        "API_VERSION": "v4",
        "NUM_PARTITIONS": "10"
    }
```

# Google Sheets 接続オプション
<a name="googlesheets-connection-options"></a>

Google Sheets の接続オプションは次のとおりです。
+  `ENTITY_NAME`(文字列) – (必須) 読み取りに使用されます。Google Sheets の `sheetTabName` および `SpreadSheet ID`。例えば、`{SpreadSheetID}#{SheetTabName}` などです。
+  `API_VERSION`(文字列) – (必須) 読み取りに使用されます。使用する Google Sheets Rest の API バージョン。
+  `SELECTED_FIELDS`(List<String>) – Default: empty(SELECT \$1). 読み込みに使用されます。オブジェクトに選択する列です。
+  `FILTER_PREDICATE`(文字列) – デフォルト: 空 読み込みに使用されます。Spark SQL 形式である必要があります。
+  `QUERY`(文字列) - デフォルト: 空 読み込みに使用されます。完全な Spark SQL クエリです。
+  `NUM_PARTITIONS`(整数) – デフォルト: 1。読み込みに使用されます。読み取り用のパーティションの数です。

# Google Sheets の認可コード OAuth フローを設定する
<a name="googlesheets-oauth-authorization"></a>

 **前提条件** 
+  サインインして Google Sheets アプリを使用できる Google アカウント。Google アカウントでは、転送するデータが Google Sheets に含まれています。
+  Google Cloud Platform のアカウントおよび Google Cloud プロジェクト。詳細については、「[Google Cloud Project の作成](https://developers.google.com/workspace/guides/create-project)」を参照してください。

**Google アカウントを設定して OAuth 2.0 認証情報を取得する方法**

1.  Google Cloud プロジェクトが設定されたら、プロジェクトで Google Sheets API および Google Drive API を有効にします。有効にする手順については、Google Cloud Platform の API コンソールヘルプの「[Enable and disable APIs](https://support.google.com/googleapi/answer/6158841)」を参照してください。

1.  次に、外部ユーザー用に OAuth 同意画面を設定します。OAuth 同意画面の詳細については、Google Cloud Platform コンソールヘルプの「[OAuth 同意画面の設定](https://support.google.com/cloud/answer/10311615#)」を参照してください。

1.  OAuth 同意画面で、次のスコープを追加します。
   +  [Google Sheets API の読み取り専用スコープ](https://www.googleapis.com/auth/spreadsheets.readonly) 
   +  [Google Drive API の読み取り専用スコープ](ttps://www.googleapis.com/auth/drive.readonly) 

    これらのスコープの詳細については、Google Identity ドキュメントの「[Google API の OAuth 2.0 スコープ](https://developers.google.com/identity/protocols/oauth2/scopes)」を参照してください。

1.  OAuth 2.0 クライアント ID およびシークレットを生成します。このクライアント ID を作成する手順については、Google Cloud Platform コンソールヘルプの「[Setting up OAuth 2.0](https://support.google.com/cloud/answer/6158849?hl=en#zippy=)」を参照してください。

    OAuth 2.0 クライアント ID には、1 つ以上の許可されたリダイレクト URL が必要です。

    リダイレクト URL の形式は次のとおりです: 
   + https://<aws-region>.console.aws.amazon.com/gluestudio/oauth 

1.  OAuth 2.0 クライアント ID の設定によるクライアント ID およびクライアントシークレットをメモします。

# Google Sheets コネクタの制限事項
<a name="googlesheets-connector-limitations"></a>

Google Sheets コネクタの制限事項は次のとおりです:
+  Google Sheets コネクタはフィルターをサポートしていません。したがって、フィルターベースのパーティション分割はサポートされません。
+  レコードベースのパーティション分割には、SAAS によって正確なレコード数を返すプロビジョニングはありません。その結果、空のレコードを持つファイルが作成されるシナリオが発生する可能性があります。
+  Google Sheets コネクタはフィルターベースのパーティション分割をサポートしていないため、`partitionField`、`lowerbound`、および `upperbound` は有効な接続オプションではありません。これらのオプションが指定されている場合、AWS Glue ジョブは失敗することが予想されます。
+  データ処理の問題を回避するには、シートの最初の行をヘッダー行として指定することが重要です。
  +  ヘッダー行が提供されない場合、シートの最初の行が空でデータが含まれている場合、ヘッダー行は `Unnamed:1`、`Unnamed:2`、`Unnamed:3`...に置き換えられます。
  +  ヘッダー行が指定されている場合、空の列名は `Unnamed:<number of column>` に置き換えられます。例えば、ヘッダー行が `['ColumnName1', 'ColumnName2', '', '', 'ColumnName5', 'ColumnName6']` の場合、`['ColumnName1', 'ColumnName2', 'Unnamed:3', 'Unnamed:4', 'ColumnName5', 'ColumnName6'].` になります。
+  Google Sheets コネクタは増分転送をサポートしていません。
+  Google Sheets コネクタは、文字列データ型のみをサポートしています。
+  シート内の重複ヘッダーは、数値サフィックスで繰り返し名前が変更されます。ユーザーによって指定されたヘッダー名は、重複するヘッダーの名前を変更する際に優先されます。たとえば、ヘッダー行が["Name", "", "Name", null, "Unnamed:6", ""] の場合、["Name", "Unnamed:2", "Name1", "Unnamed:4", "Unnamed:6", "Unnamed:61"] に変更されます。
+  Google Sheets コネクタは tabName のスペースをサポートしていません。
+  フォルダ名に次の特殊文字を含めることはできません: 
  + \$1
  + /

# HubSpot への接続
<a name="connecting-to-data-hubspot"></a>

HubSpot の CRM プラットフォームには、マーケティング、営業、コンテンツ管理、カスタマーサービスに必要なすべてのツールと統合があります。
+ Marketing Hub – トラフィックを増やし、より多くの訪問者をコンバージョンに導き、完全なインバウンドマーケティングキャンペーンを大規模に実行するのに役立つマーケティングソフトウェア。
+ Sales Hub – 見込み客に関するより深いインサイトの取得、タスクの自動化、より多くの取引の迅速な締結に役立つ営業 CRM ソフトウェア。
+ Service Hub – 顧客とつながり、期待を上回り、顧客をビジネスの成長を促す推進者に変えるのに役立つカスタマーサービスソフトウェア。
+ Operations Hub – アプリを同期し、顧客データをクリーンアップして作成し、プロセスを自動化する、すべてのシステムとチームが連携しやすくなるオペレーションソフトウェア。

**Topics**
+ [HubSpot の AWS Glue サポート](hubspot-support.md)
+ [接続を作成および使用するための API オペレーションを含むポリシー](hubspot-configuring-iam-permissions.md)
+ [HubSpot の設定](hubspot-configuring.md)
+ [HubSpot 接続の設定](hubspot-configuring-connections.md)
+ [HubSpot エンティティからの読み取り](hubspot-reading-from-entities.md)
+ [HubSpot エンティティへの書き込み](hubspot-writing-to-entities.md)
+ [HubSpot 接続オプション](hubspot-connection-options.md)
+ [HubSpot コネクタの制限と注意事項](hubspot-connector-limitations.md)

# HubSpot の AWS Glue サポート
<a name="hubspot-support"></a>

AWS Glue は、次のように HubSpot をサポートします。

**ソースとしてサポートされていますか?**  
はい – Sync と Async。AWS Glue ETL ジョブを使用して、HubSpot からデータをクエリできます。

**ターゲットとしてサポートされているかどうか**  
はい。AWS Glue ETL ジョブを使用して、HubSpot にデータを書き込むことができます。

**サポートされている HubSpot API バージョン**  
次の HubSpot API バージョンがサポートされています。
+ v1
+ v2
+ v3
+ v4

バージョン固有ごとのエンティティサポートについては、「[Sync ソースに対応するエンティティ](hubspot-reading-from-entities.md#sync-table)」および「[Async ソースに対応するエンティティ](hubspot-reading-from-entities.md#async-table)」を参照してください。

# 接続を作成および使用するための API オペレーションを含むポリシー
<a name="hubspot-configuring-iam-permissions"></a>

次のサンプル ポリシーで、接続の作成と使用に必要な AWS IAM 権限について説明します。新しいロールを作成する場合は、以下を含むポリシーを作成します。

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

****  

```
{
  "Version":"2012-10-17",		 	 	 
  "Statement": [
    {
      "Effect": "Allow",
      "Action": [
        "glue:ListConnectionTypes",
        "glue:DescribeConnectionType",
        "glue:RefreshOAuth2Tokens",
        "glue:ListEntities",
        "glue:DescribeEntity"
      ],
      "Resource": "*"
    }
  ]
}
```

------

上記の方法を使用しない場合は、代わりに次のマネージド IAM ポリシーを使用します:
+ [AWSGlueServiceRole](https://console.aws.amazon.com/iam/home#policies/arn:aws:iam::aws:policy/service-role/AWSGlueServiceRole) – さまざまな AWS Glue プロセスを実行するために必要なリソースへのアクセス権をユーザーに代わって付与します。これらのリソースには AWS Glue 、Amazon S3、IAM、CloudWatch Logs、および Amazon EC2 が含まれます。このポリシーで指定されたリソースの命名規則に従った場合、AWS Glue プロセスは必要なアクセス権限を使用できます。このポリシーは、通常、クローラ、ジョブ、開発エンドポイントを定義するときに指定されたロールにアタッチされます。
+ [AWSGlueConsoleFullAccess](https://console.aws.amazon.com/iam/home#policies/arn:aws:iam::aws:policy/AWSGlueConsoleFullAccess) — ポリシーがアタッチされているアイデンティティが AWS マネージメントコンソールを使用するときは、AWS Glue リソースへのフルアクセスを許可します。このポリシーで指定されたリソースの命名規則に従った場合、ユーザーは完全なコンソール機能を使用できます。このポリシーは、通常 AWS Glue コンソールのユーザーにアタッチされています。

# HubSpot の設定
<a name="hubspot-configuring"></a>

AWS Glue を使用して HubSpot からデータを転送できるようにするには、次の要件を満たす必要があります。

## 最小要件
<a name="hubspot-configuring-min-requirements"></a>

以下に、最小要件を示します。
+ HubSpot アカウントを持っている。詳細については、「[HubSpot アカウントの作成](#hubspot-configuring-creating-hubspot-account)」を参照してください。
+ HubSpot アカウントで API アクセスが有効になっている。
+ HubSpot デベロッパーアカウントの下には、AWS Glue がアカウントに対して認可呼び出しを行うときにデータに安全にアクセスするために使用するクライアント認証情報を提供するアプリケーションが必要です。詳細については、「[HubSpot 開発者アプリの作成](#hubspot-configuring-creating-hubspot-developer-app)」を参照してください。

これらの要件を満たすと、HubSpot アカウントに AWS Glue を接続する準備が整います。一般的な接続では、HubSpot で他に何もする必要はありません。

## HubSpot アカウントの作成
<a name="hubspot-configuring-creating-hubspot-account"></a>

HubSpot アカウントを作成するには:

1. [HubSpot CRM SignUp URL](https://app.hubspot.com/login) に移動します。

1. E メールアドレスを入力し、**[E メールを確認]** を選択します (または、Google、Microsoft、または Apple アカウントでサインアップすることもできます)。

1. 受信トレイで HubSpot の検証コードを確認してください。

1. 6 桁の検証コードを入力し、**[次へ]** をクリックします。

1. パスワードを入力し、**[次へ]** をクリックします。

1. 名と姓を入力し、**[次へ]** をクリックするか、**[Google でサインアップ]** リンクを使用してサインアップします。

1. 業界を入力し、**[次へ]** をクリックします。

1. 職務を入力し、**[次へ]** をクリックします。

1. 会社名を入力し、**[次へ]** をクリックします。

1. 会社の規模 (社内の従業員数) を選択し、**[次へ]** をクリックします。

1. 会社のウェブサイトを入力し、**[次へ]** をクリックします。

1. データをホストする場所 (米国または欧州) を選択し、**[アカウントの作成]** をクリックします。

1. アカウント作成の目的を選択し、**[次へ]** をクリックします。

1. **[Google アカウントを接続する]** を選択するか、自分で連絡先を追加して、連絡先を HubSpot アカウントにリンクします。

1. **[Google アカウントを接続する]** オプションを選択した場合は、Google アカウントにログインして連絡先をリンクし、HubSpot アカウントの使用を開始します。

## HubSpot 開発者アプリの作成
<a name="hubspot-configuring-creating-hubspot-developer-app"></a>

アプリ開発者アカウントは、アプリ、統合、開発者テストアカウントの作成と管理を目的としています。また、App Marketplace 出品を作成および管理できる場所でもあります。ただし、アプリ開発者アカウントおよび関連するテストアカウントは、標準の HubSpot アカウントに接続されません。別の HubSpot アカウントとの間でデータまたはアセットを同期することはできません。[クライアント ID] と [クライアントシークレット] を取得するには、デベロッパーアカウントを作成します。

1. https://developers.hubspot.com/ に移動します。

1. **[開発者アカウントの作成]** を選択し、下にスクロールします。

1. アプリ開発者アカウント、プライベートアプリアカウント、または CMS 開発者サンドボックスアカウントを作成するかどうか尋ねられます。**[アプリ開発者アカウントの作成]** を選択します。

1. HubSpot でアカウントを作成済みであるため、**[このユーザーで続行]** を選択できます。

1. **[サインアップを開始]** をクリックします。

1. 職務を入力し、**[次へ]** をクリックします。

1. デベロッパーアカウントに名前を付け、**[次へ]**、**[スキップ]** の順にクリックします。

1. [**Create App (アプリの作成)**] を選択します。

1. アプリを作成したら、**[認証]** を選択します。

1. [認証] の下にある [クライアント ID] と [クライアントシークレット] を書き留めます。

1. リージョン固有の **[リダイレクト URL]** を https:*//<aws-region>*.console.aws.amazon.com/gluestudio/oauth として追加します。例えば、us-east-1 リージョンの場合、https://us-east-1.console.aws.amazon.com/gluestudio/oauth を追加します。

1. 下にスクロールしてスコープを見つけます。「CRM」と「標準」の見出しの下に、選択する必要がある 2 種類のスコープがあります。

1. 以下のスコープを追加します。

   ```
   content
   automation
   oauth
   crm.objects.owners.read
   forms
   tickets
   crm.objects.contacts.write
   e-commerce
   crm.schemas.custom.read
   crm.objects.custom.read
   sales-email-read
   crm.objects.custom.write
   crm.objects.companies.write
   crm.lists.write
   crm.objects.companies.read
   crm.lists.read
   crm.objects.deals.read
   crm.objects.deals.write
   crm.objects.contacts.read
   ```

1. **[保存]** をクリックすると、開発アカウントを使用する準備が整います。

1. 上にスクロールして **[クライアント ID]** を見つけます。

1. 同じページで、**[表示]** をクリックして **[クライアントシークレット]** を取得します。

## HubSpot 開発者テストアカウントの作成
<a name="hubspot-configuring-creating-hubspot-developer-test-account"></a>

アプリ開発者アカウント内で、実際の HubSpot データに影響を与えることなく、アプリと統合をテストする開発者テストアカウントを作成できます。開発者テストアカウントは本番稼働用アカウントをミラーリングするのではなく、Marketing、Sales、Service、CMS、Operations Hub のエンタープライズバージョンの 90 日間トライアルにアクセスでき、ほとんどの HubSpot ツールと API をテストできます。

1. **[ホーム]** をクリックします。

1. **[テストアカウントの作成]** をクリックします。

1. **[アプリテストアカウントの作成]** をクリックします。

1. 新しいウィンドウが表示されます。アプリのテストアカウント名を入力し、**[作成]** をクリックします。

   これで、アプリテストアカウントが作成されました。

**注記**  
デベロッパーアカウントは API 統合などの開発アクティビティに関連しており、アプリテストアカウントはデベロッパーアカウントによって作成またはプルされたデータを表示するために使用されます。

# HubSpot 接続の設定
<a name="hubspot-configuring-connections"></a>

HubSpot は、OAuth2 の AUTHORIZATION\$1CODE のグラントタイプをサポートしています。
+ このグラントタイプは、ユーザーを認証するためにサードパーティーの認証サーバーにユーザーをリダイレクトすることから、「three-legged」の OAuth と見なされます。AWS Glue コンソール経由で接続を作成するときに使用されます。接続を作成するユーザーは、HubSpot クライアントアプリケーションのクライアント ID やクライアントシークレットなどの OAuth 関連情報を指定する必要があります。AWS Glue コンソールでは、ユーザーが HubSpot にリダイレクトされます。ここではユーザーがログインし、HubSpot インスタンスにアクセスするためのリクエストされた権限を AWS Glue に許可する必要があります。
+ ユーザーは、HubSpot で独自の接続アプリを作成し、AWS Glue コンソールを介して接続を作成するときに独自のクライアント ID とクライアントシークレットを指定することを選択できます。このシナリオでは、引き続き HubSpot にリダイレクトされてログインし、リソースへアクセスするために AWS Glue を承認します。
+ このグラントタイプは、更新トークンとアクセストークンになります。アクセストークンの有効期間は短く、更新トークンを使用してユーザーとやり取りすることなく自動的に更新される場合があります。
+ 認可コード OAuth フロー用の接続アプリケーションの作成に関する HubSpot の公開ドキュメントについては、「[パブリックアプリケーション](https://developers.hubspot.com/docs/api/creating-an-app)」を参照してください。

HubSpot 接続を設定するには:

1. AWS Secrets Manager で、次の詳細を含むシークレットを作成します。

   1. カスタマーマネージド接続アプリケーションの場合、シークレットには、`USER_MANAGED_CLIENT_APPLICATION_CLIENT_SECRET` を使用して接続されたアプリケーションのコンシューマーシークレットをキーとして含める必要があります。

   1. 注: AWS Glue で接続ごとにシークレットを作成する必要があります。

1. AWS Glue Glue Studio で、以下の手順に従って **[データ接続]** の下に接続を作成します。

   1. **[接続タイプ]** を選択する際に、[HubSpot] を選択します。

   1. HubSpot 環境を指定します。

   1. 次のアクションを実行でき、AWS Glue がその権限を持つ AWS IAM ロールを選択します。

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

****  

      ```
      {
        "Version":"2012-10-17",		 	 	 
        "Statement": [
          {
            "Effect": "Allow",
            "Action": [
              "secretsmanager:DescribeSecret",
              "secretsmanager:GetSecretValue",
              "secretsmanager:PutSecretValue",
              "ec2:CreateNetworkInterface",
              "ec2:DescribeNetworkInterfaces",
              "ec2:DeleteNetworkInterface"
            ],
            "Resource": "*"
          }
        ]
      }
      ```

------

   1. AWS Glue でこの接続に使用する `secretName` を選択して、トークンを配置します。

   1. ネットワークを使用する場合は、ネットワークオプションを選択します。

1. AWS Glue ジョブに関連付けられている IAM ロールに `secretName` を読み取るアクセス許可を付与します。

1. AWS Glue ジョブ設定で、**[追加のネットワーク接続]** として `connectionName` を指定します。

# HubSpot エンティティからの読み取り
<a name="hubspot-reading-from-entities"></a>

**前提条件**

読み取り元の HubSpot オブジェクト。連絡先またはタスクなどのオブジェクト名が必要です。次の表に、Sync ソースでサポートされているエンティティを示します。

## Sync ソースに対応するエンティティ
<a name="sync-table"></a>


| エンティティ | API バージョン | フィルタリング可能 | 制限をサポートする | Order By をサポートする | Select \$1 をサポートする | パーティショニングをサポートする | 
| --- | --- | --- | --- | --- | --- | --- | 
| キャンペーン | v1 | なし | あり | なし | あり | なし | 
| Companies | v3 | はい | あり | あり | あり | あり | 
| 問い合わせ | v3 | はい | あり | あり | あり | あり | 
| Contact Lists | v1 | なし | あり | なし | あり | なし | 
| Deals | v3 | はい | あり | あり | あり | あり | 
| CRM Pipeline (Deal Pipelines) | v1 | なし | なし | なし | あり | なし | 
| E メールイベント | v1 | なし | あり | なし | あり | なし | 
| 呼び出し | v3 | はい | あり | あり | あり | はい | 
| メモ | v3 | はい | あり | あり | あり | あり | 
| Emails | v3 | はい | あり | あり | あり | あり | 
| 会議 | v3 | はい | あり | あり | あり | あり | 
| タスク | v3 | はい | あり | あり | あり | あり | 
| Postal Mails | v3 | はい | あり | あり | あり | あり | 
| Custom Objects | v3 | はい | あり | あり | あり | あり | 
| Forms | v2 | なし | なし | なし | あり | なし | 
| Owners | v3 | なし | あり | なし | あり | なし | 
| 製品 | v3 | はい | あり | あり | あり | あり | 
| Tickets | v3 | はい | あり | あり | あり | あり | 
| ワークフロー | v3 | なし | なし | なし | あり | なし | 
| 関連付け | v4 | あり | なし | なし | あり | なし | 
| Associations Labels | v4 | なし | なし | なし | あり | なし | 

**例**:

```
hubspot_read = glueContext.create_dynamic_frame.from_options(
    connection_type="hubspot",
    connection_options={
        "connectionName": "connectionName",
        "ENTITY_NAME": "contact",
        "API_VERSION": "v3"
    }
```

## Async ソースに対応するエンティティ
<a name="async-table"></a>


| エンティティ | API バージョン | フィルタリング可能 | 制限をサポートする | Order By をサポートする | Select \$1 をサポートする | パーティショニングをサポートする | 
| --- | --- | --- | --- | --- | --- | --- | 
| Companies | v3 | あり | なし | あり | あり | なし | 
| 問い合わせ | v3 | あり | なし | あり | あり | なし | 
| Deals | v3 | あり | なし | あり | あり | なし | 
| 呼び出し | v3 | あり | なし | あり | あり | なし | 
| メモ | v3 | あり | なし | あり | あり | なし | 
| Emails | v3 | あり | なし | あり | あり | なし | 
| 会議 | v3 | あり | なし | あり | あり | なし | 
| タスク | v3 | あり | なし | あり | あり | なし | 
| Postal Mails | v3 | あり | なし | あり | あり | なし | 
| Custom Objects | v3 | あり | なし | あり | あり | なし | 
| 製品 | v3 | あり | なし | あり | あり | なし | 
| Tickets | v3 | あり | なし | あり | あり | なし | 

**例**:

```
hubspot_read = glueContext.create_dynamic_frame.from_options(
    connection_type="hubspot",
    connection_options={
        "connectionName": "connectionName",
        "ENTITY_NAME": "contact",
        "API_VERSION": "v3",
        "TRANSFER_MODE": "ASYNC"
    }
```

**HubSpot エンティティとフィールドの詳細**:

**HubSpot API v4**: 

[\[See the AWS documentation website for more details\]](http://docs.aws.amazon.com/ja_jp/glue/latest/dg/hubspot-reading-from-entities.html)

**注記**  
`Associations` オブジェクトの場合、2 つのオブジェクト間の関連付けを取得するには、AWS Glue ジョブの作成時に必須フィルターを介して「from Id」 (最初のオブジェクトの ID) を指定する必要があります。この場合、IDs から複数の の関連付けを取得するには、`where` 句に複数の IDsを指定する必要があります。例えば、問い合わせ ID 「1」と「151」の `Associations`を取得するには、フィルターを `where id=1 AND id=151` として指定する必要があります。

**HubSpot API v3**:

[\[See the AWS documentation website for more details\]](http://docs.aws.amazon.com/ja_jp/glue/latest/dg/hubspot-reading-from-entities.html)

次のエンティティについて、HubSpot はメタデータを動的に取得するエンドポイントを提供するため、オペレータのサポートは各エンティティのデータ型レベルでキャプチャされます。

**注記**  
`DML_STATUS` は、実行時にすべてのレコードに追加された仮想フィールドで、Sync モードでのそのステータス (CREATED/UPDATED) を決定します。`CONTAINS/LIKE` 演算子は Async モードではサポートされていません。

[\[See the AWS documentation website for more details\]](http://docs.aws.amazon.com/ja_jp/glue/latest/dg/hubspot-reading-from-entities.html)

**HubSpot API v2**:

[\[See the AWS documentation website for more details\]](http://docs.aws.amazon.com/ja_jp/glue/latest/dg/hubspot-reading-from-entities.html)

**HubSpot API v1**:

[\[See the AWS documentation website for more details\]](http://docs.aws.amazon.com/ja_jp/glue/latest/dg/hubspot-reading-from-entities.html)

## パーティショニングクエリ
<a name="hubspot-reading-partitioning-queries"></a>

Spark で同時実行を使用する場合は、追加の Spark オプション `PARTITION_FIELD`、`LOWER_BOUND`、`UPPER_BOUND`、および `NUM_PARTITIONS` を指定できます。これらのパラメータを使用すると、元のクエリは Spark タスクで同時に実行できるサブクエリの `NUM_PARTITIONS` の数に分割されます。
+ `PARTITION_FIELD`: クエリのパーティション化に使用するフィールドの名前。
+ `LOWER_BOUND`: 選択したパーティションフィールドの**包括的な**下限値。

  DateTime フィールドでは、ISO 形式の値を受け入れます。

  有効な値の例は次のとおりです:

  ```
  “2024-01-01T10:00:00.115Z" 
  ```
+ `UPPER_BOUND`: 選択したパーティションフィールドの**排他的**上限値。
+ `NUM_PARTITIONS`: パーティション数。

次の表に、エンティティパーティション分割フィールドのサポートの詳細を示します:

[\[See the AWS documentation website for more details\]](http://docs.aws.amazon.com/ja_jp/glue/latest/dg/hubspot-reading-from-entities.html)

例:

```
hubspot_read = glueContext.create_dynamic_frame.from_options(
    connection_type="hubspot",
    connection_options={
        "connectionName": "connectionName",
        "ENTITY_NAME": "company",
        "API_VERSION": "v3",
        "PARTITION_FIELD": "hs_object_id"
        "LOWER_BOUND": "50"
        "UPPER_BOUND": "16726619290"
        "NUM_PARTITIONS": "10"
    }
```

# HubSpot エンティティへの書き込み
<a name="hubspot-writing-to-entities"></a>

## 前提条件
<a name="hubspot-writing-prerequisites"></a>
+ 書き込み先の HubSpot オブジェクト。連絡先またはチケットなどのオブジェクト名が必要です。
+ HubSpot コネクタは、次の書き込みオペレーションをサポートしています。
  + INSERT
  + UPDATE
+ `UPDATE` 書き込みオペレーションを使用する場合は、`ID_FIELD_NAMES` オプションを指定してレコードの ID フィールドを指定する必要があります。

## Sync Destination でサポートされているエンティティ
<a name="hubspot-supported-entities"></a>


| エンティティ | API バージョン | Destination Connector としてサポートされます | 挿入可能 | 更新可能 | 
| --- | --- | --- | --- | --- | 
| Companies | v3 | あり | はい (単一、一括) | はい (単一、一括) | 
| 問い合わせ | v3 | あり | はい (単一、一括) | はい (単一、一括) | 
| Deals | v3 | あり | はい (単一、一括) | はい (単一、一括) | 
| 製品 | v3 | あり | はい (単一、一括) | はい (単一、一括) | 
| 呼び出し | v3 | あり | はい (単一、一括) | はい (単一、一括) | 
| 会議 | v3 | あり | はい (単一、一括) | はい (単一、一括) | 
| メモ | v3 | あり | はい (単一、一括) | はい (単一、一括) | 
| Emails | v3 | あり | はい (単一、一括) | はい (単一、一括) | 
| タスク | v3 | あり | はい (単一、一括) | はい (単一、一括) | 
| Postal Mails | v3 | あり | はい (単一、一括) | はい (単一、一括) | 
| Custom Objects | v3 | あり | はい (単一、一括) | はい (単一、一括) | 
| Tickets | v3 | あり | はい (単一、一括) | はい (単一、一括) | 
| 関連付け | v4 | あり | はい (単一、一括) | なし | 
| Associations Labels | v4 | あり | はい (単一、一括) | はい (単一、一括) | 

**例:**

**INSERT オペレーション**

```
hubspot_write = glueContext.write_dynamic_frame.from_options(
    frame=frameToWrite,
    connection_type="hubspot",
    connection_options={
        "connectionName": "connectionName",
        "ENTITY_NAME": "contact",
        "API_VERSION": "v3",
        "WRITE_OPERATION": "INSERT"
    }
)
```

**UPDATE オペレーション**

```
hubspot_write = glueContext.write_dynamic_frame.from_options(
    frame=frameToWrite,
    connection_type="hubspot",
    connection_options={
        "connectionName": "connectionName",
        "ENTITY_NAME": "deal",
        "API_VERSION": "v3",
        "WRITE_OPERATION": "UPDATE",
        "ID_FIELD_NAMES": "hs_object_id"
    }
)
```

# HubSpot 接続オプション
<a name="hubspot-connection-options"></a>

HubSpot の接続オプションは次のとおりです。
+ `ENTITY_NAME`(文字列) – (必須) 読み取りに使用されます。HubSpot のオブジェクトの名前。
+ `API_VERSION`(文字列) – (必須) 読み取りに使用されます。使用する HubSpot Rest API バージョン。例: v1、v2、v3、v4。
+ `SELECTED_FIELDS`(List<String>) – Default: empty(SELECT \$1). 読み込みに使用されます。オブジェクトに選択する列です。
+ `FILTER_PREDICATE`(文字列) – デフォルト: 空 読み込みに使用されます。Spark SQL 形式である必要があります。
+ `QUERY`(文字列) - デフォルト: 空 読み込みに使用されます。完全な Spark SQL クエリです。
+ `PARTITION_FIELD`(文字列) - 読み取りに使用されます。クエリをパーティション化するために使用するフィールドです。
+ `LOWER_BOUND`(文字列) - 読み取りに使用されます。選択したパーティションフィールドの包括的な下限値。
+ `UPPER_BOUND` (文字列) - 読み取りに使用されます。選択したパーティションフィールドの排他的上限値。
+ `NUM_PARTITIONS`(整数) – デフォルト: 1。読み込みに使用されます。読み取り用のパーティションの数です。
+ `TRANSFER_MODE`(文字列) - クエリを Async モードで実行するかどうかを示すために使用されます。
+ `WRITE_OPERATION`(文字列) - デフォルト: INSERT。書き込みに使用されます。値は INSERT または UPDATE である必要があります。
+ `ID_FIELD_NAMES`(文字列) - デフォルト: null。UPDATE は必須です。

# HubSpot コネクタの制限と注意事項
<a name="hubspot-connector-limitations"></a>

HubSpot コネクタの制限事項または注意事項は次のとおりです。
+ 検索エンドポイントは、特定のクエリに対して合計 10,000 件の結果に制限されます。10,000 を超えるレコードを持つパーティションは、400 エラーになります。
+ コネクタに関するその他の重要な制限については、「[制限事項](https://developers.hubspot.com/docs/api/crm/search#limitations)」を参照してください。
+ HubSpot では、最大 3 つのフィルタリングステートメントを使用できます。
+ 現在、HubSpot は標準 HubSpot オブジェクト (連絡先、会社、取引、チケットなど) とカスタムオブジェクト間の関連付けをサポートしています。
  + 無料アカウントの場合: 各オブジェクトペアの間に作成できる関連付けタイプは最大 10 個です (連絡先や会社など)。
  + スーパー管理者アカウントの場合: 各オブジェクトペアの間に作成できる関連付けタイプは最大 50 個です。
  + 詳細については、「[Associations v4](https://developers.hubspot.com/docs/api/crm/)」および「[Create and use association labels](https://knowledge.hubspot.com/object-settings/create-and-use-association-labels)」を参照してください。
+ 「引用」および「通信」オブジェクトは、現在コネクタでサポートされていないため、関連付けには存在しません。
+ Async の場合、SaaS は値を昇順でのみソートします。
+ `Ticket` エンティティの場合、SaaS は Async モードで `hs_object_id` フィールドを返しません。

# Instagram 広告への接続
<a name="connecting-to-data-instagram-ads"></a>

Instagram は写真共有アプリであり、ブランド、有名人、ソートリーダー、友人、家族などとつながることができます。これは、写真共有およびソーシャルネットワーキングサービスです。ユーザーは写真やショート動画を撮り、フォロワーと共有できます。Instagram 広告は、企業が料金を払うことで Instagram ユーザーに出すことができる投稿です。

**Topics**
+ [AWS Glue による Instagram 広告のサポート](instagram-ads-support.md)
+ [接続を作成および使用するための API オペレーションを含むポリシー](instagram-ads-configuring-iam-permissions.md)
+ [Instagram 広告の設定](instagram-ads-configuring.md)
+ [Instagram 広告接続の設定](instagram-ads-configuring-connections.md)
+ [Instagram 広告エンティティからの読み取り](instagram-ads-reading-from-entities.md)
+ [Instagram 広告接続オプション](instagram-ads-connection-options.md)
+ [Instagram 広告コネクタの制限と注意事項](instagram-ads-connector-limitations.md)

# AWS Glue による Instagram 広告のサポート
<a name="instagram-ads-support"></a>

AWS Glue は、次のように Instagram 広告をサポートします:

**ソースとしてサポートされていますか?**  
はい。AWS Glue ETL ジョブを使用して、Instagram 広告からデータをクエリできます。

**ターゲットとしてサポートされていますか?**  
いいえ。

**サポートされている Instagram 広告の API バージョン**  
以下の Instagram 広告 API バージョンがサポートされています:
+ v17.0
+ v18.0
+ v19.0
+ v20.0

# 接続を作成および使用するための API オペレーションを含むポリシー
<a name="instagram-ads-configuring-iam-permissions"></a>

次のサンプル ポリシーで、接続の作成と使用に必要な AWS IAM 権限について説明します。新しいロールを作成する場合は、以下を含むポリシーを作成します。

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

****  

```
{
  "Version":"2012-10-17",		 	 	 
  "Statement": [
    {
      "Effect": "Allow",
      "Action": [
        "glue:ListConnectionTypes",
        "glue:DescribeConnectionType",
        "glue:RefreshOAuth2Tokens",
        "glue:ListEntities",
        "glue:DescribeEntity"
      ],
      "Resource": "*"
    }
  ]
}
```

------

上記の方法を使用しない場合は、代わりに次のマネージド IAM ポリシーを使用します:
+ [AWSGlueServiceRole](https://console.aws.amazon.com/iam/home#policies/arn:aws:iam::aws:policy/service-role/AWSGlueServiceRole) – さまざまな AWS Glue プロセスを実行するために必要なリソースへのアクセス権をユーザーに代わって付与します。これらのリソースには AWS Glue 、Amazon S3、IAM、CloudWatch Logs、および Amazon EC2 が含まれます。このポリシーで指定されたリソースの命名規則に従った場合、AWS Glue プロセスは必要なアクセス権限を使用できます。このポリシーは、通常、クローラ、ジョブ、開発エンドポイントを定義するときに指定されたロールにアタッチされます。
+ [AWSGlueConsoleFullAccess](https://console.aws.amazon.com/iam/home#policies/arn:aws:iam::aws:policy/AWSGlueConsoleFullAccess) — ポリシーがアタッチされているアイデンティティが AWS マネージメントコンソールを使用するときは、AWS Glue リソースへのフルアクセスを許可します。このポリシーで指定されたリソースの命名規則に従った場合、ユーザーは完全なコンソール機能を使用できます。このポリシーは、通常 AWS Glue コンソールのユーザーにアタッチされています。

# Instagram 広告の設定
<a name="instagram-ads-configuring"></a>

AWS Glue を使用して Instagram 広告からデータを転送できるようにするには、次の要件を満たす必要があります:

## 最小要件
<a name="instagram-ads-configuring-min-requirements"></a>

以下に、最小要件を示します。
+ Instagram のスタンダードアカウントは Facebook 経由で間接的にアクセスできること。
+ アクセストークンを生成するには、ユーザー認証が必要です。
+ Instagram 広告の SDK コネクタは、*ユーザーアクセストークン OAuth *フローを実装すること。
+ Instagram 広告への API リクエストの認証には OAuth2.0 を使用すること。このウェブベースの認証は、2FA 上位セットである多要素認証 (MFA) アーキテクチャに該当します。
+ ユーザーは、エンドポイントにアクセスするためのアクセス許可を付与する必要があります。ユーザーのデータにアクセスするために、エンドポイント認可は[アクセス許可](https://developers.facebook.com/docs/permissions)と[機能](https://developers.facebook.com/docs/features-reference)を通じて処理されます。

## OAuth 2.0 認証情報の取得
<a name="instagram-ads-configuring-creating-instagram-ads-oauth2-credentials"></a>

インスタンスに対して認証された呼び出しを行えるように API 認証情報を取得するには、「[Graph API](https://developers.facebook.com/docs/graph-api/)」を参照してください。

# Instagram 広告接続の設定
<a name="instagram-ads-configuring-connections"></a>

Instagram 広告は、OAuth2 の AUTHORIZATION\$1CODE グラントタイプをサポートしています。
+ このグラントタイプは、ユーザーを認証するためにサードパーティーの認証サーバーにユーザーをリダイレクトすることから、three-legged　の OAuth と見なされます。AWS Glue コンソール経由で接続を作成するときに使用されます。
+ ユーザーは、Instagram 広告で独自の接続アプリケーションを作成し、AWS Glue コンソールを介して接続を作成するときに独自のクライアント ID とクライアントシークレットを提供することを選択できます。このシナリオでは、引き続き Instagram 広告にリダイレクトされてログインし、リソースへアクセスするために AWS Glue を承認します。
+ このグラントタイプは、アクセストークンになります。期限切れのシステムユーザートークンは、生成または更新された日付から 60 日間有効です。継続性を作成するには、開発者は 60 日以内にアクセストークンを更新する必要があります。そうしないと、アクセストークンは失われ、開発者は API アクセスを回復するために新しいトークンを取得する必要があります。「[Refresh Access Token](https://developers.facebook.com/docs/marketing-api/system-users/install-apps-and-generate-tokens/)」を参照してください。

Instagram 広告接続を設定するには:

1. AWS Glue Glue Studio で、以下の手順に従って **[データ接続]** の下に接続を作成します。

   1. **[接続タイプ]** を選択する際に、[Instagram 広告] を選択します。

   1. AWS Glue が次のアクションを引き受けて、その権限を持つことができる AWS IAM ロールを選択します。

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

****  

      ```
      {
        "Version":"2012-10-17",		 	 	 
        "Statement": [
          {
            "Effect": "Allow",
            "Action": [
              "secretsmanager:DescribeSecret",
              "secretsmanager:GetSecretValue",
              "secretsmanager:PutSecretValue",
              "ec2:CreateNetworkInterface",
              "ec2:DescribeNetworkInterfaces",
              "ec2:DeleteNetworkInterface"
            ],
            "Resource": "*"
          }
        ]
      }
      ```

------

   1. ユーザーマネージドクライアントアプリケーションクライアント ID を指定します。

   1. AWS Glue でこの接続に使用する `secretName` を選択して、トークンを配置します。選択したシークレットには、接続されたアプリのクライアントシークレットである値を持つ `USER_MANAGED_CLIENT_APPLICATION_CLIENT_SECRET` キーが必要です。

   1. ネットワークを使用する場合は、ネットワークオプションを選択します。

1. AWS Glue ジョブに関連付けられている IAM ロールに `secretName` を読み取るアクセス許可を付与します。

# Instagram 広告エンティティからの読み取り
<a name="instagram-ads-reading-from-entities"></a>

**前提条件**

読み取り元の Instagram 広告オブジェクト。オブジェクト名が必要になります。次の表は、サポートされているエンティティを示しています。

**ソースに対応するエンティティ**:


| エンティティ | フィルタリング可能 | 制限をサポートする | Order By をサポートする | Select \$1 をサポートする | パーティション分割をサポートする | 
| --- | --- | --- | --- | --- | --- | 
| キャンペーン | はい | あり | なし | あり | あり | 
| Ad Set | はい | あり | なし | あり | あり | 
| Ads | はい | あり | なし | あり | あり | 
| Ad Creative | なし | あり | なし | あり | なし | 
| Insights - Account | なし | あり | なし | あり | なし | 
| Ad Image | はい | あり | なし | あり | なし | 
| Insights - Ad | はい | あり | なし | あり | あり | 
| Insights - AdSet | はい | あり | なし | あり | あり | 
| Insights - Campaign | はい | あり | なし | あり | あり | 

**例**:

```
instagramAds_read = glueContext.create_dynamic_frame.from_options(
    connection_type="instagramads",
    connection_options={
        "connectionName": "connectionName",
        "ENTITY_NAME": "entityName",
        "API_VERSION": "v20.0"
    }
```

## Instagram 広告エンティティとフィールドの詳細
<a name="instagram-ads-reading-entity-and-field-details"></a>

エンティティとフィールドの詳細については、以下を参照してください:
+ [Campaign](https://developers.facebook.com/docs/marketing-api/reference/ad-campaign-group)
+ [Ad Set](https://developers.facebook.com/docs/marketing-api/reference/ad-campaign)
+ [Ad](https://developers.facebook.com/docs/marketing-api/reference/adgroup)
+ [Ad Creative](https://developers.facebook.com/docs/marketing-api/reference/ad-creative)
+ [Ad Account Insight](https://developers.facebook.com/docs/marketing-api/reference/ad-account/insights)
+ [Ad Image](https://developers.facebook.com/docs/marketing-api/reference/ad-image)
+ [Ad Insights](https://developers.facebook.com/docs/marketing-api/reference/adgroup/insights/)
+ [AdSets Insights](https://developers.facebook.com/docs/marketing-api/reference/ad-campaign/insights)
+ [Campaigns Insights](https://developers.facebook.com/docs/marketing-api/reference/ad-campaign-group/insights)

詳細については、「[Marketing API](https://developers.facebook.com/docs/marketing-api/reference/v21.0)」を参照してください。

**注記**  
構造体データ型とリストデータ型は、コネクタの応答で文字列データ型に変換されます。

## パーティショニングクエリ
<a name="instagram-ads-reading-partitioning-queries"></a>

Spark で同時実行を使用する場合は、追加の Spark オプション `PARTITION_FIELD`、`LOWER_BOUND`、`UPPER_BOUND`、および `NUM_PARTITIONS` を指定できます。これらのパラメータを使用すると、元のクエリは Spark タスクで同時に実行できるサブクエリの `NUM_PARTITIONS` の数に分割されます。
+ `PARTITION_FIELD`: クエリのパーティション化に使用するフィールドの名前。
+ `LOWER_BOUND`: 選択したパーティションフィールドの**包括的な**下限値。

  DateTime フィールドでは、Spark SQL クエリで使用される Spark タイムスタンプ形式を受け入れます。

  有効な値の例:

  ```
  "2022-01-01T00:00:00.000Z"
  ```
+ `UPPER_BOUND`: 選択したパーティションフィールドの**排他的**上限値。

  有効な値の例:

  ```
  "2024-01-02T00:00:00.000Z"
  ```
+ `NUM_PARTITIONS`: パーティション数。

例:

```
instagramADs_read = glueContext.create_dynamic_frame.from_options(
    connection_type="instagramads",
    connection_options={
        "connectionName": "connectionName",
        "ENTITY_NAME": "entityName",
        "API_VERSION": "v20.0",
        "PARTITION_FIELD": "created_time"
        "LOWER_BOUND": "2022-01-01T00:00:00.000Z"
        "UPPER_BOUND": "2024-01-02T00:00:00.000Z"
        "NUM_PARTITIONS": "10"
    }
```

# Instagram 広告接続オプション
<a name="instagram-ads-connection-options"></a>

Instagram 広告の接続オプションは次のとおりです:
+ `ENTITY_NAME`(文字列) – (必須) 読み取りに使用されます。Instagram 広告のオブジェクトの名前。
+ `API_VERSION`(文字列) – (必須) 読み取りに使用されます。使用する Instagram 広告グラフ API バージョン。例: v21。
+ `SELECTED_FIELDS`(List<String>) – Default: empty(SELECT \$1). 読み込みに使用されます。オブジェクトに選択する列です。
+ `FILTER_PREDICATE`(文字列) – デフォルト: 空 読み込みに使用されます。Spark SQL 形式である必要があります。
+ `QUERY`(文字列) - デフォルト: 空 読み込みに使用されます。完全な Spark SQL クエリです。
+ `PARTITION_FIELD` (文字列) – 読み取りに使用されます。クエリをパーティション化するために使用するフィールドです。
+ `LOWER_BOUND` (文字列)– 読み取りに使用されます。選択したパーティションフィールドの包括的な下限値。
+ `UPPER_BOUND` (文字列) – 読み取りに使用されます。選択したパーティションフィールドの排他的上限値。
+ `NUM_PARTITIONS`(整数) – デフォルト: 1。読み込みに使用されます。読み取り用のパーティションの数です。

# Instagram 広告コネクタの制限と注意事項
<a name="instagram-ads-connector-limitations"></a>

以下に、Instagram 広告コネクタの制限事項または注意事項を示します:
+ アプリの呼び出し回数は、1 時間のウィンドウ 200 中にユーザーが実行できる呼び出しの回数に、ユーザー数を掛けたものです。レート制限の詳細については、「[Rate Limits](https://developers.facebook.com/docs/graph-api/overview/rate-limiting/)」と「[Business Use Case Rate Limits](https://developers.facebook.com/docs/graph-api/overview/rate-limiting/#buc-rate-limits)」を参照してください。

# AWS Glue Studio での Intercom への接続
<a name="connecting-to-data-intercom"></a>

 Intercom は、エンゲージメント OS であり、製品内、その瞬間、およびその条件においてビジネスと顧客間のオープンチャネンルとして機能します。カスタマージャーニー全体のあらゆるエンゲージメントを最大限に活用できるよう継続的な対話を作成します。

**Topics**
+ [AWS Glue による Intercom のサポート](intercom-support.md)
+ [接続を作成および使用するための API オペレーションを含むポリシー](intercom-configuring-iam-permissions.md)
+ [Intercom の設定](intercom-configuring.md)
+ [Intercom 接続の設定](intercom-configuring-connections.md)
+ [Intercom エンティティからの読み取り](intercom-reading-from-entities.md)
+ [Intercom 接続オプション](intercom-connection-options.md)
+ [制限](intercom-limitations.md)
+ [新しい Intercom アカウントの作成とクライアントアプリの設定](intercom-new-account-creation.md)

# AWS Glue による Intercom のサポート
<a name="intercom-support"></a>

AWS Glue は、次のように Intercom をサポートします:

**ソースとしてサポートされていますか?**  
はい。AWS Glue ETL ジョブを使用して、Intercom からデータをクエリできます。

**ターゲットとしてサポートされていますか?**  
いいえ。

**サポートされている Intercom API のバージョン**  
 v2.5。バージョン固有ごとのエンティティサポートについては、「[Intercom エンティティからの読み取り](intercom-reading-from-entities.md)」を参照してください。

# 接続を作成および使用するための API オペレーションを含むポリシー
<a name="intercom-configuring-iam-permissions"></a>

 次のサンプル ポリシーで、接続の作成と使用に必要な IAM 権限について説明します。新しいロールを作成する場合は、以下を含むポリシーを作成します。

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

****  

```
{
  "Version":"2012-10-17",		 	 	 
  "Statement": [
    {
      "Effect": "Allow",
      "Action": [
        "glue:ListConnectionTypes",
        "glue:DescribeConnectionType",
        "glue:RefreshOAuth2Tokens",
        "glue:ListEntities",
        "glue:DescribeEntity"
      ],
      "Resource": "*"
    }
  ]
}
```

------

また、次のマネージド IAM ポリシーを使用して、アクセスを許可できます。
+  [ AWSGlueServiceRole ](https://console.aws.amazon.com/iam/home#policies/arn:aws:iam::aws:policy/service-role/AWSGlueServiceRole) – さまざまな AWS Glue プロセスを実行するために必要なリソースへのアクセス権をユーザーに代わって付与します。これらのリソースには、AWS Glue、Amazon S3、IAM、Amazon CloudWatch Logs および Amazon EC2 が含まれます。このポリシーで指定されたリソースの命名規則に従った場合、AWS Glue プロセスは必要なアクセス許可を使用できます。このポリシーは、通常、クローラー、ジョブ、開発エンドポイントを定義するときに指定されたロールにアタッチされます。
+  [ AWSGlueConsoleFullAccess ](https://console.aws.amazon.com/iam/home#policies/arn:aws:iam::aws:policy/AWSGlueConsoleFullAccess) — ポリシーがアタッチされているアイデンティティが AWS マネージメントコンソールを使用するときは、AWS Glue リソースへのフルアクセスを許可します。このポリシーで指定されたリソースの命名規則に従った場合、ユーザーは完全なコンソール機能を使用できます。このポリシーは、通常 AWS Glue コンソールのユーザーにアタッチされています。

# Intercom の設定
<a name="intercom-configuring"></a>

AWS Glue を使用して Intercom から転送できるようにするには、次の要件を満たす必要があります:

## 最小要件
<a name="intercom-configuring-min-requirements"></a>
+  Intercom アカウントを持っていること。詳細については、「[新しい Intercom アカウントの作成とクライアントアプリの設定](intercom-new-account-creation.md)」を参照してください。
+  Intercom アカウントで API アクセスが有効になっていること。
+  Intercom デベロッパーアカウントの下には、AWS Glue がアカウントに対して認証済みの呼び出しを行うときにデータに安全にアクセスするために使用するクライアント認証情報を提供するアプリが必要です。詳細については、「Intercom- New Account and Client App Creation Steps」を参照してください。

 これらの要件を満たすと、Intercom アカウントに AWS Glue を接続する準備が整います。

# Intercom 接続の設定
<a name="intercom-configuring-connections"></a>

 Intercom は OAuth 2 の `AUTHORIZATION_CODE` グラントタイプをサポートしています。

 このグラントタイプは、ユーザーを認証するためにサードパーティーの認証サーバーにユーザーをリダイレクトすることから、「three-legged」の OAuth と見なされます。AWS Glue コンソール経由で接続を作成するときに使用されます。AWS Glue コンソールでは、ユーザーが Google 広告にリダイレクトされます。ここではユーザーがログインし、Intercom インスタンスにアクセスするためのリクエストされた権限を AWS Glue に許可する必要があります。

 AWS Glue コンソールを介して接続を作成するときは、ユーザーは独自のクライアント ID とクライアントシークレットを指定する必要があります。このシナリオでは、引き続き Intercom にリダイレクトされてログインし、リソースへアクセスするために AWS Glue を承認します。

 このグラントタイプは、更新トークンとアクセストークンになります。アクセストークンの有効期間は短く、更新トークンを使用してユーザーとやり取りすることなく自動的に更新される場合があります。

 OAuth 認証コードフローでの接続されたアプリケーションの作成の詳細については、「[Ads API](https://developers.intercom.com/building-apps/docs/setting-up-oauth)」を参照してください。

Intercom 接続を設定するには:

1.  AWS Secrets Manager で、次の詳細を含むシークレットを作成します。AWS Glue で接続ごとにシークレットを作成する必要があります。

   1.  カスタマーマネージド接続アプリケーションの場合 – シークレットには、接続されたアプリケーションアクセストークン、更新トークン、client\$1id、および client\$1secret が含まれている必要があります。

1. AWS Glue Glue Studio で、以下の手順に従って **[データ接続]** の下に接続を作成します。

   1. **[接続タイプ]** を選択する際に、[Intercom] を選択します。

   1. Intercom 環境を指定します。

   1.  AWS Glue が次のアクションを担い、その権限を持つことができる IAM ロールを選択します。

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

****  

      ```
      {
        "Version":"2012-10-17",		 	 	 
        "Statement": [
          {
            "Effect": "Allow",
            "Action": [
              "secretsmanager:DescribeSecret",
              "secretsmanager:GetSecretValue",
              "secretsmanager:PutSecretValue",
              "ec2:CreateNetworkInterface",
              "ec2:DescribeNetworkInterfaces",
              "ec2:DeleteNetworkInterface"
            ],
            "Resource": "*"
          }
        ]
      }
      ```

------

   1.  AWS Glue でこの接続に使用する `secretName` を選択して、トークンを配置します。

   1.  ネットワークを使用する場合は、ネットワークオプションを選択します。

1.  AWS Glue ジョブに関連付けられている IAM ロールに `secretName` を読み取るアクセス許可を付与します。

# Intercom エンティティからの読み取り
<a name="intercom-reading-from-entities"></a>

 **前提条件** 
+  読み取り元の Intercom オブジェクト。使用可能なエンティティを確認するには、以下のサポートされているエンティティの表を参照してください。

 **サポートされているエンティティ** 


| エンティティ | API\$1Version | フィルタリング可能 | 制限をサポートする | Order By をサポートする | Select \$1 をサポートする | パーティション分割をサポートする | 
| --- | --- | --- | --- | --- | --- | --- | 
| 管理者 | v2.5 | なし | なし | なし | あり | なし | 
| Companies | v2.5 | なし | あり | なし | あり | なし | 
| Conversations | v2.5 | はい | あり | あり | あり | あり | 
| Data Attributes | v2.5 | なし | なし | なし | あり | なし | 
| 問い合わせ | v2.5 | はい | あり | あり | あり | あり | 
| セグメント | v2.5 | なし | なし | なし | あり | なし | 
| [タグ] | v2.5 | なし | なし | なし | あり | なし | 
| チーム | v2.5 | なし | なし | なし | あり | なし | 

 **例** 

```
Intercom_read = glueContext.create_dynamic_frame.from_options(
    connection_type="Intercom",
    connection_options={
        "connectionName": "connectionName",
        "ENTITY_NAME": "company",
        "API_VERSION": "V2.5"
    }
)
```

 **Intercom エンティティとフィールドの詳細** 


| エンティティ | フィールド | データタイプ | サポートされている演算子 | 
| --- | --- | --- | --- | 
| 管理者 | type | 文字列 | NA | 
| 管理者 | id | 文字列 | NA | 
| 管理者 | avatar | Struct | NA | 
| 管理者 | 名前 | 文字列 | NA | 
| 管理者 | email | 文字列 | NA | 
| 管理者 | away\$1mode\$1enabled | ブール値 | NA | 
| 管理者 | away\$1mode\$1reassign | ブール値 | NA | 
| 管理者 | has\$1inbox\$1seat | ブール値 | NA | 
| 管理者 | teams\$1ids | リスト | NA | 
| 管理者 | job\$1title | 文字列 | NA | 
| Companies | type | 文字列 | NA | 
| Companies | id | 文字列 | NA | 
| Companies | app\$1id | 文字列 | NA | 
| Companies | created\$1at | DateTime | NA | 
| Companies | remote\$1created\$1at | DateTime | NA | 
| Companies | updated\$1at | DateTime | NA | 
| Companies | last\$1request\$1at | DateTime | NA | 
| Companies | 計画 | Struct | NA | 
| Companies | company\$1id | 文字列 | NA | 
| Companies | 名前 | 文字列 | NA | 
| Companies | custom\$1attributes | Struct | NA | 
| Companies | session\$1count | 整数 | NA | 
| Companies | monthly\$1spend | 整数 | NA | 
| Companies | user\$1count | 整数 | NA | 
| Companies | industry | 文字列 | NA | 
| Companies | size | 整数 | NA | 
| Companies | website | 文字列 | NA | 
| Companies | tags | Struct | NA | 
| Companies | segments | Struct | NA | 
| 問い合わせ | id | 文字列 | EQUAL\$1TO.NOT\$1EQUAL\$1TO | 
| 問い合わせ | type | 文字列 | NA | 
| 問い合わせ | workspace\$1id | 文字列 | NA | 
| 問い合わせ | external\$1id | 文字列 | CONTAINS、EQUAL\$1TO、NOT\$1EQUAL\$1TO | 
| 問い合わせ | ロール | 文字列 | EQUAL\$1TO.NOT\$1EQUAL\$1TO | 
| 問い合わせ | email | 文字列 | CONTAINS、EQUAL\$1TO、NOT\$1EQUAL\$1TO | 
| 問い合わせ | phone | 文字列 | CONTAINS、EQUAL\$1TO、NOT\$1EQUAL\$1TO | 
| 問い合わせ | 名前 | 文字列 | CONTAINS、EQUAL\$1TO、NOT\$1EQUAL\$1TO | 
| 問い合わせ | avatar | 文字列 | NA | 
| 問い合わせ | owner\$1id | 整数 | EQUAL\$1TO、NOT\$1EQUAL\$1TO、GREATER\$1THAN、LESS\$1THAN | 
| 問い合わせ | social\$1profiles | Struct | NA | 
| 問い合わせ | has\$1hard\$1bounced | ブール値 | EQUAL\$1TO | 
| 問い合わせ | marked\$1email\$1as\$1spam | ブール値 | EQUAL\$1TO | 
| 問い合わせ | unsubscribed\$1from\$1emails | ブール値 | EQUAL\$1TO | 
| 問い合わせ | created\$1at | DateTime | EQUAL\$1TO、GREATER\$1THAN、LESS\$1THAN | 
| 問い合わせ | updated\$1at | DateTime | EQUAL\$1TO、GREATER\$1THAN、LESS\$1THAN | 
| 問い合わせ | signed\$1up\$1at | DateTime | EQUAL\$1TO、GREATER\$1THAN、LESS\$1THAN | 
| 問い合わせ | last\$1seen\$1at | DateTime | EQUAL\$1TO、GREATER\$1THAN、LESS\$1THAN | 
| 問い合わせ | last\$1replied\$1at | DateTime | EQUAL\$1TO、GREATER\$1THAN、LESS\$1THAN | 
| 問い合わせ | last\$1contacted\$1at | DateTime | EQUAL\$1TO、GREATER\$1THAN、LESS\$1THAN | 
| 問い合わせ | last\$1email\$1opened\$1at | DateTime | EQUAL\$1TO、GREATER\$1THAN、LESS\$1THAN | 
| 問い合わせ | last\$1email\$1clicked\$1at | DateTime | EQUAL\$1TO、GREATER\$1THAN、LESS\$1THAN | 
| 問い合わせ | language\$1override | 文字列 | CONTAINS、EQUAL\$1TO、NOT\$1EQUAL\$1TO | 
| 問い合わせ | ブラウザ | 文字列 | CONTAINS、EQUAL\$1TO、NOT\$1EQUAL\$1TO | 
| 問い合わせ | browser\$1version | 文字列 | CONTAINS、EQUAL\$1TO、NOT\$1EQUAL\$1TO | 
| 問い合わせ | browser\$1language | 文字列 | CONTAINS、EQUAL\$1TO、NOT\$1EQUAL\$1TO | 
| 問い合わせ | os | 文字列 | CONTAINS、EQUAL\$1TO、NOT\$1EQUAL\$1TO | 
| 問い合わせ | location | Struct | NA | 
| 問い合わせ | location\$1country | 文字列 | CONTAINS、EQUAL\$1TO、NOT\$1EQUAL\$1TO | 
| 問い合わせ | location\$1region | 文字列 | CONTAINS、EQUAL\$1TO、NOT\$1EQUAL\$1TO | 
| 問い合わせ | location\$1city | 文字列 | CONTAINS、EQUAL\$1TO、NOT\$1EQUAL\$1TO | 
| 問い合わせ | Android\$1app\$1name | 文字列 | CONTAINS、EQUAL\$1TO、NOT\$1EQUAL\$1TO | 
| 問い合わせ | Android\$1app\$1version | 文字列 | NA | 
| 問い合わせ | android\$1device | 文字列 | NA | 
| 問い合わせ | android\$1os\$1version | 文字列 | NA | 
| 問い合わせ | android\$1sdk\$1version | 文字列 | CONTAINS、EQUAL\$1TO、NOT\$1EQUAL\$1TO | 
| 問い合わせ | android\$1last\$1seen\$1at | 日付 | NA | 
| 問い合わせ | ios\$1app\$1name | 文字列 | CONTAINS、EQUAL\$1TO、NOT\$1EQUAL\$1TO | 
| 問い合わせ | ios\$1app\$1version | 文字列 | NA | 
| 問い合わせ | ios\$1device | 文字列 | NA | 
| 問い合わせ | ios\$1os\$1version | 文字列 | CONTAINS、EQUAL\$1TO、NOT\$1EQUAL\$1TO | 
| 問い合わせ | ios\$1sdk\$1version | 文字列 | CONTAINS、EQUAL\$1TO、NOT\$1EQUAL\$1TO | 
| 問い合わせ | ios\$1last\$1seen\$1at | DateTime | NA | 
| 問い合わせ | custom\$1attributes | Struct | NA | 
| 問い合わせ | tags | Struct | NA | 
| 問い合わせ | 注意事項 | Struct | NA | 
| 問い合わせ | companies | Struct | NA | 
| 問い合わせ | unsubscribed\$1from\$1sms | ブール値 | NA | 
| 問い合わせ | sms\$1consent | ブール値 | NA | 
| 問い合わせ | opted\$1out\$1subscription\$1types | Struct | NA | 
| 問い合わせ | referrer | 文字列 | NA | 
| 問い合わせ | utm\$1campaign | 文字列 | NA | 
| 問い合わせ | utm\$1content | 文字列 | NA | 
| 問い合わせ | utm\$1medium | 文字列 | NA | 
| 問い合わせ | utm\$1source | 文字列 | NA | 
| 問い合わせ | utm\$1term | 文字列 | NA | 
| Conversations | type | 文字列 | NA | 
| Conversations | id | 整数 | EQUAL\$1TO、NOT\$1EQUAL\$1TO、GREATER\$1THAN、LESS\$1THAN | 
| Conversations | created\$1at | DateTime | EQUAL\$1TO、NOT\$1EQUAL\$1TO、GREATER\$1THAN、LESS\$1THAN | 
| Conversations | updated\$1at | DateTime | EQUAL\$1TO、NOT\$1EQUAL\$1TO、GREATER\$1THAN、LESS\$1THAN | 
| Conversations | ソース | Struct | NA | 
| Conversations | source\$1id | 文字列 | EQUAL\$1TO、NOT\$1EQUAL\$1TO | 
| Conversations | source\$1type | 文字列 | EQUAL\$1TO、NOT\$1EQUAL\$1TO、 | 
| Conversations | source\$1delivered\$1as | 文字列 | EQUAL\$1TO、NOT\$1EQUAL\$1TO、 | 
| Conversations | source\$1subject | 文字列 | CONTAINS、EQUAL\$1TO、NOT\$1EQUAL\$1TO | 
| Conversations | source\$1body | 文字列 | CONTAINS、EQUAL\$1TO、NOT\$1EQUAL\$1TO | 
| Conversations | source\$1author\$1id | 文字列 | CONTAINS、EQUAL\$1TO、NOT\$1EQUAL\$1TO | 
| Conversations | source\$1author\$1type | 文字列 | CONTAINS、EQUAL\$1TO、NOT\$1EQUAL\$1TO | 
| Conversations | source\$1author\$1name | 文字列 | CONTAINS、EQUAL\$1TO、NOT\$1EQUAL\$1TO | 
| Conversations | source\$1author\$1email | 文字列 | CONTAINS、EQUAL\$1TO、NOT\$1EQUAL\$1TO | 
| Conversations | source\$1url | 文字列 | CONTAINS、EQUAL\$1TO、NOT\$1EQUAL\$1TO | 
| Conversations | contacts | Struct | NA | 
| Conversations | teammates | Struct | NA | 
| Conversations | title | 文字列 | NA | 
| Conversations | admin\$1assignee\$1id | 整数 | EQUAL\$1TO、NOT\$1EQUAL\$1TO、GREATER\$1THAN、LESS\$1THAN | 
| Conversations | team\$1assignee\$1id | 整数 | CONTAINS、EQUAL\$1TO、NOT\$1EQUAL\$1TO | 
| Conversations | custom\$1attributes | Struct | NA | 
| Conversations | open | ブール値 | EQUAL\$1TO | 
| Conversations | state | 文字列 | CONTAINS、EQUAL\$1TO、NOT\$1EQUAL\$1TO | 
| Conversations | read | ブール値 | EQUAL\$1TO | 
| Conversations | waiting\$1since | DateTime | EQUAL\$1TO、NOT\$1EQUAL\$1TO、GREATER\$1THAN、LESS\$1THAN | 
| Conversations | snoozed\$1until | DateTime | EQUAL\$1TO、NOT\$1EQUAL\$1TO、GREATER\$1THAN、LESS\$1THAN | 
| Conversations | tags | Struct | NA | 
| Conversations | first\$1contact\$1reply | Struct | NA | 
| Conversations | priority | 文字列 | EQUAL\$1TO、NOT\$1EQUAL\$1TO | 
| Conversations | トピック | Struct | NA | 
| Conversations | sla\$1applied | Struct | NA | 
| Conversations | conversation\$1rating | Struct | NA | 
| Conversations | conversation\$1rating\$1requested\$1at | DateTime | EQUAL\$1TO、NOT\$1EQUAL\$1TO、GREATER\$1THAN、LESS\$1THAN | 
| Conversations | conversation\$1rating\$1replied\$1at | DateTime | EQUAL\$1TO、NOT\$1EQUAL\$1TO、GREATER\$1THAN、LESS\$1THAN | 
| Conversations | conversation\$1rating\$1score | 整数 | EQUAL\$1TO、NOT\$1EQUAL\$1TO、GREATER\$1THAN、LESS\$1THAN | 
| Conversations | conversation\$1rating\$1remark | 文字列 | CONTAINS、EQUAL\$1TO、NOT\$1EQUAL\$1TO | 
| Conversations | conversation\$1rating\$1contact\$1id | 文字列 | CONTAINS、EQUAL\$1TO、NOT\$1EQUAL\$1TO | 
| Conversations | conversation\$1rating\$1admin\$1id | 文字列 | CONTAINS、EQUAL\$1TO、NOT\$1EQUAL\$1TO | 
| Conversations | 統計 | Struct | NA | 
| Conversations | statistics\$1time\$1to\$1assignment | 整数 | EQUAL\$1TO、NOT\$1EQUAL\$1TO、GREATER\$1THAN、LESS\$1THAN | 
| Conversations | statistics\$1time\$1to\$1admin\$1reply | 整数 | EQUAL\$1TO、NOT\$1EQUAL\$1TO、GREATER\$1THAN、LESS\$1THAN | 
| Conversations | statistics\$1time\$1to\$1first\$1close | 整数 | EQUAL\$1TO、NOT\$1EQUAL\$1TO、GREATER\$1THAN、LESS\$1THAN | 
| Conversations | statistics\$1time\$1to\$1last\$1close | 整数 | EQUAL\$1TO、NOT\$1EQUAL\$1TO、GREATER\$1THAN、LESS\$1THAN | 
| Conversations | statistics\$1median\$1time\$1to\$1reply | 整数 | EQUAL\$1TO、NOT\$1EQUAL\$1TO、GREATER\$1THAN、LESS\$1THAN | 
| Conversations | statistics\$1first\$1contact\$1reply\$1at | DateTime | EQUAL\$1TO、NOT\$1EQUAL\$1TO、GREATER\$1THAN、LESS\$1THAN | 
| Conversations | statistics\$1first\$1assignment\$1at | DateTime | EQUAL\$1TO、NOT\$1EQUAL\$1TO、GREATER\$1THAN、LESS\$1THAN | 
| Conversations | statistics\$1first\$1admin\$1reply\$1at | DateTime | EQUAL\$1TO、NOT\$1EQUAL\$1TO、GREATER\$1THAN、LESS\$1THAN | 
| Conversations | statistics\$1first\$1close\$1at | DateTime | EQUAL\$1TO、NOT\$1EQUAL\$1TO、GREATER\$1THAN、LESS\$1THAN | 
| Conversations | statistics\$1last\$1assignment\$1at | DateTime | EQUAL\$1TO、NOT\$1EQUAL\$1TO、GREATER\$1THAN、LESS\$1THAN | 
| Conversations | statistics\$1last\$1assignment\$1admin\$1reply\$1at | DateTime | EQUAL\$1TO、NOT\$1EQUAL\$1TO、GREATER\$1THAN、LESS\$1THAN | 
| Conversations | statistics\$1last\$1contact\$1reply\$1at | DateTime | EQUAL\$1TO、NOT\$1EQUAL\$1TO、GREATER\$1THAN、LESS\$1THAN | 
| Conversations | statistics\$1last\$1admin\$1reply\$1at | DateTime | EQUAL\$1TO、NOT\$1EQUAL\$1TO、GREATER\$1THAN、LESS\$1THAN | 
| Conversations | statistics\$1last\$1close\$1at | DateTime | EQUAL\$1TO、NOT\$1EQUAL\$1TO、GREATER\$1THAN、LESS\$1THAN | 
| Conversations | statistics\$1last\$1closed\$1by\$1id | 文字列 | CONTAINS、EQUAL\$1TO、NOT\$1EQUAL\$1TO | 
| Conversations | statistics\$1count\$1reopens | 整数 | EQUAL\$1TO、NOT\$1EQUAL\$1TO、GREATER\$1THAN、LESS\$1THAN | 
| Conversations | statistics\$1count\$1assignments | 整数 | EQUAL\$1TO、NOT\$1EQUAL\$1TO、GREATER\$1THAN、LESS\$1THAN | 
| Conversations | statistics\$1count\$1conversation\$1parts | 整数 | EQUAL\$1TO、NOT\$1EQUAL\$1TO、GREATER\$1THAN、LESS\$1THAN | 
| Conversations | conversation\$1parts | リスト | NA | 
| Data Attributes | id | 整数 | NA | 
| Data Attributes | type | 文字列 | NA | 
| Data Attributes | モデル | 文字列 | NA | 
| Data Attributes | 名前 | 文字列 | NA | 
| Data Attributes | full\$1name | 文字列 | NA | 
| Data Attributes | ラベル | 文字列 | NA | 
| Data Attributes | description | 文字列 | NA | 
| Data Attributes | data\$1type | 文字列 | NA | 
| Data Attributes | options | リスト | NA | 
| Data Attributes | api\$1writable | ブール値 | NA | 
| Data Attributes | ui\$1writable | ブール値 | NA | 
| Data Attributes | カスタム | ブール値 | NA | 
| Data Attributes | archived | ブール値 | NA | 
| Data Attributes | created\$1at | ブール値 | NA | 
| Data Attributes | updated\$1at | DateTime | NA | 
| Data Attributes | admin\$1id | 文字列 | NA | 
| セグメント | type | 文字列 | NA | 
| セグメント | id | 文字列 | NA | 
| セグメント | 名前 | 文字列 | NA | 
| セグメント | created\$1at | DateTime | NA | 
| セグメント | updated\$1at | DateTime | NA | 
| セグメント | person\$1type | 文字列 | NA | 
| セグメント | count | 整数 | NA | 
| [タグ] | type | 文字列 | NA | 
| [タグ] | id | 文字列 | NA | 
| [タグ] | 名前 | 文字列 | NA | 
| チーム | type | 文字列 | NA | 
| チーム | id | 文字列 | NA | 
| チーム | 名前 | 文字列 | NA | 
| チーム | admin\$1ids | リスト | NA | 

 **パーティショニングクエリ** 

 Spark で同時実行を使用する場合は、追加の Spark オプション `PARTITION_FIELD`、`LOWER_BOUND`、`UPPER_BOUND`、および `NUM_PARTITIONS` を指定できます。これらのパラメータを使用すると、元のクエリは Spark タスクで同時に実行できるサブクエリの `NUM_PARTITIONS` の数に分割されます。
+  `PARTITION_FIELD`: クエリのパーティション化に使用するフィールドの名前。
+  `LOWER_BOUND`: 選択したパーティションフィールドの包括的な下限値。

   日付については、Spark SQL クエリで使用される Spark の日付形式を受け入れます。有効な値の例: `"2024-02-06"`。
+  `UPPER_BOUND`: 選択したパーティションフィールドの排他的上限値。
+  `NUM_PARTITIONS`: パーティション数。

 エンティティごとのパーティション分割フィールドのサポートの詳細は、次の表にまとめられています。


| エンティティ名 | Partitioning Field | データタイプ | 
| --- | --- | --- | 
| 問い合わせ | created\$1at、update\$1at、last\$1seen\$1at | DateTime | 
| Conversations | id | 整数 | 
| Conversations | created\$1at、update\$1at | DateTime | 

 **例** 

```
Intercom_read = glueContext.create_dynamic_frame.from_options(
    connection_type="Intercom",
    connection_options={
        "connectionName": "connectionName",
        "ENTITY_NAME": "conversation",
        "API_VERSION": "V2.5",
        "PARTITION_FIELD": "created_at"
        "LOWER_BOUND": "2022-07-13T07:55:27.065Z"
        "UPPER_BOUND": "2022-08-12T07:55:27.065Z"
        "NUM_PARTITIONS": "2"
    }
)
```

# Intercom 接続オプション
<a name="intercom-connection-options"></a>

Intercom の接続オプションは次のとおりです:
+  `ENTITY_NAME` (文字列) – (必須) 読み取りに使用されます。Intercom 内のオブジェクトの名前。
+  `API_VERSION` (文字列) – (必須) 読み取りに使用されます。使用する Intercom Rest API のバージョン。例: v2.5。
+  `SELECTED_FIELDS`(List<String>) – Default: empty(SELECT \$1). 読み込みに使用されます。オブジェクトに選択する列です。
+  `FILTER_PREDICATE`(文字列) – デフォルト: 空 読み込みに使用されます。Spark SQL 形式である必要があります。
+  `QUERY`(文字列) - デフォルト: 空 読み込みに使用されます。完全な Spark SQL クエリです。
+  `PARTITION_FIELD`(文字列) - 読み取りに使用されます。クエリをパーティション化するために使用するフィールドです。
+  `LOWER_BOUND`(文字列) - 読み取りに使用されます。選択したパーティションフィールドの包括的な下限値。
+  `UPPER_BOUND` (文字列) - 読み取りに使用されます。選択したパーティションフィールドの排他的上限値。
+  `NUM_PARTITIONS`(整数) – デフォルト: 1。読み込みに使用されます。読み取り用のパーティションの数です。
+  `INSTANCE_URL` (文字列) – ユーザーがオペレーションを実行するインスタンスの URL。例: [https://api.intercom.io](https://api.intercom.io)。

# 制限
<a name="intercom-limitations"></a>

Intercom コネクタの制限は次のとおりです:
+  会社エンティティを使用する場合、返すことができる会社は 10,000 社に制限されています。詳細については、「[List all companies API](https://developers.intercom.com/docs/references/2.5/rest-api/companies/list-companies)」を参照してください。
+  並び替えを適用する場合、**Contact** エンティティと **Conversation** エンティティの両方にフィルターが必須です。
+  MCA は SaaS プロバイダーによってサポートされています。ただし、ドキュメントに記載されている API レート制限に基づいて、他のワークロードに影響を与え、リソースの競合によりパフォーマンスの問題が発生する可能性があるため、AWS Glue で MCA をホストすることはありません。

# 新しい Intercom アカウントの作成とクライアントアプリの設定
<a name="intercom-new-account-creation"></a>

**Intercom アカウントの作成**

1. [Intercom URL](https://app.intercom.com/) で選択し、ページの右上隅にある **[無料トライアルの開始]** を選択します。

1. ページの右上隅にある**[無料試用ボタン]** を選択します。

1. 必要なビジネスタイプを選択します。

1. このページで、必要な情報をすべて入力します。

1. すべての情報を入力したら、**[登録]** を選択します。



**Intercom 開発者アプリの作成**

**[クライアント ID]** と **[クライアントシークレット]** を取得するには、開発者アカウントを作成します。

1. [https://app.intercom.com/](https://app.intercom.com/) に移動します。

1. Google を使用して E メール ID とパスワード/サインインを入力し、ログインします。

1. 左下隅の **[ユーザープロフィール]** を選択し、設定を選択します。

1. **[アプリと統合]** を選択します。

1. **[アプリと統合]** で **[開発者ハブ]** タブを選択します。

1. **[新規アプリ]** を選択し、ここでアプリを作成します。

1. アプリ名を指定し、アプリの **[作成]** を選択します。

1. アプリ内で、**[認証]** セクションに移動します。

1. **[編集]** を選択し、リダイレクト URI を追加します。リージョン固有のリダイレクト URL を `https://<aws-region>.console.aws.amazon.com/gluestudio/oauth` として追加します。例えば、`https://us-east-1.console.aws.amazon.com/gluestudio/oauth for the us-east-1 region` を追加します。

1. 生成された **[クライアント ID]** と **[クライアントシークレット]** を [基本情報セクション] で取得します。

# Jira Cloud への接続
<a name="connecting-to-data-jira-cloud"></a>

Jira Cloud は、Atlassian によって開発されたプラットフォームです。このプラットフォームに含まれる問題追跡製品は、チームがアジャイルプロジェクトを計画および追跡するのに役立ちます。Jira Cloud ユーザーとして、アカウントには問題、ワークフロー、イベントなどのプロジェクトに関するデータが含まれます。AWS Glue を使用して、特定の AWS サービスや他のサポートされているアプリケーションに Jira Cloud データを転送できます。

**Topics**
+ [Jira Cloud 用 AWS Glue サポート](jira-cloud-support.md)
+ [接続を作成および使用するための API オペレーションを含むポリシー](jira-cloud-configuring-iam-permissions.md)
+ [Jira Cloud の設定](jira-cloud-configuring.md)
+ [Jira Cloud 接続の設定](jira-cloud-configuring-connections.md)
+ [Jira Cloud エンティティからの読み取り](jira-cloud-reading-from-entities.md)
+ [Jira Cloud 接続オプション](jira-cloud-connection-options.md)
+ [Jira Cloud コネクタの制限事項と注意事項](jira-cloud-connector-limitations.md)

# Jira Cloud 用 AWS Glue サポート
<a name="jira-cloud-support"></a>

AWS Glue は、次のように Jira Cloud をサポートします。

**ソースとしてサポートされていますか?**  
はい。AWS Glue ETL ジョブを使用して、Jira Cloud からデータをクエリできます。

**ターゲットとしてサポートされていますか?**  
いいえ。

**サポートされている Jira Cloud の API バージョン**  
次の Jira Cloud の API バージョンがサポートされています。
+ v3

バージョン固有ごとのエンティティサポートについては、「[Jira Cloud エンティティからの読み取り](jira-cloud-reading-from-entities.md)」を参照してください。

# 接続を作成および使用するための API オペレーションを含むポリシー
<a name="jira-cloud-configuring-iam-permissions"></a>

次のサンプル ポリシーで、接続の作成と使用に必要な AWS IAM 権限について説明します。新しいロールを作成する場合は、以下を含むポリシーを作成します。

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

****  

```
{
  "Version":"2012-10-17",		 	 	 
  "Statement": [
    {
      "Effect": "Allow",
      "Action": [
        "glue:ListConnectionTypes",
        "glue:DescribeConnectionType",
        "glue:RefreshOAuth2Tokens",
        "glue:ListEntities",
        "glue:DescribeEntity"
      ],
      "Resource": "*"
    }
  ]
}
```

------

上記の方法を使用しない場合は、代わりに次のマネージド IAM ポリシーを使用します:
+ [AWSGlueServiceRole](https://console.aws.amazon.com/iam/home#policies/arn:aws:iam::aws:policy/service-role/AWSGlueServiceRole) – さまざまな AWS Glue プロセスを実行するために必要なリソースへのアクセス権をユーザーに代わって付与します。これらのリソースには AWS Glue 、Amazon S3、IAM、CloudWatch Logs、および Amazon EC2 が含まれます。このポリシーで指定されたリソースの命名規則に従った場合、AWS Glue プロセスは必要なアクセス権限を使用できます。このポリシーは、通常、クローラ、ジョブ、開発エンドポイントを定義するときに指定されたロールにアタッチされます。
+ [AWSGlueConsoleFullAccess](https://console.aws.amazon.com/iam/home#policies/arn:aws:iam::aws:policy/AWSGlueConsoleFullAccess) — ポリシーがアタッチされているアイデンティティが AWS マネージメントコンソールを使用するときは、AWS Glue リソースへのフルアクセスを許可します。このポリシーで指定されたリソースの命名規則に従った場合、ユーザーは完全なコンソール機能を使用できます。このポリシーは、通常 AWS Glue コンソールのユーザーにアタッチされています。

# Jira Cloud の設定
<a name="jira-cloud-configuring"></a>

AWS Glue を使用して Jira Cloud からサポートされている送信先にデータを転送できるようにするには、次の要件を満たす必要があります。

## 最小要件
<a name="jira-cloud-configuring-min-requirements"></a>

以下に、最小要件を示します。
+ Jira クラウドで Jira ソフトウェア製品を使用する Atlassian アカウントを持っていること。詳細については、「[Jira Cloud アカウントの作成](#jira-cloud-configuring-creating-jira-cloud-account)」を参照してください。
+ AWS Glue へのサービスアクセスがある AWS アカウントを作成する必要があります。
+ このアプリにより、AWS Glue がお客様のアカウントに対して認可呼び出しを行うときに、お客様のデータに安全にアクセスするために使用するクライアントの認証情報が提供されます。詳細については、Atlassian デベロッパードキュメントの「[Enabling OAuth 2.0 (3LO)](https://developer.atlassian.com/cloud/jira/platform/oauth-2-3lo-apps/#enabling-oauth-2-0--3lo-)」を参照してください。

これらの要件を満たしている場合、AWS Glue を Jira Cloud アカウントに接続する準備ができています。

## Jira Cloud アカウントの作成
<a name="jira-cloud-configuring-creating-jira-cloud-account"></a>

Jira Cloud アカウントを作成する方法

1. [Atlassian サインアップ URL](https://id.atlassian.com/signup) に移動します。

1. 勤務先 E メールアドレスおよび名前を入力し、**[同意]** を選択します。確認用 E メールを受信します。

1. E メールを確認したら、パスワードを作成して **[サインアップ]** を選択します。

1. 名前およびパスワードを入力し、**[サインアップ]** を選択します。

1. サイトの入力が必要なページにリダイレクトされます。サイト名を入力して **[同意]** を選択します。

Atlassian Cloud サイトが起動したら、プロジェクトタイプの設定に基づいていくつかの質問に回答することで、Jira を設定できます。

既存のアカウントにログインする方法

1. [Atlassian ログイン URL ](https://id.atlassian.com/login) に移動して、認証情報を入力します。

1. E メールおよびパスワードを入力して、**[ログイン]** をクリックします。Jira ダッシュボードにリダイレクトされます。

## Jira Cloud でアプリの作成
<a name="jira-cloud-configuring-creating-jira-cloud-app"></a>

Jira Cloud でアプリを作成し、マネージドクライアントアプリからクライアント ID とクライアントシークレットを取得する方法

1. [Jira Cloud URL](https://id.atlassian.com/login) に移動して、認証情報を入力します。

1. **[作成]** を選択し、**[OAuth 2.0 統合]** オプションを選択します。

1. アプリ名を入力し、**[T&C]** を確認して **[作成]** を選択します。

1. 左側のメニューの **[ディストリビューション]** セクションに移動し、**[編集]** を選択します。

1. **[ディストリビューションコントロールを編集]** セクションで、次の操作を行います。

   1. **[DISTRIBUTION STATUS]** を **[共有]** として選択します。

   1. ベンダー名を入力します。

   1. **[プライバシーポリシー]** の URL を入力します。例: https://docs.aws.amazon.com/glue/latest/dg/security-iam-awsmanpol.html

   1. **[利用規約]** の URL を入力します (オプション)。

   1. **[カスタマーサポートの連絡先]** の URL を入力します (オプション)。

   1. **[PERSONAL DATA DECLARATION]** で [はい/いいえ] を選択し、**[変更を保存]** を選択します。

1. 各アプリの左側のメニューにある **[アクセス許可]** に移動します。

1. **[Jira API]** には、**[追加]** を選択します。追加したら、**[設定]** オプションを選択します。

1. **[クラシックスコープ]** > **[Jira プラットフォーム REST API]** セクションで **[スコープを編集]** を選択し、すべてのスコープを確認します。**[保存]** をクリックします。

1. **[詳細スコープ]** で **[スコープを編集]** を選択し、次のスコープを選択します。

1. 下にスクロールしてスコープを見つけます。「CRM」と「標準」の見出しの下に、選択する必要がある 2 種類のスコープがあります。

1. 以下のスコープを追加します。

   ```
   read:application-role:jira
   read:audit-log:jira
   read:avatar:jira
   read:field:jira
   read:group:jira
   read:instance-configuration:jira
   read:issue-details:jira
   read:issue-event:jira
   read:issue-link-type:jira
   read:issue-meta:jira
   read:issue-security-level:jira
   read:issue-security-scheme:jira
   read:issue-type-scheme:jira
   read:issue-type-screen-scheme:jira
   read:issue-type:jira
   read:issue.time-tracking:jira
   read:label:jira
   read:notification-scheme:jira
   read:permission:jira
   read:priority:jira
   read:project:jira
   read:project-category:jira
   read:project-role:jira
   read:project-type:jira
   read:project-version:jira
   read:project.component:jir
   read:project.property:jira
   read:resolution:jira
   read:screen:jira
   read:status:jira
   read:user:jira
   read:workflow-scheme:jira
   read:workflow:jira
   read:field-configuration:jira
   read:issue-type-hierarchy:jira
   read:webhook:jira
   ```

1. 左側のメニューで **[認証]** に移動し、**[追加]** を選択します。

1. https://us-east-1.console.aws.amazon.com/gluestudio/oauth などの **[コールバック URL]** を入力します。

1. 左側のメニューで **[設定]** に移動し、下にスクロールして **[認証]** の詳細を表示します。クライアントシークレットおよび ID をメモします。

# Jira Cloud 接続の設定
<a name="jira-cloud-configuring-connections"></a>

Jira Cloud は、OAuth2 の AUTHORIZATION\$1CODE のグラントタイプをサポートしています。
+ このグラントタイプは、ユーザーを認証するためにサードパーティーの認証サーバーにユーザーをリダイレクトすることから、「three-legged」の OAuth と見なされます。AWS Glue コンソール経由で接続を作成するときに使用されます。AWS Glue コンソールでは、ユーザーが Jira Cloud にリダイレクトされます。ここではユーザーがログインし、Jira Cloud インスタンスにアクセスするためのリクエストされた権限を AWS Glue に許可する必要があります。
+ ユーザーは、Jira Cloud で独自の接続アプリを作成し、AWS Glue コンソールを介して接続を作成するときに独自のクライアント ID とクライアントシークレットを指定することを選択できます。このシナリオでは、引き続き Jira Cloud にリダイレクトされてログインし、リソースへアクセスするために AWS Glue を承認します。
+ このグラントタイプは、更新トークンとアクセストークンになります。アクセストークンの有効期間は短く、更新トークンを使用してユーザーとやり取りすることなく自動的に更新される場合があります。
+ 認可コード OAuth フロー用の接続アプリケーションの作成に関する Jira Cloud の公開ドキュメントについては、「[OAuth 2.0 (3LO) の有効化](https://developer.atlassian.com/cloud/jira/platform/oauth-2-3lo-apps/#enabling-oauth-2-0--3lo-)」を参照してください。

Jira Cloud 接続を設定するには:

1. AWS Secrets Manager で、次の詳細を含むシークレットを作成します。

   1. カスタマーマネージド接続アプリケーションの場合、シークレットには、`USER_MANAGED_CLIENT_APPLICATION_CLIENT_SECRET` を使用して接続されたアプリケーションのコンシューマーシークレットをキーとして含める必要があります。

   1. 注: AWS Glue で接続ごとにシークレットを作成する必要があります。

1. AWS Glue Glue Studio で、以下の手順に従って **[データ接続]** の下に接続を作成します。

   1. **[接続タイプ]** を選択する際に、[Jira Cloud] を選択します。

   1. Jira Cloud 環境を指定します。

   1. 次のアクションを実行でき、AWS Glue がその権限を持つ AWS IAM ロールを選択します。

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

****  

      ```
      {
        "Version":"2012-10-17",		 	 	 
        "Statement": [
          {
            "Effect": "Allow",
            "Action": [
              "secretsmanager:DescribeSecret",
              "secretsmanager:GetSecretValue",
              "secretsmanager:PutSecretValue",
              "ec2:CreateNetworkInterface",
              "ec2:DescribeNetworkInterfaces",
              "ec2:DeleteNetworkInterface"
            ],
            "Resource": "*"
          }
        ]
      }
      ```

------

   1. AWS Glue でこの接続に使用する `secretName` を選択して、トークンを配置します。

   1. ネットワークを使用する場合は、ネットワークオプションを選択します。

1. AWS Glue ジョブに関連付けられている IAM ロールに `secretName` を読み取るアクセス許可を付与します。

# Jira Cloud エンティティからの読み取り
<a name="jira-cloud-reading-from-entities"></a>

**前提条件**

読み取り元の Jira Cloud オブジェクト。監査レコードまたは問題などのオブジェクト名が必要です。次の表に、サポートされているエンティティを示します。

**ソースに対応するエンティティ**:


| エンティティ | フィルタリング可能 | 制限をサポートする | Order By をサポートする | Select \$1 をサポートする | パーティション分割をサポートする | 
| --- | --- | --- | --- | --- | --- | 
| Audit Record | はい | あり | なし | あり | あり | 
| 問題 | はい | あり | なし | あり | あり | 
| Issue Field | なし | なし | なし | あり | いいえ | 
| Issue Field Configuration | はい | あり | なし | あり | あり | 
| Issue Link Type | なし | なし | なし | あり | いいえ | 
| Issue Notification Scheme | はい | あり | なし | あり | あり | 
| Issue Security Scheme | なし | なし | なし | あり | いいえ | 
| Issue Type Scheme | はい | あり | あり | あり | あり | 
| Issue Type Screen Scheme | はい | あり | あり | あり | あり | 
| Issue Type | なし | なし | なし | あり | いいえ | 
| Jira Setting | あり | なし | なし | あり | いいえ | 
| Jira Setting Advanced | なし | なし | なし | あり | いいえ | 
| Jira Setting Global | なし | なし | なし | あり | いいえ | 
| ラベル | なし | なし | なし | あり | あり | 
| Myself | あり | なし | なし | あり | いいえ | 
| アクセス許可 | なし | なし | なし | あり | いいえ。 | 
| プロジェクト | はい | あり | あり | あり | あり | 
| Project Category | なし | なし | なし | あり | いいえ | 
| プロジェクトタイプ | なし | なし | なし | あり | いいえ | 
| Server Info | なし | なし | なし | あり | いいえ | 
| Users | なし | なし | いいえ。 | あり | いいえ | 
| ワークフロー | はい | あり | あり | あり | あり | 
| Workflow Scheme | なし | あり | なし | あり | あり | 
| Workflow Scheme Project Association | あり | なし | なし | あり | いいえ | 
| ワークフローステータス | なし | なし | なし | あり | いいえ | 
| Workflow Status Category | なし | なし | なし | あり | いいえ | 

**例**:

```
jiracloud_read = glueContext.create_dynamic_frame.from_options(
    connection_type="JiraCloud",
    connection_options={
        "connectionName": "connectionName",
        "ENTITY_NAME": "audit-record",
        "API_VERSION": "v3"
    }
```

**Jira Cloud エンティティとフィールドの詳細**:

[\[See the AWS documentation website for more details\]](http://docs.aws.amazon.com/ja_jp/glue/latest/dg/jira-cloud-reading-from-entities.html)

## パーティショニングクエリ
<a name="jira-cloud-reading-partitioning-queries"></a>

Spark で並行処理を使用する場合は、追加の Spark オプション `NUM_PARTITIONS` を指定できます。これらのパラメータを使用すると、元のクエリは Spark タスクで同時に実行できるサブクエリの `NUM_PARTITIONS` の数に分割されます。
+ `NUM_PARTITIONS`: パーティション数。

例:

```
jiraCloud_read = glueContext.create_dynamic_frame.from_options(
    connection_type="JiraCloud",
    connection_options={
        "connectionName": "connectionName",
        "ENTITY_NAME": "issue",
        "API_VERSION": "v3",
        "NUM_PARTITIONS": "10"
    }
```

# Jira Cloud 接続オプション
<a name="jira-cloud-connection-options"></a>

Jira Cloud の接続オプションは次のとおりです。
+ `ENTITY_NAME` (文字列) – (必須) 読み取りに使用されます。Jira Cloud のオブジェクトの名前。
+ `API_VERSION` (文字列) – (必須) 読み取りに使用されます。使用する Jira Cloud Rest の API バージョン。例: v3。
+ `DOMAIN_URL` (文字列) – (必須) 使用する Jira Cloud ID。
+ `SELECTED_FIELDS` (List<String>) – Default: empty(SELECT \$1). 読み取りに使用されます。オブジェクトに選択する列です。
+ `FILTER_PREDICATE`(文字列) – デフォルト: 空 読み取りに使用されます。Spark SQL 形式である必要があります。
+ `QUERY`(文字列) - デフォルト: 空 読み取りに使用されます。完全な Spark SQL クエリです。
+ `NUM_PARTITIONS`(整数) – デフォルト: 1。読み取りに使用されます。読み取り用のパーティションの数です。

# Jira Cloud コネクタの制限事項と注意事項
<a name="jira-cloud-connector-limitations"></a>

Jira Cloud コネクタの制限事項または注意事項は次のとおりです。
+  `Contains` 演算子は、`String` データタイプの `resourceName` フィールドには機能しません。
+  デフォルトでは、明示的なフィルターが適用されない場合、過去 30 日間の問題のみがクロールされます。ユーザーには、カスタムフィルターを指定して、このデフォルトフィルターを上書きするオプションがあります。

# Kustomer への接続
<a name="connecting-to-data-kustomer"></a>

Kustomer は、顧客により良いサービスを提供するために必要なすべてを 1 つの使いやすいツールにまとめた、強力なカスタマーエクスペリエンスプラットフォームです。

**Topics**
+ [Kustomer の AWS Glue サポート](kustomer-support.md)
+ [接続を作成および使用するための API オペレーションを含むポリシー](kustomer-configuring-iam-permissions.md)
+ [Kustomer の設定](kustomer-configuring.md)
+ [Kustomer 接続の設定](kustomer-configuring-connections.md)
+ [Kustomer エンティティからの読み取り](kustomer-reading-from-entities.md)
+ [Kustomer 接続のオプション](kustomer-connection-options.md)
+ [Kustomer の制限事項](kustomer-connection-limitations.md)

# Kustomer の AWS Glue サポート
<a name="kustomer-support"></a>

AWS Glue は、次のように Kustomer をサポートしています。

**ソースとしてサポートされていますか?**  
はい。AWS Glue ETL ジョブを使用して、Kustomer からデータをクエリできます。

**ターゲットとしてサポートされていますか?**  
いいえ。

**サポートされている Kustomer API バージョン**  
次の Kustomer API バージョンがサポートされています。
+ v1

# 接続を作成および使用するための API オペレーションを含むポリシー
<a name="kustomer-configuring-iam-permissions"></a>

次のサンプル ポリシーで、接続の作成と使用に必要な AWS IAM 権限について説明します。新しいロールを作成する場合は、以下を含むポリシーを作成します。

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

****  

```
{
  "Version":"2012-10-17",		 	 	 
  "Statement": [
    {
      "Effect": "Allow",
      "Action": [
        "glue:ListConnectionTypes",
        "glue:DescribeConnectionType",
        "glue:RefreshOAuth2Tokens",
        "glue:ListEntities",
        "glue:DescribeEntity"
      ],
      "Resource": "*"
    }
  ]
}
```

------

上記の方法を使用しない場合は、代わりに次のマネージド IAM ポリシーを使用します:
+ [AWSGlueServiceRole](https://console.aws.amazon.com/iam/home#policies/arn:aws:iam::aws:policy/service-role/AWSGlueServiceRole) – さまざまな AWS Glue プロセスを実行するために必要なリソースへのアクセス権をユーザーに代わって付与します。これらのリソースには AWS Glue 、Amazon S3、IAM、CloudWatch Logs、および Amazon EC2 が含まれます。このポリシーで指定されたリソースの命名規則に従った場合、AWS Glue プロセスは必要なアクセス権限を使用できます。このポリシーは、通常、クローラ、ジョブ、開発エンドポイントを定義するときに指定されたロールにアタッチされます。
+ [AWSGlueConsoleFullAccess](https://console.aws.amazon.com/iam/home#policies/arn:aws:iam::aws:policy/AWSGlueConsoleFullAccess) — ポリシーがアタッチされているアイデンティティが AWS マネージメントコンソールを使用するときは、AWS Glue リソースへのフルアクセスを許可します。このポリシーで指定されたリソースの命名規則に従った場合、ユーザーは完全なコンソール機能を使用できます。このポリシーは、通常 AWS Glue コンソールのユーザーにアタッチされています。

# Kustomer の設定
<a name="kustomer-configuring"></a>

AWS Glue を使用して Kustomer からサポートされている送信先にデータを転送できるようにするには、次の要件を満たす必要があります。

## 最小要件
<a name="kustomer-configuring-min-requirements"></a>

以下に、最小要件を示します。
+ 転送するデータを含む Kustomer のアカウントがある。
+ アカウントの設定で、API キーを作成している。詳細については、「[API キーの作成](#kustomer-configuring-creating-an-api-key)」を参照してください。
+ 接続の作成時に AWS Glue に API キーを指定します。

これらの要件を満たすと、Kustomer アカウントに AWS Glue を接続する準備が整います。

## API キーの作成
<a name="kustomer-configuring-creating-an-api-key"></a>

AWS Glue Studio で Kustomer コネクタ用の接続を作成するために使用する API キーを作成するには

1. [認証情報を使用して Kustomer ダッシュボード](https://amazon-appflow.kustomerapp.com/login)にログインします。

1. 左側のメニューから、**[Settings]** アイコンを選択します。

1. **[Security]** ドロップダウンを展開し、**[API Keys]** を選択します。

1. API キーの作成ページで、右上隅の **[Add an API Key]** を選択します。

1. 作成する API キーの必須項目を入力します。
   + Name: API キーの任意の名前。
   + Roles: Kustomer API が機能するには、「org」を選択する必要があります。
   + Expires (in days): API キーを有効にする日数。ユースケースに応じて、**[Never expires]** にすることもできます。

1. **[作成]** を選択します。

1. Kustomer コネクタ用の接続を作成するための API キー (トークン) 値を今後の使用のために AWS Glue Studio に保存します。

# Kustomer 接続の設定
<a name="kustomer-configuring-connections"></a>

Kustomer 接続を設定するには

1. AWS Secrets Manager で、次の詳細を含むシークレットを作成します。

   1. カスタマーマネージド接続アプリケーションの場合、シークレットには、`apiKey` を使用して接続されたアプリケーションのコンシューマーシークレットをキーとして含める必要があります。

   1. 注: AWS Glue で接続にシークレットを作成する必要があります。

1. AWS Glue Glue Studio で、以下の手順に従って **[データ接続]** の下に接続を作成します。

   1. **[接続]** で **[接続を作成]** を選択します。

   1. **[データソース]** を選択するときは、[Kustomer] を選択します。

   1. 次のアクションを実行でき、AWS Glue がその権限を持つ AWS IAM ロールを選択します。

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

****  

      ```
      {
        "Version":"2012-10-17",		 	 	 
        "Statement": [
          {
            "Effect": "Allow",
            "Action": [
              "secretsmanager:DescribeSecret",
              "secretsmanager:GetSecretValue",
              "secretsmanager:PutSecretValue",
              "ec2:CreateNetworkInterface",
              "ec2:DescribeNetworkInterfaces",
              "ec2:DeleteNetworkInterface"
            ],
            "Resource": "*"
          }
        ]
      }
      ```

------

   1. AWS Glue でこの接続に使用する `secretName` を選択して、トークンを配置します。

   1. ネットワークを使用する場合は、ネットワークオプションを選択します。

1. AWS Glue ジョブに関連付けられている IAM ロールに `secretName` を読み取るアクセス許可を付与します。

# Kustomer エンティティからの読み取り
<a name="kustomer-reading-from-entities"></a>

**前提条件**

読み取り元の Kustomer オブジェクト。Brands または Cards などのオブジェクト名が必要です。次の表に、サポートされているエンティティを示します。

**ソースに対応するエンティティ**:


| エンティティ | フィルタリング可能 | 制限をサポートする | Order By をサポートする | Select \$1 をサポートする | パーティション分割をサポートする | 
| --- | --- | --- | --- | --- | --- | 
| Brands | なし | あり | なし | あり | なし | 
| [Cards] (カード) | なし | あり | なし | あり | なし | 
| Chat Settings | なし | なし | なし | あり | なし | 
| Companies | はい | あり | あり | あり | あり | 
| Conversations | はい | あり | あり | あり | あり | 
| Customers | はい | あり | あり | あり | あり | 
| Customer Searches Pinned | なし | あり | なし | あり | なし | 
| Customer Searches Position | なし | なし | なし | あり | なし | 
| Email Hooks | なし | あり | なし | あり | なし | 
| Web Hooks | なし | あり | なし | あり | なし | 
| KB Articles | なし | あり | なし | あり | なし | 
| KB Categories | なし | あり | なし | あり | なし | 
| KB Forms | なし | あり | なし | あり | なし | 
| KB Routes | なし | あり | なし | あり | なし | 
| KB Tags | なし | あり | なし | あり | なし | 
| KB Templates | なし | あり | なし | あり | なし | 
| KB Themes | なし | あり | なし | あり | なし | 
| Klasses | なし | あり | なし | あり | なし | 
| KViews | なし | あり | なし | あり | なし | 
|  メッセージ | はい | あり | あり | あり | はい | 
| コメント | はい | あり | あり | あり | あり | 
| 通知 | なし | あり | なし | あり | なし | 

**例**:

```
Kustomer_read = glueContext.create_dynamic_frame.from_options(
    connection_type="kustomer",
    connection_options={
        "connectionName": "connectionName",
        "ENTITY_NAME": "brands",
        "API_VERSION": "v1"
    }
```

## Kustomer のエンティティとフィールドの詳細
<a name="kustomer-reading-from-entities-field-details"></a>

エンティティとフィールドの詳細については、以下を参照してください:
+ [Brands](https://api.kustomerapp.com/v1/brands)
+ [[Cards]](https://api.kustomerapp.com/v1/cards) (カード)
+ [Chat Settings](https://api.kustomerapp.com/v1/chat/settings)
+ [Companies](https://api.kustomerapp.com/v1/companies)
+ [Conversations](https://api.kustomerapp.com/v1/conversations)
+ [Customers](https://api.kustomerapp.com/v1/customers)
+ [Customers Searches Pinned](https://api.kustomerapp.com/v1/customers/searches/pinned)
+ [Customer Searches Positions](https://api.kustomerapp.com/v1/customers/searches/positions)
+ [Hooks Email](https://api.kustomerapp.com/v1/hooks/email)
+ [Hooks Web](https://api.kustomerapp.com/v1/hooks/web)
+ [KB Articles](https://api.kustomerapp.com/v1/kb/articles)
+ [KB Categories](https://api.kustomerapp.com/v1/kb/categories)
+ [KB Forms]( https://api.kustomerapp.com/v1/kb/forms)
+ [KB Routes](https://api.kustomerapp.com/v1/kb/routes)
+ [KB Tags](https://api.kustomerapp.com/v1/kb/tags)
+ [KB Templates](https://api.kustomerapp.com/v1/kb/templates)
+ [KB Themes](https://api.kustomerapp.com/v1/kb/themes)
+ [Klasses](https://api.kustomerapp.com/v1/klasses)
+ [Kviews](https://api.kustomerapp.com/v1/kviews)
+ [メッセージ](https://api.kustomerapp.com/v1/messages)
+ [Notes](https://api.kustomerapp.com/v1/notes) (メモ)
+ [通知](https://api.kustomerapp.com/v1/notifications)

Kustomer API v1

[\[See the AWS documentation website for more details\]](http://docs.aws.amazon.com/ja_jp/glue/latest/dg/kustomer-reading-from-entities.html)

## パーティショニングクエリ
<a name="kustomer-reading-from-partitioning"></a>

**フィールドベースのパーティション分割**

Spark で同時実行を使用する場合は、追加の Spark オプション `PARTITION_FIELD`、`LOWER_BOUND`、`UPPER_BOUND`、および `NUM_PARTITIONS` を指定できます。これらのパラメータを使用すると、元のクエリは Spark タスクで同時に実行できるサブクエリの `NUM_PARTITIONS` の数に分割されます。
+ `PARTITION_FIELD`: クエリのパーティション化に使用するフィールドの名前。
+ `LOWER_BOUND`: 選択したパーティションフィールドの**包括的な**下限値。

  DateTime フィールドでは、ISO 形式の値を受け入れます。

  有効な値の例:

  ```
  "2023-01-15T11:18:39.205Z"
  ```
+ `UPPER_BOUND`: 選択したパーティションフィールドの**排他的**上限値。
+ `NUM_PARTITIONS`: パーティション数。

エンティティごとのパーティション分割フィールドのサポートの詳細は、次の表にまとめられています。

[\[See the AWS documentation website for more details\]](http://docs.aws.amazon.com/ja_jp/glue/latest/dg/kustomer-reading-from-entities.html)

例:

```
Kustomer_read = glueContext.create_dynamic_frame.from_options(
    connection_type="kustomer",
    connection_options={
        "connectionName": "connectionName",
        "ENTITY_NAME": "conversation",
        "API_VERSION": "v1",
        "PARTITION_FIELD": "createdAt"
        "LOWER_BOUND": "2023-01-15T11:18:39.205Z"
        "UPPER_BOUND": "2023-02-15T11:18:39.205Z"
        "NUM_PARTITIONS": "2"
    }
```

# Kustomer 接続のオプション
<a name="kustomer-connection-options"></a>

Kustomer の接続オプションは次のとおりです。
+ `ENTITY_NAME`(文字列) – (必須) 読み取りに使用されます。Kustomer のオブジェクトの名前。
+ `API_VERSION`(文字列) – (必須) 読み取りに使用されます。使用する Kustomer Rest API バージョン。
+ `SELECTED_FIELDS`(List<String>) – Default: empty(SELECT \$1). 読み込みに使用されます。オブジェクトに選択する列です。
+ `FILTER_PREDICATE`(文字列) – デフォルト: 空 読み込みに使用されます。Spark SQL 形式である必要があります。
+ `QUERY`(文字列) - デフォルト: 空 読み込みに使用されます。完全な Spark SQL クエリです。
+ `PARTITION_FIELD` (文字列) – 読み取りに使用されます。クエリをパーティション化するために使用するフィールドです。
+ `LOWER_BOUND` (文字列)– 読み取りに使用されます。選択したパーティションフィールドの包括的な下限値。
+ `UPPER_BOUND` (文字列) – 読み取りに使用されます。選択したパーティションフィールドの排他的上限値。
+ `NUM_PARTITIONS`(整数) – デフォルト: 1。読み込みに使用されます。読み取り用のパーティションの数です。
+ `INSTANCE_URL` (文字列) – (必須) 読み取りに使用されます。Kustomer インスタンス URL。

# Kustomer の制限事項
<a name="kustomer-connection-limitations"></a>

Kustomer の制限事項または注意事項は次のとおりです。
+ Kustomer API ドキュメントではエンドポイントが宣言されていないため、`Customer Searches` エンティティはサポートされていません。
+ `Klasses` エンティティでのフィルタリングと増分転送のサポートはありません。
+ 並べ替えは、1 回のリクエストで複数の適用可能なフィールドで使用できます。

  ただし、複数のフィールドでの並べ替え機能は、一部の組み合わせで SaaS エンドからの一貫性ない動作が確認されています。誤ったソート結果を示す「n」個の組み合わせが存在する可能性があるため、予測できません。例:

  `Customers` エンティティの場合、`progressiveStatus desc, name asc` による並べ替えでは正しいソート結果が得られません。`progressiveStatus` の順序に基づいてのみソートされます。このような動作が確認された場合は、単一のフィールドを使用して並べ替えができます。
+ 「id」フィールドで並べ替えを行う場合は、クエリパラメータとして `Conversations` および `Messages` エンティティのみがサポートされます。例: https://api.kustomerapp.com/v1/conversations?sort=desc (これにより、結果が「id」で降順にソートされます)。

  また、他のフィールドに対する他のフィルタリングまたは並べ替えは、API エンドポイントが POST https://api.kustomerapp.com/v1/customers/search として設定された POST リクエスト本文に変換されます。`Conversations` および `Messages` で「id」による並べ替えをサポートできるようにするには、id による並べ替えのみが存在するか、他のフィルタリングや並べ替えが他の適用可能なフィールドに存在する必要があります。
+ Kustomer では、リクエストがフィルタリングされたかどうかに関係なく、最大 10,000 件のレコードを取得できます。この制限により、10,000 件を超えるレコードを保持するエンティティのデータが失われます。これを部分的に軽減するための回避策は 2 つあります。
  + フィルターを適用して、特定のレコードセットを取得します。
  + フィルター適用後のレコードが 10,000 件を超える場合は、新しい後続のリクエストに続きのフィルター値を適用するか、フィルターに範囲を適用します。例: 

    最初のリクエストの filterExpression: `modifiedAt >= 2022-03-15T05:26:23.000Z and modifiedAt < 2023-03-15T05:26:23.000Z`

    これにより、10,000 件のレコードの制限が使い果たされると仮定します。

    filterExpression を使用して別のリクエストをトリガーできます: `modifiedAt >= 2023-03-15T05:26:23.000Z`
+ SaaS の動作として、Kustomer の `CONTAINS` 演算子は完全な単語の一致のみをサポートし、単語内の部分一致はサポートしません。例えば、「body CONTAINS 'test record'」は「body」フィールドに「test」があるレコードと一致します。ただし、「body CONTAINS 'test'」は、「body」フィールドに「testAnotherRecord」があるレコードと一致しません。

# LinkedIn に対する接続
<a name="connecting-to-linkedin"></a>

LinkedIn は、さまざまなスポンサー付き投稿やその他の方法を通じて LinkedIn のソーシャルネットワークへのアクセスを提供する有料マーケティングツールです。LinkedIn は、B2B 企業がリードの獲得、オンライン認知度の向上、コンテンツの共有などを行うための強力なマーケティングツールです。

**Topics**
+ [LinkedIn の AWS Glue サポート](linkedin-support.md)
+ [接続を作成および使用するための API オペレーションを含むポリシー](linkedin-configuring-iam-permissions.md)
+ [LinkedIn の設定](linkedin-configuring.md)
+ [LinkedIn 接続の設定](linkedin-configuring-connections.md)
+ [LinkedIn エンティティからの読み取り](linkedin-reading-from-entities.md)
+ [LinkedIn 接続オプション](linkedin-connection-options.md)
+ [LinkedIn アカウントの作成](linkedin-create-account.md)
+ [制限](linkedin-connector-limitations.md)

# LinkedIn の AWS Glue サポート
<a name="linkedin-support"></a>

AWS Glue は、次のように LinkedIn をサポートします。

**ソースとしてサポートされていますか?**  
はい。AWS Glue ETL ジョブを使用して、LinkedIn からデータをクエリできます。

**ターゲットとしてサポートされていますか?**  
いいえ。

**サポートされている LinkedIn API バージョン**  
**[202406 (2024 年 6 月)]**

# 接続を作成および使用するための API オペレーションを含むポリシー
<a name="linkedin-configuring-iam-permissions"></a>

次のサンプル ポリシーで、接続の作成と使用に必要な AWS の権限について説明します。新しいロールを作成する場合は、以下を含むポリシーを作成します。

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

****  

```
{
  "Version":"2012-10-17",		 	 	 
  "Statement": [
    {
      "Effect": "Allow",
      "Action": [
        "glue:ListConnectionTypes",
        "glue:DescribeConnectionType",
        "glue:RefreshOAuth2Tokens",
        "glue:ListEntities",
        "glue:DescribeEntity"
      ],
      "Resource": "*"
    }
  ]
}
```

------

上記の方法を使用しない場合は、代わりに次のマネージド IAM ポリシーを使用します。
+  [ AWSGlueServiceRole ](https://console.aws.amazon.com/iam/home#policies/arn:aws:iam::aws:policy/service-role/AWSGlueServiceRole) – さまざまな AWS Glue プロセスを実行するために必要なリソースへのアクセス権をユーザーに代わって付与します。これらのリソースには、AWS Glue、Amazon S3、IAM、CloudWatch Logs、および Amazon EC2 が含まれます。このポリシーで指定されたリソースの命名規則に従った場合、AWS Glue プロセスは必要なアクセス許可を使用できます。このポリシーは、通常、クローラー、ジョブ、開発エンドポイントを定義するときに指定されたロールにアタッチされます。
+  [ AWSGlueConsoleFullAccess ](https://console.aws.amazon.com/iam/home#policies/arn:aws:iam::aws:policy/AWSGlueConsoleFullAccess) — ポリシーがアタッチされているアイデンティティが AWS マネージメントコンソールを使用するときは、AWS Glue リソースへのフルアクセスを許可します。このポリシーで指定されたリソースの命名規則に従った場合、ユーザーは完全なコンソール機能を使用できます。このポリシーは、通常 AWS Glue コンソールのユーザーにアタッチされています。

# LinkedIn の設定
<a name="linkedin-configuring"></a>

AWS Glue を使用して LinkedIn から転送できるようにするには、次の要件を満たす必要があります。

## 最小要件
<a name="linkedin-configuring-min-requirements"></a>
+ お持ちのアカウントは LinkedIn である。アカウントの作成の詳細については、「[LinkedIn アカウントの作成](linkedin-create-account.md)」を参照してください。
+ LinkedIn アカウントで API アクセスが有効になっている。
+ `OAuth2 API` 統合が LinkedIn アカウントで作成された。この統合により、AWS Glue がお客様のアカウントに対して認証呼び出しを行うときに、お客様のデータに安全にアクセスするために使用するクライアントの認証情報が提供されます。詳細については、「[LinkedIn アカウントの作成](linkedin-create-account.md)」を参照してください。

これらの要件を満たすと、LinkedIn アカウントに AWS Glue を接続する準備が整います。一般的な接続では、LinkedIn で他に何もする必要はありません。

# LinkedIn 接続の設定
<a name="linkedin-configuring-connections"></a>

 LinkedIn は OAuth2 の `AUTHORIZATION_CODE` グラントタイプをサポートしています。

このグラントタイプは、ユーザーを認証するためにサードパーティーの認証サーバーにユーザーをリダイレクトすることから、「three-legged」の `OAuth` と見なされます。ユーザーは、LinkedIn で独自の接続アプリを作成し、AWS Glue コンソールを介して接続を作成するときに独自のクライアント ID とクライアントシークレットを指定することを選択できます。このシナリオでは、引き続き LinkedIn にリダイレクトされてログインし、リソースへアクセスするために AWS Glue を承認します。

このグラントタイプは、更新トークンとアクセストークンの両方になります。このアクセストークンは、作成から 60 日後に期限切れになります。新しいアクセストークンは、更新トークンを使用して取得できます。

`Authorization Code OAuth` フロー用の接続アプリケーションの作成に関する LinkedIn の公開ドキュメントについては、「[認証コードフロー (3-legged OAuth)](https://learn.microsoft.com/en-us/linkedin/shared/authentication/authorization-code-flow?toc=%2Flinkedin%2Fmarketing%2Ftoc.json&bc=%2Flinkedin%2Fbreadcrumb%2Ftoc.json&view=li-lms-2024-07&tabs=HTTPS1)」を参照してください。

**LinkedIn 接続の設定**

1.  AWS Secrets Manager で、次の詳細を含むシークレットを作成します。
   + カスタマーマネージド接続アプリケーションの場合 – シークレットには、`USER_MANAGED_CLIENT_APPLICATION_CLIENT_SECRET` を使用して接続されたアプリケーションのコンシューマーシークレットをキーとして含める必要があります。
   + AWS マネージド接続アプリの場合 – 空のシークレット、または一時的な値を持つシークレット。
**注記**  
AWS Glue で接続ごとにシークレットを作成する必要があります。

1. AWS Glue Studio で、以下の手順に従って **[データ接続]** の下に接続を作成します。

   1. **[接続タイプ]** を選択する際に、**[LinkedIn]** を選択します。

   1. LinkedIn 環境を指定します。

   1. AWS Glue が次のアクションを担い、その権限を持つことができる IAM ロールを選択します。

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

****  

      ```
      {
        "Version":"2012-10-17",		 	 	 
        "Statement": [
          {
            "Effect": "Allow",
            "Action": [
              "secretsmanager:DescribeSecret",
              "secretsmanager:GetSecretValue",
              "secretsmanager:PutSecretValue",
              "ec2:CreateNetworkInterface",
              "ec2:DescribeNetworkInterfaces",
              "ec2:DeleteNetworkInterface"
            ],
            "Resource": "*"
          }
        ]
      }
      ```

------

   1. AWS Glue でこの接続に使用する `secretName` を選択して、トークンを配置します。

   1. ネットワークを使用する場合は、**[ネットワークオプション]** を選択します。

1. AWS Glue ジョブに関連付けられている IAM ロールに `secretName` を読み取るアクセス許可を付与します。

# LinkedIn エンティティからの読み取り
<a name="linkedin-reading-from-entities"></a>

**前提条件** 

読み取り元の LinkedIn オブジェクト。使用可能なエンティティを確認するには、以下のサポートされているエンティティの表を参照してください。

 **サポートされているエンティティ** 


| エンティティ | フィルタリング可能 | 制限をサポートする | Order By をサポートする | Select \$1 をサポートする | パーティショニングをサポートする | 
| --- | --- | --- | --- | --- | --- | 
| 広告アカウント | はい | あり | あり | あり | なし | 
| キャンペーン | はい | あり | あり | あり | なし | 
| キャンペーングループ | はい | あり | あり | あり | なし | 
| クリエイティブ | はい | あり | あり | あり | なし | 
| 広告分析 | あり | なし | なし | あり | なし | 
| 広告分析 すべての AdAcocunts | あり | なし | なし | あり | なし | 
| 広告分析 すべてのキャンペーン | あり | なし | なし | あり | なし | 
| 広告分析 すべての CampaignGroups | あり | なし | なし | あり | なし | 
| 広告分析 すべての AdCreatives | あり | なし | なし | あり | なし | 
| 統計の共有 | あり | なし | なし | あり | なし | 
| ページ統計 | あり | なし | なし | あり | なし | 
| フォロワー統計 | あり | なし | なし | あり | なし | 

 **例** 

```
netsuiteerp_read = glueContext.create_dynamic_frame.from_options(
    connection_type="linkedin",
    connection_options={
        "connectionName": "connectionName",
        "ENTITY_NAME": "adaccounts",
        "API_VERSION": "202406"
    }
)
```


**LinkedIn エンティティとフィールドの詳細**  

|  **フィールドデータタイプ**  |  **サポートされているフィルター演算子**  | 
| --- | --- | 
|  文字列  |  =  | 
|  DateTime  |  BETWEEN, =  | 
|  数値  |  =  | 
|  ブール値  |  =  | 

# LinkedIn 接続オプション
<a name="linkedin-connection-options"></a>

LinkedIn の接続オプションは次のとおりです。
+ `ENTITY_NAME`(文字列) – (必須) 読み取り / 書き込みに使用されます。LinkedIn のオブジェクトの名前。例えば、adAccounts などです。
+ `API_VERSION`(文字列) – (必須) 読み取り / 書き込みに使用されます。使用する LinkedIn M Rest API バージョン。LinkedIn は現在バージョン 202406 のみをサポートしているため、この値は 202406 になります。
+ `SELECTED_FIELDS`(List<String>) – Default: empty(SELECT \$1). 読み込みに使用されます。選択したエンティティに対して選択する列。
+ `FILTER_PREDICATE`(文字列) – デフォルト: 空 読み込みに使用されます。Spark SQL 形式である必要があります。
+ `QUERY`(文字列) – デフォルト: 空 読み込みに使用されます。完全な Spark SQL クエリです。

# LinkedIn アカウントの作成
<a name="linkedin-create-account"></a>

**LinkedIn アプリと OAuth 認証情報の作成**

1. **[LinkedIn 開発者ネットワーク]** ページに移動し、LinkedIn アカウントの認証情報を使用してログインします。

1. **[マイアプリ]** ページに移動し、**[アプリケーションを作成]** を選択して新しい LinkedIn アプリを作成します。

1. アプリ登録フォームに次の詳細を入力します。
   + **[会社名]** – 既存の会社を選択するか、新しい会社を作成します。
   + **[名前]** – アプリケーション名を入力します。
   + **[説明]** – アプリケーションの説明を入力します。
   + **[アプリケーションロゴ]** – アプリケーションロゴとしてイメージファイルを選択します。
   + **[アプリケーションの使用]** – アプリケーションの使用を選択します。
   + **[ウェブサイト URL]** – アプリケーションに関する詳細情報を含むウェブサイトの URL を入力します。
   + **[勤務先の E メール]** – 勤務先の E メールアドレスを入力します。
   + **[勤務先電話番号]** – 勤務先の電話番号を入力します。
   + **[LinkedIn API 利用規約]** – 読んで同意します。

1. アプリ登録フォームの入力が完了したら、**[送信]** を選択します。

   **[認証]** ページにリダイレクトされ、認証キー (クライアント ID とクライアントシークレット) およびその他の関連する詳細が表示されます。

1. ウェブアプリケーションが LinkedIn アカウントからユーザーの E メールアドレスにアクセスする必要がある場合は、`r_emailaddress` アクセス許可を選択します。さらに、LinkedIn アプリケーションの承認済みリダイレクト URL を指定できます。

**LinkedIn アカウントでのページの作成**

1. [LinkedIn 開発者製品](https://developer.linkedin.com/) に移動します。

1. **[LinkedIn 開発者製品]** ページの右上隅で、**[マイアプリ]** を選択します。

1. **[マイアプリ]** ページの右上隅で、**[アプリを作成]** を選択します。

1. **[アプリを作成]** ページの **[アプリ名]** フィールドに、アプリの名前を入力します。

1. **[LinkedIn ページ]** フィールドに、会社のページ名または URL を入力します。
**注記**  
LinkedIn ページがない場合は、**[新しい LinkedIn を作成]** を選択してページを作成できます。

1. **[プライバシーポリシー URL]** フィールドに、プライバシーポリシー URL を入力します。

1. **[ロゴをアップロード]** を選択して、ユーザーがアプリで認可するときに表示するイメージをアップロードします。

1. **[法的契約]** セクションで、**[これらの条項を読み、同意しました]** を選択します。

1. **[アプリの作成]** を選択します。

   新しいアプリが作成され、**[マイアプリ]** タブに表示されます。

**LinkedIn でのキャンペーン広告の公開**

1. **[キャンペーンマネージャー]** にログインします。

1. 既存の **[キャンペーングループ]** を選択するか、**[作成]** を選択して新しいキャンペーングループを作成します。

1. 目標を選択します。

1. グループ、予算、スケジュールを選択します。

1. ターゲットオーディエンスを構築します。

1. 広告形式を選択します。

1. 予算とスケジュールを選択します。

1. 広告をセットアップします (複数可)。

1. 確認して起動します。

# 制限
<a name="linkedin-connector-limitations"></a>

Analytics フィールド `ad_analytics_all_adAccounts`、`ad_analytics_all_campaigns`、`ad_analytics_all_campaign_groups`、および `ad_analytics_all_adCreatives` では、レコードを取得するためにフィルターが必要です。

# Mailchimp への接続
<a name="connecting-to-mailchimp"></a>

Mailchimp は、クライアント、顧客、その他の利害関係者の管理と対話に役立つオールインワンのマーケティングプラットフォームです。マーケティングへのアプローチは、健全な問い合わせ管理プラクティス、美しく設計された E メール、独自の自動ワークフロー、強力なデータ分析に重点を置いています。Mailchimp ユーザーの場合は、Mailchimp アカウントに AWS Glue を接続できます。その後、Mailchimp を ETL ジョブのデータソースとして使用できます。これらのジョブを実行して、Mailchimp と AWS サービス、またはその他のサポートされているアプリケーション間でデータを転送します。

**Topics**
+ [Mailchimp の AWS Glue サポート](mailchimp-support.md)
+ [接続を作成および使用するための API オペレーションを含むポリシー](mailchimp-configuring-iam-permissions.md)
+ [Mailchimp の設定](mailchimp-configuring.md)
+ [Mailchimp 接続の設定](mailchimp-configuring-connections.md)
+ [Mailchimp エンティティからの読み取り](mailchimp-reading-from-entities.md)
+ [Mailchimp 接続のオプション](mailchimp-connection-options.md)
+ [Mailchimp アカウントの作成](mailchimp-create-account.md)
+ [制限](mailchimp-connector-limitations.md)

# Mailchimp の AWS Glue サポート
<a name="mailchimp-support"></a>

AWS Glue は、次のように Mailchimp をサポートしています。

**ソースとしてサポートされていますか?**  
はい。AWS Glue ETL ジョブを使用して、Mailchimp からデータをクエリできます。

**ターゲットとしてサポートされていますか?**  
いいえ。

**サポートされている Mailchimp API バージョン**  
 3.0 

# 接続を作成および使用するための API オペレーションを含むポリシー
<a name="mailchimp-configuring-iam-permissions"></a>

次のサンプル ポリシーで、接続の作成と使用に必要な AWS の権限について説明します。新しいロールを作成する場合は、以下を含むポリシーを作成します。

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

****  

```
{
  "Version":"2012-10-17",		 	 	 
  "Statement": [
    {
      "Effect": "Allow",
      "Action": [
        "glue:ListConnectionTypes",
        "glue:DescribeConnectionType",
        "glue:RefreshOAuth2Tokens",
        "glue:ListEntities",
        "glue:DescribeEntity"
      ],
      "Resource": "*"
    }
  ]
}
```

------

上記の方法を使用しない場合は、代わりに次のマネージド IAM ポリシーを使用します。
+  [ AWSGlueServiceRole ](https://console.aws.amazon.com/iam/home#policies/arn:aws:iam::aws:policy/service-role/AWSGlueServiceRole) – さまざまな AWS Glue プロセスを実行するために必要なリソースへのアクセス権をユーザーに代わって付与します。これらのリソースには、AWS Glue、Amazon S3、IAM、CloudWatch Logs、および Amazon EC2 が含まれます。このポリシーで指定されたリソースの命名規則に従った場合、AWS Glue プロセスは必要なアクセス許可を使用できます。このポリシーは、通常、クローラー、ジョブ、開発エンドポイントを定義するときに指定されたロールにアタッチされます。
+  [ AWSGlueConsoleFullAccess ](https://console.aws.amazon.com/iam/home#policies/arn:aws:iam::aws:policy/AWSGlueConsoleFullAccess) — ポリシーがアタッチされているアイデンティティが AWS マネージメントコンソールを使用するときは、AWS Glue リソースへのフルアクセスを許可します。このポリシーで指定されたリソースの命名規則に従った場合、ユーザーは完全なコンソール機能を使用できます。このポリシーは、通常 AWS Glue コンソールのユーザーにアタッチされています。

# Mailchimp の設定
<a name="mailchimp-configuring"></a>

AWS Glue を使用して Mailchimp から転送できるようにするには、次の要件を満たす必要があります。

## 最小要件
<a name="mailchimp-configuring-min-requirements"></a>
+ メールアドレスとパスワードが設定された Mailchimp アカウントがある。アカウントの作成の詳細については、「[Creating a Mailchimp account](mailchimp-create-account.md)」を参照してください。
+  AWS Glue へのサービスアクセスで AWS アカウントを作成する必要があります。
+ 次のいずれかのリソースが作成されていることを確認します。これらのリソースにより、AWS Glue がお客様のアカウントに対して認可呼び出しを行うときに、お客様のデータに安全にアクセスするために使用する認証情報が提供されます。
  + OAuth 2.0 認可をサポートするデベロッパーアプリケーション。デベロッパーアプリケーションの作成の詳細については、「[Creating a Mailchimp account](mailchimp-create-account.md)」を参照してください。

これらの要件を満たすと、Mailchimp アカウントに AWS Glue を接続する準備が整います。一般的な接続では、Mailchimp で他に何もする必要はありません。

# Mailchimp 接続の設定
<a name="mailchimp-configuring-connections"></a>

 Mailchimp は、認可メカニズムとして次の 2 つのタイプをサポートしています。
+ Mailchimp は `AUTHORIZATION_CODE` グラントタイプをサポートしています。
  + このグラントタイプは、ユーザーを認可するためにサードパーティーの認可サーバーにユーザーをリダイレクトすることから、「three-legged」の `OAuth` と見なされます。AWS Glue コンソール経由で接続を作成するときに使用されます。接続を作成するユーザーは、デフォルトで AWS Glue 所有の接続アプリケーションを使用できます。この場合、Mailchimp クライアント ID とクライアントシークレット以外の `OAuth` 関連情報を指定する必要はありません。AWS Glue コンソールでは、ユーザーが Mailchimp にリダイレクトされます。ここではユーザーがログインし、Mailchimp インスタンスにアクセスするためのリクエストされた権限を AWS Glue に許可する必要があります。
  + ユーザーは、Mailchimp で独自の接続アプリケーションを作成し、AWS Glue コンソールを介して接続を作成するときに独自のクライアント ID とクライアントシークレットを指定することを選択できます。このシナリオでも Mailchimp にリダイレクトされてログインし、リソースへアクセスするために AWS Glue を認可します。
  + `AUTHORIZATION_CODE OAuth` フロー用の接続アプリケーションの作成に関する Mailchimp 公開ドキュメントについては、「[Access Data on Behalf of Other Users with OAuth 2](https://mailchimp.com/developer/marketing/guides/access-user-data-oauth-2/?msockid=141ebf9ffb4d619525c3ad27fad660d6)」を参照してください。
+ **カスタム認可** – カスタム認可に必要な API キーの生成に関する Mailchimp 公開ドキュメントについては、「[About API Keys](https://mailchimp.com/en/help/about-api-keys/?msockid=310fd0fe09d16afe034fc5de08d76b01)」を参照してください。



Mailchimp 接続を設定するには

1. AWS Secrets Manager で、次の詳細を含むシークレットを作成します。
   + `OAuth` 認可 - カスタマーマネージド接続アプリケーションの場合: シークレットには、`USER_MANAGED_CLIENT_APPLICATION_CLIENT_SECRET` を使用して接続されたアプリケーションのコンシューマーシークレットをキーとして含める必要があります。
   + カスタム認可 – カスタマーマネージド接続アプリケーションの場合: シークレットには、「api\$1key」を使用して接続されたアプリケーションのコンシューマーシークレットをキーとして含める必要があります。
**注記**  
AWS Glue で接続ごとにシークレットを作成する必要があります。

1. AWS Glue Studio で、以下の手順に従って **[データ接続]** の下に接続を作成します。

   1. **[接続]** で、**[接続を作成]** を選択します。

   1. **[データソース]** を選択するときは、[Mailchimp] を選択します。

   1. Mailchimp の `instanceUrl` を指定します。

   1. AWS Glue が次のアクションを担い、その権限を持つことができる IAM ロールを選択します。

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

****  

      ```
      {
        "Version":"2012-10-17",		 	 	 
        "Statement": [
          {
            "Effect": "Allow",
            "Action": [
              "secretsmanager:DescribeSecret",
              "secretsmanager:GetSecretValue",
              "secretsmanager:PutSecretValue",
              "ec2:CreateNetworkInterface",
              "ec2:DescribeNetworkInterfaces",
              "ec2:DeleteNetworkInterface"
            ],
            "Resource": "*"
          }
        ]
      }
      ```

------

   1. Mailchimp に接続する認可タイプを選択します。
      + `OAuth` 認可の場合 – 接続先の Mailchimp のトークン URL、ユーザーマネージドクライアントアプリケーション ClientId を指定します。
      + カスタム認可の場合 –認可タイプ CUSTOM を選択して Mailchimp に接続します。

   1. AWS Glue でこの接続に使用する `secretName` を選択して、トークンを配置します。

   1.  ネットワークを使用する場合は、ネットワークオプションを選択します。

1. AWS Glue ジョブに関連付けられている IAM ロールに `secretName` を読み取るアクセス許可を付与します。

1. AWS Glue ジョブ設定で、[追加のネットワーク接続] として `connectionName` を指定します。

# Mailchimp エンティティからの読み取り
<a name="mailchimp-reading-from-entities"></a>

 **前提条件** 

読み取り元の Mailchimp オブジェクト。使用可能なエンティティを確認するには、以下のサポートされているエンティティの表を参照してください。

 **サポートされているエンティティ** 
+ [Abuse-reports ](https://mailchimp.com/developer/marketing/api/campaign-abuse/)
+ [オートメーション](https://mailchimp.com/developer/marketing/api/automation/list-automations/)
+ [キャンペーン](https://mailchimp.com/developer/marketing/api/campaigns/list-campaigns/)
+ [Click-details](https://mailchimp.com/developer/marketing/api/link-clickers/)
+ [Lists](https://mailchimp.com/developer/marketing/api/link-clickers/)
+ [メンバー](https://mailchimp.com/developer/marketing/api/list-segment-members/)
+ [Open-details](https://mailchimp.com/developer/marketing/api/list-members/)
+ [セグメント](https://mailchimp.com/developer/marketing/api/list-segments/)
+ [Stores](https://mailchimp.com/developer/marketing/api/ecommerce-stores/list-stores/)
+ [Unsubscribed](https://mailchimp.com/developer/marketing/api/unsub-reports/)


| エンティティ | フィルタリング可能 | 制限をサポートする | Order By をサポートする | Select \$1 をサポートする | パーティショニングをサポートする | 
| --- | --- | --- | --- | --- | --- | 
| オートメーション | あり | はい | はい | はい | はい | 
| キャンペーン | いいえ | なし | なし | なし | いいえ | 
| Lists | あり | あり | なし | はい | はい | 
| Reports Abuse | いいえ | あり | なし | はい | はい | 
| Reports Open | いいえ | あり | なし | はい | はい | 
| Reports Click | あり | あり | なし | はい | はい | 
| Reports Unsubscribe | いいえ | あり | なし | はい | はい | 
| Segment | いいえ | あり | なし | はい | はい | 
| Segment Members | あり | あり | なし | あり | なし | 
| Stores | あり | はい | はい | あり | なし | 

 **例** 

```
mailchimp_read = glueContext.create_dynamic_frame.from_options(                    
            connection_type="mailchimp",                                           
            connection_options={                                                        
                  "connectionName": "connectionName",                                   
                  "ENTITY_NAME": "stores",  
"INSTANCE_URL": "https://us14.api.mailchimp.com",                     
                  "API_VERSION": "3.0"                                                
               })
```

 **Mailchimp エンティティとフィールドの詳細** 
+ [Abuse-reports ](https://mailchimp.com/developer/marketing/api/campaign-abuse/)
+ [オートメーション](https://mailchimp.com/developer/marketing/api/automation/list-automations/)
+ [キャンペーン](https://mailchimp.com/developer/marketing/api/campaigns/list-campaigns/)
+ [Click-details](https://mailchimp.com/developer/marketing/api/link-clickers/)
+ [Lists](https://mailchimp.com/developer/marketing/api/link-clickers/)
+ [メンバー](https://mailchimp.com/developer/marketing/api/list-segment-members/)
+ [Open-details](https://mailchimp.com/developer/marketing/api/list-members/)
+ [セグメント](https://mailchimp.com/developer/marketing/api/list-segments/)
+ [Stores](https://mailchimp.com/developer/marketing/api/ecommerce-stores/list-stores/)
+ [Unsubscribed](https://mailchimp.com/developer/marketing/api/unsub-reports/)

## パーティショニングクエリ
<a name="mailchimp-engage-reading-partitioning-queries"></a>

Spark で同時実行を使用する場合は、追加の Spark オプション `PARTITION_FIELD`、`LOWER_BOUND`、`UPPER_BOUND`、および `NUM_PARTITIONS` を指定できます。これらのパラメータを使用すると、元のクエリは Spark タスクで同時に実行できるサブクエリの `NUM_PARTITIONS` の数に分割されます。
+ `PARTITION_FIELD`: クエリのパーティション化に使用するフィールドの名前。
+ `LOWER_BOUND`: 選択したパーティションフィールドの**包括的な**下限値。

  DateTime フィールドでは、ISO 形式の値を受け入れます。

  有効な値の例:

  ```
  "2024-07-01T00:00:00.000Z"
  ```
+ `UPPER_BOUND`: 選択したパーティションフィールドの**排他的**上限値。
+ `NUM_PARTITIONS`: パーティション数。

次の表に、エンティティパーティション分割フィールドのサポートの詳細を示します:

[\[See the AWS documentation website for more details\]](http://docs.aws.amazon.com/ja_jp/glue/latest/dg/mailchimp-reading-from-entities.html)

例:

```
read_read = glueContext.create_dynamic_frame.from_options(
    connection_type="mailchimp",
    connection_options={
        "connectionName": "connectionName",
        "ENTITY_NAME": "automations",
        "API_VERSION": "3.0",
        "INSTANCE_URL": "https://us14.api.mailchimp.com",
        "PARTITION_FIELD": "create_time",
        "LOWER_BOUND": "2024-02-05T14:09:30.115Z",
        "UPPER_BOUND": "2024-06-07T13:30:00.134Z",
        "NUM_PARTITIONS": "3"
    }
```

# Mailchimp 接続のオプション
<a name="mailchimp-connection-options"></a>

Mailchimp の接続オプションは次のとおりです。
+  `ENTITY_NAME`(文字列) – (必須) 読み取り / 書き込みに使用されます。Mailchimp のオブジェクトの名前。
+ `INSTANCE_URL`(文字列) – (必須) 有効な Mailchimp インスタンス URL。
+ `API_VERSION`(文字列) – (必須) 読み取りに使用されます。使用する Mailchimp Engage Rest API バージョン。例: 3.0。
+ `SELECTED_FIELDS`(List<String>) – Default: empty(SELECT \$1). 読み込みに使用されます。オブジェクトに選択する列です。
+ `FILTER_PREDICATE`(文字列) – デフォルト: 空 読み込みに使用されます。Spark SQL 形式である必要があります。
+ `QUERY`(文字列) - デフォルト: 空 読み込みに使用されます。完全な Spark SQL クエリです。
+ `PARTITION_FIELD`(文字列) - 読み取りに使用されます。クエリをパーティション化するために使用するフィールドです。
+ `LOWER_BOUND`(文字列) - 読み取りに使用されます。選択したパーティションフィールドの包括的な下限値。
+ `UPPER_BOUND` (文字列) - 読み取りに使用されます。選択したパーティションフィールドの排他的上限値。
+ `NUM_PARTITIONS`(整数) – デフォルト: 1。読み込みに使用されます。読み取り用のパーティションの数です。

# Mailchimp アカウントの作成
<a name="mailchimp-create-account"></a>

1. [Mailchimp ログインページ](https://login.mailchimp.com/?locale=en)に移動し、E メール ID とパスワードを入力して、**[Sign up]** を選択します。

1. Mailchimp からの確認 E メールを開き、確認リンクを選択してアカウントを確認します。
**注記**  
アクティベーション E メールの受信にかかる時間は異なる場合があります。アクティベーション E メールを受信していない場合は、スパムフォルダをチェックし、アクティベーション E メールのトラブルシューティングのヒントをお読みください。Mailchimp は、[admin@pottedplanter.com](mailto:admin@pottedplanter.com) や [security@example.com](mailto:security@example.com) などのロールベースの E メールアドレスからのサインアップをブロックします。  


   アカウントに初めてログインすると、Mailchimp から必要な情報の入力を求められます。Mailchimp は、この情報を使用して、アカウントが利用規約に準拠していることを確認し、ユーザーおよびその会社のニーズに関連するガイダンスを提供します。

1. 情報を入力し、プロンプトに従ってアクティベーションプロセスを完了し、新しい Mailchimp アカウントで開始します。

**`OAuth2.0` アプリケーションの登録**

1. [Mailchimp ログインページ](https://login.mailchimp.com/?locale=en)に移動し、E メール ID とパスワードを入力し、**[Log in]** を選択します。

1. 右上隅の **[User]** アイコンを選択し、ドロップダウンメニューから **[Account and billing]** を選択します。

1. **[Extras]** を選択し、ドロップダウンメニューから **[Registered apps]** を選択します。

1. **[Register An App]** を選択します。

1. 次の詳細情報を入力します。
   + **App name** – アプリケーションの名前。
   + **Company / Organization** – 会社または組織の名前。
   + **App website** – アプリケーションのウェブサイト。
   + **Redirect URI** – リダイレクト URI パターンは、ログインフローが完了したときに Mailchimp がリダイレクト (リクエストされた場合) できる URI パス (またはカンマ区切りのパスのリスト) です。例: `https://ap-southeast-2\\.console\\.aws\\.amazon\\.com`

1. **[作成]** を選択します。

1. これで、**[Client ID]** と **[Client Secret]** が表示されます。これらをコピーして安全な場所に保存します。次に **[完了]** を選択します。
**注記**  
クライアント ID とクライアントシークレット文字列は、AppFlow または AWS Glue を使用するときにこのコネクタとの接続を確立するために使用される認証情報です。

**API キーの生成**

1. [Mailchimp ログインページ](https://login.mailchimp.com/?locale=en)に移動し、E メール ID とパスワードを入力し、**[Log in]** を選択します。

1. 右上隅の **[User]** アイコンを選択し、ドロップダウンメニューから **[Account and billing]** を選択します。

1. **[Extras]** を選択し、ドロップダウンメニューから **[API keys]** を選択します。

1. **[Create A Key]** を選択します。

1. キーの名前を入力し、**[Generate Key]** を選択します。

   次のページには、生成された API キーが表示されます。

1. キーをコピーして安全に保存し、**[Done]** を選択します。

# 制限
<a name="mailchimp-connector-limitations"></a>

Mailchimp コネクタの制限事項は次のとおりです。
+ フィルタリングは、`Campaigns`、`Automations`、`Lists`、`Open Details`、`Members`、および `Segments` エンティティでのみサポートされます。
+ `DateTime` データ型フィールドでフィルターを使用する場合は、`yyyy-mm-ddThh:MM:ssZ` の形式で値を渡す必要があります。

# Microsoft Dynamics 365 CRM への接続
<a name="connecting-to-microsoft-dynamics-365"></a>

 Microsoft Dynamics 365 は、エンタープライズリソースプランニングや顧客リレーションシップ管理向けのインテリジェントなビジネスアプリケーションの製品ラインです。

**Topics**
+ [AWS Glue による Microsoft Dynamics 365 のサポート](microsoft-dynamics-365-support.md)
+ [接続を作成および使用するための API オペレーションを含むポリシー](microsoft-dynamics-365-configuring-iam-permissions.md)
+ [Microsoft Dynamics 365 CRM の設定](microsoft-dynamics-365-configuring.md)
+ [Microsoft Dynamics 365 CRM 接続の設定](microsoft-dynamics-365-configuring-connections.md)
+ [Microsoft Dynamics 365 CRM エンティティからの読み取り](microsoft-dynamics-365-reading-from-entities.md)
+ [Microsoft Dynamics 365 CRM 接続オプションリファレンス](microsoft-dynamics-365-connection-options.md)
+ [制限](microsoft-dynamics-365-connector-limitations.md)

# AWS Glue による Microsoft Dynamics 365 のサポート
<a name="microsoft-dynamics-365-support"></a>

AWS Glue による Microsoft Dynamics 365 のサポートは以下のとおりです。

**ソースとしてサポートされていますか?**  
はい。Microsoft Dynamics 365 からのデータのクエリには AWS Glue ETL ジョブを使用できます。

**ターゲットとしてサポートされていますか?**  
いいえ。

**サポートされている Microsoft Dynamics 365 CRM API バージョン**  
 v9.2。

# 接続を作成および使用するための API オペレーションを含むポリシー
<a name="microsoft-dynamics-365-configuring-iam-permissions"></a>

 次のサンプル ポリシーで、接続の作成と使用に必要な AWS の権限について説明します。新しいロールを作成する場合は、以下を含むポリシーを作成します。

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

****  

```
{
  "Version":"2012-10-17",		 	 	 
  "Statement": [
    {
      "Effect": "Allow",
      "Action": [
        "glue:ListConnectionTypes",
        "glue:DescribeConnectionType",
        "glue:RefreshOAuth2Tokens",
        "glue:ListEntities",
        "glue:DescribeEntity"
      ],
      "Resource": "*"
    }
  ]
}
```

------

また、次のマネージド IAM ポリシーを使用して、アクセスを許可できます。
+  [ AWSGlueServiceRole ](https://console.aws.amazon.com/iam/home#policies/arn:aws:iam::aws:policy/service-role/AWSGlueServiceRole) – さまざまな AWS Glue プロセスを実行するために必要なリソースへのアクセス権をユーザーに代わって付与します。これらのリソースには、AWS Glue、Amazon S3、IAM、CloudWatch Logs、および Amazon EC2 が含まれます。このポリシーで指定されたリソースの命名規則に従った場合、AWS Glue プロセスは必要なアクセス許可を使用できます。このポリシーは、通常、クローラー、ジョブ、開発エンドポイントを定義するときに指定されたロールにアタッチされます。
+  [ AWSGlueConsoleFullAccess ](https://console.aws.amazon.com/iam/home#policies/arn:aws:iam::aws:policy/AWSGlueConsoleFullAccess) — ポリシーがアタッチされているアイデンティティが AWS マネージメントコンソールを使用するときは、AWS Glue リソースへのフルアクセスを許可します。このポリシーで指定されたリソースの命名規則に従った場合、ユーザーは完全なコンソール機能を使用できます。このポリシーは、通常 AWS Glue コンソールのユーザーにアタッチされています。

# Microsoft Dynamics 365 CRM の設定
<a name="microsoft-dynamics-365-configuring"></a>

AWS Glue を使用して Microsoft Dynamics 365 CRM からデータを転送する前に、次の要件を満たす必要があります。

## 最小要件
<a name="microsoft-dynamics-365-configuring-min-requirements"></a>
+  ClientId と Secret が設定された Microsoft Dynamics 365 CRM 開発者アカウントがある。
+  Microsoft Dynamics 365 CRM アカウントに有効なライセンスを用いた API アクセス権がある。

 これらの要件を満たすと、Microsoft Dynamics 365 CRM アカウントに AWS Glue を接続する準備が整います。一般的な接続の場合、Microsoft Dynamics 365 CRM で追加の設定を行う必要はありません。

# Microsoft Dynamics 365 CRM 接続の設定
<a name="microsoft-dynamics-365-configuring-connections"></a>

 **AUTHORIZATION\$1CODE のグラントタイプ** 
+  このグラントタイプは、ユーザーを認証するためにサードパーティーの認証サーバーにユーザーをリダイレクトすることから、「three-legged」の OAuth と見なされます。AWS Glue コンソール経由で接続を作成するときに使用されます。AWS Glue コンソールでは、ユーザーが Microsoft Dynamics 365 CRM にリダイレクトされるので、ログインし、Microsoft Dynamics 365 CRM インスタンスにアクセスするためにリクエストされた許可を AWS Glue に付与する必要があります。
+  ユーザーは、Microsoft Dynamics 365 CRM で独自の接続アプリケーションを作成し、AWS Glue コンソール経由で接続を作成するときに独自のクライアント ID とクライアントシークレットを指定することも選択できます。ユーザーはこのシナリオでも Microsoft Dynamics 365 CRM にリダイレクトされるので、ログインして、AWS Glue にリソースへのアクセスを許可します。
+  このグラントタイプは、更新トークンとアクセストークンになります。アクセストークンの有効期間は短く、更新トークンを使用してユーザーとやり取りすることなく自動的に更新される場合があります。
+  認証コード OAuth フロー用の接続アプリケーションの作成に関する Microsoft Dynamics 365 CRM の公開ドキュメントについては、「\$1 Microsoft Learn」の 「[Microsoft アプリの登録](https://learn.microsoft.com/en-us/power-apps/developer/data-platform/authenticate-oauth#app-registration)」を参照してください。

Microsoft Dynamics 365 CRM は OAuth2.0 認証をサポートしています。

Microsoft Dynamics 365 CRM 接続を設定する:

1.  AWS Secrets Manager で、次の詳細を含むシークレットを作成します。AWS Glue で接続ごとにシークレットを作成する必要があります。
   +  AuthorizationCode グラントタイプの場合: 

      カスタマーマネージド接続アプリケーションの場合 – シークレットには、`USER_MANAGED_CLIENT_APPLICATION_CLIENT_SECRET` をキーとする、接続されたアプリケーションのクライアントシークレットを含める必要があります。

1. AWS Glue Studio で、以下の手順に従って **[データ接続]** の下に接続を作成します。

   1. **[データソース]** を選択するときは、[Microsoft Dynamics 365 CRM] を選択します。

   1. 接続する Microsoft Dynamics 365 CRM インスタンスの **[INSTANCE\$1URL]** を選択します。

   1.  AWS Glue が次のアクションを担い、その権限を持つことができる IAM ロールを選択します。

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

****  

      ```
      {
        "Version":"2012-10-17",		 	 	 
        "Statement": [
          {
            "Effect": "Allow",
            "Action": [
              "secretsmanager:DescribeSecret",
              "secretsmanager:GetSecretValue",
              "secretsmanager:PutSecretValue",
              "ec2:CreateNetworkInterface",
              "ec2:DescribeNetworkInterfaces",
              "ec2:DeleteNetworkInterface"
            ],
            "Resource": "*"
          }
        ]
      }
      ```

------

   1.  **[トークン URL]** と **[認可コード URL]** を選択して、Microsoft Dynamics 365 CRM ワークスペースにアクセスします。

   1.  Microsoft Dynamics 365 CRM アプリケーションの **[ユーザーマネージドクライアントアプリケーション ClientId]** を入力します。

   1.  AWS Glue でこの接続に使用する `secretName` を選択して、トークンを配置します。

   1.  ネットワークを使用する場合は、ネットワークオプションを選択します。

1.  AWS Glue ジョブに関連付けられている IAM ロールに `secretName` を読み取るアクセス許可を付与します。[**次へ**] を選択します。

1.  AWS Glue ジョブ設定で、**[追加のネットワーク接続]** として `connectionName` を指定します。

# Microsoft Dynamics 365 CRM エンティティからの読み取り
<a name="microsoft-dynamics-365-reading-from-entities"></a>

 **前提条件** 
+  読み取り元の Microsoft Dynamics 365 CRM オブジェクト。連絡先またはアカウントなどのオブジェクト名が必要です。次の表に、サポートされているエンティティを示します。

 **サポートされているエンティティ** 


| エンティティ | フィルタリング可能 | 制限をサポートする | Order By をサポートする | Select \$1 をサポートする | パーティショニングをサポートする | 
| --- | --- | --- | --- | --- | --- | 
| 動的エンティティ | はい | あり | あり | あり | あり | 

 **例** 

```
dynamics365_read = glueContext.create_dynamic_frame.from_options(
    connection_type="microsoftdynamics365crm",
    connection_options={
        "connectionName": "connectionName",
        "ENTITY_NAME": "dynamic_entity",
        "API_VERSION": "v9.2",
        "INSTANCE_URL": "https://{tenantID}.api.crm.dynamics.com"
    }
```

## Microsoft Dynamics 365 CRM のエンティティとフィールドの詳細
<a name="microsoft-dynamics-365-entity-and-field-details"></a>

 **動的メタデータを持つエンティティ**: 

Microsoft Dynamics 365 CRM は、メタデータを動的に取得するためのエンドポイントを提供します。このため、動的エンティティの場合は演算子サポートがデータタイプレベルでキャプチャされます。

<a name="microsoft-dynamics-365-metadata-table"></a>[\[See the AWS documentation website for more details\]](http://docs.aws.amazon.com/ja_jp/glue/latest/dg/microsoft-dynamics-365-reading-from-entities.html)

 **パーティショニングクエリ** 

Microsoft Dynamics 365 CRM は、フィールドベースのパーティショニングのみをサポートします。

 Spark で同時実行を使用する場合は、追加の Spark オプション `PARTITION_FIELD`、`LOWER_BOUND`、`UPPER_BOUND`、および `NUM_PARTITIONS` を指定できます。これらのパラメータを使用すると、元のクエリは Spark タスクで同時に実行できるサブクエリの `NUM_PARTITIONS` の数に分割されます。
+  `PARTITION_FIELD`: クエリのパーティション化に使用するフィールドの名前。
+  `LOWER_BOUND`: 選択したパーティションフィールドの包括的な下限値。

   Datetime には、Spark SQL クエリで使用される Spark タイムスタンプ形式を使用できます。有効な値の例: `"2024-01-30T06:47:51.000Z"`。
+  `UPPER_BOUND`: 選択したパーティションフィールドの排他的上限値。
+  `NUM_PARTITIONS`: パーティション数。

 エンティティごとのパーティション分割フィールドのサポートの詳細は、以下の表にまとめられています。


| エンティティ名 | パーティション分割フィールド | DataType | 
| --- | --- | --- | 
| 動的エンティティ (標準エンティティ) | クエリ可能な動的 DateTime フィールド | createdon、modifiedon | 
| 動的エンティティ (カスタムエンティティ) | createdon、modifiedon | createdon、modifiedon | 

 **例** 

```
dynamics365_read = glueContext.create_dynamic_frame.from_options(
    connection_type="microsoftdynamics365crm",
    connection_options={
        "connectionName": "connectionName",
        "ENTITY_NAME": "dynamic_entity",
        "API_VERSION": "v9.2",
        "instanceUrl": "https://{tenantID}.api.crm.dynamics.com"
        "PARTITION_FIELD": "createdon"
        "LOWER_BOUND": "2024-01-30T06:47:51.000Z"
        "UPPER_BOUND": "2024-06-30T06:47:51.000Z"
        "NUM_PARTITIONS": "10"
    }
```

# Microsoft Dynamics 365 CRM 接続オプションリファレンス
<a name="microsoft-dynamics-365-connection-options"></a>

Microsoft Dynamics 365 CRM の接続オプションは次のとおりです。
+  `ENTITY_NAME`(文字列) – (必須) 読み取りに使用されます。Microsoft Dynamics 365 CRM 内のオブジェクトの名前。
+  `API_VERSION`(文字列) – (必須) 読み取りに使用されます。使用する Microsoft Dynamics 365 CRM Rest API バージョン。
+  `SELECTED_FIELDS`(List<String>) – Default: empty(SELECT \$1). 読み込みに使用されます。オブジェクトに選択する列です。
+  `FILTER_PREDICATE`(文字列) – デフォルト: 空 読み込みに使用されます。Spark SQL 形式である必要があります。
+  `QUERY`(文字列) - デフォルト: 空 読み込みに使用されます。完全な Spark SQL クエリです。
+  `INSTANCE_URL`(文字列) - (必須) 形式の有効な Microsoft Dynamics 365 CRM インスタンス URL。`https://{tenantID}.api.crm.dynamics.com`
+  `NUM_PARTITIONS`(整数) – デフォルト: 1。読み込みに使用されます。読み取り用のパーティションの数です。
+  `PARTITION_FIELD`(文字列) - 読み取りに使用されます。クエリをパーティション化するために使用するフィールドです。
+  `LOWER_BOUND`(文字列) - 読み取りに使用されます。選択したパーティションフィールドの包括的な下限値です。例えば、`2024-01-30T06:47:51.000Z` などです。
+  `UPPER_BOUND`(文字列) - 読み取りに使用されます。選択したパーティションフィールドの排他的上限値です。例えば、`2024-06-30T06:47:51.000Z` などです。

# 制限
<a name="microsoft-dynamics-365-connector-limitations"></a>

Microsoft Dynamics 365 CRM コネクタの制限事項は次のとおりです。
+  Microsoft Dynamics 365 CRM では、レコードベースのパーティショニングがサポートされていません。これは、オフセットパラメータがサポートされておらず、そのためにレコードベースのパーティショニングをサポートできないことが理由です。
+  データサイズとレート制限の組み合わせが原因で発生する SaaS からの Internal Server 例外を回避するため、ページ分割はページあたり最大 500 レコードに設定されています。
  + [ページ分割に関する SaaS ドキュメント](https://learn.microsoft.com/en-us/power-apps/developer/data-platform/webapi/query/page-results?view=dataverse-latest)
  + [レート制限に関する SaaS ドキュメント](https://learn.microsoft.com/en-us/power-apps/developer/data-platform/api-limits?tabs=sdk)
+  Microsoft Dynamics 365 CRM は、すべてのエンティティに対し、親フィールドのみで `order by` をサポートします。サブフィールドで `order by` はサポートされません。
  + ASC 方向と DESC 方向の両方がサポートされています。
  + 複数フィールドでの `order by` がサポートされています。
+  `aadusers` 標準エンティティの「createddatetime」フィールドをフィルタリングすると、フィルタリングがサポートされているにもかかわらず、SaaS から Bad Request エラーがスローされます。メタデータの性質は動的であるため、他のエンティティで同様の問題が発生していることは明確に特定されておらず、根本的原因も明らかになっていません。そのため、この問題に対処することはできません。
+  Struct、List、Map などの複雑なオブジェクトタイプは、フィルタリングをサポートしていません。
+  レスポンスから取得できる多くのフィールドは、動的メタデータレスポンスで `isRetrievable` が `false` としてマークされています。データ損失を避けるため、すべてのフィールドで `isRetrievable` が `true` に設定されています。
+  フィールドベースのパーティショニングは、次の基準を満たす場合にすべてのエンティティでサポートされます。
  + DateTime のクエリ可能フィールドが標準エンティティ内、またはカスタムエンティティの `createdon` および `modifiedon` フィールド (システム生成のもの) に存在していること。
  + システム生成フィールドの排他的 ID、または SaaS メタデータ API からの null 可能なプロパティが存在しないこと。ただし、フィルタリング可能で null 不可なフィールドはデフォルトで使用可能なフィールドのみであるのが一般的です。このため、上記のフィールド選択基準は null セーフと見なされ、フィルタリング可能な場合はパーティショニングの対象となります。

# Microsoft Teams への接続
<a name="connecting-to-microsoft-teams"></a>

 Microsoft Teams は、Microsoft 365 内の共同ワークスペースであり、職場の会話、共同チームワーク、ビデオチャット、ドキュメント共有の中心的なハブとして機能し、統合されたツールスイートでワーカーの生産性を高めるように設計されています。

**Topics**
+ [Microsoft Teams の AWS Glue サポート](microsoft-teams-support.md)
+ [接続を作成および使用するための API オペレーションを含むポリシー](microsoft-teams-configuring-iam-permissions.md)
+ [Microsoft Teams の設定](microsoft-teams-configuring.md)
+ [Microsoft Teams 接続の設定](microsoft-teams-configuring-connections.md)
+ [Microsoft Teams エンティティからの読み取り](microsoft-teams-reading-from-entities.md)
+ [Microsoft Teams 接続オプションのリファレンス](microsoft-teams-connection-options.md)
+ [制限](microsoft-teams-connector-limitations.md)
+ [新しい Microsoft Teams アカウントを作成します。](#microsoft-teams-account-creation)

# Microsoft Teams の AWS Glue サポート
<a name="microsoft-teams-support"></a>

AWS Glue は、次のように Microsoft Teams をサポートしています。

**ソースとしてサポートされていますか?**  
はい。AWS Glue ETL ジョブを使用して、Microsoft Teams からデータをクエリできます。

**ターゲットとしてサポートされていますか?**  
いいえ。

**サポートされている Microsoft Teams API バージョン**  
 v1。バージョン固有のエンティティサポートについては、「ソースに対応するエンティティ」を参照してください。

# 接続を作成および使用するための API オペレーションを含むポリシー
<a name="microsoft-teams-configuring-iam-permissions"></a>

 次のサンプル ポリシーで、接続の作成と使用に必要な AWS の権限について説明します。新しいロールを作成する場合は、以下を含むポリシーを作成します。

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

****  

```
{
  "Version":"2012-10-17",		 	 	 
  "Statement": [
    {
      "Effect": "Allow",
      "Action": [
        "glue:ListConnectionTypes",
        "glue:DescribeConnectionType",
        "glue:RefreshOAuth2Tokens",
        "glue:ListEntities",
        "glue:DescribeEntity"
      ],
      "Resource": "*"
    }
  ]
}
```

------

また、次のマネージド IAM ポリシーを使用して、アクセスを許可できます。
+  [ AWSGlueServiceRole ](https://console.aws.amazon.com/iam/home#policies/arn:aws:iam::aws:policy/service-role/AWSGlueServiceRole) – さまざまな AWS Glue プロセスを実行するために必要なリソースへのアクセス権をユーザーに代わって付与します。これらのリソースには、AWS Glue、Amazon S3、IAM、CloudWatch Logs、および Amazon EC2 が含まれます。このポリシーで指定されたリソースの命名規則に従った場合、AWS Glue プロセスは必要なアクセス許可を使用できます。このポリシーは、通常、クローラー、ジョブ、開発エンドポイントを定義するときに指定されたロールにアタッチされます。
+  [ AWSGlueConsoleFullAccess ](https://console.aws.amazon.com/iam/home#policies/arn:aws:iam::aws:policy/AWSGlueConsoleFullAccess) — ポリシーがアタッチされているアイデンティティが AWS マネージメントコンソールを使用するときは、AWS Glue リソースへのフルアクセスを許可します。このポリシーで指定されたリソースの命名規則に従った場合、ユーザーは完全なコンソール機能を使用できます。このポリシーは、通常 AWS Glue コンソールのユーザーにアタッチされています。

# Microsoft Teams の設定
<a name="microsoft-teams-configuring"></a>

AWS Glue を使用して Microsoft Teams からデータを転送できるようにするには、次の要件を満たす必要があります。

## 最小要件
<a name="microsoft-teams-configuring-min-requirements"></a>
+  メールアドレスとパスワードが設定された Microsoft Teams デベロッパーアカウントがある。詳細については、「[新しい Microsoft Teams アカウントを作成します。](connecting-to-microsoft-teams.md#microsoft-teams-account-creation)」を参照してください。
+  Microsoft アカウントで OAuth2 アプリケーションのセットアップを完了している必要があります。このアプリケーションによって、お客様のアカウントに対して認可呼び出しを行う際にデータへの安全なアクセスのために AWS Glue が使用するクライアント ID とシークレット認証情報を提供します。詳細については、「[新しい Microsoft Teams アカウントを作成します。](connecting-to-microsoft-teams.md#microsoft-teams-account-creation)」を参照してください。

 これらの要件を満たすと、Microsoft Teams アカウントに AWS Glue を接続する準備が整います。一般的な接続では、Microsoft Teams で他に何もする必要はありません。

# Microsoft Teams 接続の設定
<a name="microsoft-teams-configuring-connections"></a>

Microsoft Teams では、認可メカニズムとして次の 2 つのタイプがサポートされています。

1.  OAuth 認証: Microsoft Teams は、OAuth2 の AUTHORIZATION\$1CODE グラントタイプをサポートしています。
   +  このグラントタイプは、ユーザーを認証するためにサードパーティーの認証サーバーにユーザーをリダイレクトすることから、「three-legged」の OAuth と見なされます。AWS Glue コンソール経由で接続を作成するときに使用されます。接続を作成するユーザーは、デフォルトで AWS Glue 所有の接続アプリケーションを使用できます。この場合、Microsoft Teams インスタンス URL 以外の OAuth 関連情報を指定する必要はありません。AWS Glue コンソールでは、ユーザーは Microsoft Teams にリダイレクトされます。ここではユーザーがログインし、Microsoft Teams インスタンスにアクセスするためのリクエストされた権限を AWS Glue に許可する必要があります。
   +  ユーザーは、Microsoft Teams で独自の接続アプリケーションを作成し、AWS Glue コンソールを介して接続を作成するときに独自のクライアント ID とクライアントシークレットを指定することを選択できます。このシナリオでも Microsoft Teams にリダイレクトされてログインし、リソースへアクセスするために AWS Glue を認可します。
   +  このグラントタイプは、更新トークンとアクセストークンになります。アクセストークンは 1 時間有効で、更新トークンを使用することでユーザーとやり取りすることなく自動的に更新できます。
   +  認証コード OAuth フロー用の接続アプリケーションの作成に関する Microsoft Teams の公開ドキュメントについては、「\$1 Microsoft Learn」の 「[Register an application with the Microsoft identity platform](https://learn.microsoft.com/en-us/graph/auth-register-app-v2)」を参照してください。

Microsoft Teams 接続を設定するには

1.  AWS Secrets Manager で、次の詳細を含むシークレットを作成します。AWS Glue で接続ごとにシークレットを作成する必要があります。

   1.  OAuth 認可の場合: 
      +  カスタマーマネージド接続アプリケーションの場合 – シークレットには、USER\$1MANAGED\$1CLIENT\$1APPLICATION\$1CLIENT\$1SECRET を使用して接続されたアプリケーションのコンシューマーシークレットをキーとして含める必要があります。

1. AWS Glue Studio で、以下の手順に従って **[データ接続]** の下に接続を作成します。

   1.  [データ接続] の **[接続を作成]** を選択します。

   1. **[データソース]** を選択するときは、[Microsoft Teams] を選択します。

   1. Microsoft Teams の **[テナント ID]** を入力します。

   1.  AWS Glue が次のアクションを担い、その権限を持つことができる IAM ロールを選択します。

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

****  

      ```
      {
        "Version":"2012-10-17",		 	 	 
        "Statement": [
          {
            "Effect": "Allow",
            "Action": [
              "secretsmanager:DescribeSecret",
              "secretsmanager:GetSecretValue",
              "secretsmanager:PutSecretValue",
              "ec2:CreateNetworkInterface",
              "ec2:DescribeNetworkInterfaces",
              "ec2:DeleteNetworkInterface"
            ],
            "Resource": "*"
          }
        ]
      }
      ```

------

   1.  Microsoft Teams アプリケーションのユーザーマネージドクライアントアプリケーション ClientId を入力します。

   1.  AWS Glue でこの接続に使用する `secretName` を選択して、トークンを配置します。

   1.  ネットワークを使用する場合は、ネットワークオプションを選択します。

1.  AWS Glue ジョブに関連付けられている IAM ロールに `secretName` を読み取るアクセス許可を付与します。[**次へ**] を選択します。

1.  AWS Glue ジョブ設定で、**[追加のネットワーク接続]** として `connectionName` を指定します。

# Microsoft Teams エンティティからの読み取り
<a name="microsoft-teams-reading-from-entities"></a>

 **前提条件** 
+  読み取り元の Microsoft Teams オブジェクト。team または channel-message などのオブジェクト名が必要です。次の表に、サポートされているエンティティを示します。

 **ソースに対応するエンティティ** 

 すべてのエンティティは API バージョン 1.0 でサポートされています。


| エンティティ | フィルタリング可能 | 制限をサポートする | Order By をサポートする | Select \$1 をサポートする | パーティショニングをサポートする | 
| --- | --- | --- | --- | --- | --- | 
| チーム | なし | なし | なし | あり | なし | 
| Team Members | はい | あり | なし | あり | あり | 
| グループ | はい | あり | あり | あり | あり | 
| Group Members | はい | あり | なし | あり | なし | 
| チャンネル | あり | なし | なし | あり | あり | 
| Channel Messages | なし | あり | なし | あり | なし | 
| Channel Message Replies | なし | あり | なし | あり | なし | 
| Channel Tabs | あり | なし | なし | あり | なし | 
| Chats | はい | あり | あり | あり | あり | 
| Calendar Events | はい | あり | あり | あり | あり | 

 **例** 

```
MicrosoftTeams_read = glueContext.create_dynamic_frame.from_options(
    connection_type="MicrosoftTeams",
    connection_options={
        "connectionName": "connectionName",
        "ENTITY_NAME": "company",
        "API_VERSION": "v1.0"
    }
```

## Microsoft Teams エンティティとフィールドの詳細
<a name="microsoft-teams-entity-and-field-details"></a>

 エンティティリスト: 
+  Team: [ https://docs.microsoft.com/en-us/graph/api/user-list-joinedteams?view=graph-rest-1.0 ](https://docs.microsoft.com/en-us/graph/api/user-list-joinedteams?view=graph-rest-1.0) 
+  Team-Member: [ https://docs.microsoft.com/en-us/graph/api/team-list-members?view=graph-rest-1.0 ](https://docs.microsoft.com/en-us/graph/api/team-list-members?view=graph-rest-1.0) 
+  Group: [ https://docs.microsoft.com/en-us/graph/api/group-list?view=graph-rest-1.0 ](https://docs.microsoft.com/en-us/graph/api/group-list?view=graph-rest-1.0) 
+  Group-Member: [ https://docs.microsoft.com/en-us/graph/api/group-list-members?view=graph-rest-1.0 ](https://docs.microsoft.com/en-us/graph/api/group-list-members?view=graph-rest-1.0) 
+  Channel: [ https://docs.microsoft.com/en-us/graph/api/channel-list?view=graph-rest-1.0 ](https://docs.microsoft.com/en-us/graph/api/channel-list?view=graph-rest-1.0) 
+  Channel-Message: [ https://docs.microsoft.com/en-us/graph/api/channel-list-messages?view=graph-rest-1.0 ](https://docs.microsoft.com/en-us/graph/api/channel-list-messages?view=graph-rest-1.0) 
+  Channel-Message-Reply: [ https://docs.microsoft.com/en-us/graph/api/chatmessage-list-replies?view=graph-rest-1.0 ](https://docs.microsoft.com/en-us/graph/api/chatmessage-list-replies?view=graph-rest-1.0) 
+  Channel-Tab: [ https://docs.microsoft.com/en-us/graph/api/channel-list-tabs?view=graph-rest-1.0 ](https://docs.microsoft.com/en-us/graph/api/channel-list-tabs?view=graph-rest-1.0) 
+  Chat: [ https://docs.microsoft.com/en-us/graph/api/chat-list?view=graph-rest-1.0 ]( https://docs.microsoft.com/en-us/graph/api/chat-list?view=graph-rest-1.0) 
+  Calendar-Event: [ https://docs.microsoft.com/en-us/graph/api/group-list-events?view=graph-rest-1.0 ](https://docs.microsoft.com/en-us/graph/api/group-list-events?view=graph-rest-1.0) 

 **パーティショニングクエリ** 

 Spark で同時実行を使用する場合は、追加の Spark オプション `PARTITION_FIELD`、`LOWER_BOUND`、`UPPER_BOUND`、および `NUM_PARTITIONS` を指定できます。これらのパラメータを使用すると、元のクエリは Spark タスクで同時に実行できるサブクエリの `NUM_PARTITIONS` の数に分割されます。
+  `PARTITION_FIELD`: クエリのパーティション化に使用するフィールドの名前。
+  `LOWER_BOUND`: 選択したパーティションフィールドの包括的な下限値。

   日付については、Spark SQL クエリで使用される Spark の日付形式を受け入れます。有効な値の例: `"2024-02-06"`。
+  `UPPER_BOUND`: 選択したパーティションフィールドの排他的上限値。
+  `NUM_PARTITIONS`: パーティション数。

 エンティティごとのパーティション分割フィールドのサポートの詳細は、以下の表にまとめられています。


| エンティティ名 | パーティション分割フィールド | データタイプ | 
| --- | --- | --- | 
| Team Members | visibleHistoryStartDateTime | DateTime | 
| グループ | createdDateTime | DateTime | 
| チャンネル | createdDateTime | DateTime | 
| Chats | createdDateTime、lastModifiedDateTime | DateTime | 
| Calendar Events | createdDateTime、lastModifiedDateTime、originalStart | DateTime | 

 **例** 

```
microsoftteams_read = glueContext.create_dynamic_frame.from_options(
    connection_type="MicrosoftTeams",
    connection_options={
        "connectionName": "connectionName",
        "ENTITY_NAME": "group",
        "API_VERSION": "v1.0",
        "PARTITION_FIELD": "createdDateTime"
        "LOWER_BOUND": "2022-07-13T07:55:27.065Z"
        "UPPER_BOUND": "2022-08-12T07:55:27.065Z"
        "NUM_PARTITIONS": "2"
    }
```

# Microsoft Teams 接続オプションのリファレンス
<a name="microsoft-teams-connection-options"></a>

Microsoft Teams の接続オプションは次のとおりです。
+  `ENTITY_NAME`(文字列) – (必須) 読み取りに使用されます。Microsoft Teams のオブジェクトの名前。
+  `API_VERSION`(文字列) – (必須) 読み取りに使用されます。使用する Microsoft Teams Rest API バージョン。例: v1.0。
+  `SELECTED_FIELDS`(List<String>) – Default: empty(SELECT \$1). 読み込みに使用されます。オブジェクトに選択する列です。
+  `FILTER_PREDICATE`(文字列) – デフォルト: 空 読み込みに使用されます。Spark SQL 形式である必要があります。
+  `QUERY`(文字列) - デフォルト: 空 読み込みに使用されます。完全な Spark SQL クエリです。
+  `PARTITION_FIELD`(文字列) - 読み取りに使用されます。クエリをパーティション化するために使用するフィールドです。
+  `LOWER_BOUND`(文字列) - 読み取りに使用されます。選択したパーティションフィールドの包括的な下限値。
+  `UPPER_BOUND` (文字列) - 読み取りに使用されます。選択したパーティションフィールドの排他的上限値。
+  `NUM_PARTITIONS`(整数) – デフォルト: 1。読み込みに使用されます。読み取り用のパーティションの数です。

# 制限
<a name="microsoft-teams-connector-limitations"></a>

Microsoft Teams コネクタの制限事項は次のとおりです。
+  Microsoft Teams API は、Chat および Team Member エンティティに指定された数よりも少ない数のレコードを返します。この問題は Microsoft Teams サポートに報告されており、調査中です。

## 新しい Microsoft Teams アカウントを作成します。
<a name="microsoft-teams-account-creation"></a>

1.  Microsoft Teams のホームページ [https://account.microsoft.com/account/](https://account.microsoft.com/account/) に移動し、**[サインイン]** を選択します。

1.  **[アカウントを作成]** を選択します。

1.  アカウントの作成に必要な情報を入力し、新しいアカウントを作成します。

1.  Microsoft Teams ウェブサイト [https://www.microsoft.com/en-in/microsoft-teams/log-in](https://www.microsoft.com/en-in/microsoft-teams/log-in) に移動します。

1.  先ほど作成した Microsoft アカウントを使用してサインアップします。

1.  Teams へのサインアップが成功したら、[https://account.microsft.com/services](https://account.microsft.com/services) に移動します。

1.  **[Microsoft 365 を試す]** を選択します。

1.  Microsoft Teams コネクタのすべての必要な機能にアクセスするには、以下の Microsoft 365 または Microsoft Teams サブスクリプションのいずれかを有効にします。
   + Microsoft Teams Essentials
   + Microsoft 365 Business
   + Microsoft 365 Business Basic
   + Microsoft 365 Business Standard
   + Microsoft 365 Business Premium

**マネージドクライアントアプリを作成します。**

1.  マネージドアプリケーションを作成するには、Microsoft Entra (以前の Azure Active Directory) に新しい OAuth アプリを登録する必要があります。

1.  [Microsoft Entra 管理センター](https://entra.microsoft.com)にサインインします。

1.  複数のテナントにアクセスできる場合は、トップメニューの [設定] アイコンを使用して、[ディレクトリ \$1 サブスクリプション] メニューからアプリケーションを登録するテナントに切り替えます。

1.  [ID] > [アプリケーション] > [アプリ登録] に移動し、**[新規登録]** を選択します。

1. アプリケーションの表示名を入力します。

1.  [サポートされているアカウントタイプ] セクションで、アプリケーションを使用できるユーザーを指定します。このアプリをグローバルにするには、[任意の組織ディレクトリ内のアカウント] または [任意の組織ディレクトリ内のアカウントと個人用 Microsoft アカウント] を選択します。

1.  リダイレクト URI `https://{region}.console.aws.amazon.com/appflow/oauth` を入力します。例えば、`us-west-2 region` に `https://us-west-2.console.aws.amazon.com/appflow/oauth` を追加します。使用するリージョンごとに複数の URL を追加できます。

1.  アプリを登録します。

1.  今後の使用のために、クライアント ID を書き留めます。

1.  [Essentials] セクションで **[証明書またはシークレットの追加]** を選択します。

1.  **[新しいクライアントシークレット]** を選択します。

1.  説明と有効期限を入力します。

1.  今後の使用のために、クライアントシークレットをコピーして保存します。

1.  左側のメニューリストで、**[API アクセス許可]** を選択します。

1.  **[アクセス許可の追加]** を選択します。

1.  [Microsoft Graph] を選択します。

1.  [委任されたアクセス許可] を選択します。

1.  次のアクセス許可をすべて確認します。
   + User.Read
   + Offline\$1access
   + User.Read.All
   + User.ReadWrite.All
   + TeamsTab.ReadWriteForTeam
   + TeamsTab.ReadWriteForChat
   + TeamsTab.ReadWrite.All
   + TeamsTab.Read.All
   + TeamSettings.ReadWrite.All
   + TeamSettings.Read.All
   + TeamMember.ReadWrite.All
   + TeamMember.Read.All
   + Team.ReadBasic.All
   + GroupMember.ReadWrite.All
   + GroupMember.Read.All
   + Group.ReadWrite.All
   + Group.Read.All
   + Directory.ReadWrite.All
   + Directory.Read.All
   + Directory.AccessAsUser.All
   + Chat.ReadWrite
   + Chat.ReadBasic
   + Chat.Read
   + ChannelSettings.ReadWrite.All
   + ChannelSettings.Read.All
   + ChannelMessage.Read.All
   + Channel.ReadBasic.All

1.  [**Add permissions (許可の追加)**] を選択します。これで、アプリは正常にセットアップされました。クライアント ID とクライアントシークレットを使用して、新しい接続を作成できます。詳細については、[https://learn.microsoft.com/en-us/graph/auth-register-app-v2](https://learn.microsoft.com/en-us/graph/auth-register-app-v2) を参照してください。

# Mixpanel に対する接続
<a name="connecting-to-mixpanel"></a>

Mixpanel は、企業がユーザーエンゲージメントを測定および最適化するのに役立つ強力なリアルタイム分析プラットフォームです。Mixpanel は、顧客の行動を追跡するために使用されるアプリです。これにより、ユーザーが製品にどのように関与しているかを追跡し、数回クリックするだけで結果をクエリおよび視覚化できるインタラクティブなレポートでこのデータを分析できます。Mixpanel ユーザーとして、AWS Glue を Mixpanel アカウントに接続できます。その後、Mixpanel を ETL ジョブのデータソースとして使用できます。これらのジョブを実行して、Mixpanel と AWS サービス、またはその他のサポートされているアプリケーション間でデータを転送します。

**Topics**
+ [Mixpanel 向けの AWS Glue サポート](Mixpanel-support.md)
+ [接続を作成および使用するための API オペレーションを含むポリシー](mixpanel-configuring-iam-permissions.md)
+ [Mixpanel の設定](mixpanel-configuring.md)
+ [Mixpanel 接続の設定](mixpanel-configuring-connections.md)
+ [Mixpanel エンティティからの読み取り](mixpanel-reading-from-entities.md)
+ [Mixpanel 接続オプション](mixpanel-connection-options.md)
+ [Mixpanel アカウントの作成とクライアントアプリの設定](mixpanel-create-account.md)
+ [制限](mixpanel-connector-limitations.md)

# Mixpanel 向けの AWS Glue サポート
<a name="Mixpanel-support"></a>

AWS Glue は、次のように Mixpanel をサポートしています。

**ソースとしてサポートされていますか?**  
はい。AWS Glue ETL ジョブを使用して、Mixpanel からデータをクエリできます。

**ターゲットとしてサポートされていますか?**  
いいえ。

**サポートされている Mixpanel API バージョン**  
 2.0 

# 接続を作成および使用するための API オペレーションを含むポリシー
<a name="mixpanel-configuring-iam-permissions"></a>

 次のサンプル ポリシーで、接続の作成と使用に必要な AWS の権限について説明します。新しいロールを作成する場合は、以下を含むポリシーを作成します。

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

****  

```
{
  "Version":"2012-10-17",		 	 	 
  "Statement": [
    {
      "Effect": "Allow",
      "Action": [
        "glue:ListConnectionTypes",
        "glue:DescribeConnectionType",
        "glue:RefreshOAuth2Tokens",
        "glue:ListEntities",
        "glue:DescribeEntity"
      ],
      "Resource": "*"
    }
  ]
}
```

------

上記の方法を使用しない場合は、代わりに次のマネージド IAM ポリシーを使用します。
+  [ AWSGlueServiceRole ](https://console.aws.amazon.com/iam/home#policies/arn:aws:iam::aws:policy/service-role/AWSGlueServiceRole) – さまざまな AWS Glue プロセスを実行するために必要なリソースへのアクセス権をユーザーに代わって付与します。これらのリソースには、AWS Glue、Amazon S3、IAM、CloudWatch Logs、および Amazon EC2 が含まれます。このポリシーで指定されたリソースの命名規則に従った場合、AWS Glue プロセスは必要なアクセス許可を使用できます。このポリシーは、通常、クローラー、ジョブ、開発エンドポイントを定義するときに指定されたロールにアタッチされます。
+  [ AWSGlueConsoleFullAccess ](https://console.aws.amazon.com/iam/home#policies/arn:aws:iam::aws:policy/AWSGlueConsoleFullAccess) — ポリシーがアタッチされているアイデンティティが AWS マネージメントコンソールを使用するときは、AWS Glue リソースへのフルアクセスを許可します。このポリシーで指定されたリソースの命名規則に従った場合、ユーザーは完全なコンソール機能を使用できます。このポリシーは、通常 AWS Glue コンソールのユーザーにアタッチされています。

# Mixpanel の設定
<a name="mixpanel-configuring"></a>

AWS Glue を使用して Mixpanel から転送できるようにするには、次の要件を満たす必要があります。

## 最小要件
<a name="mixpanel-configuring-min-requirements"></a>
+  Mixpanel アカウントがある。アカウントの作成の詳細については、「[Mixpanel アカウントの作成](mixpanel-create-account.md)」を参照してください。
+  Mixpanel アカウントで API アクセスが有効になっていること。Enterprise、Unlimited、Developer、Performance の各エディションで API アクセスがデフォルトで有効になっている。

これらの要件を満たすと、Mixpanel アカウントに AWS Glue を接続する準備が整います。一般的な接続では、Mixpanel で他に何もする必要はありません。

# Mixpanel 接続の設定
<a name="mixpanel-configuring-connections"></a>

Mixpanel は、`BasicAuth` のユーザー名とパスワードをサポートしています。基本認証は、クライアントが保護されたリソースにアクセスするための認証情報を直接提供する簡単な認証方法です。AWS Glue はユーザー名とパスワードを使用して Mixpanel API を認証できます。

`BasicAuth` フローに関する公開 Mixpanel ドキュメントについては、「[Mixpanel サービスアカウント](https://developer.mixpanel.com/reference/service-accounts)」を参照してください。

Mixpanel 接続を設定するには:

1. AWS Secrets Manager で、次の詳細を含むシークレットを作成します。
   +  基本的な認証の場合、シークレットには、`USERNAME` と `PASSWORD` を使用して接続されたアプリケーションのコンシューマーシークレットをキーとして含める必要があります。
**注記**  
AWS Glue で接続ごとにシークレットを作成する必要があります。

1. AWS Glue Studio で、以下の手順に従って **[データ接続]** の下に接続を作成します。

   1. **[接続タイプ]** を選択する際に、**[Mixpanel]** を選択します。

   1. 接続先の Mixpanel の `INSTANCE_URL` を指定します。

   1. AWS Glue が次のアクションを引き受けて、その権限を持つことができる IAM ロールを選択します。

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

****  

      ```
      {
        "Version":"2012-10-17",		 	 	 
        "Statement": [
          {
            "Effect": "Allow",
            "Action": [
              "secretsmanager:DescribeSecret",
              "secretsmanager:GetSecretValue",
              "secretsmanager:PutSecretValue",
              "ec2:CreateNetworkInterface",
              "ec2:DescribeNetworkInterfaces",
              "ec2:DeleteNetworkInterface"
            ],
            "Resource": "*"
          }
        ]
      }
      ```

------

   1.  AWS Glue でこの接続に使用する `secretName` を選択して、トークンを配置します。

   1.  ネットワークを使用する場合は、**[ネットワークオプション]** を選択します。

1.  AWS Glue ジョブに関連付けられている IAM ロールに `secretName` を読み取るアクセス許可を付与します。

# Mixpanel エンティティからの読み取り
<a name="mixpanel-reading-from-entities"></a>

 **前提条件** 

データを読み取る `Funnels`、`Retention`、`Retention Funnels` などの Mixpanel オブジェクトが必要です。さらに、オブジェクト名を知る必要があります。

 **サポートされているエンティティ** 


| エンティティ | フィルタリング可能 | 制限をサポートする | Order By をサポートする | Select \$1 をサポートする | パーティショニングをサポートする | 
| --- | --- | --- | --- | --- | --- | 
| ファネル | はい | なし | なし | あり | なし | 
| Retention | はい | なし | なし | あり | なし | 
| セグメンテーション | はい | なし | なし | あり | なし | 
| セグメンテーション合計 | はい | なし | なし | あり | なし | 
| セグメンテーション平均 | はい | なし | なし | あり | なし | 
| コホート | はい | なし | なし | あり | なし | 
| Engage | いいえ | あり | なし | あり | なし | 
| Events | はい | なし | なし | あり | なし | 
| イベントの上位 | はい | なし | なし | あり | なし | 
| イベント名 | はい | なし | なし | あり | なし | 
| イベントのプロパティ | はい | なし | なし | あり | なし | 
| イベントのプロパティの上位 | はい | なし | なし | あり | なし | 
| イベントのプロパティ値 | はい | なし | なし | あり | なし | 
| ‏注釈 | はい | なし | なし | あり | なし | 
| イベントアクティビティのプロファイル | はい | なし | なし | あり | なし | 

 **例** 

```
mixpanel_read = glueContext.create_dynamic_frame.from_options(
    connection_type="mixpanel",
    connection_options={
        "connectionName": "connectionName",
        "ENTITY_NAME": "/cohorts/list?project_id=2603353",
        "API_VERSION": "2.0",
        "INSTANCE_URL": "https://www.mixpanel.com/api/app/me"
    }
```

 **Mixpanel エンティティとフィールドの詳細** 

[\[See the AWS documentation website for more details\]](http://docs.aws.amazon.com/ja_jp/glue/latest/dg/mixpanel-reading-from-entities.html)

# Mixpanel 接続オプション
<a name="mixpanel-connection-options"></a>

Mixpanel の接続オプションは次のとおりです。
+  `ENTITY_NAME` (文字列) – (必須) 読み取り / 書き込みに使用されます。Mixpanel のオブジェクトの名前。
+  `API_VERSION` (文字列) – (必須) 読み取り / 書き込みに使用されます。使用する Mixpanel Rest API バージョン。例: v2.0。
+  `SELECTED_FIELDS`(List<String>) – Default: empty (SELECT \$1). 読み込みに使用されます。オブジェクトに選択する列です。
+  `FILTER_PREDICATE`(文字列) – デフォルト: 空 読み込みに使用されます。Spark SQL 形式である必要があります。
+  `QUERY`(文字列) – デフォルト: 空 読み込みに使用されます。完全な Spark SQL クエリです。

# Mixpanel アカウントの作成とクライアントアプリの設定
<a name="mixpanel-create-account"></a>

**Mixpanel アカウントの作成**

1. [Mixpanel ホームページ/](https://mixpanel.com/)に移動します。

1. **[Mixpanel]** のホームページで、ページの右上隅にある **[サインアップ]** を選択します。

1. **[Let's get started]** ページで、次のアクションを実行します。
   + 指定されたフィールドに E メールアドレスを入力します。
   + 必要なチェックボックスを選択して、条件に同意します。
   + **[開始方法]** を選択して続行します。

     正常に完了すると、検証 E メールが送信されます。

1. E メールの受信トレイで検証メッセージを確認し、E メールを開き、手順に従って E メールアドレスを確認します。

1. 検証ページで、**[E メールの検証]** を選択して E メールの検証を完了します。

1. **[組織の名前付け]** ページで、組織名を入力し、**[次へ]** を選択します。

1. **[最初のプロジェクト]** ページで、プロジェクトの詳細を入力し、**[作成]** を選択します。

1. 次のページで、**[始めましょう]** を選択してアカウントの作成を完了します。

**Mixpanel アカウントへのログイン**

1. [Mixpanel ログインページ/](https://mixpanel.com/login/)に移動します。

1. E メールアドレスを入力し、**[続行]** を選択します。

1. E メールの受信トレイで検証メッセージを確認し、E メールを開き、手順に従って E メールアドレスを確認します。

1. 次のページで、**[ログインボタン]** を選択してアカウントにログインします。

**Mixpanel プランの購入**

1. Mixpanel ページで、ページの右上隅にある **[設定]** アイコンを選択します。

1. オプションのリストから、**[プランの詳細と請求]** を選択します。

1. **[プランの詳細と請求]** ページで、**[アップグレードまたは変更]** を選択します。

1. 次のページで、購入するプランを選択します。

   これで、アカウントの作成とプランの購入プロセスが完了します。

**ユーザー名とクライアントシークレットの作成 (アプリを登録するには)**

1. Mixpanel ページで、ページの右上隅にある **[設定]** アイコンを選択します。

1. オプションのリストから、**[プロジェクト設定]** を選択します。

1. **[プロジェクト設定]** ページで、**[サービスアカウント]** を選択し、**[サービスアカウントの追加]** を選択します。

1. **[サービスアカウント]** のドロップダウンリストから、**[サービスアカウントを選択するか、作成する名前を入力し]**、**[プロジェクトロール]** を追加し、**[有効期限]** を指定して、**[追加]** を選択します。
**重要**  
前のステップを完了すると、次のページにサービスアカウントのシークレットキーが表示されます。サービスアカウントのシークレットキーを必ず保存してください。この時点以降は、再度アクセスすることはできません。

# 制限
<a name="mixpanel-connector-limitations"></a>

Mixpanel コネクタの制限は次のとおりです:
+ `Segmentation Numeric` エンティティの場合、必須フィルターの数値データが見つからなかった場合、Mixpanel API は `400 (Bad Request)` エラーをスローします。フロー障害を防ぐための `OK` 対応として扱います。
+ 次の理由により、クエリ可能なフィールド `limit` はサポートされているエンティティから削除されました。
  + SDK の制限機能として解釈されたため、エラーが発生していた
  + フィルターが実用的ではなかった
  + 同等の機能が制限機能の実装の対象となった
+ SaaS プラットフォームからのパーティショニングに必要な演算子 (`>=`、`<=`、`<`、`>`、`between`) がないため、フィールドベースのパーティション分割をサポートできません。`between` 演算子をサポートしていますが、この演算子をサポートするフィールドは取得できません。したがって、フィールドベースのパーティショニングの基準は満たされません。
+  ページ分割をサポートするエンティティの「オフセット」値を取得するプロビジョニングがないため、Mixpanel のレコードベースのパーティション分割をサポートすることはできません。
+ `Cohorts` エンティティは `CreatedDate/Time` フィールドのみをサポートしており、結果 `DML_Status` を識別できないため、`UpdatedDate/Time` を識別するフィールドはありません。また、削除されたレコードを識別するエンドポイントはありません。したがって、CDC はサポートされません。
+  以下に示すエンティティの AWS Glue ジョブを実行するには、必須のフィルターが必要です。エンティティ名とその必要なフィルターについては、以下の表を参照してください。  
**エンティティ名と必要なフィルター**    
[\[See the AWS documentation website for more details\]](http://docs.aws.amazon.com/ja_jp/glue/latest/dg/mixpanel-connector-limitations.html)

# Monday への接続
<a name="connecting-to-monday"></a>

 Monday.com は、プロジェクト管理とチームコラボレーションを合理化する汎用性の高い作業オペレーティングシステムです。カスタマイズ可能なワークフロー、ビジュアルダッシュボード、自動化ツールが用意されており、生産性が向上します。ユーザーは、1 つの統合プラットフォームでタスクを追跡し、リソースを管理し、効果的に通信できます。

**Topics**
+ [AWS Glue の Monday のサポート](monday-support.md)
+ [接続を作成および使用するための API オペレーションを含むポリシー](monday-configuring-iam-permissions.md)
+ [Monday の設定](monday-configuring.md)
+ [Monday 接続の設定](monday-configuring-connections.md)
+ [Monday エンティティからの読み取り](monday-reading-from-entities.md)
+ [Monday 接続オプションのリファレンス](monday-connection-options.md)
+ [制限](monday-connector-limitations.md)
+ [新しい Monday アカウントを作成します。](#monday-account-creation)

# AWS Glue の Monday のサポート
<a name="monday-support"></a>

AWS Glue は、次のように Monday をサポートしています。

**ソースとしてサポートされていますか?**  
はい。AWS Glue ETL ジョブを使用して、Monday からデータをクエリできます。

**ターゲットとしてサポートされていますか?**  
いいえ。

**サポートされている Monday の API バージョン**  
 v2。

# 接続を作成および使用するための API オペレーションを含むポリシー
<a name="monday-configuring-iam-permissions"></a>

 次のサンプル ポリシーで、接続の作成と使用に必要な AWS の権限について説明します。新しいロールを作成する場合は、以下を含むポリシーを作成します。

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

****  

```
{
  "Version":"2012-10-17",		 	 	 
  "Statement": [
    {
      "Effect": "Allow",
      "Action": [
        "glue:ListConnectionTypes",
        "glue:DescribeConnectionType",
        "glue:RefreshOAuth2Tokens",
        "glue:ListEntities",
        "glue:DescribeEntity"
      ],
      "Resource": "*"
    }
  ]
}
```

------

また、次のマネージド IAM ポリシーを使用して、アクセスを許可できます。
+  [ AWSGlueServiceRole ](https://console.aws.amazon.com/iam/home#policies/arn:aws:iam::aws:policy/service-role/AWSGlueServiceRole) – さまざまな AWS Glue プロセスを実行するために必要なリソースへのアクセス権をユーザーに代わって付与します。これらのリソースには、AWS Glue、Amazon S3、IAM、CloudWatch Logs、および Amazon EC2 が含まれます。このポリシーで指定されたリソースの命名規則に従った場合、AWS Glue プロセスは必要なアクセス許可を使用できます。このポリシーは、通常、クローラー、ジョブ、開発エンドポイントを定義するときに指定されたロールにアタッチされます。
+  [ AWSGlueConsoleFullAccess ](https://console.aws.amazon.com/iam/home#policies/arn:aws:iam::aws:policy/AWSGlueConsoleFullAccess) — ポリシーがアタッチされているアイデンティティが AWS マネージメントコンソールを使用するときは、AWS Glue リソースへのフルアクセスを許可します。このポリシーで指定されたリソースの命名規則に従った場合、ユーザーは完全なコンソール機能を使用できます。このポリシーは、通常 AWS Glue コンソールのユーザーにアタッチされています。

# Monday の設定
<a name="monday-configuring"></a>

AWS Glue を使用して Monday からデータを転送できるようにするには、次の要件を満たす必要があります。

## 最小要件
<a name="monday-configuring-min-requirements"></a>
+  メールアドレスとパスワードを設定した Monday のデベロッパーアカウントがある。詳細については、「[新しい Monday アカウントを作成します。](connecting-to-monday.md#monday-account-creation)」を参照してください。
+  Monday デベロッパーアカウントで API アクセスが有効になっている。トライアル期間中は、追加料金なしで Monday API をすべて使用できます。トライアル期間終了後にデータを作成してアクセスするには、サブスクリプションを購入する必要があります。詳細については、[Monday のライセンスページ](https://developer.monday.com/api-reference/reference/about-the-api-reference)を参照してください。

 これらの要件を満たすと、Monday アカウントに AWS Glue を接続する準備が整います。一般的な接続では、Monday で他に何もする必要はありません。

# Monday 接続の設定
<a name="monday-configuring-connections"></a>

Monday は、認可メカニズムに次の 2 つのタイプをサポートしています。

1.  OAuth 認可: Monday は、OAuth2 の AUTHORIZATION\$1CODE グラントタイプをサポートしています。
   +  このグラントタイプは、ユーザーを認証するためにサードパーティーの認証サーバーにユーザーをリダイレクトすることから、「three-legged」の OAuth と見なされます。AWS Glue コンソール経由で接続を作成するときに使用されます。接続を作成するユーザーは、デフォルトで AWS Glue 所有の接続アプリケーションを使用できます。この場合、Monday インスタンス URL 以外の OAuth 関連情報を指定する必要はありません。AWS Glue コンソールでは、ユーザーが Monday にリダイレクトされます。ここではユーザーがログインし、Monday インスタンスにアクセスするためのリクエストされた権限を AWS Glue に許可する必要があります。
   +  ユーザーは、Monday で独自の接続アプリケーションを作成し、AWS Glue コンソールを介して接続を作成するときに独自のクライアント ID とクライアントシークレットを指定することを選択することもできます。このシナリオでも Monday にリダイレクトされてログインし、リソースへアクセスするために AWS Glue を認可します。
   +  このグラントタイプは、更新トークンとアクセストークンになります。アクセストークンは 1 時間有効で、更新トークンを使用することでユーザーとやり取りすることなく自動的に更新できます。
   +  詳細については、[AUTHORIZATION\$1CODE OAuth フローでの接続アプリケーションの作成に関するドキュメント](https://developers.Monday.com/docs/api/v1/Oauth)を参照してください。

1.  カスタム認可: 
   +  カスタム認可に必要な API キーの生成に関する Monday の公開ドキュメントについては、[https://developer.monday.com/api-reference/docs/authentication\$1api-token-permissions](https://developer.monday.com/api-reference/docs/authentication#api-token-permissions) を参照してください。

Monday 接続を設定するには

1.  AWS Secrets Manager で、次の詳細を含むシークレットを作成します。AWS Glue で接続ごとにシークレットを作成する必要があります。

   1.  OAuth 認可の場合: 
      +  カスタマーマネージド接続アプリケーションの場合 – シークレットには、USER\$1MANAGED\$1CLIENT\$1APPLICATION\$1CLIENT\$1SECRET を使用して接続されたアプリケーションのコンシューマーシークレットをキーとして含める必要があります。

   1.  カスタム認可の場合: 
      +  カスタマーマネージド接続アプリケーションの場合 – シークレットには、`personalAccessToken` を使用して接続されたアプリケーションのコンシューマーシークレットをキーとして含める必要があります。

1. AWS Glue Studio で、以下の手順に従って **[データ接続]** の下に接続を作成します。

   1.  [データ接続] の **[接続を作成]** を選択します。

   1. **[データソース]** を選択する際に、[Monday] を選択します。

   1. Monday の **[instanceURL]** を指定します。

   1.  AWS Glue が次のアクションを担い、その権限を持つことができる IAM ロールを選択します。

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

****  

      ```
      {
        "Version":"2012-10-17",		 	 	 
        "Statement": [
          {
            "Effect": "Allow",
            "Action": [
              "secretsmanager:DescribeSecret",
              "secretsmanager:GetSecretValue",
              "secretsmanager:PutSecretValue",
              "ec2:CreateNetworkInterface",
              "ec2:DescribeNetworkInterfaces",
              "ec2:DeleteNetworkInterface"
            ],
            "Resource": "*"
          }
        ]
      }
      ```

------

   1.  Monday に接続するための認可タイプを選択する 
      +  OAuth 認可の場合: 接続する Monday の **[トークン URL]** と **[ユーザーマネージドクライアントアプリケーション ClientId]** を指定します。
      +  カスタム認可の場合: 認証タイプ **[CUSTOM]** を選択して Monday に接続します。

   1.  AWS Glue でこの接続に使用する `secretName` を選択して、トークンを配置します。

   1.  ネットワークを使用する場合は、ネットワークオプションを選択します。

1.  AWS Glue ジョブに関連付けられている IAM ロールに `secretName` を読み取るアクセス許可を付与します。[**次へ**] を選択します。

1.  AWS Glue ジョブ設定で、**[追加のネットワーク接続]** として `connectionName` を指定します。

# Monday エンティティからの読み取り
<a name="monday-reading-from-entities"></a>

 **前提条件** 
+  読み取り元の Monday オブジェクト。使用可能なエンティティを確認するには、以下のサポートされているエンティティの表を参照してください。

 **ソースに対応するエンティティ** 

 エンティティリスト: 
+  アカウント:[ https://developer.monday.com/api-reference/docs/account\$1queries ](https://developer.monday.com/api-reference/docs/account#queries) 
+  ボード:[ https://developer.monday.com/api-reference/docs/boards\$1queries ](https://developer.monday.com/api-reference/docs/boards#queries) 
+  カラム:[ https://developer.monday.com/api-reference/docs/columns\$1queries ](https://developer.monday.com/api-reference/docs/columns#queries) 
+  ドキュメント:[ https://developer.monday.com/api-reference/docs/docs\$1queries ](https://developer.monday.com/api-reference/docs/docs#queries) 
+  ドキュメントブロック:[ https://developer.monday.com/api-reference/docs/blocks\$1queries ](https://developer.monday.com/api-reference/docs/blocks#queries) 
+  ファイル:[ https://developer.monday.com/api-reference/docs/files\$1queries ](https://developer.monday.com/api-reference/docs/files#queries) 
+  フォルダ:[ https://developer.monday.com/api-reference/docs/folders\$1queries ](https://developer.monday.com/api-reference/docs/folders#queries) 
+  グループ:[ https://developer.monday.com/api-reference/docs/groups\$1queries ](https://developer.monday.com/api-reference/docs/groups#queries) 
+  アイテム:[ https://developer.monday.com/api-reference/docs/items\$1queries ](https://developer.monday.com/api-reference/docs/items#queries) 
+  サブアイテム:[ https://developer.monday.com/api-reference/docs/subitems\$1queries ](https://developer.monday.com/api-reference/docs/subitems#queries) 
+  タグ:[ https://developer.monday.com/api-reference/docs/tags-queries\$1queries ](https://developer.monday.com/api-reference/docs/tags-queries#queries) 
+  チーム:[ https://developer.monday.com/api-reference/docs/teams\$1queries ](https://developer.monday.com/api-reference/docs/teams#queries) 
+  アップデート:[ https://developer.monday.com/api-reference/docs/updates\$1queries ](https://developer.monday.com/api-reference/docs/updates#queries) 
+  ユーザー:[ https://developer.monday.com/api-reference/docs/users\$1queries ](https://developer.monday.com/api-reference/docs/users#queries) 
+  ワークスペース:[ https://developer.monday.com/api-reference/docs/workspaces\$1queries ](https://developer.monday.com/api-reference/docs/workspaces#queries) 


| エンティティ | フィルタリング可能 | 制限をサポートする | Order By をサポートする | Select \$1 をサポートする | パーティショニングをサポートする | 
| --- | --- | --- | --- | --- | --- | 
| アカウント | なし | なし | なし | あり | なし | 
| ボード | はい | あり | なし | あり | なし | 
| 列 | なし | なし | なし | あり | なし | 
| ドキュメント | はい | あり | なし | あり | なし | 
| ドキュメントブロック | なし | あり | なし | あり | なし | 
| ファイル | あり | なし | なし | あり | なし | 
| グループ | なし | なし | なし | あり | なし | 
| Item | はい | あり | なし | あり | なし | 
| サブアイテム | なし | なし | なし | あり | なし | 
| [タグ] | あり | なし | なし | あり | あり | 
| チーム | あり | なし | なし | あり | なし | 
| 更新 | なし | あり | なし | あり | なし | 
| [ユーザー] | はい | あり | なし | あり | なし | 
| ワークスペース | はい | あり | なし | あり | なし | 
| フォルダ | はい | あり | なし | あり | なし | 

 **例** 

```
monday_read = glueContext.create_dynamic_frame.from_options(
     connection_type="monday",
     connection_options={
         "connectionName": "connectionName",
         "ENTITY_NAME": "account",
         "API_VERSION": "v2"
     }
```

# Monday 接続オプションのリファレンス
<a name="monday-connection-options"></a>

Monday の接続オプションは次のとおりです。
+  `ENTITY_NAME`(文字列) – (必須) 読み取り / 書き込みに使用されます。Monday のオブジェクトの名前。
+  `API_VERSION`(文字列) – (必須) 読み取り / 書き込みに使用されます。使用する Monday Rest API バージョン。例: v2。
+  `SELECTED_FIELDS`(List<String>) – Default: empty(SELECT \$1). 読み込みに使用されます。オブジェクトに選択する列です。
+  `FILTER_PREDICATE`(文字列) – デフォルト: 空 読み込みに使用されます。Spark SQL 形式である必要があります。
+  `QUERY`(文字列) - デフォルト: 空 読み込みに使用されます。完全な Spark SQL クエリです。

# 制限
<a name="monday-connector-limitations"></a>

Monday コネクタの制限は次のとおりです。
+  動的メタデータレスポンスには、以下で説明するように、ドキュメントと特定の競合があります。
  +  グループ、列エンティティはフィルターオペレーションをサポートしますが、動的メタデータエンドポイントには存在しないため、フィルター可能でないエンティティとして保持されます。
  +  動的エンドポイントは約 15000 超の行で構成され、1 回のレスポンスですべてのエンティティのメタデータを返します。このため、フィールドのロードには平均 10 秒かかるので、ジョブの実行中にさらに時間がかかります。
  +  Monday のレート制限については、以下の表を参照してください。動的エンティティのレスポンスデータのサイズが大きいと、顕著な遅延の原因となり、フィールドのロードには平均 10 秒かかります。    
<a name="monday-rate-limit-table"></a>[\[See the AWS documentation website for more details\]](http://docs.aws.amazon.com/ja_jp/glue/latest/dg/monday-connector-limitations.html)

## 新しい Monday アカウントを作成します。
<a name="monday-account-creation"></a>

1.  Monday のホームページ [https://monday.com/](https://monday.com/) に移動し、**[ログイン]** を選択します。

1.  ログインページにリダイレクトされます。ページの最下部にある **[サインアップ]** を選択します。

1.  E メールアドレスを入力し、**[続行]** を選択します。または、Google でサインインすることもできます。

1.  必要な情報を入力して、**[続行]** を選択します。

1.  アンケートの質問に回答し、手順に従ってアカウント作成プロセスを完了します。

**OAuth アプリケーションを登録します。**

1.  monday.com アカウントにログインします。画面の左下隅にあるアバター (ピクチャアイコン) をクリックします。

1.  **[デベロッパー]** を選択します。

1.  **[アプリの作成]** を選択します。

1.  名前と説明の必須フィールドに入力します。

1. 右側の [OAuth] セクションに移動し、スコープを追加し、[機能の保存] を選択します。

1.  スコープの横にある [リダイレクト URL] タブに移動し、リダイレクト URL を追加して [機能の保存] を選択します。

1.  **[リダイレクト URL]** タブで、アプリの URL を指定します。これは https://\$1region-code\$1.console.aws.amazon.com/appflow/oauth である必要があります。例えば、`us-east-1 ` を使用している場合は、`https://us-east-1.console.aws.amazon.com/appflow/oauth` を追加できます。

1.  これで、アプリケーションを使用する準備ができました。認証情報は [基本情報] セクションにあります。クライアント ID とクライアントシークレット文字列を書き留めます。これらの文字列は、AppFlow コネクタを使用してこのアプリと接続するために使用されます。

**個人用アクセストークンを生成する:**

 現在、monday.com は V2 API トークンのみを提供しており、それらはすべてパーソナルトークンです。API トークンにアクセスするには、ユーザーレベルに応じて 2 つの方法のいずれかを使用できます。管理者ユーザーは、両方の方法を使用して API トークンを取得できます。メンバーユーザーは、[デベロッパー] タブから API トークンにアクセスできます。

 管理者 - monday.com アカウントの管理者ユーザーは、次のステップで [管理者] タブから API トークンにアクセスできます。

1.  monday.com アカウントにログインします。画面の左下隅にあるアバター (ピクチャアイコン) をクリックします。

1.  表示されたメニューから [管理] を選択します (管理者アクセス許可が必要です)。

1.  [API] セクションに移動し、[API V2 トークン] を生成します。トークンをコピーして使用できます。

 デベロッパー - monday.com アカウントのメンバーユーザーは、次のステップで [デベロッパー] タブから API トークンにアクセスできます。

1.  monday.com アカウントにログインします。画面の左下隅にあるアバター (ピクチャアイコン) をクリックします。

1.  表示されたメニューから [デベロッパー] を選択します。

1.  上部のメニューで、[デベロッパー] ドロップダウンメニューを選択します。[マイアクセストークン] というタイトルのドロップダウンメニューの最初のオプションを選択します。

# AWS Glue Studio での MongoDB に対する接続
<a name="connecting-to-data-mongodb"></a>

 AWS Glue は、MongoDB のための組み込みサポートを提供します。AWS Glue Studio は、MongoDB に接続してデータ統合ジョブをオーサリングし、AWS Glue Studio サーバーレス Spark ランタイム上でそれらのジョブを実行するためのビジュアルインターフェイスを提供します。

**Topics**
+ [MongoDB 接続の作成](creating-mongodb-connection.md)
+ [MongoDB ソースノードの作成](creating-mongodb-source-node.md)
+ [MongoDB ターゲットノードの作成](creating-mongodb-target-node.md)
+ [詳細オプション](#creating-mongodb-connection-advanced-options)

# MongoDB 接続の作成
<a name="creating-mongodb-connection"></a>

**前提条件**:
+ MongoDB インスタンスが Amazon VPC 内にある場合は、トラフィックがパブリックインターネットを経由することなく、AWS Glue ジョブが MongoDB インスタンスと通信できるように Amazon VPC を設定します。

  Amazon VPC で、AWS Glue がジョブの実行中に使用する **[VPC]**、**[サブネット]**、および **[セキュリティグループ]** を特定または作成します。さらに、MongoDB インスタンスとこの場所の間のネットワークトラフィックを許可するように Amazon VPC が設定されているようにする必要があります。ネットワークレイアウトに基づいて、セキュリティグループルール、ネットワーク ACL、NAT ゲートウェイ、およびピアリング接続の変更が必要になる場合があります。

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

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

     **[key/value ペア]** を選択する際に、*mongodbPass* という値を持つキー `password` のペアを作成します。

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

     MongoDB URL は、`mongodb://mongoHost:mongoPort/mongoDBname` の形式で指定されます。

     MongoDB Atlas URL は、`mongodb+srv://mongoHost/mongoDBname` の形式で指定されます。
   + Secrets Manager シークレットを作成することを選択した場合は、AWS Secrets Manager の **[認証情報タイプ]** を選択します。

     その後、**[AWS シークレット]** で *secretName* を入力します。
   + **[ユーザー名とパスワード]** を入力することを選択した場合は、*mongodbUser* および *mongodbPass* を入力します。

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

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

AWS Glue MongoDB 接続を作成した後、AWS Glue ジョブを実行する前に次のステップを実行する必要があります。
+ ビジュアルエディタで AWS Glue ジョブを使用する場合、ジョブが MongoDB に接続できるように Amazon VPC の接続に関する情報を入力する必要があります。Amazon VPC 内の適切な場所を特定し、それを AWS Glue MongoDB 接続に提供します。
+ Secrets Manager シークレットを作成することを選択した場合は、AWS Glue ジョブに関連付けられた IAM ロールに *secretName* を読み取るための許可を付与します。

# MongoDB ソースノードの作成
<a name="creating-mongodb-source-node"></a>

## 必要な前提条件
<a name="creating-mongodb-source-node-prerequisites"></a>
+ 前のセクション「[MongoDB 接続の作成](creating-mongodb-connection.md)」で説明した AWS Glue MongoDB 接続。
+ Secrets Manager シークレットを作成することを選択した場合は、接続によって使用されるシークレットを読み取るためのジョブに対する適切な許可が必要です。
+ 読み取り元とする MongoDB コレクション。コレクションの識別情報が必要になります。

  MongoDB コレクションは、データベース名とコレクション名である *mongodbName* および *mongodbCollection* によって識別されます。

## MongoDB データソースの追加
<a name="creating-mongodb-source-node-add"></a>

****[データソース — MongoDB]** ノードを追加するには:**

1.  MongoDB データソース用の接続を選択します。すでに作成したので、ドロップダウンに表示されているはずです。接続を作成する必要がある場合は、**[MongoDB 接続を作成]** を選択します。詳細については、前の「[MongoDB 接続の作成](creating-mongodb-connection.md)」セクションを参照してください。

    接続を選択したあとは、**[プロパティを表示]** をクリックすると、接続のプロパティを表示できます。

1. **[データベース]** を選択します。*mongodbName* を入力します。

1. **[コレクション]** を選択します。*mongodbCollection* を入力します。

1. **[パーティショナー]**、**[パーティションサイズ (MB)]**、および **[パーティションキー]** を選択します。パーティションパラメータについての詳細は、「["connectionType": "mongodb" ソースとする](aws-glue-programming-etl-connect-mongodb-home.md#etl-connect-mongodb-as-source)」を参照してください。

1.  **[MongoDB のカスタムプロパティ]** で、必要に応じてパラメータと値を入力します。

# MongoDB ターゲットノードの作成
<a name="creating-mongodb-target-node"></a>

## 必要な前提条件
<a name="creating-mongodb-target-node-prerequisites"></a>
+ 前のセクション [MongoDB 接続の作成](creating-mongodb-connection.md) で説明したように、AWS Secrets Manager シークレットを使用して設定された AWS Glue MongoDB 接続。
+ 接続で使用されるシークレットを読み取るためのジョブに対する適切なアクセス許可。
+ 書き込み先とする MongoDB テーブルである *tableName*。

## MongoDB データターゲットの追加
<a name="creating-mongodb-target-node-add"></a>

****[データターゲット — MongoDB]** ノードを追加するには:**

1.  MongoDB データソース用の接続を選択します。すでに作成したので、ドロップダウンに表示されているはずです。接続を作成する必要がある場合は、**[MongoDB 接続を作成]** を選択します。詳細については、前の「[MongoDB 接続の作成](creating-mongodb-connection.md)」セクションを参照してください。

    接続を選択したあとは、**[プロパティを表示]** をクリックすると、接続のプロパティを表示できます。

1. **[データベース]** を選択します。*mongodbName* を入力します。

1. **[コレクション]** を選択します。*mongodbCollection* を入力します。

1. **[パーティショナー]**、**[パーティションサイズ (MB)]**、および **[パーティションキー]** を選択します。パーティションパラメータについての詳細は、「["connectionType": "mongodb" ソースとする](aws-glue-programming-etl-connect-mongodb-home.md#etl-connect-mongodb-as-source)」を参照してください。

1. 必要に応じて、**[書き込みを再試行]** を選択します。

1.  **[MongoDB のカスタムプロパティ]** で、必要に応じてパラメータと値を入力します。

## 詳細オプション
<a name="creating-mongodb-connection-advanced-options"></a>

MongoDB ノードを作成する際に、高度なオプションを指定できます。これらのオプションは Spark AWS Glue スクリプトのプログラミング時に使用できるオプションと同じです。

「[MongoDB 接続オプションのリファレンス](aws-glue-programming-etl-connect-mongodb-home.md#aws-glue-programming-etl-connect-mongodb)」を参照してください。

# Oracle NetSuite への接続
<a name="connecting-to-data-oracle-netsuite"></a>

Oracle NetSuite は、コアプロセスを自動化し、運用パフォーマンスと財務パフォーマンスをリアルタイムで可視化することで、組織の運用をより効果的にするのに役立つオールインワンのクラウドビジネス管理ソリューションです。Oracle NetSuite は、会計、注文処理、インベントリ管理、生産、サプライチェーン、倉庫オペレーションを管理するための単一の統合されたアプリケーションスイートにより、企業データを明確に可視化し、ビジネスをより厳密に制御できるようにします。

**Topics**
+ [Oracle NetSuite 用 AWS Glue サポート](oracle-netsuite-support.md)
+ [接続を作成および使用するための API オペレーションを含むポリシー](oracle-netsuite-configuring-iam-permissions.md)
+ [Oracle NetSuite の設定](oracle-netsuite-configuring.md)
+ [Oracle NetSuite 接続の設定](oracle-netsuite-configuring-connections.md)
+ [Oracle NetSuite エンティティからの読み取り](oracle-netsuite-reading-from-entities.md)
+ [Oracle NetSuite 接続オプション](oracle-netsuite-connection-options.md)
+ [Oracle NetSuite コネクタに関する制限事項と注意事項](oracle-netsuite-connector-limitations.md)

# Oracle NetSuite 用 AWS Glue サポート
<a name="oracle-netsuite-support"></a>

AWS Glue は、次のように Oracle NetSuite をサポートします。

**ソースとしてサポートされていますか?**  
はい。AWS Glue ETL ジョブを使用して、Oracle NetSuite からデータをクエリできます。

**ターゲットとしてサポートされていますか?**  
いいえ。

**サポートされている Oracle NetSuite の API バージョン**  
次の Oracle NetSuite の API バージョンがサポートされています。
+ v1

バージョン固有のエンティティサポートについては、「ソースに対応するエンティティ」を参照してください。

# 接続を作成および使用するための API オペレーションを含むポリシー
<a name="oracle-netsuite-configuring-iam-permissions"></a>

次のサンプル ポリシーで、接続の作成と使用に必要な AWS IAM 権限について説明します。新しいロールを作成する場合は、以下を含むポリシーを作成します。

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

****  

```
{
  "Version":"2012-10-17",		 	 	 
  "Statement": [
    {
      "Effect": "Allow",
      "Action": [
        "glue:ListConnectionTypes",
        "glue:DescribeConnectionType",
        "glue:RefreshOAuth2Tokens",
        "glue:ListEntities",
        "glue:DescribeEntity"
      ],
      "Resource": "*"
    }
  ]
}
```

------

上記の方法を使用しない場合は、代わりに次のマネージド IAM ポリシーを使用します:
+ [AWSGlueServiceRole](https://console.aws.amazon.com/iam/home#policies/arn:aws:iam::aws:policy/service-role/AWSGlueServiceRole) – さまざまな AWS Glue プロセスを実行するために必要なリソースへのアクセス権をユーザーに代わって付与します。これらのリソースには AWS Glue 、Amazon S3、IAM、CloudWatch Logs、および Amazon EC2 が含まれます。このポリシーで指定されたリソースの命名規則に従った場合、AWS Glue プロセスは必要なアクセス権限を使用できます。このポリシーは、通常、クローラ、ジョブ、開発エンドポイントを定義するときに指定されたロールにアタッチされます。
+ [AWSGlueConsoleFullAccess](https://console.aws.amazon.com/iam/home#policies/arn:aws:iam::aws:policy/AWSGlueConsoleFullAccess) — ポリシーがアタッチされているアイデンティティが AWS マネージメントコンソールを使用するときは、AWS Glue リソースへのフルアクセスを許可します。このポリシーで指定されたリソースの命名規則に従った場合、ユーザーは完全なコンソール機能を使用できます。このポリシーは、通常 AWS Glue コンソールのユーザーにアタッチされています。

# Oracle NetSuite の設定
<a name="oracle-netsuite-configuring"></a>

AWS Glue を使用して Oracle NetSuite からデータを転送できるようにするには、次の要件を満たす必要があります。

## 最小要件
<a name="oracle-netsuite-configuring-min-requirements"></a>

以下に、最小要件を示します。
+ Oracle NetSuite アカウントがあること。詳細については、「[Oracle NetSuite アカウントの作成](#oracle-netsuite-configuring-creating-oracle-netsuite-account)」を参照してください。
+ Oracle NetSuite アカウントで API アクセスが有効になっていること。
+ Oracle NetSuite の開発者アカウントで OAuth 2.0 API 統合を作成していること。この統合により、AWS Glue がお客様のアカウントに対して認証呼び出しを行うときに、お客様のデータに安全にアクセスするために使用するクライアントの認証情報が提供されます。詳細については、「[Oracle NetSuite のクライアントアプリと OAuth 2.0 認証情報の作成](#oracle-netsuite-configuring-creating-oracle-netsuite-client-app)」を参照してください。

これらの要件を満たしている場合、AWS Glue を Oracle NetSuite アカウントに接続する準備ができています。

## Oracle NetSuite アカウントの作成
<a name="oracle-netsuite-configuring-creating-oracle-netsuite-account"></a>

[[Oracle NetSuite]](https://www.netsuite.com/portal/home.shtml) に移動し、**[無料の製品ツアー]** を選択します。ベンダーに連絡できる無料の製品ツアーを受けるには、必要な情報を入力してください。アカウントを調達するプロセスは次のとおりです。
+ NetSuite アカウントの調達は、法的なレビューが必要なフォーム/見積りを提示するベンダーを介して行われます。
+ Oracle NetSuite コネクタ用に調達するアカウントは **[標準クラウドサービス]** です。
+ このアカウントはベンダーによって作成され、一時的な認証情報はベンダーによって共有されます。ユーザー名やパスワードを設定するリンクなどの詳細が記載されたウェルカムメールが NetSuite <billing@notification.netsuite.com> <system@sent-via.netsuite.com> から送信されます。
+ **[パスワードの設定]** リンクを使用し、ベンダーによって提供されるユーザー名のパスワードを設定します。

## Oracle NetSuite のクライアントアプリと OAuth 2.0 認証情報の作成
<a name="oracle-netsuite-configuring-creating-oracle-netsuite-client-app"></a>

クライアント ID とクライアントシークレットを取得するには、Oracle NetSuite クライアントアプリを作成します。

1. [NetSuite カスタマーログイン](https://system.netsuite.com/pages/customerlogin.jsp)を使用して NetSuite アカウントにログインします。

1. **[設定]** > **[会社]** > **[機能を有効化]** を選択します。

1. **[SuiteCloud]** セクションに移動し、**[SuiteTalk (ウェブサービス)]** の下にある **[REST WEB SERVICES]** のチェックボックスをオンにします。

1. **[認証を管理]** の下にある **[OAUTH 2.0]** のチェックボックスをオンにします。**[保存]** をクリックします。

1. **[設定]** > **[統合]** > **[統合を管理]** に移動し、**[新規]** を選択して OAuth2.0 アプリケーションを作成します。

1. 任意の名前を入力し、**[STATE]** を有効のままにします。

1. オンになっている場合、**[トークンベースの認証]** の下に表示される **[TBA: AUTHORIZATION FLOW]** および **[TOKEN-BASED AUTHENTICATION]** チェックボックスをオフにします。

1. **[OAuth 2.0]** の下にある **[AUTHORIZATION CODE GRANT]** および **[PUBLIC CLIENT]** のチェックボックスを選択します。

1. [認証] の下にある [クライアント ID] と [クライアントシークレット] を書き留めます。

1. **[リダイレクト URI]** を入力します。例: https://us-east-1.console.aws.amazon.com/gluestudio/oauth

1. **[スコープ]** の下にある **[REST WEB SERVICES]** のチェックボックスをオンにします。

1. **[ユーザー認証情報]** の下にある **[USER CREDENTIALS]** チェックボックスをオンにします。**[保存]** を選択します。

1. **[クライアント認証情報]** の下にある CONSUMER KEY/CLIENT ID および CONSUMER SECRET/CLIENT SECRET をメモします。これらの値は 1 回のみ表示されます。

1. **[ユーザー/ロール]** > **[ロールの管理]** > **[新規]** に移動し、必要に応じて ADMINISTRATOR ロールを作成します。

1. カスタムロールの作成中、次のエンティティ/機能の **[アクセス許可]** タブにフルアクセスを追加します。
   + 「預金」、「アイテム」、「アイテム履行」、「ジャーナル記入」、「発注」、「子会社」、「ベンダー」、「請求書」、「ベンダーの返品許可」、「時間追跡」、「顧客決済」、「カスタムレコードエントリ」、「カスタムレコードタイプ」、「REST ウェブサービス」、「OAuth 2.0 許可されたアプリケーションの管理」、「カスタムエンティティフィールド」、「OAuth 2.0 アクセストークンを使用してログイン」。

詳細については、NetSuite Applications Suite ドキュメントの「[OAuth 2.0](https://docs.oracle.com/en/cloud/saas/netsuite/ns-online-help/chapter_157769826287.html)」を参照してください。

# Oracle NetSuite 接続の設定
<a name="oracle-netsuite-configuring-connections"></a>

Oracle NetSuite は、OAuth2 の AUTHORIZATION\$1CODE のグラントタイプをサポートしています。グラントタイプは、AWS Glue が Oracle NetSuite と通信してデータへのアクセスをリクエストする方法を決定します。
+ このグラントタイプは、ユーザーを認証するためにサードパーティーの認証サーバーにユーザーをリダイレクトすることから、「three-legged」の OAuth と見なされます。AWS Glue コンソール経由で接続を作成するときに使用されます。接続を作成するユーザーは、デフォルトで AWS Glue 所有の接続アプリ (AWS Glue マネージドクライアントアプリケーション) に依存する場合があります。この場合、Oracle NetSuite インスタンス URL 以外の OAuth 関連情報を提供する必要はありません。AWS Glue コンソールでは、ユーザーが Oracle NetSuite にリダイレクトされます。ここではユーザーがログインし、Oracle NetSuite インスタンスにアクセスするためのリクエストされた権限を AWS Glue に許可する必要があります。
+ ユーザーは、Oracle NetSuite で独自の接続アプリを作成し、AWS Glue コンソールを介して接続を作成するときに独自のクライアント ID とクライアントシークレットを指定することを選択できます。このシナリオでは、引き続き Oracle NetSuite にリダイレクトされてログインし、リソースへアクセスするために AWS Glue を承認します。
+ このグラントタイプは、更新トークンとアクセストークンになります。アクセストークンの有効期間は短く、更新トークンを使用してユーザーとやり取りすることなく自動的に更新される場合があります。
+ 認可コード OAuth フロー用の接続アプリケーションの作成に関する Oracle NetSuite の公開ドキュメントについては、「[パブリックアプリケーション](https://developers.oracle-netsuite.com/docs/api/creating-an-app)」を参照してください。

Oracle NetSuite 接続を設定するには:

1. AWS Secrets Manager で、次の詳細を含むシークレットを作成します。

   1. カスタマーマネージド接続アプリケーションの場合、シークレットには、`USER_MANAGED_CLIENT_APPLICATION_CLIENT_SECRET` を使用して接続されたアプリケーションのコンシューマーシークレットをキーとして含める必要があります。

   1. 注: AWS Glue で接続ごとにシークレットを作成する必要があります。

1. AWS Glue Glue Studio で、以下の手順に従って **[データ接続]** の下に接続を作成します。

   1. **[接続タイプ]** を選択する際に、[Oracle NetSuite] を選択します。

   1. Oracle NetSuite 環境を指定します。

   1. 次のアクションを実行でき、AWS Glue がその権限を持つ AWS IAM ロールを選択します。

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

****  

      ```
      {
        "Version":"2012-10-17",		 	 	 
        "Statement": [
          {
            "Effect": "Allow",
            "Action": [
              "secretsmanager:DescribeSecret",
              "secretsmanager:GetSecretValue",
              "secretsmanager:PutSecretValue",
              "ec2:CreateNetworkInterface",
              "ec2:DescribeNetworkInterfaces",
              "ec2:DeleteNetworkInterface"
            ],
            "Resource": "*"
          }
        ]
      }
      ```

------

   1. AWS Glue でこの接続に使用する `secretName` を選択して、トークンを配置します。

   1. ネットワークを使用する場合は、ネットワークオプションを選択します。

1. AWS Glue ジョブに関連付けられている IAM ロールに `secretName` を読み取るアクセス許可を付与します。

# Oracle NetSuite エンティティからの読み取り
<a name="oracle-netsuite-reading-from-entities"></a>

**前提条件**

読み取り元の Oracle NetSuite オブジェクト。`deposit` または `timebill` などのオブジェクト名が必要です。次の表に、サポートされているエンティティを示します。

**ソースに対応するエンティティ**:


| エンティティ | フィルタリング可能 | Order By をサポートする | 制限をサポートする | SELECT \$1 をサポートする | パーティション分割をサポートする | 
| --- | --- | --- | --- | --- | --- | 
| Deposit | あり | なし | あり | あり | あり | 
| Description Item | あり | なし | あり | あり | あり | 
| Inventory Item | あり | なし | あり | あり | あり | 
| Item Fulfillment | あり | なし | あり | あり | あり | 
| Item Group | あり | なし | あり | あり | あり | 
| Journal Entry | あり | なし | あり | あり | あり | 
| Non-Inventory Purchase Item | あり | なし | あり | あり | あり | 
| Non-Inventory Resale Item | あり | なし | あり | あり | あり | 
| Non-Inventory Sale Item | あり | なし | あり | あり | あり | 
| Purchase Order | あり | なし | あり | あり | あり | 
| Subsidiary | あり | なし | あり | あり | あり | 
| Vendor | あり | なし | あり | あり | あり | 
| Vendor Bill | あり | なし | あり | あり | あり | 
| Vendor Return Authorization | あり | なし | あり | あり | あり | 
| Time Bill | あり | なし | あり | あり | あり | 
| Customer Payment | あり | なし | あり | あり | あり | 
| Fulfillment Request | あり | なし | あり | あり | あり | 
| Item | はい | あり | あり | あり | あり | 
| Transaction Line | はい | あり | あり | あり | あり | 
| Transaction Accounting Line | はい | あり | あり | あり | あり | 
| Custom Record Types (動的) | はい | あり | あり | あり | あり | 

**例**:

```
netsuiteerp_read = glueContext.create_dynamic_frame.from_options(
    connection_type="netsuiteerp",
    connection_options={
        "connectionName": "connectionName",
        "ENTITY_NAME": "deposit",
        "API_VERSION": "v1"
    }
)
```

**Oracle NetSuite エンティティとフィールドの詳細**:

Oracle NetSuite は、選択したエンティティで使用可能なフィールドを動的にロードします。フィールドのデータ型に応じて、次のフィルター演算子がサポートされます。


| フィールドデータタイプ | サポートされているフィルター演算子 | 
| --- | --- | 
| 文字列 | LIKE, =, \$1= | 
| 日付 | BETWEEN, =, <, <=, >, >= | 
| DateTime | BETWEEN, <, <=, >, >= | 
| 数値 |  =, \$1=, <, <=, >, >= | 
| ブール値 |  =, \$1= | 

**フィルター式のブール値に期待される入力形式**：


| エンティティ | ブール「true」値の形式 | ブール「false」値の形式 | 例 | 
| --- | --- | --- | --- | 
| Item、Transaction Line、Transaction Accounting Line、Custom Record Type の各エンティティ | T または t | F または f | isinactive = "T" または isinactive = "t" | 
| その他すべてのエンティティ | true | false | isinactive = true | 

## パーティショニングクエリ
<a name="oracle-netsuite-reading-partitioning-queries"></a>

**フィールドベースのパーティション分割**

Oracle NetSuite コネクタには動的メタデータがあるため、フィールドベースのパーティショニングでサポートされているフィールドが動的に選択されます。フィールドベースのパーティショニングは、データ型が Integer、BigInteger、Date、または DateTime のフィールドでサポートされています。

Spark で同時実行を使用する場合は、追加の Spark オプション `PARTITION_FIELD`、`LOWER_BOUND`、`UPPER_BOUND`、および `NUM_PARTITIONS` を指定できます。これらのパラメータを使用すると、元のクエリは Spark タスクで同時に実行できるサブクエリの `NUM_PARTITIONS` の数に分割されます。
+ `PARTITION_FIELD`: クエリのパーティション化に使用するフィールドの名前。
+ `LOWER_BOUND`: 選択したパーティションフィールドの**包括的な**下限値。

  タイムスタンプフィールドでは、Spark SQL クエリで使用される Spark タイムスタンプ形式を受け入れます。

  有効な値の例は次のとおりです。

  ```
  "TIMESTAMP \"1707256978123\""
  "TIMESTAMP \"1702600882\""
  "TIMESTAMP '2024-02-06T22:00:00:00.000Z'"
  "TIMESTAMP '2024-02-06T22:00:00:00Z'"
  "TIMESTAMP '2024-02-06'"
  ```
+ `UPPER_BOUND`: 選択したパーティションフィールドの**排他的**上限値。
+ `NUM_PARTITIONS`: パーティション数。

例:

```
netsuiteerp_read = glueContext.create_dynamic_frame.from_options(
    connection_type="netsuiteerp",
    connection_options={
        "connectionName": "connectionName",
        "ENTITY_NAME": "deposit",
        "API_VERSION": "v1",
        "PARTITION_FIELD": "id",
        "LOWER_BOUND": "1",
        "UPPER_BOUND": "10000",
        "NUM_PARTITIONS": "10"
    }
```

**レコードベースのパーティション分割**

Spark で並行処理を使用する場合は、追加の Spark オプション `NUM_PARTITIONS` を指定できます。これらのパラメータを使用すると、元のクエリは Spark タスクで同時に実行できるサブクエリの `NUM_PARTITIONS` の数に分割されます。

レコードベースのパーティショニングでは、存在するレコードの総数が Oracle NetSuite API からクエリされ、指定された `NUM_PARTITIONS` 数で除算され、結果のレコードの数が各サブクエリによって同時に取得されます。
+ `NUM_PARTITIONS`: パーティション数。

例:

```
netsuiteerp_read = glueContext.create_dynamic_frame.from_options(
    connection_type="netsuiteerp",
    connection_options={
        "connectionName": "connectionName",
        "ENTITY_NAME": "deposit",
        "API_VERSION": "v1",
        "NUM_PARTITIONS": "3"
    }
```

# Oracle NetSuite 接続オプション
<a name="oracle-netsuite-connection-options"></a>

Oracle NetSuite の接続オプションは次のとおりです。
+ `ENTITY_NAME`(文字列) – (必須) 読み取りに使用されます。Oracle NetSuite エンティティの名前。例: 預金。
+ `API_VERSION`(文字列) – (必須) 読み取りに使用されます。使用する Oracle NetSuite Rest の API バージョン。現在、Oracle NetSuite はバージョン v1 のみをサポートしているため、値は v1 になります。
+ `SELECTED_FIELDS`(List<String>) – Default: empty(SELECT \$1). 読み込みに使用されます。選択したエンティティに対して選択する列のカンマ区切りのリスト。
+ `FILTER_PREDICATE`(文字列) – デフォルト: 空 読み込みに使用されます。Spark SQL 形式である必要があります。
+ `QUERY`(文字列) - デフォルト: 空 読み込みに使用されます。完全な Spark SQL クエリです。
+ `PARTITION_FIELD`(文字列) - 読み取りに使用されます。クエリをパーティション化するために使用するフィールド (フィールドベースのパーティショニング)。
+ `LOWER_BOUND`(文字列) - 読み取りに使用されます。選択したパーティションフィールドの包括的な下限値は、フィールドベースのパーティショニングに使用されます。
+ `UPPER_BOUND`(文字列) - 読み取りに使用されます。選択したパーティションフィールドの包括的な上限値は、フィールドベースのパーティショニングに使用されます。
+ `NUM_PARTITIONS`(整数) – デフォルト: 1。読み込みに使用されます。読み取り用のパーティションの数です。フィールドベースおよびレコードベースの両方のパーティショニングで使用されます。
+ `INSTANCEE_URL` (文字列) – https://\$1account-id\$1.suitetalk.api.netsuite.com 形式を持つ有効な NetSuite インスタンス URL。

# Oracle NetSuite コネクタに関する制限事項と注意事項
<a name="oracle-netsuite-connector-limitations"></a>

以下は、Oracle NetSuite コネクタに関する制限事項または注意事項です。
+ access\$1token パラメータと refresh\$1token パラメータの値は JSON Web Token (JWT) 形式です。アクセストークンは 60 分間有効ですが、refresh\$1token は 7 日間有効です。
+ クライアント ID とクライアントシークレットの生成中、「AUTHORIZATION CODE GRANT」と共に「PUBLIC CLIENT」を選択する場合は、更新トークンの有効期間が 3 時間のみとなり、使用も 1 回限りとなります。
+ コネクタを使用して最大 100,000 件のレコードを取得できます。詳細については、[[Executing SuiteQL Queries Through REST Web Services](https://docs.oracle.com/en/cloud/saas/netsuite/ns-online-help/section_157909186990.html)」を参照してください。
+ パーティションは、各パーティションが 1,000 の倍数でレコードを取得するように作成されますが、最後のパーティションは例外的に残りのレコードを取得する場合があります。
+ Item、Transaction Line、Transaction Accounting Line オブジェクトの場合、コネクタは以下の理由で演算子の一部をサポートしません。
  + タイプが Date のフィールドに `EQUAL_TO`、`NOT_EQUAL_TO` フィルター演算子を適用すると、信頼性に欠ける結果が生成されます。
  + タイプが Date のフィールドに `LESS_THAN_OR_EQUAL_TO` フィルター演算子を適用すると、信頼性に欠ける結果が生成され、`LESS_THAN` 演算子と同様に動作します。
  + タイプが Date= のフィールドに `GREATER_THAN` フィルター演算子を適用すると、信頼性に欠ける結果が生成され、`GREATER_THAN_OR_EQUAL_TO` 演算子と同様に動作します。
+ Item、Transaction Line、Transaction Accounting Line、および Custom Record Type オブジェクトの場合、ブール値は標準の true/false 形式ではなく、T/F 形式になります。コネクタは、データ内の整合性を確保するために t/f 値を true/false にマッピングします。

# AWS Glue Studio での OpenSearch Service に対する接続
<a name="connecting-to-data-opensearch"></a>

 AWS Glue は、Amazon OpenSearch Service のための組み込みサポートを提供します。AWS Glue Studio は、Amazon OpenSearch Service に接続してデータ統合ジョブをオーサリングし、AWS Glue Studio サーバーレス Spark ランタイム上でそれらのジョブを実行するためのビジュアルインターフェイスを提供します。この機能は OpenSearch サービスのサーバーレスとは互換性がありません。　 

 AWS Glue Studio は Amazon OpenSearch Service の統合接続を作成します。詳細については、「[考慮事項](using-connectors-unified-connections.md#using-connectors-unified-connections-considerations)」を参照してください。

**Topics**
+ [OpenSearch Service 接続の作成](creating-opensearch-connection.md)
+ [OpenSearch Service のソースノードの作成](creating-opensearch-source-node.md)
+ [OpenSearch Service ターゲットノードの作成](creating-opensearch-target-node.md)
+ [詳細オプション](#creating-opensearch-connection-advanced-options)

# OpenSearch Service 接続の作成
<a name="creating-opensearch-connection"></a>

**前提条件**:
+ 読み取り元とするドメインエンドポイント *aosEndpoint* とポート *aosPort* を特定するか、または Amazon OpenSearch Service ドキュメントの手順に従ってリソースを作成します。ドメインの作成の詳細については、Amazon OpenSearch Service ドキュメントの「[Amazon OpenSearch Service ドメインの作成と管理](https://docs.aws.amazon.com//opensearch-service/latest/developerguide/createupdatedomains.html)」を参照してください。

  Amazon OpenSearch Service ドメインエンドポイントのデフォルト形式は、https://search-*domainName*-*unstructuredIdContent*.*region*.es.amazonaws.com です。ドメインエンドポイントの識別の詳細については、Amazon OpenSearch Service ドキュメントの「[Amazon OpenSearch Service ドメインの作成と管理](https://docs.aws.amazon.com//opensearch-service/latest/developerguide/createupdatedomains.html)」を参照してください。

  ドメインの HTTP 基本認証情報、*aosUser*、および *aosPassword* を特定または生成します。

**OpenSearch Service に対する接続を設定するには:**

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

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

# OpenSearch Service のソースノードの作成
<a name="creating-opensearch-source-node"></a>

## 必要な前提条件
<a name="creating-opensearch-source-node-prerequisites"></a>
+ 前のセクション [OpenSearch Service 接続の作成](creating-opensearch-connection.md) で説明したような、AWS Secrets Manager シークレットを使用して設定された AWS Glue OpenSearch Service 接続。
+ 接続で使用されるシークレットを読み取るためのジョブに対する適切なアクセス許可。
+ 読み取り元とする OpenSearch Service インデックスである *aosIndex*。

## OpenSearch Service データソースの追加
<a name="creating-opensearch-source-node-add"></a>

****[データソース – OpenSearch Service]** ノードを追加するには:**

1.  OpenSearch Service データソース用の接続を選択します。すでに作成したので、ドロップダウンに表示されているはずです。接続を作成する必要がある場合は、**[OpenSearch Service 接続を作成]** を選択します。詳細については、前の「[OpenSearch Service 接続の作成](creating-opensearch-connection.md)」セクションを参照してください。

    接続を選択したあとは、**[プロパティを表示]** をクリックすると、接続のプロパティを表示できます。

1. **[インデックス]** には、読み取り元とするインデックスを指定します。

1. オプションで、より具体的な結果を提供する OpenSearch クエリである **[クエリ]** を入力します。OpenSearch クエリの作成の詳細については、「[OpenSearch Service のインデックスからの読み取り](aws-glue-programming-etl-connect-opensearch-home.md#aws-glue-programming-etl-connect-opensearch-read)」を参照してください。

1.  **[OpenSearch Service のカスタムプロパティ]** で、必要に応じてパラメータと値を入力します。

# OpenSearch Service ターゲットノードの作成
<a name="creating-opensearch-target-node"></a>

## 必要な前提条件
<a name="creating-opensearch-target-node-prerequisites"></a>
+ 前のセクション [OpenSearch Service 接続の作成](creating-opensearch-connection.md) で説明したような、AWS Secrets Manager シークレットを使用して設定された AWS Glue OpenSearch Service 接続。
+ 接続で使用されるシークレットを読み取るためのジョブに対する適切なアクセス許可。
+ 書き込み先とする OpenSearch Service インデックスである *aosIndex*。

## OpenSearch Service データターゲットの追加
<a name="creating-opensearch-target-node-add"></a>

****[データターゲット – OpenSearch Service]** ノードを追加するには:**

1.  OpenSearch Service データソース用の接続を選択します。すでに作成したので、ドロップダウンに表示されているはずです。接続を作成する必要がある場合は、**[OpenSearch Service 接続を作成]** を選択します。詳細については、前の「[OpenSearch Service 接続の作成](creating-opensearch-connection.md)」セクションを参照してください。

    接続を選択したあとは、**[プロパティを表示]** をクリックすると、接続のプロパティを表示できます。

1. **[インデックス]** には、読み取り元とするインデックスを指定します。

1.  **[OpenSearch Service のカスタムプロパティ]** で、必要に応じてパラメータと値を入力します。

## 詳細オプション
<a name="creating-opensearch-connection-advanced-options"></a>

OpenSearch Service ノードを作成する際に、高度なオプションを指定できます。これらのオプションは Spark AWS Glue スクリプトのプログラミング時に使用できるオプションと同じです。

「[OpenSearch Service 接続](aws-glue-programming-etl-connect-opensearch-home.md)」を参照してください。

# Okta への接続
<a name="connecting-to-okta"></a>

 Okta API は、Okta へのプログラムによるインターフェイスであり、大規模または複雑な Okta アカウントやキャンペーンの管理に使用されます。Okta ユーザーの場合は、Okta アカウントに AWS Glue を接続できます。その後、Okta を ETL ジョブのデータソースとして使用できます。これらのジョブを実行して、Okta と AWS サービス、またはその他のサポートされているアプリケーション間でデータを転送します。

**Topics**
+ [AWS Glue の Okta のサポート](okta-support.md)
+ [接続を作成および使用するための API オペレーションを含むポリシー](okta-configuring-iam-permissions.md)
+ [Okta の設定](okta-configuring.md)
+ [Okta 接続の設定](okta-configuring-connections.md)
+ [Okta エンティティからの読み取り](okta-reading-from-entities.md)
+ [Okta 接続オプションのリファレンス](okta-connection-options.md)
+ [Okta の新しいアカウントとデベロッパーアプリの作成ステップ](okta-create-account.md)
+ [制限](okta-connector-limitations.md)

# AWS Glue の Okta のサポート
<a name="okta-support"></a>

AWS Glue は、次のように Okta をサポートしています。

**ソースとしてサポートされていますか?**  
はい。AWS Glue ETL ジョブを使用して、Okta からデータをクエリできます。

**ターゲットとしてサポートされていますか?**  
いいえ。

**サポートされている Okta API バージョン**  
 v1。

# 接続を作成および使用するための API オペレーションを含むポリシー
<a name="okta-configuring-iam-permissions"></a>

 次のサンプル ポリシーで、接続の作成と使用に必要な AWS の権限について説明します。新しいロールを作成する場合は、以下を含むポリシーを作成します。

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

****  

```
{
  "Version":"2012-10-17",		 	 	 
  "Statement": [
    {
      "Effect": "Allow",
      "Action": [
        "glue:ListConnectionTypes",
        "glue:DescribeConnectionType",
        "glue:RefreshOAuth2Tokens",
        "glue:ListEntities",
        "glue:DescribeEntity"
      ],
      "Resource": "*"
    }
  ]
}
```

------

また、次のマネージド IAM ポリシーを使用して、アクセスを許可できます。
+  [ AWSGlueServiceRole ](https://console.aws.amazon.com/iam/home#policies/arn:aws:iam::aws:policy/service-role/AWSGlueServiceRole) – さまざまな AWS Glue プロセスを実行するために必要なリソースへのアクセス権をユーザーに代わって付与します。これらのリソースには、AWS Glue、Amazon S3、IAM、CloudWatch Logs、および Amazon EC2 が含まれます。このポリシーで指定されたリソースの命名規則に従った場合、AWS Glue プロセスは必要なアクセス許可を使用できます。このポリシーは、通常、クローラー、ジョブ、開発エンドポイントを定義するときに指定されたロールにアタッチされます。
+  [ AWSGlueConsoleFullAccess ](https://console.aws.amazon.com/iam/home#policies/arn:aws:iam::aws:policy/AWSGlueConsoleFullAccess) — ポリシーがアタッチされているアイデンティティが AWS マネージメントコンソールを使用するときは、AWS Glue リソースへのフルアクセスを許可します。このポリシーで指定されたリソースの命名規則に従った場合、ユーザーは完全なコンソール機能を使用できます。このポリシーは、通常 AWS Glue コンソールのユーザーにアタッチされています。

# Okta の設定
<a name="okta-configuring"></a>

AWS Glue を使用して Okta との間でデータを転送できるようにするには、次の要件を満たす必要があります。

## 最小要件
<a name="okta-configuring-min-requirements"></a>
+  Okta アカウントがある。アカウントの作成の詳細については、「[Okta の新しいアカウントとデベロッパーアプリの作成ステップ](okta-create-account.md)」を参照してください。
+  Okta アカウントで API アクセスが有効になっている。
+  OAuth2 API 統合が Okta アカウントで作成された。この統合により、AWS Glue がお客様のアカウントに対して認証呼び出しを行うときに、お客様のデータに安全にアクセスするために使用するクライアントの認証情報が提供されます。詳細については、クライアントアプリケーションと OAuth2.0 認証情報を作成するステップ:「Okta の新しいアカウントとデベロッパーアプリの作成ステップ」を参照してください。
+  OktaApiToken を持つ Okta アカウントがある。[Okta のドキュメント](https://developer.okta.com/docs/guides/create-an-api-token/main/#create-the-token)を参照してください。

 これらの要件を満たすと、Okta アカウントに AWS Glue を接続する準備が整います。一般的な接続では、Okta で他に何もする必要はありません。

# Okta 接続の設定
<a name="okta-configuring-connections"></a>

 Okta は 2 種類の認可メカニズムをサポートしています。
+  OAuth 認可: Okta は `AUTHORIZATION_CODE` グラントタイプをサポートしています。
  +  このグラントタイプは、ユーザーを認証するためにサードパーティーの認証サーバーにユーザーをリダイレクトすることから、「three-legged」の OAuth と見なされます。AWS Glue コンソール経由で接続を作成するときに使用されます。AWS Glue コンソールでは、ユーザーが Okta にリダイレクトされます。ここではユーザーがログインし、Okta インスタンスにアクセスするためのリクエストされた権限を AWS Glue に許可する必要があります。
  +  ユーザーは、Okta で独自の接続アプリケーションを作成し、AWS Glue コンソールを介して接続を作成するときに独自のクライアント ID とクライアントシークレットを指定することを選択できます。このシナリオでは、引き続き Okta にリダイレクトされてログインし、リソースへアクセスするために AWS Glue を認可します。
  +  このグラントタイプは、更新トークンとアクセストークンになります。アクセストークンの有効期間は短く、更新トークンを使用してユーザーとやり取りすることなく自動的に更新される場合があります。
  +  詳細については、[OAuth 認可コードフローでの接続アプリケーションの作成に関する Okta の公開ドキュメント](https://developers.google.com/workspace/guides/create-credentials)を参照してください。
+  カスタム認可: 
  +  カスタム認可に必要な API キーの生成に関する Okta の公開ドキュメントについては、[Okta のドキュメント](https://developer.okta.com/docs/guides/create-an-api-token/main/#create-the-token)を参照してください。

Okta 接続を設定するには:

1.  AWS Secrets Manager で、次の詳細を含むシークレットを作成します。AWS Glue で接続ごとにシークレットを作成する必要があります。

   1.  OAuth 認可の場合: 
      +  カスタマーマネージド接続アプリケーションの場合 – シークレットには、`USER_MANAGED_CLIENT_APPLICATION_CLIENT_SECRET` を使用して接続されたアプリケーションのコンシューマーシークレットをキーとして含める必要があります。

   1.  カスタム認可の場合: 
      +  カスタマーマネージド接続アプリケーションの場合 – シークレットには、`OktaApiToken` を使用して接続されたアプリケーションのコンシューマーシークレットをキーとして含める必要があります。

1. AWS Glue Studio で、以下の手順に従って **[データ接続]** の下に接続を作成します。

   1.  [接続] で **[接続を作成]** を選択します。

   1. **[データソース]** を選択する際に、[Okta] を選択します。

   1. Okta サブドメインを指定します。

   1. Okta アカウントの Okta ドメイン URL を選択します。

   1.  AWS Glue が次のアクションを担い、その権限を持つことができる IAM ロールを選択します。

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

****  

      ```
      {
        "Version":"2012-10-17",		 	 	 
        "Statement": [
          {
            "Effect": "Allow",
            "Action": [
              "secretsmanager:DescribeSecret",
              "secretsmanager:GetSecretValue",
              "secretsmanager:PutSecretValue",
              "ec2:CreateNetworkInterface",
              "ec2:DescribeNetworkInterfaces",
              "ec2:DeleteNetworkInterface"
            ],
            "Resource": "*"
          }
        ]
      }
      ```

------

   1.  データソースに接続するための認可タイプを選択します。

   1.  OAuth2 認可タイプの場合は、Okta アプリケーションの **[ユーザーマネージドクライアントアプリケーション ClientId]** を指定します。

   1.  AWS Glue でこの接続に使用する `secretName` を選択して、トークンを配置します。

   1.  ネットワークを使用する場合は、ネットワークオプションを選択します。

1.  AWS Glue ジョブに関連付けられている IAM ロールに `secretName` を読み取るアクセス許可を付与します。

1.  AWS Glue ジョブ設定で、**[追加のネットワーク接続]** として `connectionName` を指定します。

# Okta エンティティからの読み取り
<a name="okta-reading-from-entities"></a>

 **前提条件** 
+  読み取り元の Okta オブジェクト。使用可能なエンティティを確認するには、以下のサポートされているエンティティの表を参照してください。

 **サポートされているエンティティ** 


| エンティティ | フィルタリング可能 | 制限をサポートする | Order By をサポートする | Select \$1 をサポートする | パーティショニングをサポートする | 
| --- | --- | --- | --- | --- | --- | 
| アプリケーション | はい | あり | なし | あり | なし | 
| デバイス | はい | あり | なし | あり | あり | 
| グループ | はい | あり | あり | あり | あり | 
| [ユーザー] | はい | あり | あり | あり | あり | 
| ユーザータイプ | なし | なし | なし | あり | なし | 

 **例** 

```
okta_read = glueContext.create_dynamic_frame.from_options(
    connection_type="Okta",
    connection_options={
        "connectionName": "connectionName",
        "ENTITY_NAME": "applications",
        "API_VERSION": "v1"
    }
```

 **Okta エンティティとフィールドの詳細** 

 エンティティリスト: 
+  アプリケーション:[ https://developer.okta.com/docs/api/openapi/okta-management/management/tag/Application/ ](https://developer.okta.com/docs/api/openapi/okta-management/management/tag/Application/) 
+  デバイス:[ https://developer.okta.com/docs/api/openapi/okta-management/management/tag/Device/ ](https://developer.okta.com/docs/api/openapi/okta-management/management/tag/Device/) 
+  グループ:[ https://developer.okta.com/docs/api/openapi/okta-management/management/tag/Group/ ](https://developer.okta.com/docs/api/openapi/okta-management/management/tag/Group/) 
+  ユーザー:[ https://developer.okta.com/docs/api/openapi/okta-management/management/tag/User/ ](https://developer.okta.com/docs/api/openapi/okta-management/management/tag/User/) 
+  ユーザータイプ:[ https://developer.okta.com/docs/api/openapi/okta-management/management/tag/UserType/ ](https://developer.okta.com/docs/api/openapi/okta-management/management/tag/UserType/) 

 **パーティショニングクエリ** 

 Spark で同時実行を使用する場合は、追加の Spark オプション `PARTITION_FIELD`、`LOWER_BOUND`、`UPPER_BOUND`、および `NUM_PARTITIONS` を指定できます。これらのパラメータを使用すると、元のクエリは Spark タスクで同時に実行できるサブクエリの `NUM_PARTITIONS` の数に分割されます。
+  `PARTITION_FIELD`: クエリのパーティション化に使用するフィールドの名前。
+  `LOWER_BOUND`: 選択したパーティションフィールドの包括的な下限値。

   日付については、Spark SQL クエリで使用される Spark の日付形式を受け入れます。有効な値の例: `"2024-02-06"`。
+  `UPPER_BOUND`: 選択したパーティションフィールドの排他的上限値。
+  `NUM_PARTITIONS`: パーティション数。

 **例** 

```
okta_read = glueContext.create_dynamic_frame.from_options(
    connection_type="okta",
    connection_options={
        "connectionName": "connectionName",
        "ENTITY_NAME": "lastUpdated",
        "API_VERSION": "v1",
        "PARTITION_FIELD": "lastMembershipUpdated"
        "LOWER_BOUND": "2022-08-10T10:28:46.000Z"
        "UPPER_BOUND": "2024-08-10T10:28:46.000Z"
        "NUM_PARTITIONS": "10"
    }
```

# Okta 接続オプションのリファレンス
<a name="okta-connection-options"></a>

Okta の接続オプションは次のとおりです。
+  `ENTITY_NAME`(文字列) – (必須) 読み取り / 書き込みに使用されます。Okta のオブジェクトの名前。
+  `API_VERSION`(文字列) – (必須) 読み取り / 書き込みに使用されます。使用する Okta Rest API バージョン。例: v1。
+  `SELECTED_FIELDS`(List<String>) – Default: empty(SELECT \$1). 読み込みに使用されます。オブジェクトに選択する列です。
+  `FILTER_PREDICATE`(文字列) – デフォルト: 空 読み込みに使用されます。Spark SQL 形式である必要があります。
+  `QUERY`(文字列) - デフォルト: 空 読み込みに使用されます。完全な Spark SQL クエリです。
+  `PARTITION_FIELD`(文字列) - 読み取りに使用されます。クエリをパーティション化するために使用するフィールドです。
+  `LOWER_BOUND`(文字列) - 読み取りに使用されます。選択したパーティションフィールドの包括的な下限値。
+  `UPPER_BOUND` (文字列) - 読み取りに使用されます。選択したパーティションフィールドの排他的上限値。
+  `NUM_PARTITIONS`(整数) – デフォルト: 1。読み込みに使用されます。読み取り用のパーティションの数です。

# Okta の新しいアカウントとデベロッパーアプリの作成ステップ
<a name="okta-create-account"></a>

 Okta API にアクセスするためのデベロッパーアカウントを Okta に作成します。無料の Okta デベロッパーアカウントでは、Okt API へのアクセスに必要なほとんどの主要なデベロッパー機能にアクセスできます。

**Okta でデベロッパーアカウントを作成するには**

1.  [https://developer.okta.com/signup/](https://console.cloud.google.com) に移動します。

1.  アカウント情報の E メール、名、姓、国/地域を入力します。**[私はロボットではありません]** を選択し、**[サインアップ]** を選択します。

1.  登録したメール ID に確認メールが送信されます。Okta デベロッパーアカウントをアクティブ化するためのリンクを E メールで受信します。[**アクティブ化**] を選択します。

1.  パスワードのリセットのページにリダイレクトされます。新しいパスワードを 2 回入力し、**[パスワードのリセット]** を選択します。

1.  Okta デベロッパーアカウントダッシュボードにリダイレクトされます。

**クライアントアプリケーションと OAuth 2.0 認証情報を作成するには**

1.  デベロッパーダッシュボードで、[アプリケーションの統合の作成] を選択します。  
![\[このスクリーンショットは、[OAuth クライアント ID の作成] ページと [認可されたリダイレクト URI] セクションを示しています。ここでは、URI を追加し、必要に応じて [ADD URI] を選択します。完了したら、[作成] を選択します。\]](http://docs.aws.amazon.com/ja_jp/glue/latest/dg/images/create-client-app-step-1.png)

1.  **[新しいアプリケーション統合の作成]** ウィンドウが表示され、さまざまなサインイン方法が表示されます。**[OIDC –OpenID Connect]** を選択します。

1.  [アプリケーションタイプ] セクションまでスクロールダウンします。**[ウェブアプリケーション]** として選択し、**[次へ]** を選択します。

1.  [新規ウェブアプリケーション統合] 画面で、次の情報を入力します。
   + [アプリケーション統合名] - アプリケーションの名前を入力します。
   + [グラントタイプ] - リストから **[認可コード]** と **[更新トークン]** () を選択します。
   + [サインインリダイレクト URI] - **[URI を追加]** を選択し、`https://{regioncode}.console.aws.amazon.com/appflow/oauth` を追加します。例えば、`us-west-2 (Oregon)` を使用している場合は、`https://us-east-1.console.aws.amazon.com/appflow/oauth` を追加できます。
   + [制御されたアクセス] - 必要に応じてユーザーグループにアプリケーションを割り当て、**[保存]** を選択します。

1. クライアント ID とクライアントシークレットが生成されます。

# 制限
<a name="okta-connector-limitations"></a>

Okta コネクタの制限は次のとおりです。
+  「アプリケーション」エンティティの場合、適用できるフィルターは 1 つのみです。複数のフィルターが適用されると、400 Bad Request が返され、エラーの概要は「検索条件が無効です」となります。
+  並べ替え条件は、検索クエリでのみサポートできます。例えば、 ` http://dev-15940405.okta.com/api/v1/groups?search=type e.q. "OKTA_GROUP"&sortBy=lastUpdated&sortOrder=asc `

# PayPal に対する接続
<a name="connecting-to-data-paypal"></a>

PayPal は、顧客とオンラインベンダー間の送金など、当事者間のオンライン送金を容易にする支払いシステムです。PayPal ユーザーの場合、アカウントには支払者、日付、ステータスなど、トランザクションに関するデータが含まれます。AWS Glue を使用して、PayPal から特定の AWS サービスや他のサポートされているアプリケーションにデータを転送できます。

**Topics**
+ [PayPal 向けの AWS Glue サポート](paypal-support.md)
+ [接続を作成および使用するための API オペレーションを含むポリシー](paypal-configuring-iam-permissions.md)
+ [PayPal の設定](paypal-configuring.md)
+ [PayPal 接続の設定](paypal-configuring-connections.md)
+ [PayPal エンティティからの読み取り](paypal-reading-from-entities.md)
+ [PayPal の接続オプション](paypal-connection-options.md)
+ [PayPal コネクタの制限事項と注意事項](paypal-connector-limitations.md)

# PayPal 向けの AWS Glue サポート
<a name="paypal-support"></a>

AWS Glue は、次のように PayPal をにサポートします。

**ソースとしてサポートされていますか?**  
はい。AWS Glue ETL ジョブを使用して、PayPal からデータをクエリできます。

**ターゲットとしてサポートされていますか?**  
いいえ。

**サポートされている PayPal API バージョン**  
次の PayPal API バージョンがサポートされています。
+ v1

# 接続を作成および使用するための API オペレーションを含むポリシー
<a name="paypal-configuring-iam-permissions"></a>

次のサンプル ポリシーで、接続の作成と使用に必要な AWS IAM 権限について説明します。新しいロールを作成する場合は、以下を含むポリシーを作成します。

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

****  

```
{
  "Version":"2012-10-17",		 	 	 
  "Statement": [
    {
      "Effect": "Allow",
      "Action": [
        "glue:ListConnectionTypes",
        "glue:DescribeConnectionType",
        "glue:RefreshOAuth2Tokens",
        "glue:ListEntities",
        "glue:DescribeEntity"
      ],
      "Resource": "*"
    }
  ]
}
```

------

上記の方法を使用しない場合は、代わりに次のマネージド IAM ポリシーを使用します:
+ [AWSGlueServiceRole](https://console.aws.amazon.com/iam/home#policies/arn:aws:iam::aws:policy/service-role/AWSGlueServiceRole) – さまざまな AWS Glue プロセスを実行するために必要なリソースへのアクセス権をユーザーに代わって付与します。これらのリソースには AWS Glue 、Amazon S3、IAM、CloudWatch Logs、および Amazon EC2 が含まれます。このポリシーで指定されたリソースの命名規則に従った場合、AWS Glue プロセスは必要なアクセス権限を使用できます。このポリシーは、通常、クローラ、ジョブ、開発エンドポイントを定義するときに指定されたロールにアタッチされます。
+ [AWSGlueConsoleFullAccess](https://console.aws.amazon.com/iam/home#policies/arn:aws:iam::aws:policy/AWSGlueConsoleFullAccess) — ポリシーがアタッチされているアイデンティティが AWS マネージメントコンソールを使用するときは、AWS Glue リソースへのフルアクセスを許可します。このポリシーで指定されたリソースの命名規則に従った場合、ユーザーは完全なコンソール機能を使用できます。このポリシーは、通常 AWS Glue コンソールのユーザーにアタッチされています。

# PayPal の設定
<a name="paypal-configuring"></a>

AWS Glue を使用して PayPal からデータを転送できるようにするには、次の要件を満たす必要があります。

## 最小要件
<a name="paypal-configuring-min-requirements"></a>

以下に、最小要件を示します。
+ クライアント認証情報を持つ PayPal アカウントがある。
+ PayPal アカウントに、有効なライセンスを持つ API アクセスがある。

これらの要件を満たすと、PayPal アカウントに AWS Glue を接続する準備が整います。一般的な接続では、PayPal で他に何もする必要はありません。

# PayPal 接続の設定
<a name="paypal-configuring-connections"></a>

PayPal は、OAuth2 の CLIENT CREDENTIALS 許可タイプをサポートしています。
+ このグラントタイプは、クライアントがユーザーのコンテキスト外でアクセストークンを取得するために使用するため、2-legged の OAuth 2.0 と見なされます。AWS Glue は、クライアント ID とクライアントシークレットを使用して、定義したカスタムサービスによって提供される PayPal API を認証できます。
+ 各カスタムサービスは、特定のアクションを実行することをサービスに許可する一連のロールとアクセス許可を持つ API 専用ユーザーによって所有されます。アクセストークンは 1 つのカスタムサービスに関連付けられています。
+ このグラントタイプは、有効期間が短いアクセストークンになり、`/v2/oauth2/token` エンドポイントを再び呼び出すことで更新される場合があります。
+ クライアント認証情報を使用した OAuth 2.0 の PayPal の公開ドキュメントについては、[「認証](https://developer.paypal.com/api/rest/authentication/)」を参照してください。

PayPal 接続を設定するには:

1. AWS Secrets Manager で、次の詳細を含むシークレットを作成します。

   1. カスタマーマネージド接続アプリケーションの場合、シークレットには、`USER_MANAGED_CLIENT_APPLICATION_CLIENT_SECRET` を使用して接続されたアプリケーションのコンシューマーシークレットをキーとして含める必要があります。

   1. 注: AWS Glue で接続にシークレットを作成する必要があります。

1. AWS Glue Glue Studio で、以下の手順に従って **[データ接続]** の下に接続を作成します。

   1. **[接続タイプ]** を選択する際に、[PayPal] を選択します。

   1. 接続先の PayPal インスタンスの `INSTANCE_URL` を指定します。

   1. 次のアクションを実行でき、AWS Glue がその権限を持つ AWS IAM ロールを選択します。

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

****  

      ```
      {
        "Version":"2012-10-17",		 	 	 
        "Statement": [
          {
            "Effect": "Allow",
            "Action": [
              "secretsmanager:DescribeSecret",
              "secretsmanager:GetSecretValue",
              "secretsmanager:PutSecretValue",
              "ec2:CreateNetworkInterface",
              "ec2:DescribeNetworkInterfaces",
              "ec2:DeleteNetworkInterface"
            ],
            "Resource": "*"
          }
        ]
      }
      ```

------

   1. AWS Glue でこの接続に使用する `secretName` を選択して、トークンを配置します。

   1. ネットワークを使用する場合は、ネットワークオプションを選択します。

1. AWS Glue ジョブに関連付けられている IAM ロールに `secretName` を読み取るアクセス許可を付与します。

## OAuth 2.0 認証情報の取得
<a name="paypal-getting-oauth-20-credentials"></a>

Rest API を呼び出すには、クライアント ID とクライアントシークレットをアクセストークンと交換する必要があります。詳細については、「[PayPal REST API の使用を開始する](https://developer.paypal.com/api/rest/)」を参照してください。

# PayPal エンティティからの読み取り
<a name="paypal-reading-from-entities"></a>

**前提条件**

読み取り元の PayPal オブジェクト。オブジェクト名 `transaction` が必要になります。

**ソースに対応するエンティティ**:


| エンティティ | フィルタリング可能 | 制限をサポートする | Order By をサポートする | Select \$1 をサポートする | パーティション分割をサポートする | 
| --- | --- | --- | --- | --- | --- | 
| トランザクション | はい | あり | なし | あり | あり | 

**例**:

```
paypal_read = glueContext.create_dynamic_frame.from_options(
    connection_type="paypal",
    connection_options={
        "connectionName": "connectionName",
        "ENTITY_NAME": "transaction",
        "API_VERSION": "v1",
        "INSTANCE_URL": "https://api-m.paypal.com"
    }
```

**PayPal エンティティとフィールドの詳細**:

静的メタデータを持つエンティティ:

[\[See the AWS documentation website for more details\]](http://docs.aws.amazon.com/ja_jp/glue/latest/dg/paypal-reading-from-entities.html)

## パーティショニングクエリ
<a name="paypal-reading-partitioning-queries"></a>

Spark で同時実行を使用する場合は、追加の Spark オプション `PARTITION_FIELD`、`LOWER_BOUND`、`UPPER_BOUND`、および `NUM_PARTITIONS` を指定できます。これらのパラメータを使用すると、元のクエリは Spark タスクで同時に実行できるサブクエリの `NUM_PARTITIONS` の数に分割されます。
+ `PARTITION_FIELD`: クエリのパーティション化に使用するフィールドの名前。
+ `LOWER_BOUND`: 選択したパーティションフィールドの**包括的な**下限値。

  Datetime フィールドでは、ISO 形式の値を受け入れます。

  有効な値の例は次のとおりです:

  ```
  "2024-07-01T00:00:00.000Z"
  ```
+ `UPPER_BOUND`: 選択したパーティションフィールドの**排他的**上限値。
+ `NUM_PARTITIONS`: パーティション数。

次のフィールドは、エンティティ単位のパーティション分割でサポートされています。


| エンティティ名 | パーティション分割フィールド | データ型 | 
| --- | --- | --- | 
| トランザクション | transaction\$1initiation\$1date | DateTime | 

例:

```
paypal_read = glueContext.create_dynamic_frame.from_options(
    connection_type="paypal",
    connection_options={
        "connectionName": "connectionName",
        "ENTITY_NAME": "transaction",
        "API_VERSION": "v1",
        "PARTITION_FIELD": "transaction_initiation_date"
        "LOWER_BOUND": "2024-07-01T00:00:00.000Z"
        "UPPER_BOUND": "2024-07-02T00:00:00.000Z"
        "NUM_PARTITIONS": "10"
    }
```

# PayPal の接続オプション
<a name="paypal-connection-options"></a>

PayPal の接続オプションは次のとおりです。
+ `ENTITY_NAME`(文字列) – (必須) 読み取りに使用されます。PayPal のオブジェクトの名前。
+ `API_VERSION`(文字列) – (必須) 読み取りに使用されます。使用する PayPal Rest API バージョン。
+ `SELECTED_FIELDS`(List<String>) – Default: empty(SELECT \$1). 読み込みに使用されます。オブジェクトに選択する列です。
+ `FILTER_PREDICATE`(文字列) – デフォルト: 空 読み込みに使用されます。Spark SQL 形式である必要があります。
+ `QUERY`(文字列) - デフォルト: 空 読み込みに使用されます。完全な Spark SQL クエリです。
+ `PARTITION_FIELD`(文字列) - 読み取りに使用されます。クエリをパーティション化するために使用するフィールドです。
+ `LOWER_BOUND`(文字列) - 読み取りに使用されます。選択したパーティションフィールドの包括的な下限値。
+ `UPPER_BOUND` (文字列) - 読み取りに使用されます。選択したパーティションフィールドの排他的上限値。
+ `NUM_PARTITIONS`(整数) – デフォルト: 1。読み込みに使用されます。読み取り用のパーティションの数です。

# PayPal コネクタの制限事項と注意事項
<a name="paypal-connector-limitations"></a>

PayPal コネクタの制限事項または注意事項は次のとおりです。
+ [PayPal トランザクションドキュメント](https://developer.paypal.com/docs/api/transaction-search/v1/#search_get)では、実行されたトランザクションがトランザクション一覧の呼び出しに表示されるまでに最大 3 時間かかることが示されています。ただし、[https://developer.paypal.com/docs/api/transaction-search/v1/#search_get:~:text=last_refreshed_datetime](https://developer.paypal.com/docs/api/transaction-search/v1/#search_get:~:text=last_refreshed_datetime) によってはそれよりも時間がかかることが確認されています。ここで、`last_refreshed_datetime` は API からデータが利用可能になるまでの時間。
+ `last_refreshed_datetime` がリクエストされた `end_date` よりも小さい場合、`end_date` は `last_refreshed_datetime` に等しくなります。これは、その時点までのデータしかないためです。
+ `transaction_initiation_date` フィールドは `transaction` エンティティに提供する必須のフィルターであり、このフィールドで[サポートされる最大](https://developer.paypal.com/docs/transaction-search/#:~:text=The%20maximum%20supported%20date%20range%20is%2031%20days.)日付範囲は 31 日です。
+ `transaction_initiation_date` フィールド以外のフィルター (クエリパラメータ) を使用して `transaction` エンティティ API リクエストを呼び出すと、[https://developer.paypal.com/docs/api/transaction-search/v1/#search_get:~:text=If%20you%20specify%20one%20or%20more%20optional%20query%20parameters%2C%20the%20ending_balance%20response%20field%20is%20empty.](https://developer.paypal.com/docs/api/transaction-search/v1/#search_get:~:text=If%20you%20specify%20one%20or%20more%20optional%20query%20parameters%2C%20the%20ending_balance%20response%20field%20is%20empty.) フィールドの値がレスポンスで取得されないことが予想されます。

# Pendo への接続
<a name="connecting-to-pendo"></a>

Pendo は、ユーザーインタラクションデータ用の豊富なデータストアを提供します。お客様は、このデータを AWS に転送し、必要に応じて、他の製品データと結合したり、追加の分析やダッシュボードを実行したり、アラートを設定したりできるようにします。

**Topics**
+ [AWS Glue の Pendo のサポート](pendo-support.md)
+ [接続を作成および使用するための API オペレーションを含むポリシー](pendo-configuring-iam-permissions.md)
+ [Pendo の設定](pendo-configuring.md)
+ [Pendo 接続の設定](pendo-configuring-connections.md)
+ [Pendo エンティティからの読み取り](pendo-reading-from-entities.md)
+ [Pendo 接続オプション](pendo-connection-options.md)
+ [制限](pendo-connector-limitations.md)

# AWS Glue の Pendo のサポート
<a name="pendo-support"></a>

AWS Glue は、次のように Pendo をサポートしています。

**ソースとしてサポートされていますか?**  
はい。AWS Glue ETL ジョブを使用して、Pendo からデータをクエリできます。

**ターゲットとしてサポートされていますか?**  
いいえ。

**サポートされている Pendo API バージョン**  
 v1 

# 接続を作成および使用するための API オペレーションを含むポリシー
<a name="pendo-configuring-iam-permissions"></a>

次のサンプル ポリシーで、接続の作成と使用に必要な AWS の権限について説明します。新しいロールを作成する場合は、以下を含むポリシーを作成します。

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

****  

```
{
  "Version":"2012-10-17",		 	 	 
  "Statement": [
    {
      "Effect": "Allow",
      "Action": [
        "glue:ListConnectionTypes",
        "glue:DescribeConnectionType",
        "glue:RefreshOAuth2Tokens",
        "glue:ListEntities",
        "glue:DescribeEntity"
      ],
      "Resource": "*"
    }
  ]
}
```

------

上記の方法を使用しない場合は、代わりに次のマネージド IAM ポリシーを使用します。
+  [ AWSGlueServiceRole ](https://console.aws.amazon.com/iam/home#policies/arn:aws:iam::aws:policy/service-role/AWSGlueServiceRole) – さまざまな AWS Glue プロセスを実行するために必要なリソースへのアクセス権をユーザーに代わって付与します。これらのリソースには、AWS Glue、Amazon S3、IAM、CloudWatch Logs、および Amazon EC2 が含まれます。このポリシーで指定されたリソースの命名規則に従った場合、AWS Glue プロセスは必要なアクセス許可を使用できます。このポリシーは、通常、クローラー、ジョブ、開発エンドポイントを定義するときに指定されたロールにアタッチされます。
+  [ AWSGlueConsoleFullAccess ](https://console.aws.amazon.com/iam/home#policies/arn:aws:iam::aws:policy/AWSGlueConsoleFullAccess) — ポリシーがアタッチされているアイデンティティが AWS マネージメントコンソールを使用するときは、AWS Glue リソースへのフルアクセスを許可します。このポリシーで指定されたリソースの命名規則に従った場合、ユーザーは完全なコンソール機能を使用できます。このポリシーは、通常 AWS Glue コンソールのユーザーにアタッチされています。

# Pendo の設定
<a name="pendo-configuring"></a>

AWS Glue を使用して Pendo から転送できるようにするには、次の要件を満たす必要があります。

## 最小要件
<a name="pendo-configuring-min-requirements"></a>
+ `write access` が有効になっている `apiKey` を持つ Pendo アカウントがある。
+  Pendo アカウントに、有効なライセンスを持つ API アクセスがある。

これらの要件を満たすと、Pendo アカウントに AWS Glue を接続する準備が整います。一般的な接続では、Pendo で他に何もする必要はありません。

# Pendo 接続の設定
<a name="pendo-configuring-connections"></a>

Pendo はカスタム認可をサポートしています。

カスタム認可に必要な API キーの生成に関する Pendo の公開ドキュメントについては、[Pendo REST API ドキュメントの認可に関するページ](https://engageapi.pendo.io/?bash#getting-started)を参照してください。

Pendo 接続を設定するには:

1. AWS Secrets Manager で、次の詳細を含むシークレットを作成します。
   + カスタマーマネージド接続アプリケーションの場合 – シークレットには、`apiKey` を使用して接続されたアプリケーションのコンシューマーシークレットをキーとして含める必要があります。
**注記**  
AWS Glue で接続ごとにシークレットを作成する必要があります。

1. AWS Glue Studio で、以下の手順に従って **[データ接続]** の下に接続を作成します。

   1. **[データソース]** を選択する際に、[Pendo] を選択します。

   1. 接続先の Pendo インスタンスの `instanceUrl` を指定します。

   1. AWS Glue が次のアクションを担い、その権限を持つことができる IAM ロールを選択します。

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

****  

      ```
      {
        "Version":"2012-10-17",		 	 	 
        "Statement": [
          {
            "Effect": "Allow",
            "Action": [
              "secretsmanager:DescribeSecret",
              "secretsmanager:GetSecretValue",
              "secretsmanager:PutSecretValue",
              "ec2:CreateNetworkInterface",
              "ec2:DescribeNetworkInterfaces",
              "ec2:DeleteNetworkInterface"
            ],
            "Resource": "*"
          }
        ]
      }
      ```

------

   1. AWS Glue でこの接続に使用する `secretName` を選択して、トークンを配置します。

   1.  ネットワークを使用する場合は、ネットワークオプションを選択します。

1. AWS Glue ジョブに関連付けられている IAM ロールに `secretName` を読み取るアクセス許可を付与します。

1. AWS Glue ジョブ設定で、[追加のネットワーク接続] として `connectionName` を指定します。

# Pendo エンティティからの読み取り
<a name="pendo-reading-from-entities"></a>

 **前提条件** 

読み取り元の Pendo オブジェクト。使用可能なエンティティを確認するには、以下のサポートされているエンティティの表を参照してください。

 **サポートされているエンティティ** 
+ [機能](https://developers.pendo.io/docs/?bash#feature)
+ [ガイド](https://developers.pendo.io/docs/?bash#guide)
+ [ページ](https://developers.pendo.io/docs/?bash#page)
+ [レポートを行う](https://developers.pendo.io/docs/?bash#report)
+ [レポートデータ](https://developers.pendo.io/docs/?bash#return-report-contents-as-array-of-json-objects)
+ [訪問者](https://developers.pendo.io/docs/?bash#visitor)
+ [アカウント](https://developers.pendo.io/docs/?bash#entities)
+ [イベント](https://developers.pendo.io/docs/?bash#events-grouped)
+ [フィーチャーイベント](https://developers.pendo.io/docs/?bash#events-grouped)
+ [ガイドイベント](https://developers.pendo.io/docs/?bash#events-ungrouped)
+ [ページイベント](https://developers.pendo.io/docs/?bash#events-grouped)
+ [投票調査イベント](https://developers.pendo.io/docs/?bash#events-ungrouped)
+ [トラックイベント](https://developers.pendo.io/docs/?bash#events-grouped)


| エンティティ | フィルタリング可能 | 制限をサポートする | Order By をサポートする | Select \$1 をサポートする | パーティショニングをサポートする | 
| --- | --- | --- | --- | --- | --- | 
| 機能 | いいえ | なし | なし | あり | なし | 
| ガイド | いいえ | なし | なし | あり | なし | 
| ページ | いいえ | なし | なし | あり | なし | 
| レポートを行う | いいえ | なし | なし | あり | なし | 
| レポートデータ | いいえ | なし | なし | あり | なし | 
| 訪問者 (Aggregation API) | はい | なし | はい | あり | なし | 
| アカウント (Aggregation API) | はい | なし | はい | あり | なし | 
| イベント (Aggregation API) | はい | なし | はい | あり | なし | 
| フィーチャーイベント (Aggregation API) | はい | なし | はい | はい | はい | 
| ガイドイベント (Aggregation API) | はい | なし | はい | はい | はい | 
| アカウント (Aggregation API) | はい | なし | はい | はい | はい | 
| ページイベント (Aggregation API) | はい | なし | はい | はい | はい | 
| 投票調査イベント (Aggregation API) | はい | なし | はい | はい | はい | 
| トラックイベント (Aggregation API) | はい | なし | はい | はい | はい | 

 **例** 

```
Pendo_read = glueContext.create_dynamic_frame.from_options(
    connection_type="glue.spark.Pendo",
    connection_options={
        "connectionName": "connectionName",
        "ENTITY_NAME": "feature",
        "API_VERSION": "v1",
        "INSTANCE_URL": "instanceUrl"
    }
```

## パーティショニングクエリ
<a name="adobe-marketo-engage-reading-partitioning-queries"></a>

Spark で同時実行を使用する場合は、追加の Spark オプション `PARTITION_FIELD`、`LOWER_BOUND`、`UPPER_BOUND`、および `NUM_PARTITIONS` を指定できます。これらのパラメータを使用すると、元のクエリは Spark タスクで同時に実行できるサブクエリの `NUM_PARTITIONS` の数に分割されます。
+ `PARTITION_FIELD`: クエリのパーティション化に使用するフィールドの名前。
+ `LOWER_BOUND`: 選択したパーティションフィールドの**包括的な**下限値。

  DateTime フィールドでは、ISO 形式の値を受け入れます。

  有効な値の例:

  ```
  "2024-07-01T00:00:00.000Z"
  ```
+ `UPPER_BOUND`: 選択したパーティションフィールドの**排他的**上限値。
+ `NUM_PARTITIONS`: パーティション数。

次の表に、エンティティパーティション分割フィールドのサポートの詳細を示します:


| エンティティ名 | 
| --- | 
| イベント | 
|  フィーチャーイベント  | 
| ガイドイベント | 
| ページイベント | 
| 投票調査イベント | 
| トラックイベント | 

例:

```
pendo_read = glueContext.create_dynamic_frame.from_options(
    connection_type="glue.spark.pendo",
    connection_options={
        "connectionName": "connectionName",
        "ENTITY_NAME": "event",
        "API_VERSION": "v1",
        "INSTANCE_URL": "instanceUrl"
        "NUM_PARTITIONS": "10",
        "PARTITION_FIELD": "appId"
        "LOWER_BOUND": "4656"
        "UPPER_BOUND": "7788"
    }
```

# Pendo 接続オプション
<a name="pendo-connection-options"></a>

Pendo の接続オプションは次のとおりです。
+  `ENTITY_NAME`(文字列) – (必須) 読み取り / 書き込みに使用されます。Pendo のオブジェクトの名前。
+ `INSTANCE_URL`(文字列) - (必須) 以下の許容値を持つ有効な Pendo インスタンス URL。
  + [デフォルト](https://app.pendo.io/)
  + [欧州](https://app.eu.pendo.io/)
  + [US1](https://us1.app.pendo.io/)
+ `API_VERSION`(文字列) – (必須) 読み取りに使用されます。使用する Pendo Engage Rest API バージョン。例: 3.0。
+ `SELECTED_FIELDS`(List<String>) – Default: empty(SELECT \$1). 読み込みに使用されます。オブジェクトに選択する列です。
+ `FILTER_PREDICATE`(文字列) – デフォルト: 空 読み込みに使用されます。Spark SQL 形式である必要があります。
+ `QUERY`(文字列) - デフォルト: 空 読み込みに使用されます。完全な Spark SQL クエリです。
+ `PARTITION_FIELD`(文字列) - 読み取りに使用されます。クエリをパーティション化するために使用するフィールドです。
+ `LOWER_BOUND`(文字列) - 読み取りに使用されます。選択したパーティションフィールドの包括的な下限値。
+ `UPPER_BOUND` (文字列) - 読み取りに使用されます。選択したパーティションフィールドの排他的上限値。
+ `NUM_PARTITIONS`(整数) – デフォルト: 1。読み込みに使用されます。読み取り用のパーティションの数です。

# 制限
<a name="pendo-connector-limitations"></a>

Pendo コネクタの制限は次のとおりです。
+ ページ分割は Pendo でサポートされません。
+ フィルタリングは Aggregate API オブジェクト (`Account`、`Event`、`Feature Event`、`Guide Events`、`Page Event`、`Poll Event`、`Track Event`、`Visitor`) でのみサポートされます
+ DateTimeRange は Aggregate API オブジェクト (`Event`、`Feature Event`、`Guide Events`、`Page Event`、`Poll Event,` `Track Event`) の必須フィルターパラメータです
+ dayRange 期間は、タイムゾーンの期間の開始時に切り下げられます。例えば、指定されたフィルターが `2023-01-12T07:55:27.065Z` の場合、この期間は期間の開始時、つまり `2023-01-12T00:00:00Z` に丸められます。

# Pipedrive への接続
<a name="connecting-to-pipedrive"></a>

 Pipedrive は、小規模ビジネスがリードを管理し、営業活動を追跡し、より多くの取引を成立させるのに役立つように設計された販売パイプライン CRM です。Pipedrive を使用すると、小規模ビジネスの販売チームは、プロセスを合理化し、販売データを 1 つの統合された CRM 販売ツールに統合できます。Pipedrive ユーザーの場合は、Pipedrive アカウントに AWS Glue を接続できます。その後、Pipedrive を ETL ジョブのデータソースとして使用できます。これらのジョブを実行して、Pipedrive と AWS サービス、またはその他のサポートされているアプリケーション間でデータを転送します。

**Topics**
+ [AWS Glue の Pipedrive のサポート](pipedrive-support.md)
+ [接続を作成および使用するための API オペレーションを含むポリシー](pipedrive-configuring-iam-permissions.md)
+ [Pipedrive の設定](pipedrive-configuring.md)
+ [Pipedrive 接続の設定](pipedrive-configuring-connections.md)
+ [Pipedrive エンティティからの読み取り](pipedrive-reading-from-entities.md)
+ [Pipedrive 接続オプションのリファレンス](pipedrive-connection-options.md)
+ [制限](pipedrive-connector-limitations.md)

# AWS Glue の Pipedrive のサポート
<a name="pipedrive-support"></a>

AWS Glue は、次のように Pipedrive をサポートしています。

**ソースとしてサポートされていますか?**  
はい。AWS Glue ETL ジョブを使用して、Pipedrive からデータをクエリできます。

**ターゲットとしてサポートされていますか?**  
いいえ。

**サポートされている Pipedrive API バージョン**  
 v1。

# 接続を作成および使用するための API オペレーションを含むポリシー
<a name="pipedrive-configuring-iam-permissions"></a>

 次のサンプル ポリシーで、接続の作成と使用に必要な AWS の権限について説明します。新しいロールを作成する場合は、以下を含むポリシーを作成します。

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

****  

```
{
  "Version":"2012-10-17",		 	 	 
  "Statement": [
    {
      "Effect": "Allow",
      "Action": [
        "glue:ListConnectionTypes",
        "glue:DescribeConnectionType",
        "glue:RefreshOAuth2Tokens",
        "glue:ListEntities",
        "glue:DescribeEntity"
      ],
      "Resource": "*"
    }
  ]
}
```

------

また、次のマネージド IAM ポリシーを使用して、アクセスを許可できます。
+  [ AWSGlueServiceRole ](https://console.aws.amazon.com/iam/home#policies/arn:aws:iam::aws:policy/service-role/AWSGlueServiceRole) – さまざまな AWS Glue プロセスを実行するために必要なリソースへのアクセス権をユーザーに代わって付与します。これらのリソースには、AWS Glue、Amazon S3、IAM、CloudWatch Logs、および Amazon EC2 が含まれます。このポリシーで指定されたリソースの命名規則に従った場合、AWS Glue プロセスは必要なアクセス許可を使用できます。このポリシーは、通常、クローラー、ジョブ、開発エンドポイントを定義するときに指定されたロールにアタッチされます。
+  [ AWSGlueConsoleFullAccess ](https://console.aws.amazon.com/iam/home#policies/arn:aws:iam::aws:policy/AWSGlueConsoleFullAccess) — ポリシーがアタッチされているアイデンティティが AWS マネージメントコンソールを使用するときは、AWS Glue リソースへのフルアクセスを許可します。このポリシーで指定されたリソースの命名規則に従った場合、ユーザーは完全なコンソール機能を使用できます。このポリシーは、通常 AWS Glue コンソールのユーザーにアタッチされています。

# Pipedrive の設定
<a name="pipedrive-configuring"></a>

AWS Glue を使用して Pipedrive からデータを転送できるようにするには、次の要件を満たす必要があります。

## 最小要件
<a name="pipedrive-configuring-min-requirements"></a>
+  Pipedrive アカウントがある。
+  Pipedrive アカウントで API アクセスが有効になっている。

 これらの要件を満たすと、Pipedrive アカウントに AWS Glue を接続する準備が整います。一般的な接続では、Pipedrive で他に何もする必要はありません。

# Pipedrive 接続の設定
<a name="pipedrive-configuring-connections"></a>

 Pipedrive は、OAuth2 の AUTHORIZATION\$1CODE のグラントタイプをサポートしています。
+  このグラントタイプは、ユーザーを認証するためにサードパーティーの認証サーバーにユーザーをリダイレクトすることから、「three-legged」の OAuth と見なされます。AWS Glue コンソール経由で接続を作成するときに使用されます。接続を作成するユーザーは、デフォルトで AWS Glue 所有の接続アプリケーションを使用できます。この場合、Pipedrive インスタンス URL 以外の OAuth 関連情報を指定する必要はありません。AWS Glue コンソールでは、ユーザーが Pipedrive にリダイレクトされます。ここではユーザーがログインし、Pipedrive インスタンスにアクセスするためのリクエストされた権限を AWS Glue に許可する必要があります。
+  ユーザーは、Pipedrive で独自の接続アプリケーションを作成し、AWS Glue コンソールを介して接続を作成するときに独自のクライアント ID とクライアントシークレットを指定することを選択する必要があります。このシナリオでは、引き続き Pipedrive にリダイレクトされてログインし、リソースへアクセスするために AWS Glue を承認します。
+  このグラントタイプは、更新トークンとアクセストークンになります。アクセストークンは 1 時間有効で、更新トークンを使用することでユーザーとやり取りすることなく自動的に更新できます。
+  詳細については、[AUTHORIZATION\$1CODE OAuth フローでの接続アプリケーションの作成に関するドキュメント](https://developers.pipedrive.com/docs/api/v1/Oauth)を参照してください。

Pipedrive 接続を設定するには:

1.  AWS Secrets Manager で、次の詳細を含むシークレットを作成します。AWS Glue で接続ごとにシークレットを作成する必要があります。

   1.  カスタマーマネージド接続アプリケーションの場合 – シークレットには、USER\$1MANAGED\$1CLIENT\$1APPLICATION\$1CLIENT\$1SECRET を使用して接続されたアプリケーションのコンシューマーシークレットをキーとして含める必要があります。

1. AWS Glue Studio で、以下の手順に従って **[データ接続]** の下に接続を作成します。

   1.  [データ接続] の **[接続を作成]** を選択します。

   1. **[データソース]** を選択する際に、[Pipedrive] を選択します。

   1. Pipedrive の **[instanceURL]** を指定します。

   1.  AWS Glue が次のアクションを担い、その権限を持つことができる IAM ロールを選択します。

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

****  

      ```
      {
        "Version":"2012-10-17",		 	 	 
        "Statement": [
          {
            "Effect": "Allow",
            "Action": [
              "secretsmanager:DescribeSecret",
              "secretsmanager:GetSecretValue",
              "secretsmanager:PutSecretValue",
              "ec2:CreateNetworkInterface",
              "ec2:DescribeNetworkInterfaces",
              "ec2:DeleteNetworkInterface"
            ],
            "Resource": "*"
          }
        ]
      }
      ```

------

   1.  接続する Pipedrive の [ユーザーマネージドクライアントアプリケーション ClientId] を指定します。

   1.  AWS Glue でこの接続に使用する `secretName` を選択して、トークンを配置します。

   1.  ネットワークを使用する場合は、ネットワークオプションを選択します。

1.  AWS Glue ジョブに関連付けられている IAM ロールに `secretName` を読み取るアクセス許可を付与します。[**次へ**] を選択します。

1.  **connectionName** を指定し、**[次]** を選択します。

1.  次のページで、**[接続を作成]** を選択します。Pipedrive にログインするように求められます。ユーザー名とパスワードを入力して、**[ログイン]** を選択します。

1.  ログインしたら、**[アプリケーションに進む]** を選択します。これで、接続を使用する準備ができました。

1.  AWS Glue ジョブ設定で、**[追加のネットワーク接続]** として `connectionName` を指定します。

# Pipedrive エンティティからの読み取り
<a name="pipedrive-reading-from-entities"></a>

 **前提条件** 
+  読み取り元の Pipedrive オブジェクト。使用可能なエンティティを確認するには、以下のサポートされているエンティティの表を参照してください。

 **サポートされているエンティティ** 


| エンティティ | フィルタリング可能 | 制限をサポートする | Order By をサポートする | Select \$1 をサポートする | パーティショニングをサポートする | 
| --- | --- | --- | --- | --- | --- | 
| アクティビティ | はい | あり | なし | あり | あり | 
| アクティビティタイプ | なし | なし | なし | あり | なし | 
| 通話ログ | なし | なし | なし | あり | なし | 
| 通貨 | はい | あり | なし | あり | なし | 
| Deals | はい | あり | あり | あり | あり | 
| リード | はい | あり | あり | あり | なし | 
| リードソース | なし | あり | なし | あり | なし | 
| リードラベル | なし | なし | なし | なし | なし | 
| コメント | はい | あり | あり | あり | あり | 
| 組織 | はい | あり | なし | あり | あり | 
| 許可セット | あり | なし | なし | あり | なし | 
| 人物 | はい | あり | あり | あり | あり | 
| Pipelines | なし | あり | なし | あり | なし | 
| 製品 | はい | あり | なし | あり | あり | 
| ロール | なし | あり | なし | あり | なし | 
| ステージ | はい | あり | なし | あり | なし | 
| [ユーザー] | なし | なし | なし | あり | なし | 

 **例** 

```
pipedrive_read= glueContext.create_dynamic_frame.from_options(
    connection_type="PIPEDRIVE",
    connection_options={
        "connectionName": "connectionName",
        "ENTITY_NAME": "activites",
        "API_VERSION": "v1"
    }
```

 **Pipedrive エンティティとフィールドの詳細** 

 エンティティリスト: 
+  アクティビティ:[ https://developers.pipedrive.com/docs/api/v1/Activities ](https://developers.pipedrive.com/docs/api/v1/Activities) 
+  アクティビティタイプ:[ https://developers.pipedrive.com/docs/api/v1/ActivityTypes ](https://developers.pipedrive.com/docs/api/v1/ActivityTypes) 
+  通話ログ:[ https://developers.pipedrive.com/docs/api/v1/CallLogs ](https://developers.pipedrive.com/docs/api/v1/CallLogs) 
+  通貨:[ https://developers.pipedrive.com/docs/api/v1/Currencies ](https://developers.pipedrive.com/docs/api/v1/Currencies) 
+  ディール:[ https://developers.pipedrive.com/docs/api/v1/Deals ](https://developers.pipedrive.com/docs/api/v1/Deals) 
+  リード:[ https://developers.pipedrive.com/docs/api/v1/Leads ](https://developers.pipedrive.com/docs/api/v1/Leads) 
+  リードソース:[ https://developers.pipedrive.com/docs/api/v1/LeadSources ](https://developers.pipedrive.com/docs/api/v1/LeadSources) 
+  リードラベル:[ https://developers.pipedrive.com/docs/api/v1/LeadLabels ](https://developers.pipedrive.com/docs/api/v1/LeadLabels) 
+  メモ:[ https://developers.pipedrive.com/docs/api/v1/Notes ](https://developers.pipedrive.com/docs/api/v1/Notes) 
+  組織:[ https://developers.pipedrive.com/docs/api/v1/Organizations ](https://developers.pipedrive.com/docs/api/v1/Organizations) 
+  許可セット:[ https://developers.pipedrive.com/docs/api/v1/PermissionSets ](https://developers.pipedrive.com/docs/api/v1/PermissionSets) 
+  個人:[ https://developers.pipedrive.com/docs/api/v1/Persons ](https://developers.pipedrive.com/docs/api/v1/Persons) 
+  パイプライン:[ https://developers.pipedrive.com/docs/api/v1/Pipelines ](https://developers.pipedrive.com/docs/api/v1/Pipelines) 
+  製品:[ https://developers.pipedrive.com/docs/api/v1/Products ](https://developers.pipedrive.com/docs/api/v1/Products) 
+  ロール:[ https://developers.pipedrive.com/docs/api/v1/Roles ](https://developers.pipedrive.com/docs/api/v1/Roles) 
+  ステージ:[ https://developers.pipedrive.com/docs/api/v1/Stages ](https://developers.pipedrive.com/docs/api/v1/Stages) 
+  ユーザー:[ https://developers.pipedrive.com/docs/api/v1/Users ](https://developers.pipedrive.com/docs/api/v1/Users) 


| エンティティ | データタイプ | サポートされている演算子 | 
| --- | --- | --- | 
| アクティビティ、ディール、メモ、組織、個人、製品。 | 日付 | '=' | 
|  | 整数 | '=' | 
|  | 文字列 | '=' | 
|  | ブール値 | '=' | 

## パーティショニングクエリ
<a name="pipedrive-partitioning-queries"></a>

 Pipedrive では、アクティビティエンティティの 1 つのフィールド (due\$1date) のみでフィールドベースのパーティショニングがサポートされています。それは日付フィールドです。

 Spark で同時実行を使用する場合は、追加の Spark オプション `PARTITION_FIELD`、`LOWER_BOUND`、`UPPER_BOUND`、および `NUM_PARTITIONS` を指定できます。これらのパラメータを使用すると、元のクエリは Spark タスクで同時に実行できるサブクエリの `NUM_PARTITIONS` の数に分割されます。
+  `PARTITION_FIELD`: クエリのパーティション化に使用するフィールドの名前。
+  `LOWER_BOUND`: 選択したパーティションフィールドの包括的な下限値。

   日付については、Spark SQL クエリで使用される Spark の日付形式を受け入れます。有効な値の例: `"2024-02-06"`。
+  `UPPER_BOUND`: 選択したパーティションフィールドの排他的上限値。
+  `NUM_PARTITIONS`: パーティション数。

 **例** 

```
pipedrive_read = glueContext.create_dynamic_frame.from_options(
    connection_type="PIPEDRIVE",
    connection_options={
        "connectionName": "connectionName",
        "ENTITY_NAME": "activites",
        "API_VERSION": "v1",
        "PARTITION_FIELD": "due_date"
        "LOWER_BOUND": "2023-09-07T02:03:00.000Z"
        "UPPER_BOUND": "2024-05-07T02:03:00.000Z"
        "NUM_PARTITIONS": "10"
    }
```

# Pipedrive 接続オプションのリファレンス
<a name="pipedrive-connection-options"></a>

Pipedrive の接続オプションは次のとおりです。
+  `ENTITY_NAME`(文字列) – (必須) 読み取り / 書き込みに使用されます。Pipedrive のオブジェクトの名前。
+  `API_VERSION`(文字列) – (必須) 読み取り / 書き込みに使用されます。使用する Pipedrive Rest API バージョン。例: v1。
+  `INSTANCE_URL`(文字列) – (必須) ユーザーがオペレーションを実行するインスタンスの URL。例: v1。
+  `SELECTED_FIELDS`(List<String>) – Default: empty(SELECT \$1). 読み込みに使用されます。オブジェクトに選択する列です。
+  `FILTER_PREDICATE`(文字列) – デフォルト: 空 読み込みに使用されます。Spark SQL 形式である必要があります。
+  `QUERY`(文字列) - デフォルト: 空 読み込みに使用されます。完全な Spark SQL クエリです。
+  `PARTITION_FIELD`(文字列) - 読み取りに使用されます。クエリをパーティション化するために使用するフィールドです。
+  `LOWER_BOUND`(文字列) - 読み取りに使用されます。選択したパーティションフィールドの包括的な下限値。
+  `UPPER_BOUND` (文字列) - 読み取りに使用されます。選択したパーティションフィールドの排他的上限値。
+  `NUM_PARTITIONS`(整数) – デフォルト: 1。読み込みに使用されます。読み取り用のパーティションの数です。

# 制限
<a name="pipedrive-connector-limitations"></a>

Pipedrive コネクタの制限は次のとおりです。
+ Pipedrive は、1 つのエンティティ (アクティビティ) に対してのみフィールドベースのパーティショニングをサポートしています。
+ Pipedrive は、アクティビティ、ディール、ノート、個人、組織、製品エンティティに対してレコードベースのパーティショニングをサポートしています。
+ ディールエンティティで、無効な値フィルター値が使用されている場合、フィルターとしてのステータスフィールドはすべてのレコードを返します。
+ ディールエンティティで、複数のフィールドを使用した順序付けはサポートされていません。
+ パフォーマンスデータを取得するために、ローカル AWS アカウントを使用しています。しかし、アクセストークンをローカルで更新する制限により、1 GB のデータを処理する AWS Glue ジョブは失敗します。したがって、179 MB のデータでパフォーマンステストを最適化しており、上記の結果はこの最適化に基づいています。その場合でも、パーティションの数が増えると、SaaS エンドポイントは 1 つのパーティションと比較して時間がかかることがわかりました。この動作について Pipedrive サポートチームに相談したところ、Pipedrive はリクエストをサイレントにスロットリングし、レスポンスを遅延させているとのことでした。したがって、大規模なデータセットで AWS Glue ジョブを実行したり、同じ API エンドポイントを複数回呼び出したりすると、Pipedrive API の実装が原因でタイムアウトの問題が発生する可能性があります。ただし、コネクタとシムの応答時間は、パーティション数が増加すると期待どおりに減少します。

# Productboard への接続
<a name="connecting-to-productboard"></a>

Productboard は、製品チームが適切な製品をより迅速に市場投入できるようにする製品管理システムです。Zendesk、UiPath、Microsoft などの 3,000 を超える最新の製品主導の企業が Productboard を使用して、ユーザーが本当に必要なものを理解し、次に何を構築するか優先順位を付け、ロードマップを中心にチーム全体を結集させます。

**Topics**
+ [AWS Glue の Productboard のサポート](productboard-support.md)
+ [接続を作成および使用するための API オペレーションを含むポリシー](productboard-configuring-iam-permissions.md)
+ [Productboard の設定](productboard-configuring.md)
+ [Productboard 接続の設定](productboard-configuring-connections.md)
+ [Productboard エンティティからの読み取り](productboard-reading-from-entities.md)
+ [Productboard 接続オプション](productboard-connection-options.md)
+ [Productboard アカウントの作成](productboard-create-account.md)
+ [制限](productboard-connector-limitations.md)

# AWS Glue の Productboard のサポート
<a name="productboard-support"></a>

AWS Glue は、次のように Productboard をサポートしています。

**ソースとしてサポートされていますか?**  
はい。AWS Glue ETL ジョブを使用して、Productboard からデータをクエリできます。

**ターゲットとしてサポートされていますか?**  
いいえ。

**サポートされている Productboard API バージョン**  
 v1 

# 接続を作成および使用するための API オペレーションを含むポリシー
<a name="productboard-configuring-iam-permissions"></a>

次のサンプル ポリシーで、接続の作成と使用に必要な AWS の権限について説明します。新しいロールを作成する場合は、以下を含むポリシーを作成します。

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

****  

```
{
  "Version":"2012-10-17",		 	 	 
  "Statement": [
    {
      "Effect": "Allow",
      "Action": [
        "glue:ListConnectionTypes",
        "glue:DescribeConnectionType",
        "glue:RefreshOAuth2Tokens",
        "glue:ListEntities",
        "glue:DescribeEntity"
      ],
      "Resource": "*"
    }
  ]
}
```

------

上記の方法を使用しない場合は、代わりに次のマネージド IAM ポリシーを使用します。
+  [ AWSGlueServiceRole ](https://console.aws.amazon.com/iam/home#policies/arn:aws:iam::aws:policy/service-role/AWSGlueServiceRole) – さまざまな AWS Glue プロセスを実行するために必要なリソースへのアクセス権をユーザーに代わって付与します。これらのリソースには、AWS Glue、Amazon S3、IAM、CloudWatch Logs、および Amazon EC2 が含まれます。このポリシーで指定されたリソースの命名規則に従った場合、AWS Glue プロセスは必要なアクセス許可を使用できます。このポリシーは、通常、クローラー、ジョブ、開発エンドポイントを定義するときに指定されたロールにアタッチされます。
+  [ AWSGlueConsoleFullAccess ](https://console.aws.amazon.com/iam/home#policies/arn:aws:iam::aws:policy/AWSGlueConsoleFullAccess) — ポリシーがアタッチされているアイデンティティが AWS マネージメントコンソールを使用するときは、AWS Glue リソースへのフルアクセスを許可します。このポリシーで指定されたリソースの命名規則に従った場合、ユーザーは完全なコンソール機能を使用できます。このポリシーは、通常 AWS Glue コンソールのユーザーにアタッチされています。

# Productboard の設定
<a name="productboard-configuring"></a>

AWS Glue を使用して Productboard から転送できるようにするには、次の要件を満たす必要があります。

## 最小要件
<a name="productboard-configuring-min-requirements"></a>
+ E メールとパスワードが設定された Productboard アカウントがある。アカウントの作成の詳細については、「[Productboard アカウントの作成](productboard-create-account.md)」を参照してください。
+  AWS Glue へのサービスアクセスで AWS アカウントを作成する必要があります。
+ Productboard アカウントの認証の詳細 (カスタム認証を使用する場合は JWT トークン、OAuth2.0 を使用する場合はクライアント ID とシークレット) がある。
+ ユーザーが `OAuth2.0` を使用する場合は、[アプリケーションを Productboard に登録](https://app.productboard.com/oauth2/applications/new)し、「[How to integrate with Productboard via OAuth2 - developer documentation](https://developer.productboard.com/docs/how-to-integrate-with-productboard-via-oauth2-developer-documentation)」の手順に従ってアプリケーションをセットアップします。

これらの要件を満たすと、Productboard アカウントに AWS Glue を接続する準備が整います。一般的な接続では、Productboard で他に何もする必要はありません。

# Productboard 接続の設定
<a name="productboard-configuring-connections"></a>

 

Productboard は、カスタム認可と `OAuth2.0` をサポートしています。`OAuth2.0` の場合、Productboard は、`AUTHORIZATION_CODE` グラントタイプをサポートしています。
+ このグラントタイプは、ユーザーを認可するためにサードパーティーの認可サーバーにユーザーをリダイレクトすることから、「three-legged」の `OAuth` と見なされます。AWS Glue コンソール経由で接続を作成するときに使用されます。接続を作成するユーザーは、デフォルトで AWS Glue 所有の接続アプリケーションを使用できます。この場合、Productboard クライアント ID とクライアントシークレット以外の `OAuth` 関連情報を指定する必要はありません。AWS Glue コンソールでは、ユーザーが Productboard にリダイレクトされます。ここではユーザーがログインし、Productboard インスタンスにアクセスするためのリクエストされた権限を AWS Glue に許可する必要があります。
+ ユーザーは、Productboard で独自の接続アプリケーションを作成し、AWS Glue コンソールを介して接続を作成するときに独自のクライアント ID とクライアントシークレットを指定することを選択できます。このシナリオでは、引き続き Productboard にリダイレクトされてログインし、リソースへアクセスするために AWS Glue を認可します。
+ このグラントタイプは、更新トークンとアクセストークンになります。アクセストークンの有効期間は短く、更新トークンを使用してユーザーとやり取りすることなく自動的に更新される場合があります。
+ `AUTHORIZATION_CODE OAuth` フロー用の接続アプリケーションの作成に関する Productboard の公開ドキュメントについては、「[How to integrate with Productboard via OAuth2 - developer documentation](https://developer.productboard.com/docs/how-to-integrate-with-productboard-via-oauth2-developer-documentation)」を参照してください。

Productboard 接続を設定するには:

1. AWS Secrets Manager で、次の詳細を含むシークレットを作成します。
   + `OAuth` 認可 – カスタマーマネージド接続アプリケーションの場合: シークレットには、`USER_MANAGED_CLIENT_APPLICATION_CLIENT_SECRET` を使用して接続されたアプリケーションのコンシューマーシークレットをキーとして含める必要があります。
   + `Custom auth` – カスタマーマネージド接続アプリケーションの場合: シークレットには、`access_token` を使用して接続されたアプリケーションの `JWT token` をキーとして含める必要があります。
**注記**  
AWS Glue で接続ごとにシークレットを作成する必要があります。

1. AWS Glue Studio で、以下の手順に従って **[データ接続]** の下に接続を作成します。

   1. **[データソース]** を選択する際に、[Productboard] を選択します。

   1. AWS Glue が次のアクションを担い、その権限を持つことができる IAM ロールを選択します。

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

****  

      ```
      {
        "Version":"2012-10-17",		 	 	 
        "Statement": [
          {
            "Effect": "Allow",
            "Action": [
              "secretsmanager:DescribeSecret",
              "secretsmanager:GetSecretValue",
              "secretsmanager:PutSecretValue",
              "ec2:CreateNetworkInterface",
              "ec2:DescribeNetworkInterfaces",
              "ec2:DeleteNetworkInterface"
            ],
            "Resource": "*"
          }
        ]
      }
      ```

------

   1. データソースに接続するための認可タイプを選択します。
      + `OAuth` 認可の場合 – Productboard アプリケーションの `Token URL`、および `User Managed Client Application ClientId` を指定します。

   1. AWS Glue でこの接続に使用する `secretName` を選択して、トークンを配置します。

   1.  ネットワークを使用する場合は、ネットワークオプションを選択します。

1. AWS Glue ジョブに関連付けられている IAM ロールに `secretName` を読み取るアクセス許可を付与します。

1. AWS Glue ジョブ設定で、[追加のネットワーク接続] として `connectionName` を指定します。

# Productboard エンティティからの読み取り
<a name="productboard-reading-from-entities"></a>

 **前提条件** 

読み取り元の Productboard オブジェクト。使用可能なエンティティを確認するには、以下のサポートされているエンティティの表を参照してください。

 **サポートされているエンティティ** 
+ [Abuse-reports ](https://productboard.com/developer/marketing/api/campaign-abuse/)
+ [オートメーション](https://productboard.com/developer/marketing/api/automation/list-automations/)
+ [キャンペーン](https://productboard.com/developer/marketing/api/campaigns/list-campaigns/)
+ [Click-details](https://productboard.com/developer/marketing/api/link-clickers/)
+ [Lists](https://productboard.com/developer/marketing/api/link-clickers/)
+ [メンバー](https://productboard.com/developer/marketing/api/list-segment-members/)
+ [Open-details](https://productboard.com/developer/marketing/api/list-members/)
+ [セグメント](https://productboard.com/developer/marketing/api/list-segments/)
+ [Stores](https://productboard.com/developer/marketing/api/ecommerce-stores/list-stores/)
+ [Unsubscribed](https://productboard.com/developer/marketing/api/unsub-reports/)


| エンティティ | フィルタリング可能 | 制限をサポートする | Order By をサポートする | Select \$1 をサポートする | パーティショニングをサポートする | 
| --- | --- | --- | --- | --- | --- | 
|  機能  | あり | あり | なし | はい | はい | 
|  コンポーネント  | いいえ | あり | なし | あり | なし | 
|  製品  | いいえ | あり | なし | あり | なし | 
|  フィーチャーステータス  | いいえ | あり | なし | はい | はい | 
|  カスタムフィールド定義  | いいえ | あり | なし | あり | なし | 
|  カスタムフィールド値  | あり | あり | なし | あり | なし | 

 **例** 

```
Productboard_read = glueContext.create_dynamic_frame.from_options(
    connection_type="Productboard",
    connection_options={
        "connectionName": "connectionName",
        "ENTITY_NAME": "feature",
        "API_VERSION": "1"
    }
```

 **Productboard エンティティとフィールドの詳細** 
+ [特徴](https://developer.productboard.com/#tag/features)
+ [コンポーネント](https://developer.productboard.com/#tag/components)
+ [フィーチャーステータス](https://developer.productboard.com/#tag/statuses)
+ [製品](https://developer.productboard.com/#tag/products)
+ [カスタムフィールド定義](https://developer.productboard.com/#tag/hierarchyEntitiesCustomFields)
+ [カスタムフィールド値](https://developer.productboard.com/#tag/hierarchyEntitiesCustomFieldsValues)

# Productboard 接続オプション
<a name="productboard-connection-options"></a>

Productboard の接続オプションは次のとおりです。
+  `ENTITY_NAME`(文字列) – (必須) 読み取り / 書き込みに使用されます。Productboard のオブジェクトの名前。
+ `API_VERSION`(文字列) – (必須) 読み取りに使用されます。使用する Productboard Engage Rest API バージョン。例: 3.0。
+ `SELECTED_FIELDS`(List<String>) – Default: empty(SELECT \$1). 読み込みに使用されます。オブジェクトに選択する列です。
+ `FILTER_PREDICATE`(文字列) – デフォルト: 空 読み込みに使用されます。Spark SQL 形式である必要があります。
+ `QUERY`(文字列) - デフォルト: 空 読み込みに使用されます。完全な Spark SQL クエリです。

# Productboard アカウントの作成
<a name="productboard-create-account"></a>

1. [Productboard のサインアップページ](https://app.productboard.com/)に移動し、E メール ID とパスワードを入力して、**[ログイン]** を選択します。

1. **[アカウント名]** フィールドに Productboard アカウントの名前を入力し、**[プライバシーポリシーに同意する]** チェックボックスをオンにします。

1. **[ワークスペースを作成する]** ページの **[ワークスペース URL]** フィールドに、新しいワークスペースの URL を入力します。次に、**[続行]** を選択して次のページに進み、残りの詳細を入力します。

   これでトライアルアカウントが作成されます。トライアルアカウントは、15 日間無料です。トライアル期間の終了後は、有料プランを購入できます。E メールアドレス、パスワード、ワークスペース URL を書き留めます。この情報は、今後アカウントにアクセスするために必要になります。

**`OAuth2.0` アプリケーションの登録**

1. [Productboard のログインページ](https://login.productboard.com/?locale=en)に移動し、E メール ID とパスワードを入力して、**[ログイン]** を選択します。

1. 右上隅の **[User]** アイコンを選択し、ドロップダウンメニューから **[Account and billing]** を選択します。

1. **[Extras]** を選択し、ドロップダウンメニューから **[Registered apps]** を選択します。

1. **[Register An App]** を選択します。

1. 次の詳細情報を入力します。
   + **App name** – アプリケーションの名前。
   + **Company / Organization** – 会社または組織の名前。
   + **App website** – アプリケーションのウェブサイト。
   + **[リダイレクト URI]** – リダイレクト URI パターンは、ログインフローが完了したときに Productboard がリダイレクト (リクエストされた場合) できる URI パス (またはカンマ区切りのパスのリスト) です。例: `https://ap-southeast-2\\.console\\.aws\\.amazon\\.com`

1. **[作成]** を選択します。

1. これで、**[Client ID]** と **[Client Secret]** が表示されます。これらをコピーして安全な場所に保存します。次に **[完了]** を選択します。
**注記**  
クライアント ID とクライアントシークレット文字列は、AppFlow または AWS Glue を使用するときにこのコネクタとの接続を確立するために使用される認証情報です。

**CustomAuth 認証情報の取得**

1. [Productboard のログインページ](https://app.productboard.com/)に移動し、E メール ID とパスワードを入力して、**[ログイン]** を選択します。

   ホームページにリダイレクトされます。

1. ホームページで、**[ワークスペース設定]** > **[統合]** > **[パブリック API]** > **[アクセストークン]** に移動します。
**注記**  
**[パブリック API]** セクションが表示されない場合は、アカウントが Essentials プランになっている可能性があります。API トークンにアクセスするには、少なくとも Pro プランである必要があります。プランの機能と名前は変更される可能性があります。パッケージの詳細については、[Productboard の料金](https://www.productboard.com/pricing/)を参照してください。

1. **[\$1]** を選択して新しいトークンを生成し、後で参照できるように安全に保存してください。

**`OAuth2.0` 認証情報の作成**

Productboard コネクタで `OAuth2.0` 認可を利用するには、アプリケーションを Productboard プラットフォームに登録し、`Client ID` と `Client Secret` を生成する必要があります。

1. [Productboard のログインページ](https://app.productboard.com/)に移動し、E メール ID とパスワードを入力して、**[ログイン]** を選択します。

1. 新しい OAuth2 アプリケーションを Productboard アカウントに登録するには、[Producboard](to register new OAuth2 application with your Productboard account) ページに移動します。

1. 必須フィールドを入力し、アクセスする各エンティティに必要なスコープを選択します。
**注記**  
サポートされている 6 つのエンティティに必要な次の 4 つのスコープを選択しています。

1. **[リダイレクト URL]** は次の形式である必要があります: `https://ap-southeast-2\\.console\\.aws\\.amazon\\.com`
**注記**  
Appflow リダイレクト URL は変更される可能性があります。利用可能になったら、AWS Glue プラットフォームのリダイレクト URL を更新してください。

1. これで、**[Client ID]** と **[Client Secret]** が表示されます。これらをコピーして安全な場所に保存します。

1. 「[How to Integrate with Productboard via OAuth2 developer](https://developer.productboard.com/docs/how-to-integrate-with-productboard-via-oauth2-developer-documentation)」の手順に従って、`OAuth2` を設定して検証できます。

# 制限
<a name="productboard-connector-limitations"></a>

Productboard コネクタの制限は次のとおりです。
+ Productboard は、フィールドベースまたはレコードベースのパーティショニングをサポートしていません。

# QuickBooks に対する接続
<a name="connecting-to-data-quickbooks"></a>

QuickBooks は、中小企業向けの主要な会計アプリケーションです。QuickBooks の会計アプリケーションは、Intuit の最初の製品の 1 つとして 1980 年代にまでさかのぼり、それゆえにもともとデスクトップソフトウェアでした。現在、QuickBooks は、インストール可能なソフトウェアとクラウドベースの SaaS ソフトウェアの両方として、いくつかの会計およびビジネス財務アプリケーションを提供しています。QuickBooks ユーザーのお客様は、AWS Glue を QuickBooks アカウントに接続できます。その後、QuickBooks を ETL ジョブのデータソースとして使用できます。これらのジョブを実行して、QuickBooks と AWS サービス、またはその他のサポートされているアプリケーション間でデータを転送します。

**Topics**
+ [QuickBooks 向けの AWS Glue サポート](quickbooks-support.md)
+ [接続を作成および使用するための API オペレーションを含むポリシー](quickbooks-configuring-iam-permissions.md)
+ [QuickBooks の設定](quickbooks-configuring.md)
+ [QuickBooks 接続の設定](quickbooks-configuring-connections.md)
+ [QuickBooks エンティティからの読み取り](quickbooks-reading-from-entities.md)
+ [QuickBooks 接続オプション](quickbooks-connection-options.md)
+ [QuickBooks コネクタの制限事項と注意事項](quickbooks-connector-limitations.md)

# QuickBooks 向けの AWS Glue サポート
<a name="quickbooks-support"></a>

AWS Glue は、次のように QuickBooks をサポートします。

**ソースとしてサポートされていますか?**  
はい。AWS Glue ETL ジョブを使用して、QuickBooks からデータをクエリできます。

**ターゲットとしてサポートされていますか?**  
いいえ。

**サポートされている QuickBooks API バージョン**  
次の QuickBooks API バージョンがサポートされています。
+ v3

# 接続を作成および使用するための API オペレーションを含むポリシー
<a name="quickbooks-configuring-iam-permissions"></a>

次のサンプル ポリシーで、接続の作成と使用に必要な AWS IAM 権限について説明します。新しいロールを作成する場合は、以下を含むポリシーを作成します。

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

****  

```
{
  "Version":"2012-10-17",		 	 	 
  "Statement": [
    {
      "Effect": "Allow",
      "Action": [
        "glue:ListConnectionTypes",
        "glue:DescribeConnectionType",
        "glue:RefreshOAuth2Tokens",
        "glue:ListEntities",
        "glue:DescribeEntity"
      ],
      "Resource": "*"
    }
  ]
}
```

------

上記の方法を使用しない場合は、代わりに次のマネージド IAM ポリシーを使用します:
+ [AWSGlueServiceRole](https://console.aws.amazon.com/iam/home#policies/arn:aws:iam::aws:policy/service-role/AWSGlueServiceRole) – さまざまな AWS Glue プロセスを実行するために必要なリソースへのアクセス権をユーザーに代わって付与します。これらのリソースには AWS Glue 、Amazon S3、IAM、CloudWatch Logs、および Amazon EC2 が含まれます。このポリシーで指定されたリソースの命名規則に従った場合、AWS Glue プロセスは必要なアクセス権限を使用できます。このポリシーは、通常、クローラ、ジョブ、開発エンドポイントを定義するときに指定されたロールにアタッチされます。
+ [AWSGlueConsoleFullAccess](https://console.aws.amazon.com/iam/home#policies/arn:aws:iam::aws:policy/AWSGlueConsoleFullAccess) — ポリシーがアタッチされているアイデンティティが AWS マネージメントコンソールを使用するときは、AWS Glue リソースへのフルアクセスを許可します。このポリシーで指定されたリソースの命名規則に従った場合、ユーザーは完全なコンソール機能を使用できます。このポリシーは、通常 AWS Glue コンソールのユーザーにアタッチされています。

# QuickBooks の設定
<a name="quickbooks-configuring"></a>

AWS Glue を使用して QuickBooks からデータを転送できるようにするには、次の要件を満たす必要があります。

## 最小要件
<a name="quickbooks-configuring-min-requirements"></a>

以下に、最小要件を示します。
+ QuickBooks アカウントがある。
+ QuickBooks アカウントで API アクセスが有効になっている。

詳細については、QuickBooks ドキュメントの次のトピックを参照してください。
+ [Intuit アカウントを作成する](https://quickbooks.intuit.com/learn-support/en-us/help-article/account-management/create-intuit-user-account/L62kSFEOM_US_en_US)
+ [アプリを作成して開発を開始する](https://developer.intuit.com/app/developer/qbo/docs/get-started/start-developing-your-app)

これらの要件を満たすと、QuickBooks アカウントに AWS Glue を接続する準備が整います。一般的な接続では、QuickBooks で他に何もする必要はありません。

# QuickBooks 接続の設定
<a name="quickbooks-configuring-connections"></a>

QuickBooks は、OAuth2 の AUTHORIZATION\$1CODE のグラントタイプをサポートしています。グラントタイプは、AWS Glue が QuickBooks と通信してデータへのアクセスをリクエストする方法を決定します。
+ このグラントタイプは、ユーザーを認証するためにサードパーティーの認証サーバーにユーザーをリダイレクトすることから、「three-legged」の OAuth と見なされます。AWS Glue コンソール経由で接続を作成するときに使用されます。
+ ユーザーは、QuickBooks で独自の接続アプリを作成し、AWS Glue コンソールを介して接続を作成するときに独自のクライアント ID とクライアントシークレットを指定することを選択できます。このシナリオでは、引き続き QuickBooks にリダイレクトされてログインし、リソースへアクセスするために AWS Glue を承認します。
+ このグラントタイプは、更新トークンとアクセストークンになります。アクセストークンの有効期間は短く、更新トークンを使用してユーザーとやり取りすることなく自動的に更新される場合があります。
+ 認可コード OAuth フロー用の接続アプリケーションの作成に関する QuickBooks の公開ドキュメントについては、「[OAuth 2.0 を設定する](https://developer.intuit.com/app/developer/qbo/docs/develop/authentication-and-authorization/oauth-2.0)」を参照してください。

QuickBooks 接続を設定するには:

1. AWS Glue Glue Studio で、以下の手順に従って **[データ接続]** の下に接続を作成します。

   1. **[接続タイプ]** を選択する際に、[QuickBooks] を選択します。

   1. 接続する QuickBooks インスタンスのインスタンス URL と会社 ID を指定します。

   1. 次のアクションを実行でき、AWS Glue がその権限を持つ AWS IAM ロールを選択します。

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

****  

      ```
      {
        "Version":"2012-10-17",		 	 	 
        "Statement": [
          {
            "Effect": "Allow",
            "Action": [
              "secretsmanager:DescribeSecret",
              "secretsmanager:GetSecretValue",
              "secretsmanager:PutSecretValue",
              "ec2:CreateNetworkInterface",
              "ec2:DescribeNetworkInterfaces",
              "ec2:DeleteNetworkInterface"
            ],
            "Resource": "*"
          }
        ]
      }
      ```

------

   1. AWS Glue でこの接続に使用する `secretName` を選択して、トークンを配置します。

   1. ネットワークを使用する場合は、ネットワークオプションを選択します。

1. AWS Glue ジョブに関連付けられている IAM ロールに `secretName` を読み取るアクセス許可を付与します。

# QuickBooks エンティティからの読み取り
<a name="quickbooks-reading-from-entities"></a>

**前提条件**

読み取り元の QuickBooks オブジェクト。

**ソースに対応するエンティティ**:


| エンティティ | フィルタリング可能 | 制限をサポートする | Order By をサポートする | Select \$1 をサポートする | パーティション分割をサポートする | 
| --- | --- | --- | --- | --- | --- | 
| アカウント | はい | あり | あり | あり | あり | 
| 請求 | はい | あり | あり | あり | あり | 
| 会社情報 | なし | なし | なし | あり | なし | 
| お客様 | はい | あり | あり | あり | あり | 
| 従業員 | はい | あり | あり | あり | あり | 
| Estimate | はい | あり | あり | あり | あり | 
| Invoice | はい | あり | あり | あり | あり | 
| Item | はい | あり | あり | あり | あり | 
| Payment | はい | あり | あり | あり | あり | 
| 詳細設定 | なし | なし | なし | あり | なし | 
| 利益と損失 | あり | なし | なし | あり | なし | 
| 税務機関 | はい | あり | あり | あり | あり | 
| ベンダー | はい | あり | あり | あり | あり | 

**例**:

```
QuickBooks_read = glueContext.create_dynamic_frame.from_options(
    connection_type="quickbooks",
    connection_options={
        "connectionName": "connectionName",
        "ENTITY_NAME": "Account",
        "API_VERSION": "v3"
    }
```

**QuickBooks エンティティとフィールドの詳細**:

エンティティとフィールドの詳細については、以下を参照してください:
+ [アカウント](https://developer.intuit.com/app/developer/qbo/docs/api/accounting/most-commonly-used/account)
+ [請求](https://developer.intuit.com/app/developer/qbo/docs/api/accounting/most-commonly-used/bill)
+ [CompanyInfo](https://developer.intuit.com/app/developer/qbo/docs/api/accounting/most-commonly-used/companyinfo)
+ [お客様](https://developer.intuit.com/app/developer/qbo/docs/api/accounting/most-commonly-used/customer)
+ [従業員](https://developer.intuit.com/app/developer/qbo/docs/api/accounting/most-commonly-used/employee)
+ [Estimate](https://developer.intuit.com/app/developer/qbo/docs/api/accounting/most-commonly-used/estimate)
+ [Invoice](https://developer.intuit.com/app/developer/qbo/docs/api/accounting/most-commonly-used/invoice)
+ [項目](https://developer.intuit.com/app/developer/qbo/docs/api/accounting/most-commonly-used/item)
+ [Payment](https://developer.intuit.com/app/developer/qbo/docs/api/accounting/most-commonly-used/payment)
+ [詳細設定](https://developer.intuit.com/app/developer/qbo/docs/api/accounting/most-commonly-used/preferences)
+ [ProfitAndLoss](https://developer.intuit.com/app/developer/qbo/docs/api/accounting/most-commonly-used/profitandloss)
+ [TaxAgency](https://developer.intuit.com/app/developer/qbo/docs/api/accounting/most-commonly-used/taxagency)
+ [ベンダー](https://developer.intuit.com/app/developer/qbo/docs/api/accounting/most-commonly-used/vendor)

## パーティショニングクエリ
<a name="quickbooks-reading-partitioning-queries"></a>

**フィールドベースのパーティション分割**:

QuickBooks では、整数および DateTime データ型フィールドは、フィールドベースのパーティション分割をサポートします。

Spark で同時実行を使用する場合は、追加の Spark オプション `PARTITION_FIELD`、`LOWER_BOUND`、`UPPER_BOUND`、および `NUM_PARTITIONS` を指定できます。これらのパラメータを使用すると、元のクエリは Spark タスクで同時に実行できるサブクエリの `NUM_PARTITIONS` の数に分割されます。
+ `PARTITION_FIELD`: クエリのパーティション化に使用するフィールドの名前。
+ `LOWER_BOUND`: 選択したパーティションフィールドの**包括的な**下限値。

  Datetime フィールドでは、Spark SQL クエリで使用される Spark タイムスタンプ形式を受け入れます。

  有効な値の例は次のとおりです:

  ```
  "2024-05-07T02:03:00.00Z"
  ```
+ `UPPER_BOUND`: 選択したパーティションフィールドの**排他的**上限値。
+ `NUM_PARTITIONS`: パーティション数。

例:

```
QuickBooks_read = glueContext.create_dynamic_frame.from_options(
    connection_type="quickbooks",
    connection_options={
        "connectionName": "connectionName",
        "REALMID": "12345678690123456789",
        "ENTITY_NAME": "Account",
        "API_VERSION": "v3",
        "PARTITION_FIELD": "MetaData_CreateTime"
        "LOWER_BOUND": "2023-09-07T02:03:00.000Z"
        "UPPER_BOUND": "2024-05-07T02:03:00.000Z"
        "NUM_PARTITIONS": "10"
    }
```

**レコードベースのパーティション分割**:

元のクエリは、元のクエリは Spark タスクで同時に実行できるサブクエリの `NUM_PARTITIONS` の数に分割されます。
+ `NUM_PARTITIONS`: パーティション数。

例:

```
QuickBooks_read = glueContext.create_dynamic_frame.from_options(
    connection_type="quickbooks",
    connection_options={
        "connectionName": "connectionName",
        "REALMID": "1234567890123456789",
        "ENTITY_NAME": "Bill",
        "API_VERSION": "v3",
        "NUM_PARTITIONS": "10"
    }
```

# QuickBooks 接続オプション
<a name="quickbooks-connection-options"></a>

QuickBooks の接続オプションは次のとおりです。
+ `ENTITY_NAME`(文字列) – (必須) 読み取りに使用されます。QuickBooks のオブジェクトの名前。
+ `INSTANCE_URL`(文字列) – (必須) 有効な QuickBooks インスタンス URL。
+ `API_VERSION`(文字列) – (必須) 読み取りに使用されます。使用する QuickBooks Rest API バージョン。
+ `REALM_ID`(文字列) – リクエストを送信する個々の QuickBooks Online 会社を識別する ID。
+ `SELECTED_FIELDS`(List<String>) – Default: empty(SELECT \$1). 読み込みに使用されます。オブジェクトに選択する列です。
+ `FILTER_PREDICATE`(文字列) – デフォルト: 空 読み込みに使用されます。Spark SQL 形式である必要があります。
+ `QUERY`(文字列) - デフォルト: 空 読み込みに使用されます。完全な Spark SQL クエリです。
+ `PARTITION_FIELD`(文字列) - 読み取りに使用されます。クエリをパーティション化するために使用するフィールドです。
+ `LOWER_BOUND`(文字列) - 読み取りに使用されます。選択したパーティションフィールドの包括的な下限値。
+ `UPPER_BOUND` (文字列) - 読み取りに使用されます。選択したパーティションフィールドの排他的上限値。
+ `NUM_PARTITIONS`(整数) – デフォルト: 1。読み込みに使用されます。読み取り用のパーティションの数です。

# QuickBooks コネクタの制限事項と注意事項
<a name="quickbooks-connector-limitations"></a>

QuickBooks コネクタの制限事項または注意事項は次のとおりです。
+ `taxAgency` API では、フィルタリングによる順序が期待どおりに機能しません。

# REST API への接続
<a name="connecting-to-data-rest-api"></a>

 AWS Glue では、任意の REST API ベースのデータソースへの AWS Glue の接続に使用できる AWS Glue ConnectionType を設定できます。これは、ETL ジョブのデータソースとして使用できます。これらのジョブを実行して、REST API ベースのデータソース と AWS サービス、またはその他のサポートされているアプリケーション間でデータを転送できます。

**Topics**
+ [AWS Glue REST API のサポート](rest-api-support.md)
+ [接続タイプの登録および接続の作成/使用を行う API オペレーションを含むポリシー](rest-api-configuring-iam-permissions.md)
+ [REST API ConnectionType の設定](rest-api-configuring.md)
+ [REST API 接続の設定](rest-api-configuring-connections.md)
+ [チュートリアル: REST API ConnectionType と Connection の作成](rest-api-example.md)
+ [制限事項](rest-api-limitations.md)

# AWS Glue REST API のサポート
<a name="rest-api-support"></a>

AWS Glue は、次のように REST API をサポートします。

**ソースとしてサポートされていますか?**  
はい。AWS Glue ETL ジョブを使用して、REST API ベースのデータソースからデータをクエリできます。

**ターゲットとしてサポートされていますか?**  
いいえ。

# 接続タイプの登録および接続の作成/使用を行う API オペレーションを含むポリシー
<a name="rest-api-configuring-iam-permissions"></a>

 次のサンプル IAM ポリシーで、AWS Glue ETL ジョブ内の REST API 接続の作成、管理、使用に必要なアクセス許可について説明します。新しいロールを作成する場合は、以下を含むポリシーを作成します。

```
{
    "Version": "2012-10-17",
    "Statement": [
        {
            "Effect": "Allow",
            "Action": [
                "glue:RegisterConnectionType",
                "glue:ListConnectionTypes",
                "glue:DescribeConnectionType",
                "glue:CreateConnection",
                "glue:RefreshOAuth2Tokens",
                "glue:ListEntities",
                "glue:DescribeEntity"
            ],
            "Resource": "*"
        }
    ]
}
```

また、次の IAM ポリシーを使用して、アクセスを許可できます。
+ [AWSGlueServiceRole](https://console.aws.amazon.com/iam/home#policies/arn:aws:iam::aws:policy/service-role/AWSGlueServiceRole) – さまざまな AWS Glue プロセスを実行するために必要なリソースへのアクセス権をユーザーに代わって付与します。これらのリソースには AWS Glue 、Amazon S3、IAM、CloudWatch Logs、Amazon EC2 が含まれます。このポリシーで指定されたリソースの命名規則に従った場合、AWS Glue プロセスは必要なアクセス許可を使用できます。このポリシーは、通常、クローラー、ジョブ、開発エンドポイントを定義するときに指定されたロールにアタッチされます。
+ [AWSGlueConsoleFullAccess](https://console.aws.amazon.com/iam/home#policies/arn:aws:iam::aws:policy/AWSGlueConsoleFullAccess) — ポリシーがアタッチされているアイデンティティが AWS マネージメントコンソールを使用するときは、AWS Glue リソースへのフルアクセスを許可します。このポリシーで指定されたリソースの命名規則に従った場合、ユーザーは完全なコンソール機能を使用できます。このポリシーは、通常 AWS Glue コンソールのユーザーにアタッチされています。

REST API 接続の作成時にネットワークオプションを指定する場合は、IAM ロールに次のアクションも含める必要があります。

```
{
    "Version": "2012-10-17",
    "Statement": [
        {
            "Effect": "Allow",
            "Action": [
                "secretsmanager:DescribeSecret",
                "secretsmanager:GetSecretValue",
                "secretsmanager:PutSecretValue",
                "ec2:CreateNetworkInterface",
                "ec2:DescribeNetworkInterfaces",
                "ec2:DeleteNetworkInterface"
            ],
            "Resource": "*"
        }
    ]
}
```

# REST API ConnectionType の設定
<a name="rest-api-configuring"></a>

 AWS Glue を使用して REST APIベースのデータソースからデータを転送できるようにするには、次の要件を満たす必要があります。

## 最小要件
<a name="rest-api-configuring-min-requirements"></a>

次に、最小要件を示します。
+  AWS Glue REST API 接続タイプを設定して登録している。「[REST API](https://docs.aws.amazon.com/glue/latest/dg/rest-api-connections.html)」を参照してください。
+  OAuth2 クライアント認証情報、認可コード、または JWT を使用する場合は、それに応じてクライアントアプリを設定します。

 これらの要件を満たすと、REST API ベースのデータソースに AWS Glue を接続する準備が整います。通常、REST API 側でこれ以上の設定は必要ありません。

# REST API 接続の設定
<a name="rest-api-configuring-connections"></a>

 AWS Glue REST API コネクタを設定するには、 AWS Glue 接続タイプを設定する必要があります。この接続タイプには、REST データソースの動作方法と、認証、リクエスト、レスポンス、ページ分割、検証、エンティティ/メタデータなどの解釈方法のプロパティに関する詳細が含まれます。AWS Glue REST 接続タイプに必要なプロパティの包括的なリストについては、[RegisterConnectionType](https://docs.aws.amazon.com/glue/latest/webapi/API_DescribeConnectionType.html) API と [REST API に接続する](https://docs.aws.amazon.com/glue/latest/dg/rest-api-connections.html)手順を参照してください。

 REST API コネクタを作成するときに関連するアクションを許可するには、次のポリシーが必要です。

```
{
    "Version":"2012-10-17",
    "Statement": [
        {
            "Effect": "Allow",
            "Action": [
                "glue:RegisterConnectionType",
                "glue:ListConnectionTypes",
                "glue:DescribeConnectionType",
                "glue:CreateConnection",
                "secretsmanager:DescribeSecret",
                "secretsmanager:GetSecretValue",
                "secretsmanager:PutSecretValue",
                "ec2:CreateNetworkInterface",
                "ec2:DescribeNetworkInterfaces",
                "ec2:DeleteNetworkInterface"
            ],
            "Resource": "*"
        }
    ]
}
```

# チュートリアル: REST API ConnectionType と Connection の作成
<a name="rest-api-example"></a>

**Foo REST API への接続**

 Foo REST API AWS Glue の REST API ConnectionType と対応するAWS Glue接続を作成します。この API には次のプロパティがあります (REST API ドキュメントから取得できます）。
+  **インスタンス URL**: https://foo.cloud.com/rest/v1。
+  **認証タイプ**: OAuth2 (クライアント認証情報）。
+  **REST メソッド**: GET。
+  **ページ分割タイプ**: リクエストのクエリパラメータに配置されたプロパティ「制限」と「オフセット」を使用したオフセット。
+ **サポートされているエンティティ**:
  +  **Bar**: 相対パス [/bar.json]。
  +  **Baz**: 相対パス [/baz.json]。

 すべての詳細を取得したら、Foo REST API への AWS Glue 接続の作成を開始できます。

**REST API 接続を作成するには**:

1.  AWS API、CLI、または SDK を使用して RegisterConnectionType API を呼び出し、AWS Glue で REST API 接続タイプを作成します。これにより、AWS Glue に新しい ConnectionType リソースが作成されます。

   ```
   {
       "ConnectionType": "REST-FOO-CONNECTOR",
       "IntegrationType": "REST",
       "Description": "AWS Glue Connection Type for the FOO REST API",
       "ConnectionProperties": {
           "Url": {
               "Name": "Url",
               "Required": true,
               "DefaultValue": "https://foo.cloud.com/rest/v1",
               "PropertyType": "USER_INPUT"
           }
       },
       "ConnectorAuthenticationConfiguration": {
           "AuthenticationTypes": ["OAUTH2"],
           "OAuth2Properties": {
               "OAuth2GrantType": "CLIENT_CREDENTIALS"
           }
       },
       "RestConfiguration": {
           "GlobalSourceConfiguration": {
           "RequestMethod": "GET",
           "ResponseConfiguration": {
               "ResultPath": "$.result",
               "ErrorPath": "$.error.message"
           },
           "PaginationConfiguration": {
               "OffsetConfiguration": {
                   "OffsetParameter": {
                       "Key": "offset",
                       "PropertyLocation": "QUERY_PARAM"
                   },
                   "LimitParameter": {
                       "Key": "limit",
                       "PropertyLocation": "QUERY_PARAM",
                       "DefaultValue": "50"
                   }
               }
           }
       },
       "ValidationEndpointConfiguration": {
           "RequestMethod": "GET",
           "RequestPath": "/bar.json?offset=1&limit=10"
       },
       "EntityConfigurations": {
           "bar": {
               "SourceConfiguration": {
                   "RequestMethod": "GET",
                   "RequestPath": "/bar.json",
                   "ResponseConfiguration": {
                       "ResultPath": "$.result",
                       "ErrorPath": "$.error.message"
                   }
               },
               "Schema": {
                   "name": {
                       "Name": "name",
                       "FieldDataType": "STRING"
                   },
                   "description": {
                       "Name": "description",
                       "FieldDataType": "STRING"
                   },
                   "id": {
                       "Name": "id",
                       "FieldDataType": "STRING"
                   },
                   "status": {
                       "Name": "status",
                       "FieldDataType": "STRING"
                   }
               }
           }
       }
   }
   }
   ```

1.  AWS Secrets Manager でシークレットを作成します。シークレットには、接続されたアプリケーションのコンシューマーシークレットと `USER_MANAGED_CLIENT_APPLICATION_CLIENT_SECRET` をキーとして含める必要があります。
**注記**  
注: AWS Glue で接続ごとにシークレットを作成する必要があります

1.  AWS API、CLI、または SDK を使用して CreateConnection API を呼び出して AWS Glue 接続を作成します。

   1.  ステップ 1 の REST 接続タイプ名を「ConnectionType」として参照します。

   1.  AWS Glue ConnectionType 登録プロセス中に定義された InstanceUrl およびその他の ConnectionProperties を指定します。

   1.  設定された認証タイプから選択します。REST API Foo は ClientCredentials 許可タイプで OAuth2 を使用します。

   1.  **SecretArn** と設定されている他の **AuthenticationProperties** を指定します。例えば、AuthenticationType として `OAUTH2` を設定しているため、CreateConnectionInput で「OAuth2Properties」を設定します。これには、「OAuth2GrantType」、「TokenUrl」、「OAuth2ClientApplication」などのプロパティが必要です。

1.  AWS Glue 接続を作成する CreateConnection リクエストを作成します。

   ```
   {
       "ConnectionInput": {
           "Name": "ConnectionFooREST",
           "ConnectionType": "REST-FOO-CONNECTOR",
           "ConnectionProperties": {},
           "ValidateCredentials": true,
           "AuthenticationConfiguration": {
               "AuthenticationType": "OAUTH2",
               "SecretArn": "arn:aws:secretsmanager:<region>:<accountId>:secret:<secretId>",
               "OAuth2Properties": {
                   "OAuth2GrantType": "CLIENT_CREDENTIALS",
                   "TokenUrl": "https://foo.cloud.com/oauth/token",
                   "OAuth2ClientApplication": {
                       "UserManagedClientApplicationClientId": "your-managed-client-id"
                   }
               }
           }
       }
   }
   ```

# 制限事項
<a name="rest-api-limitations"></a>

REST API コネクタの制限は次のとおりです。
+  REST API コネクタは、AWS API、CLI、または SDK を介してのみ使用できます。コンソールから REST コネクタを設定することはできません。
+  AWS Glue REST ConnectionType は、REST API ベースのデータソースからデータを読み取るようにのみ設定できます。接続は AWS Glue ETL ジョブのソースとしてのみ使用できます。
+  フィルタリングとパーティショニングはサポートされていません。
+  フィールドの選択はサポートされていません。

# Salesforce への接続
<a name="connecting-to-data-salesforce"></a>

Salesforce は、販売、カスタマーサービス、e コマースなどに役立つカスタマーリレーションシップ管理 (CRM) ソフトウェアを提供します。Salesforce ユーザーの場合は、AWS Glue を Salesforce アカウント に接続できます。次に、ETL ジョブのデータソースまたは送信先として Salesforce を使用できます。これらのジョブを実行して、Salesforce と AWS サービス、またはその他のサポートされているアプリケーション間でデータを転送します。

**Topics**
+ [Salesforce 向けの AWS Glue サポート](salesforce-support.md)
+ [接続を作成および使用するための API オペレーションを含むポリシー](salesforce-configuring-iam-permissions.md)
+ [Salesforce の設定](salesforce-configuring.md)
+ [システム管理者プロファイルを適用する](#salesforce-configuring-apply-system-admin-profile)
+ [Salesforce 接続の設定](salesforce-configuring-connections.md)
+ [Salesforce からの読み取り](salesforce-reading-from-entities.md)
+ [Salesforce への書き込み](salesforce-writing-to.md)
+ [Salesforce 接続オプション](salesforce-connection-options.md)
+ [Salesforce コネクタの制限事項](salesforce-connector-limitations.md)
+ [Salesforce の認証コードフローの設定](salesforce-setup-authorization-code-flow.md)
+ [Salesforce の JWT ベアラ OAuth フローを設定する](salesforce-setup-jwt-bearer-oauth.md)

# Salesforce 向けの AWS Glue サポート
<a name="salesforce-support"></a>

AWS Glue は次のように Salesforce をサポートします。

**ソースとしてサポートされていますか?**  
はい。AWS Glue ETL ジョブを使用して、Salesforce からデータをクエリできます。

**ターゲットとしてサポートされているかどうか**  
はい。AWS Glue ETL ジョブを使用して Salesforce にレコードを書き込むことができます。

**サポートされている Salesforce API バージョン**  
次の Salesforce API バージョンがサポートされています。
+ v58.0
+ v59.0
+ v60.0

# 接続を作成および使用するための API オペレーションを含むポリシー
<a name="salesforce-configuring-iam-permissions"></a>

次のサンプル IAM ポリシーで、AWS Glue ETL ジョブでの Salesforce 接続の作成、管理、使用に必要なアクセス許可について説明します。新しいロールを作成する場合は、以下を含むポリシーを作成します。

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

****  

```
{
  "Version":"2012-10-17",		 	 	 
  "Statement": [
    {
      "Effect": "Allow",
      "Action": [
        "secretsmanager:DescribeSecret",
        "secretsmanager:GetSecretValue",
        "secretsmanager:PutSecretValue",
        "glue:ListConnectionTypes",
        "glue:DescribeConnectionType",
        "glue:RefreshOAuth2Tokens",
        "glue:ListEntities",
        "glue:DescribeEntity"
      ],
      "Resource": "*"
    }
  ]
}
```

------

また、次の IAM ポリシーを使用して、アクセスを許可できます。
+ [AWSGlueServiceRole](https://console.aws.amazon.com/iam/home#policies/arn:aws:iam::aws:policy/service-role/AWSGlueServiceRole) – さまざまな AWS Glue プロセスを実行するために必要なリソースへのアクセス権をユーザーに代わって付与します。これらのリソースには AWS Glue 、Amazon S3、IAM、CloudWatch Logs、および Amazon EC2 が含まれます。このポリシーで指定されたリソースの命名規則に従った場合、AWS Glue プロセスは必要なアクセス権限を使用できます。このポリシーは、通常、クローラ、ジョブ、開発エンドポイントを定義するときに指定されたロールにアタッチされます。
+ [AWSGlueConsoleFullAccess](https://console.aws.amazon.com/iam/home#policies/arn:aws:iam::aws:policy/AWSGlueConsoleFullAccess) — ポリシーがアタッチされているアイデンティティが AWS マネージメントコンソールを使用するときは、AWS Glue リソースへのフルアクセスを許可します。このポリシーで指定されたリソースの命名規則に従った場合、ユーザーは完全なコンソール機能を使用できます。このポリシーは、通常 AWS Glue コンソールのユーザーにアタッチされています。

Salesforce 接続の作成時にネットワークオプションを指定する場合は、IAM ロールに次のアクションも含める必要があります。

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

****  

```
{
  "Version":"2012-10-17",		 	 	 
  "Statement": [
    {
      "Effect": "Allow",
      "Action": [
        "ec2:CreateNetworkInterface",
        "ec2:DescribeNetworkInterfaces",
        "ec2:DeleteNetworkInterface"
      ],
      "Resource": "*"
    }
  ]
}
```

------

 ゼロ ETL Salesforce 接続については、「[ゼロ ETL の前提条件](https://docs.aws.amazon.com/glue/latest/dg/zero-etl-prerequisites.html)」を参照してください。

 ゼロ ETL Salesforce 接続については、「[ゼロ ETL の前提条件](https://docs.aws.amazon.com/glue/latest/dg/zero-etl-prerequisites.html)」を参照してください。

# Salesforce の設定
<a name="salesforce-configuring"></a>

AWS Glue を使用して Salesforce との間でデータを転送できるようにするには、次の要件を満たす必要があります。

## 最小要件
<a name="salesforce-configuring-min-requirements"></a>

以下に、最小要件を示します。
+ Salesforce アカウントがある。
+ Salesforce アカウントで API アクセスが有効になっている。Enterprise、Unlimited、Developer、Performance の各エディションで API アクセスがデフォルトで有効になっている。

これらの要件を満たすと、Salesforce アカウントに AWS Glue を接続する準備が整います。AWS Glue は、AWS マネージド接続アプリで残りの要件を処理します。

## Salesforce 用の AWS マネージド接続アプリケーション
<a name="salesforce-configuring-connected-app"></a>

AWS マネージド接続アプリケーションは、より少ないステップで Salesforce 接続を作成するのに役立ちます。Salesforce では、接続アプリケーションは、AWS Glue などの外部アプリケーションが OAuth 2.0 を使用して Salesforce データにアクセスすることを許可するフレームワークです。AWS マネージド接続アプリケーションを使用するには、AWS Glue コンソールを使用して Salesforce 接続を作成します。接続を設定するときは、**[OAuth グラントタイプ]** を**[認証コード]** に設定し、**[AWS マネージド接続アプリケーションの使用]** のチェックボックスをオンのままにします。

接続を保存すると、Salesforce にリダイレクトされるので、Salesforce アカウントにログインして AWS Glue アクセスを承認します。

## システム管理者プロファイルを適用する
<a name="salesforce-configuring-apply-system-admin-profile"></a>

 Salesforce で、手順に従ってシステム管理者プロファイルを適用します。

1.  Salesforce で、**[設定] > [接続されたアプリ] > [接続されたアプリの OAuth 使用状況]** に移動します。

1.  接続されたアプリのリストで、AWS Glue を見つけ **[インストール]** を選択します。必要に応じて、**[ブロック解除]** を選択します。

1.  **[設定] > [接続されたアプリを管理\$1 に移動し、AWS Glue を選択します**。OAuth ポリシーで、**[管理者承認済みユーザーが事前承認されていること]** を選択し、**[システム管理]** のプロファイルを選択します。このアクションにより、AWS Glue へのアクセスがシステム管理者プロファイルを持つユーザーのみに制限されます。

## システム管理者プロファイルを適用する
<a name="salesforce-configuring-apply-system-admin-profile"></a>

 Salesforce で、手順に従ってシステム管理者プロファイルを適用します。

1.  Salesforce で、**[設定] > [接続されたアプリ] > [接続されたアプリの OAuth 使用状況]** に移動します。

1.  接続されたアプリのリストで、AWS Glue を見つけ **[インストール]** を選択します。必要に応じて、**[ブロック解除]** を選択します。

1.  **[設定] > [接続されたアプリを管理\$1 に移動し、AWS Glue を選択します**。OAuth ポリシーで、**[管理者承認済みユーザーが事前承認されていること]** を選択し、**[システム管理]** のプロファイルを選択します。このアクションにより、AWS Glue へのアクセスがシステム管理者プロファイルを持つユーザーのみに制限されます。

# Salesforce 接続の設定
<a name="salesforce-configuring-connections"></a>

Salesforce 接続を設定するには:

1. AWS Secrets Manager で、次の詳細を含むシークレットを作成します。

   1. JWT\$1TOKEN グラントタイプの場合 - シークレットには、JWT\$1TOKEN キーとその値が含まれている必要があります。

   1. AuthorizationCode グラントタイプの場合:

      1. AWS マネージド接続アプリケーションの場合、空のシークレット、または一時的な値を持つシークレットを指定する必要があります。

      1. カスタマーマネージド接続アプリケーションの場合、シークレットには、`USER_MANAGED_CLIENT_APPLICATION_CLIENT_SECRET` をキーとした接続アプリ `Consumer Secret` を含める必要があります。

   1. 注: AWS Glue で接続ごとにシークレットを作成する必要があります。

1. AWS Glue Glue Studio で、以下の手順に従って **[データ接続]** の下に接続を作成します。

   1. **[接続タイプ]** を選択する際に、[Salesforce] を選択します。

   1. 接続する Salesforce インスタンスの INSTANCE\$1URL を指定します。

   1. Salesforce 環境を指定します。

   1. 次のアクションを実行でき、AWS Glue がその権限を持つ AWS IAM ロールを選択します。

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

****  

      ```
      {
        "Version":"2012-10-17",		 	 	 
        "Statement": [
          {
            "Effect": "Allow",
            "Action": [
              "secretsmanager:DescribeSecret",
              "secretsmanager:GetSecretValue",
              "secretsmanager:PutSecretValue",
              "ec2:CreateNetworkInterface",
              "ec2:DescribeNetworkInterfaces",
              "ec2:DeleteNetworkInterface"
            ],
            "Resource": "*"
          }
        ]
      }
      ```

------

   1. 接続に使用する OAuth2 グラントタイプを選択します。グラントタイプは、AWS Glue が Salesforce と通信してデータへのアクセスをリクエストする方法を決定します。選択すると、接続を作成する前に満たす必要がある要件に影響します。次のいずれかのタイプを選択できます。
      + **JWT\$1BEARER グラントタイプ**: この付与タイプは、Salesforce インスタンス内の特定のユーザーのアクセス許可を使用して JSON Web トークン (JWT) を事前に作成できるため、オートメーションシナリオに適しています。作成者は、JWT の有効期間を制御できます。AWS Glue は JWT を使って、Salesforce API の呼び出しに使用されるアクセストークンを取得できます。

        このフローでは、ユーザーが Salesforce インスタンスで接続されたアプリケーションを作成し、ユーザーに JWT ベースのアクセストークンを発行できるようにする必要があります。

        JWT ベアラ OAuth フロー用の接続されたアプリケーションの作成については、「[OAuth 2.0 JWT bearer flow for server-to-server integration](https://help.salesforce.com/s/articleView?id=sf.remoteaccess_oauth_jwt_flow.htm)」を参照してください。Salesforce 接続アプリケーションで JWT ベアラフローを設定するには、「[Salesforce の JWT ベアラ OAuth フローを設定する](salesforce-setup-jwt-bearer-oauth.md)」を参照してください。
      + **AUTHORIZATION\$1CODE グラントタイプ**: この付与タイプは、ユーザーを認証するためにサードパーティーの認証サーバーにユーザーをリダイレクトすることに依存するため、「three-legged」の OAuth と見なされます。AWS Glue コンソール経由で接続を作成するときに使用されます。接続を作成するユーザーは、デフォルトで AWS Glue 接続されたアプリケーション (AWS Glue マネージドクライアントアプリケーション) に依存する場合があります。この場合、Salesforce インスタンス URL 以外の OAuth 関連情報を提供する必要はありません。AWS Glue コンソールでは、ユーザーが Salesforce にリダイレクトされます。ここではユーザーがログインし、Salesforce インスタンスにアクセスするためのリクエストされた権限を AWS Glue に許可する必要があります。

        ユーザーは、Salesforce で独自の接続アプリケーションを作成し、AWS Glue コンソールを介して接続を作成するときに独自のクライアント ID とクライアントシークレットを提供することを選択できます。このシナリオでは、引き続き Salesforce にリダイレクトされてログインし、リソースへアクセスするために AWS Glue を承認します。

        このグラントタイプは、更新トークンとアクセストークンになります。アクセストークンの有効期間は短く、更新トークンを使用してユーザーとやり取りすることなく自動的に更新される場合があります。

        OAuth 認証コードフローでの接続アプリケーションの作成の詳細については、「[Salesforce の認証コードフローの設定](salesforce-setup-authorization-code-flow.md)」を参照してください。

   1. AWS Glue でこの接続に使用する `secretName` を選択して、OAuth 2.0 トークンを配置します。

   1. ネットワークを使用する場合は、ネットワークオプションを選択します。

1. AWS Glue ジョブに関連付けられている IAM ロールに `secretName` を読み取るアクセス許可を付与します。

1. ネットワークオプションを提供する場合は、IAM ロールに次のアクセス許可も付与します。

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

****  

   ```
   {
     "Version":"2012-10-17",		 	 	 
     "Statement": [
       {
         "Effect": "Allow",
         "Action": [
           "ec2:CreateNetworkInterface",
           "ec2:DescribeNetworkInterfaces",
           "ec2:DeleteNetworkInterface"
         ],
         "Resource": "*"
       }
     ]
   }
   ```

------

## AWS CLI による Salesforce 接続の設定
<a name="salesforce-configuring-connections-cli"></a>

CLI を使用して Salesforce AWS 接続を作成できます。

```
aws glue create-connection --connection-input \
"{\"Name\": \"salesforce-conn1\",\"ConnectionType\": \"SALESFORCE\",\"ConnectionProperties\": {\"ROLE_ARN\": \"arn:aws:iam::123456789012:role/glue-role\",\"INSTANCE_URL\": \"https://example.my.salesforce.com\"},\"ValidateCredentials\": true,\"AuthenticationConfiguration\": {\"AuthenticationType\": \"OAUTH2\",\"SecretArn\": \"arn:aws:secretsmanager:us-east-1:123456789012:secret:salesforce-conn1-secret-IAmcdk\",\"OAuth2Properties\": {\"OAuth2GrantType\": \"JWT_BEARER\",\"TokenUrl\": \"https://login.salesforce.com/services/oauth2/token\"}}}" \
--endpoint-url https://glue.us-east-1.amazonaws.com \
--region us-east-1
```

# Salesforce からの読み取り
<a name="salesforce-reading-from-entities"></a>

**前提条件**

読み取る Salesforce sObject。`Account`、`Case`、または `Opportunity` などのオブジェクト名が必要です。

**例**:

```
salesforce_read = glueContext.create_dynamic_frame.from_options(
    connection_type="salesforce",
    connection_options={
        "connectionName": "connectionName",
        "ENTITY_NAME": "Account",
        "API_VERSION": "v60.0"
    }
)
```

## パーティショニングクエリ
<a name="salesforce-reading-partitioning-queries"></a>

Spark で同時実行を使用する場合は、追加の Spark オプション `PARTITION_FIELD`、`LOWER_BOUND`、`UPPER_BOUND`、および `NUM_PARTITIONS` を指定できます。これらのパラメータを使用すると、元のクエリは Spark タスクで同時に実行できるサブクエリの `NUM_PARTITIONS` の数に分割されます。
+ `PARTITION_FIELD`: クエリのパーティション化に使用するフィールドの名前。
+ `LOWER_BOUND`: 選択したパーティションフィールドの**包括的な**下限値。

  日付またはタイムスタンプフィールドについて、コネクタは Spark SQL クエリで使用される Spark タイムスタンプ形式を受け入れます。

  有効な値の例は次のとおりです。

  ```
  "TIMESTAMP \"1707256978123\""
  "TIMESTAMP '2018-01-01 00:00:00.000 UTC'"
  "TIMESTAMP \"2018-01-01 00:00:00 Pacific/Tahiti\"" 
  "TIMESTAMP \"2018-01-01 00:00:00\""
  "TIMESTAMP \"-123456789\" Pacific/Tahiti"
  "TIMESTAMP \"1702600882\""
  ```
+ `UPPER_BOUND`: 選択したパーティションフィールドの**排他的**上限値。
+ `NUM_PARTITIONS`: パーティション数。
+  `TRANSFER_MODE`: `SYNC` と `ASYNC` の 2 つのモードをサポートしています。デフォルトは `SYNC` です。`ASYNC` に設定すると、Bulk API 2.0 クエリが処理に使用されます。

例:

```
salesforce_read = glueContext.create_dynamic_frame.from_options(
    connection_type="salesforce",
    connection_options={
        "connectionName": "connectionName",
        "ENTITY_NAME": "Account",
        "API_VERSION": "v60.0",
        "PARTITION_FIELD": "SystemModstamp",
        "LOWER_BOUND": "TIMESTAMP '2021-01-01 00:00:00 Pacific/Tahiti'",
        "UPPER_BOUND": "TIMESTAMP '2023-01-10 00:00:00 Pacific/Tahiti'",
        "NUM_PARTITIONS": "10",
        "TRANSFER_MODE": "ASYNC" 
    }
)
```

## FILTER\$1PREDICATE オプション
<a name="salesforce-filter-predicate"></a>

**[FILTER\$1PREDICATE]**: オプションのパラメータです。このオプションはクエリフィルターに使用されます。

**[FILTER\$1PREDICATE]** の例

```
     Case 1: FILTER_PREDICATE with single criterion
     Examples: 	
       LastModifiedDate >= TIMESTAMP '2025-04-01 00:00:00 Pacific/Tahiti'
       LastModifiedDate <= TIMESTAMP "2025-04-01 00:00:00"
       LastModifiedDate >= TIMESTAMP '2018-01-01 00:00:00.000 UTC'
       LastModifiedDate <= TIMESTAMP "-123456789 Pacific/Tahiti"
       LastModifiedDate <= TIMESTAMP "1702600882"

     Case 2: FILTER_PREDICATE with multiple criteria
     Examples: 
       LastModifiedDate >= TIMESTAMP '2025-04-01 00:00:00 Pacific/Tahiti' AND Id = "0012w00001CotGiAAJ"
       LastModifiedDate >= TIMESTAMP "1702600882" AND Id = "001gL000002i26MQAQ"

     Case 3: FILTER_PREDICATE single criterion with LIMIT
     Examples: 
       LastModifiedDate >= TIMESTAMP "1702600882" LIMIT 2

     Case 4: FILTER_PREDICATE with LIMIT
     Examples: 
       LIMIT 2
```

# Salesforce への書き込み
<a name="salesforce-writing-to"></a>

**前提条件**

書き込み先の Salesforce sObject。`Account`、`Case`、または `Opportunity` などのオブジェクト名が必要です。

Salesforce コネクタは、次の 4 つの書き込みオペレーションをサポートしています。
+ INSERT
+ UPSERT
+ UPDATE
+ DELETE

`UPSERT` 書き込みオペレーションを使用する場合は、`ID_FIELD_NAMES` オプションを指定してレコードの外部 ID フィールドを指定する必要があります。

 次に示す接続オプションを追加することもできます。
+  `TRANSFER_MODE`: `SYNC` と `ASYNC` の 2 つのモードをサポートしています。デフォルトは `SYNC` です。`ASYNC` に設定すると、一Bulk API 2.0 の取り込みが処理に使用されます。
+  `FAIL_ON_FIRST_ERROR`: デフォルト値は `FALSE` です。つまり、レコードの書き込みに何度か失敗した場合でも、AWS Glue ジョブはすべてのデータの処理を続行します。`TRUE` に設定すると、レコードの書き込みに何度か失敗した場合、AWS Glue ジョブは失敗し、処理は続行されません。

**例**

```
salesforce_write = glueContext.write_dynamic_frame.from_options(
    frame=frameToWrite,
    connection_type="salesforce",
    connection_options={
        "connectionName": "connectionName",
        "ENTITY_NAME": "Account",
        "API_VERSION": "v60.0",
        "WRITE_OPERATION": "INSERT",
        "TRANSFER_MODE": "ASYNC",
        "FAIL_ON_FIRST_ERROR": "true"
    }
)
```

# Salesforce 接続オプション
<a name="salesforce-connection-options"></a>

Salesforce コネクタでサポートされている接続オプションは次のとおりです。
+ `ENTITY_NAME` (文字列) - 読み取り / 書き込みに使用されます。Salesforce のオブジェクトの名前。
+ `API_VERSION`(文字列) – (必須) 読み取り / 書き込みに使用されます。使用する Salesforce Rest API バージョン。
+ `SELECTED_FIELDS`(List<String>) - Default: empty(SELECT \$1). 読み込みに使用されます。オブジェクトに選択する列です。
+ `FILTER_PREDICATE`(文字列) – デフォルト: 空 読み込みに使用されます。Spark SQL 形式である必要があります。

  フィルター述語を指定する場合、 `AND` 演算子のみがサポートされます。`OR` や `IN` などの他の演算子は現在サポートされていません。
+ `QUERY`(文字列) – デフォルト: 空 読み込みに使用されます。完全な Spark SQL クエリです。
+ `PARTITION_FIELD`(文字列) - 読み取りに使用されます。クエリをパーティション化するために使用するフィールドです。
+ `LOWER_BOUND`(文字列) - 読み取りに使用されます。選択したパーティションフィールドの包括的な下限値。
+ `UPPER_BOUND` (文字列) - 読み取りに使用されます。選択したパーティションフィールドの排他的上限値。
+ `NUM_PARTITIONS`(整数) – デフォルト: 1。読み込みに使用されます。読み取り用のパーティションの数。
+ `IMPORT_DELETED_RECORDS` (文字列) - デフォルト: FALSE。読み込みに使用されます。クエリ中に削除レコードを取得するには。
+ `WRITE_OPERATION`(文字列) - デフォルト: INSERT。書き込みに使用されます。値は INSERT、UPDATE、UPSERT、DELETE である必要があります。
+ `ID_FIELD_NAMES`(文字列) - デフォルト: null。UPDATE および UPSERT に必要です。

# Salesforce コネクタの制限事項
<a name="salesforce-connector-limitations"></a>

Salesforce コネクタの制限は次のとおりです。
+ サポートされるのは Spark SQL のみで、Salesforce SOQL はサポートされていません。
+ ジョブのブックマークはサポートされません。
+ Salesforce フィールド名では大文字と小文字が区別されます。Salesforce に書き込む場合、データは Salesforce 内で定義されたフィールドの大文字と小文字を一致させる必要があります。

# Salesforce の認証コードフローの設定
<a name="salesforce-setup-authorization-code-flow"></a>

OAuth 2.0 認証コードフローを有効にする方法については、Salesforce の公開ドキュメントを参照してください。

接続アプリケーションを設定するには:

1. **[OAuth 設定の有効化]** チェックボックスをオンにします。

1. **[コールバック URL]** テキストフィールドに、AWS Glue の 1 つ以上のリダイレクト URL を入力します。

   リダイレクト URL の形式は次のとおりです:

   https://*region*.console.aws.amazon.com/gluestudio/oauth

   この URL では、*region* は Salesforce からのデータ転送に AWS Glue を使用するときの AWS リージョンのコードです。例えば、米国東部 (バージニア北部) リージョンのコードは `us-east-1` です。そのリージョンの URL は次のとおりです。

   https://us-east-1.console.aws.amazon.com/gluestudio/oauth

   AWS Glue がサポートする AWS リージョンのリストについては、「*AWS 全般のリファレンス*」の「[AWS Glue エンドポイントとクォータ](https://docs.aws.amazon.com/general/latest/gr/glue.html)」を参照してください。

1. **[ウェブサーバーフローにシークレットをリクエストする]** チェックボックスをオンにします。

1. **[利用可能な OAuth スコープ]** リストに、次のスコープを追加します。
   + API (api) でユーザーデータを管理する
   + カスタムアクセス許可 (custom\$1permissions) にアクセスする
   + ID URL サービス (ID、プロファイル、E メール、アドレス、電話) にアクセスする
   + 一意のユーザー識別子 (openid) にアクセスする
   + リクエストを随時実行する (refresh\$1token、offline\$1access)

1. 接続アプリの更新トークンポリシーを **[更新トークンは取り消されるまで有効]** に設定します。そうしないと、更新トークンの有効期限が切れるとジョブが失敗します。更新トークンポリシーを確認および編集する方法の詳細については、Salesforce ドキュメントの「[Manage OAuth Access Policies for a Connected App](https://help.salesforce.com/articleView?id=connected_app_manage_oauth.htm)」を参照してください。

# Salesforce の JWT ベアラ OAuth フローを設定する
<a name="salesforce-setup-jwt-bearer-oauth"></a>

[OAuth 2.0 JSON Web トークン](https://help.salesforce.com/s/articleView?id=sf.remoteaccess_oauth_jwt_flow.htm) とのサーバー間統合を有効にするには、Salesforce パブリックドキュメントを参照してください。

JWT を作成し、Salesforce で接続アプリを適切に設定したら、Secrets Manager シークレットの `JWT_TOKEN` キーセットを使用して新しい Salesforce 接続を作成できます。接続の作成時に OAuth 付与タイプを **[JWT ベアラートークン]** に設定します。

# Salesforce Marketing Cloud への接続
<a name="connecting-to-data-salesforce-marketing-cloud"></a>

Salesforce Marketing Cloud は、E メール、モバイル、ソーシャル、オンラインマーケティング用のマーケティングオートメーションおよび分析ソフトウェアのプロバイダーです。また、コンサルティングおよび実装サービスも提供します。Salesforce Marketing Cloud ユーザーとして、Salesforce Marketing Cloud アカウントに AWS Glue を接続できます。次に、ETL ジョブのデータソースまたは送信先として Salesforce Marketing Cloud を使用できます。これらのジョブを実行して、Salesforce Marketing Cloud と AWS サービス、またはその他のサポートされているアプリケーション間でデータを転送します。

**Topics**
+ [Salesforce Marketing Cloud 用 AWS Glue サポート](salesforce-marketing-cloud-support.md)
+ [接続を作成および使用するための API オペレーションを含むポリシー](salesforce-marketing-cloud-configuring-iam-permissions.md)
+ [Salesforce Marketing Cloud の設定](salesforce-marketing-cloud-configuring.md)
+ [Salesforce Marketing Cloud 接続の設定](salesforce-marketing-cloud-configuring-connections.md)
+ [Salesforce Marketing Cloud エンティティからの読み取り](salesforce-marketing-cloud-reading-from-entities.md)
+ [Salesforce Marketing Cloud エンティティへの書き込み](salesforce-marketing-cloud-writing-to-entities.md)
+ [Salesforce Marketing Cloud 接続オプション](salesforce-marketing-cloud-connection-options.md)
+ [Salesforce Marketing Cloud コネクタの制限と注意事項](salesforce-marketing-cloud-connector-limitations.md)

# Salesforce Marketing Cloud 用 AWS Glue サポート
<a name="salesforce-marketing-cloud-support"></a>

AWS Glue は、次のように Salesforce Marketing Cloud をサポートします。

**ソースとしてサポートされていますか?**  
はい。AWS Glue ETL ジョブを使用して、Salesforce Marketing Cloud からデータをクエリできます。

**ターゲットとしてサポートされていますか?**  
いいえ。

**サポートされている Salesforce Marketing Cloud の API のバージョン**  
次の Salesforce Marketing Cloud の API バージョンがサポートされています。
+ v1

# 接続を作成および使用するための API オペレーションを含むポリシー
<a name="salesforce-marketing-cloud-configuring-iam-permissions"></a>

次のサンプル ポリシーで、接続の作成と使用に必要な AWS IAM 権限について説明します。新しいロールを作成する場合は、以下を含むポリシーを作成します。

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

****  

```
{
  "Version":"2012-10-17",		 	 	 
  "Statement": [
    {
      "Effect": "Allow",
      "Action": [
        "glue:ListConnectionTypes",
        "glue:DescribeConnectionType",
        "glue:RefreshOAuth2Tokens",
        "glue:ListEntities",
        "glue:DescribeEntity"
      ],
      "Resource": "*"
    }
  ]
}
```

------

上記の方法を使用しない場合は、代わりに次のマネージド IAM ポリシーを使用します:
+ [AWSGlueServiceRole](https://console.aws.amazon.com/iam/home#policies/arn:aws:iam::aws:policy/service-role/AWSGlueServiceRole) – さまざまな AWS Glue プロセスを実行するために必要なリソースへのアクセス権をユーザーに代わって付与します。これらのリソースには AWS Glue 、Amazon S3、IAM、CloudWatch Logs、および Amazon EC2 が含まれます。このポリシーで指定されたリソースの命名規則に従った場合、AWS Glue プロセスは必要なアクセス権限を使用できます。このポリシーは、通常、クローラ、ジョブ、開発エンドポイントを定義するときに指定されたロールにアタッチされます。
+ [AWSGlueConsoleFullAccess](https://console.aws.amazon.com/iam/home#policies/arn:aws:iam::aws:policy/AWSGlueConsoleFullAccess) — ポリシーがアタッチされているアイデンティティが AWS マネージメントコンソールを使用するときは、AWS Glue リソースへのフルアクセスを許可します。このポリシーで指定されたリソースの命名規則に従った場合、ユーザーは完全なコンソール機能を使用できます。このポリシーは、通常 AWS Glue コンソールのユーザーにアタッチされています。

# Salesforce Marketing Cloud の設定
<a name="salesforce-marketing-cloud-configuring"></a>

AWS Glue を使用して Salesforce Marketing Cloud からデータを転送できるようにするには、次の要件を満たす必要があります:

## 最小要件
<a name="salesforce-marketing-cloud-configuring-min-requirements"></a>

以下に、最小要件を示します。
+ Salesforce Marketing Cloud アカウントを持っている。詳細については、「[Salesforce Marketing Cloud アカウントの作成](#salesforce-marketing-cloud-configuring-creating-salesforce-marketing-cloud-account)」を参照してください。
+ Salesforce Marketing Cloud アカウントで API アクセスが有効になっている。Enterprise、Unlimited、Developer、Performance の各エディションで API アクセスがデフォルトで有効になっている。

これらの要件を満たすと、Salesforce Marketing Cloud アカウントに AWS Glue を接続する準備が整います。一般的な接続では、Salesforce Marketing Cloud で他に何もする必要はありません。

## Salesforce Marketing Cloud アカウントの作成
<a name="salesforce-marketing-cloud-configuring-creating-salesforce-marketing-cloud-account"></a>

Salesforce Marketing クラウドの場合は、アカウント作成のためにベンダーに連絡する必要があります。お客様またはお客様の会社に Salesforce との結びつきがある場合は、Salesforce アカウントマネージャーに連絡して Salesforce Marketing Cloud ライセンスをリクエストしてください。それ以外の場合は、次のように Salesforce 担当者からの問い合わせをリクエストできます: 

1. https://www.salesforce.com/in/products/marketing-cloud/overview/ に移動し、**[サインアップ]** を選択します。

1. ページの右上にある **[お問い合わせ]** リンクを選択します。

1. 必要な情報をフォームに入力して、**[お問い合わせ]** を選択します。

Salesforce の担当者から要件について連絡があります。

## プロジェクトと OAuth 2.0 認証情報の作成
<a name="salesforce-marketing-cloud-configuring-creating-salesforce-marketing-cloud-project-oauth"></a>

プロジェクトと OAuth 2.0 認証情報を取得するには:

1. ユーザー名とパスワードを使用して [Salesforce Marketing Cloud インスタンス](https://mc.login.exacttarget.com/hub-cas/login)にログインし、登録済みの携帯電話番号を使用して認証します。

1. 右上隅にあるプロファイルをクリックし、**[セットアップ]** に移動します。

1. **[プラットフォームツール]** で **[アプリ]** を選択し、**[インストール済みパッケージ]** を選択します。  
![\[\]](http://docs.aws.amazon.com/ja_jp/glue/latest/dg/images/sfmc-platform-tools.png)

1. **[インストール済みパッケージ]** ページで、右上隅にある **[新規]** をクリックします。パッケージの名前と説明を入力します。

   パッケージを保存します。パッケージが保存されると、パッケージの詳細を表示できます。

1. パッケージの **[詳細]** ページの **[コンポーネント]** セクションで、**[コンポーネントの追加]** を選択します。  
![\[\]](http://docs.aws.amazon.com/ja_jp/glue/latest/dg/images/sfmc-add-component.png)

1. **[コンポーネントタイプ]** を「API 統合」として選択し、**[次へ]** をクリックします。

1. **[統合タイプ]** を「Server-to-Server」 (クライアント認証情報 OAuth グラントタイプを持つ) として選択し、**[次へ]** をクリックします。

1. 要件に基づいてスコープを追加し、**[保存]** をクリックします。

# Salesforce Marketing Cloud 接続の設定
<a name="salesforce-marketing-cloud-configuring-connections"></a>

Salesforce Marketing Cloud は、OAuth2 の CLIENT CREDENTIALS 付与タイプをサポートしています。
+ このグラントタイプは、クライアントがユーザーのコンテキスト外でアクセストークンを取得するために使用するため、2-legged の OAuth 2.0 と見なされます。AWS Glue は、クライアント ID とクライアントシークレットを使用して、定義したカスタムサービスによって提供される Salesforce Marketing Cloud API を認証できます。
+ 各カスタムサービスは、特定のアクションを実行することをサービスに許可する一連のロールとアクセス許可を持つ API 専用ユーザーによって所有されます。アクセストークンは 1 つのカスタムサービスに関連付けられています。
+ このグラントタイプは、有効期間が短いアクセストークンになり、ID エンドポイントを呼び出すことで更新される場合があります。
+ クライアント認証情報を使用した OAuth 2.0 の Salesforce Marketing Cloud の公開ドキュメントについては、「[拡張パッケージの開発環境を設定する](https://developer.salesforce.com/docs/marketing/marketing-cloud/guide/mc-dev-setup-enhanced.html)」を参照してください。

Salesforce Marketing Cloud 接続を設定するには:

1. AWS Secrets Manager で、次の詳細を含むシークレットを作成します。

   1. カスタマーマネージド接続アプリケーションの場合、シークレットには、`USER_MANAGED_CLIENT_APPLICATION_CLIENT_SECRET` を使用して接続されたアプリケーションのコンシューマーシークレットをキーとして含める必要があります。

   1. 注: AWS Glue で接続にシークレットを作成する必要があります。

1. AWS Glue Glue Studio で、以下の手順に従って **[データ接続]** の下に接続を作成します。

   1. **[接続タイプ]** を選択する際に、[Salesforce Marketing Cloud] を選択します。

   1. 接続先の Salesforce Marketing Cloud の `Subdomain Endpoint` を指定します。

   1. 次のアクションを実行でき、AWS Glue がその権限を持つ AWS IAM ロールを選択します。

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

****  

      ```
      {
        "Version":"2012-10-17",		 	 	 
        "Statement": [
          {
            "Effect": "Allow",
            "Action": [
              "secretsmanager:DescribeSecret",
              "secretsmanager:GetSecretValue",
              "secretsmanager:PutSecretValue",
              "ec2:CreateNetworkInterface",
              "ec2:DescribeNetworkInterfaces",
              "ec2:DeleteNetworkInterface"
            ],
            "Resource": "*"
          }
        ]
      }
      ```

------

   1. AWS Glue でこの接続に使用する `secretName` を選択して、トークンを配置します。

   1. ネットワークを使用する場合は、ネットワークオプションを選択します。

1. AWS Glue ジョブに関連付けられている IAM ロールに `secretName` を読み取るアクセス許可を付与します。

# Salesforce Marketing Cloud エンティティからの読み取り
<a name="salesforce-marketing-cloud-reading-from-entities"></a>

**前提条件**

読み取り元の Salesforce Marketing Cloud オブジェクト。`Activity` または `Campaigns` などのオブジェクト名が必要です。次の表に、サポートされているエンティティを示します。

**ソースに対応するエンティティ**:


| エンティティ | インターフェイス | フィルタリング可能 | 制限をサポートする | Order By をサポートする | SELECT \$1 をサポートする | パーティション分割をサポートする | 
| --- | --- | --- | --- | --- | --- | --- | 
| Event Notification Callback | REST | なし | なし | なし | あり | なし | 
| Seed-List | REST | なし | あり | なし | あり | なし | 
| セットアップ | REST | はい | あり | なし | あり | なし | 
| ドメインの検証 | REST | はい | あり | あり | あり | なし | 
| Objects Nested Tags | REST | あり | なし | なし | あり | なし | 
| 問い合わせ | REST | なし | あり | なし | あり | なし | 
| Event Notification Subscription | REST | なし | なし | なし | あり | なし | 
| メッセージング | REST | なし | あり | なし | あり | なし | 
| アクティビティ | SOAP | なし | なし | なし | あり | あり | 
| Bounce Event | SOAP | なし | なし | なし | あり | あり | 
| Click Event | SOAP | なし | なし | なし | あり | あり | 
| Content Area | SOAP | なし | なし | なし | あり | あり | 
| Data Extension | SOAP | なし | あり | なし | あり | あり | 
| E メール | SOAP | なし | あり | なし | あり | あり | 
| Forwarded Email Event | SOAP | なし | あり | なし | あり | あり | 
| Forward Email OptInEvent | SOAP | なし | あり | なし | あり | あり | 
| リンク | SOAP | なし | あり | なし | あり | あり | 
| Link Send | SOAP | なし | あり | なし | あり | あり | 
| リスト | SOAP | なし | あり | なし | あり | あり | 
| List Subscriber | SOAP | なし | あり | なし | あり | あり | 
| Not Sent Event | SOAP | なし | あり | なし | あり | あり | 
| Open Event | SOAP | なし | あり | なし | あり | あり | 
| 送信 | SOAP | なし | あり | なし | あり | あり | 
| Sent Event | SOAP | なし | あり | なし | あり | あり | 
| サブスクライバー | SOAP | なし | あり | なし | あり | あり | 
| Survey Event | SOAP | なし | あり | なし | あり | あり | 
| Unsub Event | SOAP | なし | あり | なし | あり | あり | 
| Audit Events | REST | なし | あり | あり | あり | なし | 
| キャンペーン | REST | なし | あり | あり | あり | なし | 
| インタラクション | REST | なし | あり | あり | あり | なし | 
| Content Assets | REST | なし | あり | あり | あり | なし | 

**REST の例**:

```
salesforcemarketingcloud_read = glueContext.create_dynamic_frame.from_options(
    connection_type="salesforcemarketingcloud",
    connection_options={
        "connectionName": "connectionName",
        "ENTITY_NAME": "Campaigns",
        "API_VERSION": "v1",
        "INSTANCE_URL": "https://**********************.rest.marketingcloudapis.com"
    }
)
```

**SOAP の例**:

```
salesforcemarketingcloud_read = glueContext.create_dynamic_frame.from_options(
    connection_type="salesforcemarketingcloud",
    connection_options={
        "connectionName": "connectionName",
        "ENTITY_NAME": "Activity",
        "API_VERSION": "v1",
        "INSTANCE_URL": "https://**********************.soap.marketingcloudapis.com"
    }
)
```

**Salesforce Marketing Cloud エンティティとフィールドの詳細**:

次の表に、Salesforce Marketing Cloud エンティティを示します。静的メタデータを持つ REST エンティティと動的メタデータを持つ SOAP エンティティがあります。

**静的メタデータを持つ REST エンティティ**:

[\[See the AWS documentation website for more details\]](http://docs.aws.amazon.com/ja_jp/glue/latest/dg/salesforce-marketing-cloud-reading-from-entities.html)

**動的メタデータを持つ SOAP エンティティ**:

[\[See the AWS documentation website for more details\]](http://docs.aws.amazon.com/ja_jp/glue/latest/dg/salesforce-marketing-cloud-reading-from-entities.html)

## パーティショニングクエリ
<a name="salesforce-marketing-cloud-reading-partitioning-queries"></a>

Salesforce Marketing Cloud では、整数および DateTime データ型フィールドは、フィールドベースのパーティション分割をサポートします。

Spark で同時実行を使用する場合は、追加の Spark オプション `PARTITION_FIELD`、`LOWER_BOUND`、`UPPER_BOUND`、および `NUM_PARTITIONS` を指定できます。これらのパラメータを使用すると、元のクエリは Spark タスクで同時に実行できるサブクエリの `NUM_PARTITIONS` の数に分割されます。
+ `PARTITION_FIELD`: クエリのパーティション化に使用するフィールドの名前。
+ `LOWER_BOUND`: 選択したパーティションフィールドの**包括的な**下限値。

  タイムスタンプフィールドでは、Spark SQL クエリで使用される Spark タイムスタンプ形式を受け入れます。

  有効な値の例は次のとおりです:

  ```
  “2024-05-07T02:03:00.00Z"
  ```
+ `UPPER_BOUND`: 選択したパーティションフィールドの**排他的**上限値。
+ `NUM_PARTITIONS`: パーティション数。

例:

```
salesforcemarketingcloud_read = glueContext.create_dynamic_frame.from_options(
    connection_type="salesforcemarketingcloud",
    connection_options={
        "connectionName": "connectionName",
        "ENTITY_NAME": "ListSubscriber",
        "API_VERSION": "v1",
        "PARTITION_FIELD": "CreatedDate",
        "LOWER_BOUND": "2023-09-07T02:03:00.000Z",
        "UPPER_BOUND": "2024-05-07T02:03:00.000Z",
        "NUM_PARTITIONS": "10"
    }
)
```

# Salesforce Marketing Cloud エンティティへの書き込み
<a name="salesforce-marketing-cloud-writing-to-entities"></a>

**前提条件**
+ 書き込み先の Salesforce Marketing オブジェクト。`List` または `Campaigns` などのオブジェクト名、または以下の表に概説されている他のエンティティのいずれかを指定する必要があります。
+ Salesforce Marketing Cloud コネクタは、次の 3 つの書き込みオペレーションをサポートしています。
  + INSERT
  + UPSERT
  + UPDATE

  `UPDATE` および `UPSERT` 書き込みオペレーションを使用する場合は、`ID_FIELD_NAMES` オプションを指定してレコードの外部 ID フィールドを指定する必要があります。

**送信先でサポートされているエンティティ**:


| エンティティ | 優先度 | インターフェイス (REST、SOAP など) | 挿入可能 | 更新可能 | アップサート可能 | 
| --- | --- | --- | --- | --- | --- | 
| キャンペーン | P0 | REST | Y- シングル | Y- シングル | N | 
| Content Assets | P0 | REST | Y- シングル、バルク | Y- シングル | N | 
| 連絡先 | P1 | REST | Y- シングル | Y- シングル | N | 
| ドメインの検証 | P1 | REST | Y- シングル | Y- シングル、バルク | N | 
| Event Notification Callback | P1 | REST | Y- シングル | Y- シングル | N | 
| Event Notification Subscription | P1 | REST | Y- シングル | Y- シングル | N | 
| メッセージング | P1 | REST | Y- シングル | N | N | 
| Object Nested Tag | P2 | REST | Y- シングル | Y- シングル | N | 
| Seed-List | P1 | REST | Y- シングル | Y- シングル | N | 
| セットアップ | P1 | REST | Y- シングル | Y- シングル | N | 
| Data Extension | P0 | SOAP | Y- シングル | Y- シングル | Y- シングル | 
| E メール | P0 | SOAP | Y- シングル | Y- シングル | N | 
| リスト | P0 | SOAP | Y- シングル | Y- シングル | N | 
| 送信 | P0 | SOAP | Y- シングル | N | N | 
| サブスクライバー | P0 | SOAP | Y- シングル | Y- シングル | N | 

**REST の INSERT オペレーションの例**:

```
salesforcemarketingcloud_write = glueContext.write_dynamic_frame.from_options(
    connection_type="salesforcemarketingcloud",
    connection_options={
        "connectionName": "connectionName",
        "ENTITY_NAME": "Campaigns",
        "API_VERSION": "v1",
        "writeOperation" : "INSERT",
        "INSTANCE_URL": "https://**********************.rest.marketingcloudapis.com"
    }
)
```

**SOAP の INSERT オペレーションの例**:

```
salesforcemarketingcloud_write = glueContext.write_dynamic_frame.from_options(
    connection_type="salesforcemarketingcloud",
    connection_options={
        "connectionName": "connectionName",
        "ENTITY_NAME": "List",
        "API_VERSION": "v1",
        "writeOperation" : "INSERT",
        "INSTANCE_URL": "https://**********************.rest.marketingcloudapis.com"
    }
)
```

**REST の UPDATE オペレーションの例**:

```
salesforcemarketingcloud_write = glueContext.write_dynamic_frame.from_options(
    connection_type="salesforcemarketingcloud",
    connection_options={
        "connectionName": "connectionName",
        "ENTITY_NAME": "Campaigns",
        "API_VERSION": "v1",
        "writeOperation" : "UPDATE",
         "ID_FIELD_NAMES": "id",
        "INSTANCE_URL": "https://**********************.rest.marketingcloudapis.com"
    }
)
```

**SOAP の UPDATE オペレーションの例**:

```
salesforcemarketingcloud_write = glueContext.write_dynamic_frame.from_options(
    connection_type="salesforcemarketingcloud",
    connection_options={
        "connectionName": "connectionName",
        "ENTITY_NAME": "List",
        "API_VERSION": "v1",
        "writeOperation" : "UPDATE",
         "ID_FIELD_NAMES": "id",
        "INSTANCE_URL": "https://**********************.rest.marketingcloudapis.com"
    }
)
```

**SOAP の UPSERT オペレーションの例**:

```
salesforcemarketingcloud_write = glueContext.write_dynamic_frame.from_options(
    connection_type="salesforcemarketingcloud",
    connection_options={
        "connectionName": "connectionName",
        "ENTITY_NAME": "DataExtension/Insert-***E/6*******3",
        "API_VERSION": "v1",
        "writeOperation" : "UPSERT",
        "INSTANCE_URL": "https://**********************.rest.marketingcloudapis.com"
    }
)
```

# Salesforce Marketing Cloud 接続オプション
<a name="salesforce-marketing-cloud-connection-options"></a>

Salesforce Marketing Cloud の接続オプションは次のとおりです。
+ `ENTITY_NAME`(文字列) – (必須) 読み取りに使用されます。Salesforce Marketing Cloud のオブジェクトの名前。
+ `API_VERSION`(文字列) – (必須) 読み取りに使用されます。使用する Salesforce Marketing Cloud Rest および SOAP API バージョン。
+ `SELECTED_FIELDS`(List<String>) – Default: empty(SELECT \$1). 読み込みに使用されます。オブジェクトに選択する列です。
+ `FILTER_PREDICATE`(文字列) – デフォルト: 空 読み込みに使用されます。Spark SQL 形式である必要があります。
+ `QUERY`(文字列) - デフォルト: 空 読み込みに使用されます。完全な Spark SQL クエリです。
+ `PARTITION_FIELD`(文字列) - 読み取りに使用されます。クエリをパーティション化するために使用するフィールドです。
+ `LOWER_BOUND`(文字列) - 読み取りに使用されます。選択したパーティションフィールドの包括的な下限値。
+ `UPPER_BOUND` (文字列) - 読み取りに使用されます。選択したパーティションフィールドの排他的上限値。
+ `NUM_PARTITIONS`(整数) – デフォルト: 1。読み込みに使用されます。読み取り用のパーティションの数です。
+ `WRITE_OPERATION`(文字列) - デフォルト: INSERT。書き込みに使用されます。値は INSERT、UPDATE、UPSERT である必要があります。
+ `ID_FIELD_NAMES`(文字列) - デフォルト: null。UPDATE/UPSERT に必要です。

# Salesforce Marketing Cloud コネクタの制限と注意事項
<a name="salesforce-marketing-cloud-connector-limitations"></a>

Salesforce Marketing Cloud コネクタの制限または注意事項は次のとおりです。
+ DateTime データ型フィールドでフィルターを使用する場合は、「yyyy-mm-ddThh:MM:ssZ」の形式で値を渡す必要があります。
+ Data Preview では、Boolean Datatype 値は Blank になります。
+ SOAP エンティティでは最大 2 つのフィルターを定義でき、REST エンティティでは 1 つのフィルターのみを定義できます。これにより、フィルターによるパーティショニングのテストが制限されます。
+ SaaS 側から予期しない動作がいくつか確認されています。「linksend」エンティティの `Link.Alias` フィールドは CONTAINS 演算子をサポートしておらず (例: `Link.Alias CONTAINS "ViewPrivacyPolicy"`)、Data Extension エンティティのフィルター演算子 (EQUALS や GREATER THAN など) は期待した結果を返しません。
+ SFMC ClickEvent SOAP API では、新しく作成されたレコードの反映に遅延があるため、最近作成されたレコードは API レスポンスですぐには利用できない場合があります。

  例: **[2025-01-10T14:30:00]** に 5 つの新しい ClickEvent レコードを作成し、SOAP API を使用してすぐに取得する場合、レスポンスには 5 つのレコードがすべて含まれていない可能性があります。新しく作成されたレコードが API レスポンスに表示されるまでに、最大 5 分かかる場合があります。この遅延は、データの取得とスケジュールされた実行の両方にも影響します。
+ 2 つの異なる DateTime 形式: **[2025-03-11T04:46:00]** (ミリ秒なし) と **[2025-03-11T04:46:00.000Z]** は、AWS Glue (ミリ秒単位) で書き込みオペレーションを実行するときにサポートされます。
+ Event Notification Subscription エンティティの場合、サブスクリプションは検証済みのコールバック URL に対してのみ作成でき、コールバックごとに最大 200 個のサブスクリプションを持つことができます。
+ Event Notification Callback エンティティの場合、アカウントごとに最大 50 個のレコードを作成できます。

# Salesforce Commerce Cloud への接続
<a name="connecting-to-salesforce-commerce-cloud"></a>

 B2C Commerce API は、B2C Commerce インスタンスとやり取りするための RESTful API のコレクションです。これは、Salesforce Commerce API、頭字語の SCAPI、または単に Commerce API など、いくつかの異なる名前で呼ばれています。

 API を使用すると、デベロッパーはフルストアフロントからカスタムマーチャントツールまで、幅広いアプリケーションを構築して Business Manager を強化できます。B2C Commerce のすべてのお客様が API を追加料金なしで利用することできます。

 API は、Shopper API と Admin API という 2 つの主要な API グループに分かれています。また、各グループ内では、API ファミリーと、関連する機能に重点を置いた小さなグループに分割されます。

**Topics**
+ [AWS Glue の Salesforce Commerce Cloud のサポート](salesforce-commerce-cloud-support.md)
+ [接続を作成および使用するための API オペレーションを含むポリシー](salesforce-commerce-cloud-configuring-iam-permissions.md)
+ [Salesforce Commerce Cloud の設定](salesforce-commerce-cloud-configuring.md)
+ [Salesforce Commerce Cloud 接続の設定](salesforce-commerce-cloud-configuring-connections.md)
+ [Salesforce Commerce Cloud エンティティからの読み取り](salesforce-commerce-cloud-reading-from-entities.md)
+ [Salesforce Commerce Cloud 接続オプションのリファレンス](salesforce-commerce-cloud-connection-options.md)
+ [制限](salesforce-commerce-cloud-connector-limitations.md)

# AWS Glue の Salesforce Commerce Cloud のサポート
<a name="salesforce-commerce-cloud-support"></a>

AWS Glue は、次のように Salesforce Commerce Cloud をサポートしています。

**ソースとしてサポートされていますか?**  
はい。AWS Glue ETL ジョブを使用して、Salesforce Commerce Cloud からデータをクエリできます。

**ターゲットとしてサポートされていますか?**  
いいえ。

**サポートされている Salesforce Commerce Cloud API バージョン**  
 v1。

# 接続を作成および使用するための API オペレーションを含むポリシー
<a name="salesforce-commerce-cloud-configuring-iam-permissions"></a>

 次のサンプル ポリシーで、接続の作成と使用に必要な AWS の権限について説明します。新しいロールを作成する場合は、以下を含むポリシーを作成します。

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

****  

```
{
  "Version":"2012-10-17",		 	 	 
  "Statement": [
    {
      "Effect": "Allow",
      "Action": [
        "glue:ListConnectionTypes",
        "glue:DescribeConnectionType",
        "glue:RefreshOAuth2Tokens",
        "glue:ListEntities",
        "glue:DescribeEntity"
      ],
      "Resource": "*"
    }
  ]
}
```

------

また、次のマネージド IAM ポリシーを使用して、アクセスを許可できます。
+  [ AWSGlueServiceRole ](https://console.aws.amazon.com/iam/home#policies/arn:aws:iam::aws:policy/service-role/AWSGlueServiceRole) – さまざまな AWS Glue プロセスを実行するために必要なリソースへのアクセス権をユーザーに代わって付与します。これらのリソースには、AWS Glue、Amazon S3、IAM、CloudWatch Logs、および Amazon EC2 が含まれます。このポリシーで指定されたリソースの命名規則に従った場合、AWS Glue プロセスは必要なアクセス許可を使用できます。このポリシーは、通常、クローラー、ジョブ、開発エンドポイントを定義するときに指定されたロールにアタッチされます。
+  [ AWSGlueConsoleFullAccess ](https://console.aws.amazon.com/iam/home#policies/arn:aws:iam::aws:policy/AWSGlueConsoleFullAccess) — ポリシーがアタッチされているアイデンティティが AWS マネージメントコンソールを使用するときは、AWS Glue リソースへのフルアクセスを許可します。このポリシーで指定されたリソースの命名規則に従った場合、ユーザーは完全なコンソール機能を使用できます。このポリシーは、通常 AWS Glue コンソールのユーザーにアタッチされています。

# Salesforce Commerce Cloud の設定
<a name="salesforce-commerce-cloud-configuring"></a>

AWS Glue を使用して Salesforce Commerce Cloud からデータを転送できるようにするには、次の要件を満たす必要があります。

## 最小要件
<a name="salesforce-commerce-cloud-configuring-min-requirements"></a>
+  clientId と clientSecret を持つ Salesforce Commerce Cloud クライアントアプリケーションがある。
+  Salesforce Commerce Cloud アカウントで API アクセスが有効になっている。

 これらの要件を満たすと、Salesforce Commerce Cloud アカウントに AWS Glue を接続する準備が整います。一般的な接続では、Salesforce Commerce Cloud で他に何もする必要はありません。

# Salesforce Commerce Cloud 接続の設定
<a name="salesforce-commerce-cloud-configuring-connections"></a>

 Salesforce Commerce Cloud は、OAuth2 の CLIENT CREDENTIALS グラントタイプをサポートしています。
+  このグラントタイプは、クライアントがユーザーのコンテキスト外でアクセストークンを取得するために使用するため、2-legged の OAuth 2.0 とみなされます。AWS Glue は、クライアント ID とクライアントシークレットを使用して、定義したカスタムサービスによって提供される Salesforce Commerce Cloud API を認可できます。
+  各カスタムサービスは、特定のアクションを実行することをサービスに許可する一連のロールとアクセス許可を持つ API 専用ユーザーによって所有されます。アクセストークンは 1 つのカスタムサービスに関連付けられています。
+  このグラントタイプは、有効期間が短いアクセストークンになり、ID エンドポイントを呼び出すことで更新される場合があります。
+  クライアント認証情報の生成に関する Salesforce Commerce Cloud ドキュメントの詳細については、[Salesforce のドキュメント](https://developer.salesforce.com/docs/commerce/commerce-api/guide/authorization.html)を参照してください。

Salesforce Commerce Cloud 接続を設定するには:

1.  AWS Secrets Manager で、次の詳細を含むシークレットを作成します。AWS Glue で接続ごとにシークレットを作成する必要があります。

   1.  カスタマーマネージド接続アプリケーションの場合 – シークレットには、USER\$1MANAGED\$1CLIENT\$1APPLICATION\$1CLIENT\$1SECRET を使用して接続されたアプリケーションのコンシューマーシークレットをキーとして含める必要があります。

1. AWS Glue Studio で、以下の手順に従って **[データ接続]** の下に接続を作成します。

   1.  [データ接続] の **[接続を作成]** を選択します。

   1. **[データソース]** を選択する際に、[Salesforce Commerce Cloud] を選択します。

   1. Salesforce Commerce Cloud の**ショートコード**、**組織 ID**、**サイト ID** を指定します。

   1. Salesforce Commerce Cloud アカウントの Salesforce Commerce Cloud ドメイン URL を選択します。

   1.  AWS Glue が次のアクションを担い、その権限を持つことができる IAM ロールを選択します。

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

****  

      ```
      {
        "Version":"2012-10-17",		 	 	 
        "Statement": [
          {
            "Effect": "Allow",
            "Action": [
              "secretsmanager:DescribeSecret",
              "secretsmanager:GetSecretValue",
              "secretsmanager:PutSecretValue",
              "ec2:CreateNetworkInterface",
              "ec2:DescribeNetworkInterfaces",
              "ec2:DeleteNetworkInterface"
            ],
            "Resource": "*"
          }
        ]
      }
      ```

------

   1.  OAuth スコープを指定します。オプションで、接続する Salesforce Commerce Cloud の [ユーザーマネージドクライアントアプリケーション ClientId] を入力します。

   1.  AWS Glue でこの接続に使用する `secretName` を選択して、トークンを配置します。

   1.  ネットワークを使用する場合は、ネットワークオプションを選択します。

1.  AWS Glue ジョブに関連付けられている IAM ロールに `secretName` を読み取るアクセス許可を付与します。

1.  AWS Glue ジョブ設定で、**[追加のネットワーク接続]** として `connectionName` を指定します。

# Salesforce Commerce Cloud エンティティからの読み取り
<a name="salesforce-commerce-cloud-reading-from-entities"></a>

 **前提条件** 
+  読み取り元の Salesforce Commerce Cloud オブジェクト。使用可能なエンティティを確認するには、以下のサポートされているエンティティの表を参照してください。

 **サポートされているエンティティ** 


| エンティティ | フィルタリング可能 | 制限をサポートする | Order By をサポートする | Select \$1 をサポートする | パーティショニングをサポートする | 
| --- | --- | --- | --- | --- | --- | 
| 割り当て | はい | あり | あり | あり | あり | 
| キャンペーン | はい | あり | あり | あり | あり | 
| カタログ | はい | あり | あり | あり | あり | 
| カテゴリ | はい | あり | あり | あり | あり | 
| Coupons | はい | あり | あり | あり | あり | 
| ギフト券 | はい | あり | あり | あり | あり | 
| 製品 | はい | あり | あり | あり | あり | 
| プロモーション | はい | あり | あり | あり | あり | 
| ソースコードグループ | はい | あり | あり | あり | あり | 

 **例** 

```
salesforce_commerce_cloud_read = glueContext.create_dynamic_frame.from_options(
     connection_type="SalesforceCommerceCloud",
     connection_options={
         "connectionName": "connectionName",
         "ENTITY_NAME": "campaign",
         "API_VERSION": "v1"      
     }
)
```

 **Salesforce Commerce Cloud エンティティとフィールドの詳細** 

 エンティティリスト: 
+  割り当て:[ https://developer.salesforce.com/docs/commerce/commerce-api/references/assignments ]( https://developer.salesforce.com/docs/commerce/commerce-api/references/assignments) 
+  キャンペーン:[ https://developer.salesforce.com/docs/commerce/commerce-api/references/campaigns ](https://developer.salesforce.com/docs/commerce/commerce-api/references/campaigns) 
+  カタログ:[ https://developer.salesforce.com/docs/commerce/commerce-api/references/catalogs ](https://developer.salesforce.com/docs/commerce/commerce-api/references/catalogs) 
+  カテゴリ:[ https://developer.salesforce.com/docs/commerce/commerce-api/references/catalogs?meta=searchCategories ](https://developer.salesforce.com/docs/commerce/commerce-api/references/catalogs?meta=searchCategories) 
+  ギフト券:[ https://developer.salesforce.com/docs/commerce/commerce-api/references/gift-certificates ](https://developer.salesforce.com/docs/commerce/commerce-api/references/gift-certificates) 
+  製品:[ https://developer.salesforce.com/docs/commerce/commerce-api/references/products ](https://developer.salesforce.com/docs/commerce/commerce-api/references/products) 
+  プロモーション:[ https://developer.salesforce.com/docs/commerce/commerce-api/references/promotions ](https://developer.salesforce.com/docs/commerce/commerce-api/references/promotions) 
+  ソースコードグループ:[ https://developer.salesforce.com/docs/commerce/commerce-api/references/source-code-groups ](https://developer.salesforce.com/docs/commerce/commerce-api/references/source-code-groups) 

 **パーティショニングクエリ** 

 Spark で同時実行を使用する場合は、追加の Spark オプション `PARTITION_FIELD`、`LOWER_BOUND`、`UPPER_BOUND`、および `NUM_PARTITIONS` を指定できます。これらのパラメータを使用すると、元のクエリは Spark タスクで同時に実行できるサブクエリの `NUM_PARTITIONS` の数に分割されます。
+  `PARTITION_FIELD`: クエリのパーティション化に使用するフィールドの名前。
+  `LOWER_BOUND`: 選択したパーティションフィールドの包括的な下限値。

   日付については、Spark SQL クエリで使用される Spark の日付形式を受け入れます。有効な値の例: `"2024-02-06"`。
+  `UPPER_BOUND`: 選択したパーティションフィールドの排他的上限値。
+  `NUM_PARTITIONS`: パーティション数。

 エンティティごとのパーティション分割フィールドのサポートの詳細は、以下の表にまとめられています。


| エンティティ | Partitioning Field | DataType | 
| --- | --- | --- | 
| キャンペーン | lastModified | DateTime | 
| キャンペーン | startDate | DateTime | 
| キャンペーン | endDate | DateTime | 
| カタログ | creationDate | DateTime | 
| カテゴリ | creationDate | DateTime | 
| ギフト券 | merchantId | 文字列 | 
| ギフト券 | creationDate | DateTime | 
| 製品 | creationDate | DateTime | 
| 製品 | lastModified | DateTime | 
| ソースコードグループ | creationDate | DateTime | 
| ソースコードグループ | startTime | DateTime | 
| ソースコードグループ | endTime | DateTime | 

 **例** 

```
 salesforceCommerceCloud_read = glueContext.create_dynamic_frame.from_options(
     connection_type="SalesforceCommerceCloud",
     connection_options={
         "connectionName": "connectionName",
         "ENTITY_NAME": "coupons",
         "API_VERSION": "v1",
         "PARTITION_FIELD": "creationDate",
         "LOWER_BOUND": "2020-05-01T20:55:02.000Z",
         "UPPER_BOUND": "2024-07-11T20:55:02.000Z",
         "NUM_PARTITIONS": "10"
     }
)
```

# Salesforce Commerce Cloud 接続オプションのリファレンス
<a name="salesforce-commerce-cloud-connection-options"></a>

Salesforce Commerce Cloud の接続オプションは次のとおりです。
+  `ENTITY_NAME`(文字列) – (必須) 読み取りに使用されます。Salesforce Commerce Cloud のオブジェクトの名前。
+  `API_VERSION`(文字列) – (必須) 読み取り / 書き込みに使用されます。使用する Salesforce Commerce Cloud Rest API バージョン。例: v1。
+  `SELECTED_FIELDS`(List<String>) – Default: empty(SELECT \$1). 読み込みに使用されます。オブジェクトに選択する列です。
+  `FILTER_PREDICATE`(文字列) – デフォルト: 空 読み込みに使用されます。Spark SQL 形式である必要があります。
+  `QUERY`(文字列) - デフォルト: 空 読み込みに使用されます。完全な Spark SQL クエリです。
+  `PARTITION_FIELD`(文字列) - 読み取りに使用されます。クエリをパーティション化するために使用するフィールドです。
+  `LOWER_BOUND`(文字列) - 読み取りに使用されます。選択したパーティションフィールドの包括的な下限値。
+  `UPPER_BOUND` (文字列) - 読み取りに使用されます。選択したパーティションフィールドの排他的上限値。
+  `NUM_PARTITIONS`(整数) – デフォルト: 1。読み込みに使用されます。読み取り用のパーティションの数です。

# 制限
<a name="salesforce-commerce-cloud-connector-limitations"></a>

Salesforce Commerce Cloud コネクタの制限は次のとおりです。
+ パーティショニング時、[次を含む] フィルターが期待どおりに機能しません。
+ CDN ゾーンのエンティティはサンドボックスインスタンスをサポートしておらず、開発インスタンスタイプと本番インスタンスタイプのみをサポートしています。詳細については、[https://help.salesforce.com/s/articleView?id=cc.b2c\$1embedded\$1cdn\$1overview.htm ](https://help.salesforce.com/s/articleView?id=cc.b2c_embedded_cdn_overview.htm) を参照してください。
+ Salesforce Commerce Cloud には、動的メタデータを取得するための API エンドポイントがありません。そのため、製品とカテゴリエンティティのカスタムフィールドをサポートするプロビジョニングはありません。
+ サイト ID は必須のクエリパラメータです。カスタムコネクタ設定を通じてサイト ID の値を渡す必要があります。詳細については、「[Base URL and Request Formation ](https://developer.salesforce.com/docs/commerce/commerce-api/guide/base-url.html)」を参照してください。
+ 次の表に示すように、異なる演算子の組み合わせを使用して、1 つの API リクエストで最大 2 つのフィールド (存在する場合はレベルを除く) にフィルターを適用できます。    
<a name="salesforce-commerce-cloud-limitations-filters"></a>[\[See the AWS documentation website for more details\]](http://docs.aws.amazon.com/ja_jp/glue/latest/dg/salesforce-commerce-cloud-connector-limitations.html)
+ 一部のエンティティでは、取得中のフィールドのデータ型が、検索可能なフィールドとして使用される場合のデータ型と異なります。そのため、これらのフィールドにはフィルター機能のプロビジョニングがありません。このようなフィールドの詳細を次の表に示します。    
<a name="salesforce-commerce-cloud-limitations-filters-provision"></a>[\[See the AWS documentation website for more details\]](http://docs.aws.amazon.com/ja_jp/glue/latest/dg/salesforce-commerce-cloud-connector-limitations.html)

# Salesforce Marketing Cloud Account Engagement への接続
<a name="connecting-to-data-salesforce-marketing-cloud-account-engagement"></a>

Salesforce Marketing Cloud Account Engagement は、企業が有意義なつながりを創造し、より多くのパイプラインを生成し、より多くの取引を成立させるのに役立つマーケティング自動化ソリューションです。Salesforce Marketing Cloud Account Engagement ユーザーの場合は、Salesforce Marketing Cloud Account Engagement アカウントに AWS Glue を接続できます。Salesforce Marketing Cloud Account Engagement は、ETL ジョブのデータソースとして使用できます。これらのジョブを実行して、Salesforce Marketing Cloud Account Engagement から AWS サービスまたはその他のサポートされているアプリケーションにデータを転送します。

**Topics**
+ [AWS Glue による Salesforce Marketing Cloud Account Engagement のサポート](salesforce-marketing-cloud-account-engagement-support.md)
+ [接続を作成および使用するための API オペレーションを含むポリシー](salesforce-marketing-cloud-account-engagement-configuring-iam-permissions.md)
+ [Salesforce Marketing Cloud Account Engagement の設定](salesforce-marketing-cloud-account-engagement-configuring.md)
+ [Salesforce Marketing Cloud Account Engagement 接続の設定](salesforce-marketing-cloud-account-engagement-configuring-connections.md)
+ [Salesforce Marketing Cloud Account Engagement エンティティからの読み取り](salesforce-marketing-cloud-account-engagement-reading-from-entities.md)
+ [Salesforce Marketing Cloud Account Engagement 接続オプション](salesforce-marketing-cloud-account-engagement-connection-options.md)
+ [Salesforce Marketing Cloud Account Engagement コネクタの制限と注意事項](salesforce-marketing-cloud-account-engagement-connector-limitations.md)

# AWS Glue による Salesforce Marketing Cloud Account Engagement のサポート
<a name="salesforce-marketing-cloud-account-engagement-support"></a>

AWS Glue は、次のように Salesforce Marketing Cloud Account Engagement をサポートします:

**ソースとしてサポートされていますか?**  
はい。AWS Glue ETL ジョブを使用して、Async モードまたは Sync モードのいずれかで Salesforce Marketing Cloud Account Engagement からデータをクエリできます。

**ターゲットとしてサポートされていますか?**  
いいえ。

**サポートされている Salesforce Marketing Cloud Account Engagement API のバージョン**  
次の Salesforce Marketing Cloud Account Engagement API バージョンがサポートされています:
+ v5

# 接続を作成および使用するための API オペレーションを含むポリシー
<a name="salesforce-marketing-cloud-account-engagement-configuring-iam-permissions"></a>

次のサンプル ポリシーで、接続の作成と使用に必要な AWS IAM 権限について説明します。新しいロールを作成する場合は、以下を含むポリシーを作成します。

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

****  

```
{
  "Version":"2012-10-17",		 	 	 
  "Statement": [
    {
      "Effect": "Allow",
      "Action": [
        "glue:ListConnectionTypes",
        "glue:DescribeConnectionType",
        "glue:RefreshOAuth2Tokens",
        "glue:ListEntities",
        "glue:DescribeEntity"
      ],
      "Resource": "*"
    }
  ]
}
```

------

上記の方法を使用しない場合は、代わりに次のマネージド IAM ポリシーを使用します:
+ [AWSGlueServiceRole](https://console.aws.amazon.com/iam/home#policies/arn:aws:iam::aws:policy/service-role/AWSGlueServiceRole) – さまざまな AWS Glue プロセスを実行するために必要なリソースへのアクセス権をユーザーに代わって付与します。これらのリソースには AWS Glue 、Amazon S3、IAM、CloudWatch Logs、および Amazon EC2 が含まれます。このポリシーで指定されたリソースの命名規則に従った場合、AWS Glue プロセスは必要なアクセス権限を使用できます。このポリシーは、通常、クローラ、ジョブ、開発エンドポイントを定義するときに指定されたロールにアタッチされます。
+ [AWSGlueConsoleFullAccess](https://console.aws.amazon.com/iam/home#policies/arn:aws:iam::aws:policy/AWSGlueConsoleFullAccess) — ポリシーがアタッチされているアイデンティティが AWS マネージメントコンソールを使用するときは、AWS Glue リソースへのフルアクセスを許可します。このポリシーで指定されたリソースの命名規則に従った場合、ユーザーは完全なコンソール機能を使用できます。このポリシーは、通常 AWS Glue コンソールのユーザーにアタッチされています。

# Salesforce Marketing Cloud Account Engagement の設定
<a name="salesforce-marketing-cloud-account-engagement-configuring"></a>

AWS Glue を使用して Salesforce Marketing Cloud Account Engagement からデータを転送できるようにするには、次の要件を満たす必要があります:

## 最小要件
<a name="salesforce-marketing-cloud-account-engagement-configuring-min-requirements"></a>

以下に、最小要件を示します。
+ Salesforce マーケティングアカウントを持っていること。
+ Salesforce アカウントのライセンスされた Account Engagement プランがある。
+ Salesforce ユーザーと Account Engagement ユーザーを同期している。
+ OAuth 認証情報を取得するために、App Manager で新しい接続アプリケーションを作成している。

これらの要件を満たすと、Salesforce Marketing Cloud Account Engagement アカウントに AWS Glue を接続する準備が整います。

# Salesforce Marketing Cloud Account Engagement 接続の設定
<a name="salesforce-marketing-cloud-account-engagement-configuring-connections"></a>

グラントタイプは、AWS Glue が Salesforce Marketing Cloud Account Engagement と通信してデータへのアクセスをリクエストする方法を決定します。選択すると、接続を作成する前に満たす必要がある要件に影響します。Salesforce Marketing Cloud Account Engagement は、OAuth 2.0 の AUTHORIZATION\$1CODE のグラントタイプのみをサポートします。
+ このグラントタイプは、ユーザーを認証するためにサードパーティーの認証サーバーにユーザーをリダイレクトすることから、「three-legged」の OAuth と見なされます。AWS Glue コンソール経由で接続を作成するときに使用されます。
+ ユーザーは、Salesforce Marketing Cloud Account Engagement で独自の接続アプリを作成し、AWS Glue コンソールを介して接続を作成するときに独自のクライアント ID とクライアントシークレットを提供することを選択できます。このシナリオでは、引き続き Salesforce Marketing Cloud Account Engagement にリダイレクトされてログインし、リソースへアクセスするために AWS Glue を承認します。
+ このグラントタイプは、更新トークンとアクセストークンになります。アクセストークンの有効期間は短く、更新トークンを使用してユーザーとやり取りすることなく自動的に更新される場合があります。
+ 認可コード OAuth フロー用の接続アプリケーションの作成に関する Salesforce Marketing Cloud Account Engagement の公開ドキュメントについては、「[認証](https://developer.salesforce.com/docs/marketing/pardot/guide/version5overview.html#authentication)」を参照してください。

Salesforce Marketing Cloud Account Engagement 接続を設定するには:

1. AWS Glue Glue Studio で、以下の手順に従って **[データ接続]** の下に接続を作成します。

   1. **[接続タイプ]** を選択するときは、[Salesforce Marketing Cloud アカウントエンゲージメント] を選択します。

   1. 接続先の Salesforce Marketing Cloud Account Engagement インスタンス の `INSTANCE_URL` を指定します。

   1. 接続先の Salesforce Marketing Cloud Account Engagement インスタンス の `PARDOT_BUSINESS_UNIT_ID` を指定します。

   1. ドロップダウンから適切な **[認可コード URL]** を選択します。

   1. ドロップダウンから適切な **[トークン URL]** を選択します。

   1. 次のアクションを実行でき、AWS Glue がその権限を持つ AWS IAM ロールを選択します。

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

****  

      ```
      {
        "Version":"2012-10-17",		 	 	 
        "Statement": [
          {
            "Effect": "Allow",
            "Action": [
              "secretsmanager:DescribeSecret",
              "secretsmanager:GetSecretValue",
              "secretsmanager:PutSecretValue",
              "ec2:CreateNetworkInterface",
              "ec2:DescribeNetworkInterfaces",
              "ec2:DeleteNetworkInterface"
            ],
            "Resource": "*"
          }
        ]
      }
      ```

------

   1. ユーザーマネージドクライアントアプリケーションクライアント ID (接続されたアプリのクライアント ID) を指定します。

   1. AWS Glue でこの接続に使用する `secretName` を選択して、トークンを配置します。選択したシークレットには、接続されたアプリのクライアントシークレットである値を持つ `USER_MANAGED_CLIENT_APPLICATION_CLIENT_SECRET` キーが必要です。

   1. ネットワークを使用する場合は、ネットワークオプションを選択します。

1. AWS Glue ジョブに関連付けられている IAM ロールに `secretName` を読み取るアクセス許可を付与します。

1. AWS Glue ジョブ設定で、**[追加のネットワーク接続]** として `connectionName` を指定します。

# Salesforce Marketing Cloud Account Engagement エンティティからの読み取り
<a name="salesforce-marketing-cloud-account-engagement-reading-from-entities"></a>

**前提条件**

読み取り元の Salesforce Marketing Cloud Account Engagement オブジェクト。オブジェクト名が必要になります。

**Sync ソースに対応するエンティティ**:


| エンティティ | フィルタリング可能 | 制限をサポートする | Order By をサポートする | Select \$1 をサポートする | パーティション分割をサポートする | 
| --- | --- | --- | --- | --- | --- | 
| キャンペーン | はい | あり | あり | あり | あり | 
| 動的コンテンツ | はい | あり | あり | あり | あり | 
| E メール | はい | あり | あり | あり | あり | 
| Email Template | はい | あり | あり | あり | あり | 
| Engagement Studio Program | はい | あり | あり | あり | あり | 
| Folder Contents | はい | あり | あり | あり | あり | 
| Landing Page | はい | あり | あり | あり | あり | 
| Lifecycle History | はい | あり | あり | あり | あり | 
| Lifecycle Stage | はい | あり | あり | あり | あり | 
| リスト | はい | あり | あり | あり | あり | 
| List Email | はい | あり | あり | あり | あり | 
| List Membership | はい | あり | あり | あり | あり | 
| 機会 | はい | あり | あり | あり | あり | 
| Prospect | はい | あり | あり | あり | あり | 
| Prospect Account | はい | あり | あり | あり | あり | 
| ユーザー | はい | あり | あり | あり | あり | 

**例**:

```
salesforcepardot_read = glueContext.create_dynamic_frame.from_options(
    connection_type="SalesforcePardot",
    connection_options={
        "connectionName": "connectionName",
        "ENTITY_NAME": "entityName",
        "API_VERSION": "v5"
    }
   )
```

**Async ソースに対応するエンティティ**:


| エンティティ | フィルタリング可能 | 制限をサポートする | Order By をサポートする | Select \$1 をサポートする | パーティション分割をサポートする | 
| --- | --- | --- | --- | --- | --- | 
| キャンペーン | あり | なし | なし | あり | なし | 
| 動的コンテンツ | あり | なし | なし | あり | なし | 
| Email Template | あり | なし | なし | あり | なし | 
| Landing Page | あり | なし | なし | あり | なし | 
| Lifecycle History | あり | なし | なし | あり | なし | 
| Lifecycle Stage | あり | なし | なし | あり | なし | 
| リスト | あり | なし | なし | あり | なし | 
| List Email | あり | なし | なし | あり | なし | 
| List Membership | あり | なし | なし | あり | なし | 
| 機会 | あり | なし | なし | あり | なし | 
| Prospect | あり | なし | なし | あり | なし | 
| Prospect Account | あり | なし | なし | あり | なし | 
| ユーザー | あり | なし | なし | あり | なし | 

**例**:

```
salesforcepardot_read = glueContext.create_dynamic_frame.from_options(
    connection_type="SalesforcePardot",
    connection_options={
        "connectionName": "connectionName",
        "ENTITY_NAME": "entityName",
        "API_VERSION": "v5",
        "TRANSFER_MODE": "ASYNC"
    }
   )
```

**Salesforce Marketing Cloud Account Engagement エンティティとフィールドの詳細**:

次のエンティティのフィールドの詳細を表示するには、[Salesforce Marketing Cloud Account Engagement API](https://developer.salesforce.com/docs/marketing/pardot) に移動し、**[ガイド]** を選択し、**[オープンソース API ラッパー]** まで下にスクロールし、メニューから **[バージョン 5 ドキュメント]** を展開してエンティティを選択します。

エンティティリスト:
+ キャンペーン
+ 動的コンテンツ
+ E メール
+ Email Template
+ Engagement Studio Program
+ Folder Content
+ Landing Page
+ Lifecycle History
+ Lifecycle Stage
+ リスト
+ List Email
+ List Membership
+ 機会
+ Prospect
+ Prospect Account
+ ユーザー

上記のフィールドに加えて、Async モードは、以下の表に示すように、各エンティティの特定のフィルタリング可能なフィールドをサポートします。


| エンティティ | Async でサポートされている追加のフィルタリング可能なフィールド | 
| --- | --- | 
| キャンペーン | createdAfter, createdBefore, deleted, updatedAfter, updatedBefore | 
| 動的コンテンツ | createdAfter, createdBefore, deleted, updatedAfter, updatedBefore | 
| Email Template | createdAfter, createdBefore, deleted, updatedAfter, updatedBefore | 
| Engagement Studio Program | - | 
| Landing Page | createdAfter, createdBefore, deleted, updatedAfter, updatedBefore | 
| Lifecycle History | createdAfter, createdBefore | 
| Lifecycle Stage | createdAfter, createdBefore, deleted, updatedAfter, updatedBefore | 
| リスト | createdAfter, createdBefore, deleted, updatedAfter, updatedBefore | 
| List Email | createdAfter, createdBefore, deleted, updatedAfter, updatedBefore | 
| List Membership | createdAfter, createdBefore, deleted, updatedAfter, updatedBefore | 
| 機会 | createdAfter, createdBefore, deleted, updatedAfter, updatedBefore | 
| Prospect | createdAfter, createdBefore, deleted, updatedAfter, updatedBefore | 
| Prospect Account | createdAfter, createdBefore, deleted | 
| ユーザー | createdAfter, createdBefore, deleted, updatedAfter, updatedBefore | 

追加フィールドの詳細については、「[Salesforce Export API](https://developer.salesforce.com/docs/marketing/pardot/guide/export-v5.html#procedures)」を参照してください

コネクタに関する以下の考慮事項に注意してください:
+ エンティティの `delete`フィールドの値は、`false` (デフォルト)、`true`、または `all` です。

## パーティショニングクエリ
<a name="salesforce-marketing-cloud-account-engagement-reading-partitioning-queries"></a>

**フィルターベースのパーティション分割**:

Spark で同時実行を使用する場合は、追加の Spark オプション `PARTITION_FIELD`、`LOWER_BOUND`、`UPPER_BOUND`、および `NUM_PARTITIONS` を指定できます。これらのパラメータを使用すると、元のクエリは Spark タスクで同時に実行できるサブクエリの `NUM_PARTITIONS` の数に分割されます。
+ `PARTITION_FIELD`: クエリのパーティション化に使用するフィールドの名前。
+ `LOWER_BOUND`: 選択したパーティションフィールドの**包括的な**下限値。

  Datetime フィールドでは、SPark SQL クエリで使用される Spark タイムスタンプ形式を受け入れます。

  有効な値の例は次のとおりです:

  ```
  "2022-01-01T01:01:01.000Z"
  ```
+ `UPPER_BOUND`: 選択したパーティションフィールドの**排他的**上限値。
+ `NUM_PARTITIONS`: パーティション数。
+ `PARTITION_BY`: 実行されるパーティション分割のタイプ。フィールドベースのパーティショニングの場合、「FIELD」が渡されます。

例:

```
salesforcepardot_read = glueContext.create_dynamic_frame.from_options(
    connection_type="salesforcepardot",
    connection_options={
        "connectionName": "connectionName",
        "ENTITY_NAME": "entityName",
        "API_VERSION": "v5",
        "PARTITION_FIELD": "createdAt"
        "LOWER_BOUND": "2022-01-01T01:01:01.000Z"
        "UPPER_BOUND": "2024-01-01T01:01:01.000Z"
        "NUM_PARTITIONS": "10",
        "PARTITION_BY": "FIELD"
    }
   )
```

# Salesforce Marketing Cloud Account Engagement 接続オプション
<a name="salesforce-marketing-cloud-account-engagement-connection-options"></a>

Salesforce Marketing Cloud Account Engagement の接続オプションは次のとおりです。
+ `ENTITY_NAME` (文字列) – (必須) 読み取りに使用されます。Salesforce Marketing Cloud Account Engagement のオブジェクトの名前。
+ `PARDOT_BUSINESS_UNIT_ID` – (必須) 接続の作成に使用されます。接続先の Salesforce Marketing Cloud Account Engagement インスタンスのビジネスユニット ID。
+ `API_VERSION` (文字列) – (必須) 読み取りに使用されます。使用する Salesforce Marketing Cloud Account Engagement Rest API バージョン。
+ `SELECTED_FIELDS`(List<String>) – Default: empty(SELECT \$1). 読み込みに使用されます。オブジェクトに選択する列です。
+ `FILTER_PREDICATE`(文字列) -
  + Sync モード - デフォルト: 空。読み込みに使用されます。Spark SQL 形式である必要があります。
  + Async モード - デフォルト: 現在の `DateTime` 値 (ユーザーのタイムゾーンに基づく) - 1 年。読み込みに使用されます。
+ `QUERY`(文字列) – デフォルト: 空 読み込みに使用されます。完全な Spark SQL クエリです。
+ `PARTITION_FIELD`(文字列) - 読み取りに使用されます。クエリをパーティション化するために使用するフィールドです。
+ `LOWER_BOUND`(文字列) - 読み取りに使用されます。選択したパーティションフィールドの包括的な下限値。
+ `UPPER_BOUND` (文字列) - 読み取りに使用されます。選択したパーティションフィールドの排他的上限値。
+ `NUM_PARTITIONS`(整数) – デフォルト: 1。読み込みに使用されます。読み取り用のパーティションの数です。
+ `INSTANCE_URL` (文字列) – (必須) 読み取りに使用されます。有効な Salesforce Marketing Cloud Account Engagement インスタンス URL。
+ `PARTITION_BY` (文字列) – (必須) 読み取りに使用されます。実行されるパーティション分割のタイプ。フィールドベースのパーティショニングの場合、「FIELD」が渡されます。
+ `TRANSFER_MODE`(文字列) - (オプション) このオプションが指定されていないジョブが SYNC モードで実行される場合、ASYNC モードでジョブを実行するために使用される値。

# Salesforce Marketing Cloud Account Engagement コネクタの制限と注意事項
<a name="salesforce-marketing-cloud-account-engagement-connector-limitations"></a>

次の注意事項と制限が適用されます:
+ 制限とパーティション分割の両方が適用される場合、制限はパーティション分割よりも優先されます。
+ API ドキュメントに従って、`SalesforceMarketingCloudEngagement` が日次リクエストと同時リクエストに RateLimit を適用します。詳細については、「[Rate Limits](https://developer.salesforce.com/docs/marketing/pardot/guide/overview.html?q=limitation#rate-limits)」を参照してください。
+ Export API には、日次 Account Engagement API コール制限と、アカウントの同時 Account Engagement API コール制限が適用されます。
+ キューと同様に、Export/Async API コールはアカウントごとに順番に実行されます。古いエクスポートは、新しいエクスポートの前に処理されます。
+ パーティションは Async モードではサポートされていません。
+ Export/Async API コールで指定された選択したフィールドの数は 150 を超えることはできません。
+ **[Prospect]** エンティティは 150 を超えるフィールドをサポートしていますが、一度に選択できるフィールドは 150 のみです。`Select All` を選択した場合、一部のフィールドは除外されます。これらの除外されたフィールドのデータを取得するには、`Selected Fields` オプションに含める必要があります。

  除外されたフィールドのリストを次に示します `SELECT_ALL` - `updatedBy.firstName`、`updatedBy.lastName`、`updatedBy.jobTitle`、`updatedBy.roleName`、`updatedBy.salesforceId`、`updatedBy.createdAt`、`updatedBy.updatedAt`、`updatedBy.isDeleted`、`updatedBy.createdById`、`updatedBy.updatedById`、`updatedBy.tagReplacementLanguage`
+ 収集フィールドを Async にエクスポートすることはできません。例えば、List Email では、`senderOptions` および `replyToOptions` フィールドはサポートされていません。
+ すべてのエンティティで、フィルターは必須です。フィルターが指定されていない場合、デフォルトのフィルター述語は、現在の日時 (タイムゾーンに調整) から 1 年を引いた値で `Created After` フィールドに設定されます。
+ Salesforce Marketing Cloud Account Engagement の制限に従って、Async では、データを取得する最大範囲は 1 年です。1 年以上の期間を対象とするクエリが提供された場合、ジョブはエラーをスローします。
+ 現在、Salesforce Pardot にバグがあります。データがないフィールドがジョブに 1 つだけ含まれている場合、フィールド値は正しい結果を返さず、代わりにフィールド名が複数回返されます。Salesforce Pardot チームはこの問題を認識しており、解決に向けて積極的に取り組んでいます。

# AWS Glue Studio での SAP HANA に対する接続
<a name="connecting-to-data-saphana"></a>

 AWS Glue は、SAP HANA のための組み込みサポートを提供します。AWS Glue Studio は、SAP HANA に接続してデータ統合ジョブをオーサリングし、AWS Glue Studio サーバーレス Spark ランタイム上でそれらのジョブを実行するためのビジュアルインターフェイスを提供します。

 AWS Glue Studio は SAP HANA の統合接続を作成します。詳細については、「[考慮事項](using-connectors-unified-connections.md#using-connectors-unified-connections-considerations)」を参照してください。

**Topics**
+ [SAP HANA 接続の作成](creating-saphana-connection.md)
+ [SAP HANA ソースノードの作成](creating-saphana-source-node.md)
+ [SAP HANA ターゲットノードを作成する](creating-saphana-target-node.md)
+ [詳細オプション](#creating-saphana-connection-advanced-options)

# SAP HANA 接続の作成
<a name="creating-saphana-connection"></a>

AWS Glue から SAP HANA に接続するには、SAP HANA 認証情報を作成して AWS Secrets Manager シークレットに保存し、そのシークレットを SAP HANA AWS Glue 接続に関連付ける必要があります。SAP HANA サービスと AWS Glue の間のネットワーク接続を設定する必要があります。

**前提条件**:
+ SAP HANA サービスが Amazon VPC 内にある場合は、トラフィックがパブリックインターネットを経由することなく、AWS Glue ジョブが SAP HANA サービスと通信できるように Amazon VPC を設定します。

  Amazon VPC で、AWS Glue がジョブの実行中に使用する **[VPC]**、**[サブネット]**、および **[セキュリティグループ]** を特定または作成します。さらに、SAP HANA エンドポイントとこの場所の間のネットワークトラフィックを許可するように Amazon VPC が設定されているようにする必要があります。ジョブでは、SAP HANA JDBC ポートとの TCP 接続を確立する必要があります。SAP HANA ポートの詳細については、[SAP HANA のドキュメント](https://help.sap.com/docs/HANA_SMART_DATA_INTEGRATION/7952ef28a6914997abc01745fef1b607/88e2e8bded9e4041ad3ad87dc46c7b55.html?locale=en-US)を参照してください。ネットワークレイアウトに基づいて、セキュリティグループルール、ネットワーク ACL、NAT ゲートウェイ、およびピアリング接続の変更が必要になる場合があります。

**SAP HANA に対する接続を設定するには:**

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

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

     SAP HANA JDBC URL の形式は `jdbc:sap://saphanaHostname:saphanaPort/?databaseName=saphanaDBname,ParameterName=ParameterValue` です

     AWS Glue には次の JDBC URL パラメータが必要です。
     + `databaseName` – 接続先の SAP HANA のデフォルトデータベース。
   + **[AWS Secret]** をクリックして、*secretName* を入力します。

AWS Glue SAP HANA 接続を作成した後、AWS Glue ジョブを実行する前に次のステップを実行する必要があります。
+ AWS Glue ジョブに関連付けられている IAM ロールに *secretName* を読み取るアクセス許可を付与します。

# SAP HANA ソースノードの作成
<a name="creating-saphana-source-node"></a>

## 必要な前提条件
<a name="creating-saphana-source-node-prerequisites"></a>
+ 前のセクション [SAP HANA 接続の作成](creating-saphana-connection.md) で説明したように、AWS Secrets Manager シークレットを使用して設定された AWS Glue SAP HANA 接続。
+ 接続で使用されるシークレットを読み取るためのジョブに対する適切なアクセス許可。
+ 読み取り元とする SAP HANA テーブル、*tableName*、またはクエリ *targetQuery*。

  テーブルは、SAP HANA テーブル名とスキーマ名 (形式: `schemaName.tableName`) を使用して指定できます。テーブルがデフォルトのスキーマ「public」にある場合、スキーマ名と「.」区切り文字は必要ありません。この *tableIdentifier* を呼び出します。データベースは `connectionName` の JDBC URL パラメータとして指定されることに注意してください。

## SAP HANA データソースの追加
<a name="creating-saphana-source-node-add"></a>

****[データソース — SAP HANA]** ノードを追加するには:**

1.  SAP HANA データソース用の接続を選択します。すでに作成したので、ドロップダウンに表示されているはずです。接続を作成する必要がある場合は、**[SAP HANA 接続を作成]** を選択します。詳細については、前の「[SAP HANA 接続の作成](creating-saphana-connection.md)」セクションを参照してください。

    接続を選択したあとは、**[プロパティを表示]** をクリックすると、接続のプロパティを表示できます。

1.  **[SAP HANA ソース]** のオプションを選択します。
   +  **[単一のテーブルを選択]** – 単一のテーブルからすべてのデータにアクセスします。
   +  **[カスタムクエリを入力]** — カスタムクエリに基づいて、複数のテーブルからデータセットにアクセスします。

1.  単一のテーブルを選択した場合は、*tableName* を入力します。

    **[カスタムクエリを入力]** を選択した場合は、SQL SELECT クエリを入力します。

1.  **[SAP HANA のカスタムプロパティ]** で、必要に応じてパラメータと値を入力します。

# SAP HANA ターゲットノードを作成する
<a name="creating-saphana-target-node"></a>

## 必要な前提条件
<a name="creating-saphana-target-node-prerequisites"></a>
+ 前のセクション [SAP HANA 接続の作成](creating-saphana-connection.md) で説明したように、AWS Secrets Manager シークレットを使用して設定された AWS Glue SAP HANA 接続。
+ 接続で使用されるシークレットを読み取るためのジョブに対する適切なアクセス許可。
+ 書き込み先とする SAP HANA テーブルである *tableName*。

  テーブルは、SAP HANA テーブル名とスキーマ名 (形式: `schemaName.tableName`) を使用して指定できます。テーブルがデフォルトのスキーマ「public」にある場合、スキーマ名と「.」区切り文字は必要ありません。この *tableIdentifier* を呼び出します。データベースは `connectionName` の JDBC URL パラメータとして指定されることに注意してください。

## SAP HANA データターゲットの追加
<a name="creating-saphana-target-node-add"></a>

****[データターゲット — SAP HANA]** ノードを追加するには:**

1.  SAP HANA データソース用の接続を選択します。すでに作成したので、ドロップダウンに表示されているはずです。接続を作成する必要がある場合は、**[SAP HANA 接続を作成]** を選択します。詳細については、前の「[SAP HANA 接続の作成](creating-saphana-connection.md)」セクションを参照してください。

    接続を選択したあとは、**[プロパティを表示]** をクリックすると、接続のプロパティを表示できます。

1. *tableName* を指定して **[テーブル名]** を設定します。

1.  **[Teradata のカスタムプロパティ]** で、必要に応じてパラメータと値を入力します。

## 詳細オプション
<a name="creating-saphana-connection-advanced-options"></a>

SAP HANA ノードを作成する際に、高度なオプションを指定できます。これらのオプションは Spark AWS Glue スクリプトのプログラミング時に使用できるオプションと同じです。

「[SAP HANA 接続](aws-glue-programming-etl-connect-saphana-home.md)」を参照してください。

# SAP OData への接続
<a name="connecting-to-data-sap-odata"></a>

SAP OData は、ABAP (Advanced Business Application Programming) を使用して SAP に存在するデータをクエリおよび更新するために使用される標準のウェブプロトコルです。HTTP などのウェブテクノロジーを適用して構築し、さまざまな外部アプリケーション、プラットフォーム、デバイスからの情報へのアクセスを提供します。製品を使用すると、SAP システム、アプリケーション、またはデータとシームレスに統合するために必要なすべてにアクセスできます。

**Topics**
+ [AWS Glue による SAP OData のサポート](sap-odata-support.md)
+ [接続を作成する](sap-odata-creating-connections.md)
+ [SAP OData ジョブの作成](sap-odata-creating-job.md)
+ [SAP OData への書き込み](sap-odata-writing.md)
+ [SAP OData 状態管理スクリプトの使用](sap-odata-state-management-script.md)
+ [ODP 非対応エンティティのパーティション分割](sap-odata-non-odp-entities-partitioning.md)
+ [SAP OData 接続オプション](sap-odata-connection-options.md)
+ [SAP OData エンティティとフィールドの詳細](sap-odata-entity-field-details.md)

# AWS Glue による SAP OData のサポート
<a name="sap-odata-support"></a>

AWS Glue は SAP OData を次のようにサポートします:

**ソースとしてサポートされていますか?**  
はい。AWS Glue ETL ジョブを使用して、SAP OData からデータをクエリできます。

**ターゲットとしてサポートされているかどうか**  
はい。AWS Glue ETL ジョブを使用して SAP OData にレコードを書き込むことができます。

**サポートされている SAP OData API バージョン**  
次の SAP OData API バージョンがサポートされています:
+ 2.0

**サポートされているソース**  
以下のソースがサポートされています。
+ ODP (オペレーショナルデータプロビジョニング) ソース：
  + BW Extractor (DataSources)
  + CDS ビュー
  + SLT
+ ODP 非対応ソース。例：
  + CDS ビューサービス
  + RFC ベースのサービス
  + カスタム ABAP サービス

**サポートされている SAP コンポーネント**  
以下に、最小要件を示します。
+ サービス検出のためにカタログサービスを有効にする必要があります。
  + SAP システムの SAP Gateway で、抽出するオペレーショナルデータプロビジョニング (ODP) データソースを設定します。
  + **OData V2.0**: トランザクション `/IWFND/MAINT_SERVICE` を介して SAP Gateway で OData V2.0 カタログサービス (複数可) を有効にします。
  + トランザクション `/IWFND/MAINT_SERVICE` を介して SAP Gateway で OData V2.0 サービスを有効にします。
  + SAP OData サービスは、`$top` や `$skip` などのクライアント側のページ分割/クエリオプションをサポートしている必要があります。また、システムクエリオプション `$count` もサポートする必要があります。
  + ユーザーが SAP OData サービスを検索し、データ抽出を行えるようにするには、ユーザーに適切な権限を付与する必要があります。SAP が提供するセキュリティドキュメントを参照してください。
+ OAuth 2.0 を認証メカニズムとして使用する場合は、OData サービスに対して OAuth 2.0 を有効にし、SAP ドキュメントに従って OAuth クライアントを登録する必要があります。
+ ODP データソースに基づいて OData サービスを生成するには、SAP Gateway Foundation を ERP/BW スタックまたはハブの設定にローカルにインストールする必要があります。
  + ERP/BW アプリケーションの場合、SAP NetWeaver AS ABAP スタックは 7.50 SP02 以上である必要があります。
  + ハブシステム (SAP Gateway) の場合、リモートハブのセットアップには、ハブシステムの SAP NetWeaver AS ABAP が 7.50 SP01 以上である必要があります。
+ ODP 非対応ソースの場合、SAP NetWeaver スタックのバージョンは 7.40 SP02 以降である必要があります。

**サポートされた認証方法**  
次の認証方法がサポートされています。
+ 基本認証
+ OAuth 2.0

# 前提条件
<a name="sap-odata-prerequisites"></a>

SAP OData 接続を使用して SAP OData からデータ抽出する AWS Glue ジョブを開始する前に、次の前提条件を満たしてください。
+ 関連する SAP OData Service を SAP システムでアクティブ化し、データソースを使用できることを確認する必要があります。OData サービスがアクティブ化されていない場合、 Glue ジョブは SAP からデータにアクセスまたは抽出できません。
+ AWS Glue ジョブが SAP OData サービスとの接続を正常に確立できるように、基本 (カスタム) 認証や OAuth 2.0 などの適切な認証メカニズムを SAP で設定する必要があります。
+ IAM ポリシーを設定して、SAP、Secrets Manager、およびプロセスに関連するその他の AWS リソースにアクセスするための適切なアクセス許可を AWS Glue ジョブに付与します。
+ SAP システムがプライベートネットワーク内でホストされている場合、AWS Glue ジョブがパブリックインターネット経由で機密データを公開することなく SAP と安全に通信できるように VPC 接続を設定する必要があります。

AWS Secrets Manager を使用して、AWS Glue ジョブが実行時に動的に取得できる SAP 認証情報などの機密情報を安全に保存できます。このアプローチにより、認証情報をハードコードする必要がなくなり、セキュリティと柔軟性が向上します。

以下の前提条件は、 AWS Glue と SAP OData をスムーズに統合するために各コンポーネントを設定する方法に関するステップごとのガイダンスを提供します。

**Topics**
+ [SAP OData のアクティベーション](sap-odata-activation.md)
+ [IAM ポリシー](sap-odata-configuring-iam-permissions.md)
+ [接続 / VPC 接続](sap-odata-connectivity-vpc-connection.md)
+ [SAP 認証](sap-odata-authentication.md)
+ [認証シークレットを保存する AWS Secrets Manager](sap-odata-aws-secret-manager-auth-secret.md)

# SAP OData のアクティベーション
<a name="sap-odata-activation"></a>

SAP OData 接続には、次の手順を実行します。

## ODP ソース
<a name="sap-odata-odp-sources"></a>

ODP プロバイダーからデータを転送する前に、次の要件を満たす必要があります。
+ お客様のSAP NetWeaver AS ABAP インスタンスには、
+ データ転送元の ODP プロバイダーが含まれています。ODP プロバイダーには以下が含まれます。
  + SAP DataSources (トランザクションコード RSO2)
  + SAP Core Data Services ABAP CDS ビュー
  + SAP BW または SAP BW/4HANA システム (InfoObject、DataStore Object)
  + SAP Landscape Replication Server (SAP SLT) を介した SAP ソースシステムからのテーブルと DB ビューのリアルタイムレプリケーション
  + SAP ABAP ベースのソースの SAP HANA Information ビュー
+ SAP NetWeaver インスタンスには SAP Gateway Foundation コンポーネントが含まれています。
+ ODP プロバイダーからデータを抽出する OData サービスを作成しました。OData サービスを作成するには、SAP Gateway Service Builder を使用します。ODP データにアクセスするには、Amazon AppFlow が OData API を使用してこのサービスを呼び出します。詳細については、SAP BW/4HANA ドキュメントの「[Generating a Service for Extracting ODP Data via OData](https://help.sap.com/docs/SAP_BPC_VERSION_BW4HANA/dd104a87ab9249968e6279e61378ff66/69b481859ef34bab9cc7d449e6fff7b6.html?version=11.0)」を参照してください。
+ ODP データソースに基づいて OData サービスを生成するには、SAP Gateway Foundation を ERP/BW スタックまたはハブの設定にローカルにインストールする必要があります。
  + ERP/BW アプリケーションの場合、SAP NetWeaver AS ABAP スタックは 7.50 SP02 以上である必要があります。
  + ハブシステム (SAP Gateway) の場合、リモートハブのセットアップには、ハブシステムの SAP NetWeaver AS ABAP が 7.50 SP01 以上である必要があります。

## ODP 非対応ソース
<a name="sap-odata-non-odp-sources"></a>
+ SAP NetWeaver スタックのバージョンは 7.40 SP02 以降である必要があります。
+ サービス検出のためにカタログサービスを有効にする必要があります。
  + **OData V2.0**: OData V2.0 カタログサービスは、トランザクション `/IWFND/MAINT_SERVICE` を介して SAP ゲートウェイで有効にすることができます。
+ SAP OData サービスは、`$top` や `$skip` などのクライアント側のページ分割/クエリオプションをサポートしている必要があります。また、システムクエリオプション `$count` もサポートする必要があります。
+ OAuth 2.0 の場合、OData サービスで OAuth 2.0 を有効にし、SAP ドキュメントに従って OAuth クライアントを登録し、承認されたリダイレクト URL を次のように設定する必要があります。
  + `https://<region>.console.aws.amazon.com/gluestudio/oauth`、 AWS Glue を `<region>` が実行されているリージョン（例：us-east-1）に置き換えます。
  + HTTPS 経由で接続するには、安全なセットアップを有効にする必要があります。
+ ユーザーが SAP OData サービスを検索し、データ抽出を行えるようにするには、ユーザーに適切な権限を付与する必要があります。SAP が提供するセキュリティドキュメントを参照してください。

# IAM ポリシー
<a name="sap-odata-configuring-iam-permissions"></a>

## 接続を作成および使用するための API オペレーションを含むポリシー
<a name="sap-odata-policies-api-operations"></a>

次のサンプル ポリシーで、接続の作成と使用に必要な AWS IAM 権限について説明します。新しいロールを作成する場合は、以下を含むポリシーを作成します。

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

****  

```
{
  "Version":"2012-10-17",		 	 	 
  "Statement": [
    {
      "Effect": "Allow",
      "Action": [
        "glue:ListConnectionTypes",
        "glue:DescribeConnectionType",
        "glue:RefreshOAuth2Tokens",
        "glue:ListEntities",
        "glue:DescribeEntity"
      ],
      "Resource": "*"
    },
    {
      "Effect": "Allow",
      "Action": [
        "secretsmanager:DescribeSecret",
        "secretsmanager:GetSecretValue",
        "secretsmanager:PutSecretValue"
      ],
      "Resource": "*"
    }
  ]
}
```

------

ロールは、Amazon S3 など、ジョブで使用されるすべてのリソースへのアクセスを許可する必要があります。上記の方法を使用しない場合は、代わりに次のマネージド IAM ポリシーを使用します:
+ [AWSGlueServiceRole](https://console.aws.amazon.com/iam/home#policies/arn:aws:iam::aws:policy/service-role/AWSGlueServiceRole) – さまざまな AWS Glue プロセスを実行するために必要なリソースへのアクセス権をユーザーに代わって付与します。これらのリソースには AWS Glue 、Amazon S3、IAM、CloudWatch Logs、および Amazon EC2 が含まれます。このポリシーで指定されたリソースの命名規則に従った場合、AWS Glue プロセスは必要なアクセス権限を使用できます。このポリシーは、通常、クローラ、ジョブ、開発エンドポイントを定義するときに指定されたロールにアタッチされます。
+ [AWSGlueConsoleFullAccess](https://console.aws.amazon.com/iam/home#policies/arn:aws:iam::aws:policy/AWSGlueConsoleFullAccess) — ポリシーがアタッチされているアイデンティティが AWS マネージメントコンソールを使用するときは、AWS Glue リソースへのフルアクセスを許可します。このポリシーで指定されたリソースの命名規則に従った場合、ユーザーは完全なコンソール機能を使用できます。このポリシーは、通常 AWS Glue コンソールのユーザーにアタッチされています。
+ [SecretsManagerReadWrite](https://console.aws.amazon.com/iam/home#policies/arn:aws:iam::aws:policy/SecretsManagerReadWrite) — AWS マネジメントコンソール経由で AWS Secrets Manager への読み取り/書き込みアクセスを提供します。注: これには IAM アクションは含まれないため、ローテーション設定が必要な場合は `IAMFullAccess` と組み合わせてください。

**VPC の設定に必要な IAM ポリシー/アクセス許可**

AWS Glue 接続を作成するために VPC 接続を使用する場合は、次の IAM アクセス許可が必要です。詳細については、「[AWS Glue の IAM ポリシーを作成する](https://docs.aws.amazon.com/glue/latest/dg/create-service-policy.html)」を参照してください。

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

****  

```
{
  "Version":"2012-10-17",		 	 	 
  "Statement": [
    {
      "Effect": "Allow",
      "Action": [
        "ec2:CreateNetworkInterface",
        "ec2:DeleteNetworkInterface",
        "ec2:DescribeNetworkInterfaces"
      ],
      "Resource": [
        "*"
      ]
    }
  ]
}
```

------

# 接続 / VPC 接続
<a name="sap-odata-connectivity-vpc-connection"></a>

VPC 接続の手順:

1. 既存の VPC 接続を使用するか、[Amazon VPC ドキュメント](https://docs.aws.amazon.com/vpc/latest/userguide/create-vpc.html)に従って新しい接続を作成します。

1. トラフィックをインターネットにルーティングする NAT Gateway があることを確認します。

1. 接続を作成するには、VPC エンドポイントを Amazon S3 Gateway として選択します。

1. AWS が提供する DNS サービスを使用するには、DNS 解決と DNS ホスト名を有効にします。

1. 作成した VPC に移動し、STS、AWS Glue、シークレットマネージャーなどのさまざまなサービスに必要なエンドポイントを追加します。

   1. [Create Endpoint] (エンドポイントの作成) を選択します。

   1. [サービスカテゴリ] では、[AWS サービス] を選択する。

   1. [Service Name] で、接続先のサービスを選択します。

   1. VPC を選択し、DNS 名を有効にします。

   1. VPC 接続に必要な VCP エンドポイント:

      1. [STS](https://docs.aws.amazon.com/IAM/latest/UserGuide/reference_sts_vpc_endpoint_create.html)

      1. [AWS Glue](https://docs.aws.amazon.com/glue/latest/dg/vpc-interface-endpoints.html)

      1. [Secrets Manager](https://docs.aws.amazon.com/secretsmanager/latest/userguide/vpc-endpoint-overview.html)

## セキュリティグループの設定
<a name="sap-odata-security-group-configuration"></a>

AWS Glue がセキュリティ グループに接続できるようにするには、セキュリティ グループで AWS Glue VPC からのリスニング ポートへのトラフィックを許可する必要があります。ソース IP アドレスの範囲をできるだけ制限することをお勧めします。

AWS Glue には、それ自体からのすべてのインバウンドトラフィックを許可する特別なセキュリティグループが必要です。セキュリティグループから発信されるすべてのトラフィックを許可する自己参照ルールを作成できます。既存のセキュリティグループを変更し、ソースとしてセキュリティグループを指定できます。

URL エンドポイント (NLB または SAP インスタンス) の HTTPS ポートから通信を開きます。

## 接続オプション
<a name="sap-odata-connectivity-options"></a>
+ 内部および外部 NLB との HTTPS 接続、認証局 (CA) からの SSL 証明書 (自己署名 SSL 証明書ではない)
+ 自己署名 SSL 証明書ではなく、認証局 (CA) からの SAP インスタンス SSL 証明書を使用した HTTPS 接続

# SAP 認証
<a name="sap-odata-authentication"></a>

SAP コネクタは、CUSTOM (SAP BASIC 認証) と OAUTH 認証の両方の方法をサポートしています。

## カスタム認証
<a name="sap-odata-custom-authentication"></a>

AWS Glue は、SAP システムへの接続を確立するための方法としてカスタム (基本認証) をサポートし、ユーザー名とパスワードを使用して安全なアクセスを可能にします。この認証タイプは、SAP OData インスタンス内の特定のユーザーのアクセス許可でユーザー名とパスワードを事前に使用できるため、自動化シナリオに適しています。AWS Glue はユーザー名とパスワードを使用して SAP OData APIs を認証できます。AWS Glue では、基本認可はカスタム認可として実装されます。

基本的な認証フローに関する SAP OData のパブリックドキュメントについては、「[HTTP Basic Authentication](https://help.sap.com/docs/SAP_SUCCESSFACTORS_PLATFORM/d599f15995d348a1b45ba5603e2aba9b/5c8bca0af1654b05a83193b2922dcee2.html)」を参照してください。

## OAuth 2.0 認証
<a name="sap-odata-oauth-2.0-authentication"></a>

AWS Glue は、SAP システムへの接続を確立するための安全な認証メカニズムとして OAuth 2.0 もサポートしています。これにより、最新の認証標準への準拠を確保し、データアクセスのセキュリティを強化しながら、シームレスな統合が可能になります。

## AUTHORIZATION\$1CODE のグラントタイプ
<a name="sap-odata-authentication-code-grant-type"></a>

グラントタイプは、AWS Glue が SAP OData と通信してデータへのアクセスをリクエストする方法を決定します。SAP OData は、`AUTHORIZATION_CODE` 許可タイプのみをサポートします。このグラントタイプは、ユーザーを認証するためにサードパーティーの認証サーバーにユーザーをリダイレクトすることに依存するため、「three-legged」の OAuth と見なされます。AWS Glue コンソール経由で接続を作成するときに使用されます。

ユーザーは、SAP OData で独自の接続アプリを作成し、AWS Glue コンソールを介して接続を作成するときに独自のクライアント ID とクライアントシークレットを指定することを選択できます。このシナリオでは、引き続き SAP OData にリダイレクトされてログインし、リソースへアクセスするために AWS Glue を承認します。

このグラントタイプは、更新トークンとアクセストークンになります。アクセストークンの有効期間は短く、更新トークンを使用してユーザーとやり取りすることなく自動的に更新される場合があります。

認可コード OAuth フロー用の接続アプリの作成に関する SAP OData の公開ドキュメントについては、「[Authentication Using OAuth 2.0](https://help.sap.com/docs/ABAP_PLATFORM_NEW/e815bb97839a4d83be6c4fca48ee5777/2e5104fd87ff452b9acb247bd02b9f9e.html)」を参照してください。

# 認証シークレットを保存する AWS Secrets Manager
<a name="sap-odata-aws-secret-manager-auth-secret"></a>

SAP OData 接続シークレットを AWS Secrets Manager に保存し、 [IAM ポリシー](sap-odata-configuring-iam-permissions.md) セクションで指定されているように取得に必要なアクセス許可を設定し、接続の作成時に使用する必要があります。

AWS Secrets Manager の AWS マネジメントコンソールを使用して、SAP ソースのシークレットを作成します。詳細については、「[AWS Secrets Manager シークレットを作成する](https://docs.aws.amazon.com/secretsmanager/latest/userguide/create_secret.html)」を参照してください。AWS Secrets Manager の詳細には、次のコードの要素を含める必要があります。

## カスタム認証シークレット
<a name="sap-odata-custom-auth-secret"></a>

*<SAP ユーザー名>* の代わりに SAP システムのユーザー名を入力し、*<SAP ユーザー名のパスワード>* の代わりにパスワードを入力して、True または False を入力する必要があります。このコンテキストでは、 `basicAuthDisableSSO` を `true` に設定すると、基本認証リクエストのシングルサインオン (SSO) が無効になり、リクエストごとに明示的なユーザー認証情報が必要になります。逆に、それを `false` に設定すると、利用可能な既存の SSO セッションを使用できるようになります。

```
{
   "basicAuthUsername": "<your SAP username>",
   "basicAuthPassword": "<your SAP username password>",
   "basicAuthDisableSSO": "<True/False>",
   "customAuthenticationType": "CustomBasicAuth"
}
```

## OAuth 2.0 シークレット
<a name="sap-odata-oauth-2.0-secret"></a>

認証メカニズムとして OAuth 2.0 を使用している場合、AWS Secrets Manager のシークレットには、次の形式の **ユーザーマネージドクライアントアプリケーション ClientId** が必要です。＜クライアントシークレット> の代わりに SAP クライアントシークレットを入力する必要があります。

```
{"USER_MANAGED_CLIENT_APPLICATION_CLIENT_SECRET": "<your client secret>"
}
```

# 接続を作成する
<a name="sap-odata-creating-connections"></a>

SAP OData 接続を設定するには

1. AWS マネジメントコンソールにサインインし、[AWS Glue コンソール](https://console.aws.amazon.com/glue)を開きます。AWS Glue Studio で、以下の手順に従って接続を作成します。

   1. 左側のパネルでデータ接続をクリックします。

   1. [接続を作成] をクリックします。

   1. **[データソースを選択]** で **[SAP OData]** を選択します。

   1. 接続先の SAP OData インスタンスの **[アプリケーションホスト URL]** を指定します。このアプリケーションホスト URL は、VPC 以外の接続ではパブリックインターネット経由でアクセス可能である必要があります。

   1. 接続先の SAP OData インスタンスの **[アプリケーションサービスパス]** を指定します。これはカタログサービスのパスと同じです。例: `/sap/opu/odata/iwfnd/catalogservice;v=2`。 AWS Glue は特定のオブジェクトのパスを受け入れません。

   1. 接続先の SAP OData インスタンスの **[クライアント番号]** を指定します。指定できる値は、001 から 999 です。例：010

   1. 接続先の SAP OData インスタンスの **[ポート番号]** を指定します。例: 443

   1. 接続先の SAP OData インスタンスの **[ログオン言語]** を指定します。EN の例

   1. 「[IAM ポリシー](sap-odata-configuring-iam-permissions.md)」セクションで説明しているように、AWS Glue が引き受けることができ、かつアクセス許可を持つ AWS IAM ロールを選択します。

   1. AWS Glue でこの接続に使用する **[認証タイプ]** をドロップダウンリストから選択してください。選択肢は OAUTH2 または CUSTOM です。

      1. CUSTOM - 「[認証シークレットを保存する AWS Secrets Manager](sap-odata-aws-secret-manager-auth-secret.md)」セクションで指定したとおりに作成したシークレットを選択します。

      1. OAUTH 2.0 - OAuth 2.0 を使用する場合のみ、以下の情報を入力します。

         1. **[ユーザーマネージドクライアントアプリケーション ClientId]** に、クライアント ID を入力します。

         1. [認証シークレットを保存する AWS Secrets Manager](sap-odata-aws-secret-manager-auth-secret.md) セクションで作成した AWS Secrets Manager の `USER_MANAGED_CLIENT_APPLICATION_CLIENT_SECRET` (クライアントシークレット)。

         1. **[認証コードの URL]** に、認証コードの URL を入力します。

         1. **[認証トークン URL]** に、認証トークンの URL を入力します。

         1. **[OAuth スコープ]** で、OAuth スコープをスペースで区切って入力します。例:`/IWFND/SG_MED_CATALOG_0002 ZAPI_SALES_ORDER_SRV_0001`

   1. ネットワークを使用する場合は、ネットワークオプションを選択します。詳細については、「[接続 / VPC 接続](sap-odata-connectivity-vpc-connection.md)」を参照してください。

1. AWS Glue ジョブに関連付けられている IAM ロールに `secretName` を読み取るアクセス許可を付与します。詳細については、「[IAM ポリシー](sap-odata-configuring-iam-permissions.md)」を参照してください。

1. **[接続のテスト]** を選択し、接続をテストします。接続テストに合格したら、[次へ] をクリックし、接続名を入力して接続を保存します。ネットワークオプション (VPC) を選択した場合、テスト接続機能は使用できません。

# SAP OData ジョブの作成
<a name="sap-odata-creating-job"></a>

「[AWS Glue Studio でビジュアル ETL ジョブを作成する](https://docs.aws.amazon.com/glue/latest/dg/author-job-glue.html)」を参照してください。

# オペレーショナルデータプロビジョニング (ODP) ソース
<a name="sap-odata-operational-data-provisioning-sources"></a>

オペレーショナルデータプロビジョニング (ODP) は、さまざまなターゲットアプリケーションのデータ抽出とレプリケーションをサポートするために使用できる技術インフラストラクチャを提供し、これらのシナリオでデルタメカニズムをサポートします。デルタプロシージャの場合、ソース (ODP プロバイダー) からのデータは、更新プロセスを使用してデルタキュー (オペレーションデルタキュー – ODQ) に自動的に書き込まれるか、エクストラクタインターフェイスを使用してデルタキューに渡されます。ODP プロバイダーは、DataSource (エクストラクター）、ABAP Core Data Services ビュー (ABAP CDS ビュー）、SAP BW または SAP BW/4HANA、SAP Landscape Transformation Replication Server (SLT)、SAP HANA Information ビュー (計算ビュー) のいずれかです。ターゲットアプリケーション (ODQ の「サブスクライバー」またはより一般的には「ODP コンシューマー」と呼ばれる) は、デルタキューからデータを取得し、データの処理を続行します。

## フルロード
<a name="sap-odata-full-load"></a>

SAP OData エンティティおよび ODP エンティティのコンテキストにおいて、**フルロード**とは、1 回のオペレーションで ODP エンティティから使用可能なすべてのデータを抽出するプロセスを指します。このオペレーションは、ソースシステムから完全なデータセットを取得し、ターゲットシステムにエンティティのデータの包括的かつ最新のコピーが確実に保持されます。通常、全ロードは、増分ロードをサポートしないソースや、ターゲットシステムの更新が必要な場合に使用されます。

**例**

DynamicFrame を作成するときに、明示的に `ENABLE_CDC` フラグを false に設定できます。注: `ENABLE_CDC` はデフォルトで false です。デルタキューを初期化しない場合は、このフラグを送信したり true に設定したりする必要はありません。このフラグを true に設定しないと、全ロード抽出になります。

```
sapodata_df = glueContext.create_dynamic_frame.from_options(
    connection_type="SAPOData",
    connection_options={
        "connectionName": "connectionName",
        "ENTITY_NAME": "entityName",
        "ENABLE_CDC": "false"
    }, transformation_ctx=key)
```

## 増分ロード
<a name="sap-odata-incremental-load"></a>

ODP (オペレーショナルデータプロビジョニング) エンティティのコンテキストでの**増分ロード**では、前回のデータ抽出以降にソースシステムから新規または変更されたデータ (デルタ) のみを抽出し、すでに処理されたレコードを前処理しないようにします。このアプローチにより、効率が大幅に向上し、データ転送量が削減され、パフォーマンスが向上し、システム間の効率的な同期が保証され、特に頻繁に変更される大規模なデータセットの場合、処理時間が最小限に抑えられます

# デルタトークンベースの増分転送
<a name="sap-odata-incremental-transfers"></a>

変更データキャプチャ (CDC) を使用して、それをサポートする ODP 対応エンティティの増分転送を有効にするには、次の手順に従います。

1. スクリプトモードで増分転送ジョブを作成します。

1. DataFrame または Glue DynamicFrame を作成する際には、オプション `"ENABLE_CDC": "True"` を渡す必要があります。このオプションにより、SAP からデルタトークンを受信できます。このトークンは、変更後のデータの取得に使用できます。

データフレームの最後の行の DELTA\$1TOKEN 列に格納されます。このトークンは、後続の呼び出しでコネクタ オプションとして使用して、次のデータ セットを段階的に取得できます。

**例**
+ DynamicFrameを作成する際に、`ENABLE_CDC` フラグを `true` に設定します。注: `false` はデフォルトで `ENABLE_CDC` です。デルタキューを初期化しない場合は、このフラグを送信したり true に設定したりする必要はありません。このフラグを true に設定しないと、全ロード抽出になります。

  ```
  sapodata_df = glueContext.create_dynamic_frame.from_options(
      connection_type="SAPOData",
      connection_options={
          "connectionName": "connectionName",
          "ENTITY_NAME": "entityName",
          "ENABLE_CDC": "true"
      }, transformation_ctx=key)
  
  # Extract the delta token from the last row of the DELTA_TOKEN column
  delta_token_1 = your_logic_to_extract_delta_token(sapodata_df) # e.g., D20241029164449_000370000
  ```
+ 抽出されたデルタトークンを新しいイベントを取得するためのオプションとして渡すことができます。

  ```
  sapodata_df_2 = glueContext.create_dynamic_frame.from_options(
      connection_type="SAPOData",
      connection_options={
          "connectionName": "connectionName",
          "ENTITY_NAME": "entityName",
          // passing the delta token retrieved in the last run
          "DELTA_TOKEN": delta_token_1
      } , transformation_ctx=key)
  
  # Extract the new delta token for the next run
  delta_token_2 = your_logic_to_extract_delta_token(sapodata_df_2)
  ```

`DELTA_TOKEN` が格納されている最後のレコードは、ソースからのトランザクションレコードではなく、デルタトークン値を渡す目的でのみ存在することに注意してください。

`DELTA_TOKEN` とは別に、データフレームの各行には次のフィールドが返されます。
+ **GLUE\$1FETCH\$1SQ**: これは、レコードが受信された順序で EPOC タイムスタンプから生成されるシーケンスフィールドで、レコードごとに一意です。これは、ソースシステムの変更の順序を確認または確立する必要がある場合に使用できます。このフィールドは、ODP が有効なエンティティにのみ表示されます。
+ **DML\$1STATUS**: これにより、ソースから新しく挿入および更新されたすべてのレコードに対して `UPDATED` が表示され、ソースから削除されたレコードに対して `DELETED` が表示されます。

状態を管理し、差分トークンを再利用して、変更したレコードを取得する方法の詳細については、「[SAP OData 状態管理スクリプトの使用](sap-odata-state-management-script.md)」セクションを参照してください。

## デルタトークンの無効化
<a name="sap-odata-invalidation"></a>

デルタトークンは、サービスコレクションとユーザーに関連付けられます。同じサービスコレクションとユーザーに対して `“ENABLE_CDC” : “true”` を有効にした新しい初期プルが開始されると、以前の初期化の結果として発行された以前のデルタトークンはすべて SAP OData サービスによって無効になります。有効期限が切れたデルタトークンを使用してコネクタを呼び出すと、例外が発生します。

`Could not open data access via extraction API RODPS_REPL_ODP_OPEN` 

# OData サービス (ODP 非対応ソース）
<a name="sap-odata-non-odp-services"></a>

## フルロード
<a name="sap-odata-non-odp-full-load"></a>

ODP (オペレーショナルデータプロビジョニング) に対応していないシステムの場合、**フルロード**では、ソース システムからデータセット全体を抽出し、ターゲットシステムにロードします。ODP に対応していないシステムは、差分などの高度なデータ抽出メカニズムを本質的にサポートしないため、そのプロセスは単純ですが、データのサイズによってはリソースを大量に消費する可能性があります。

## 増分ロード
<a name="sap-odata-non-odp-incremental-load"></a>

**ODP (オペレーショナルデータプロビジョニング）** をサポートしていないシステムまたはエンティティの場合、変更を追跡および抽出をするためのタイムスタンプベースの仕組みを実装することで、増分データ転送を手動で管理できます。

**タイムスタンプベースの増分転送**

ODP 非対応のエンティティの場合 (または ENABLE\$1CDC フラグを使用しない ODP が有効になっているエンティティの場合)、コネクタで `filteringExpression` オプションを使用して、データを取得する `datetime` 間隔を指定できます。この方法は、各レコードが最後に作成/変更された日時を表すデータ内のタイムスタンプフィールドに依存します。

**例**

2024-01-01T00:00:00.000 後に変更されたレコードの取得

```
sapodata_df = glueContext.create_dynamic_frame.from_options(
    connection_type="SAPOData",
    connection_options={
        "connectionName": "connectionName",
        "ENTITY_NAME": "entityName",
        "filteringExpression": "LastChangeDateTime >= 2024-01-01T00:00:00.000"
    }, transformation_ctx=key)
```

注: この例では、`LastChangeDateTime` は各レコードが最後に変更された日時を表すフィールドです。実際のフィールド名は、特定の SAP OData エンティティによって異なる場合があります。

後続の実行でデータの新しいサブセットを取得するには、`filteringExpression` を新しいタイムスタンプで更新します。通常、これは以前に取得したデータの最大タイムスタンプ値になります。

**例**

```
max_timestamp = get_max_timestamp(sapodata_df)  # Function to get the max timestamp from the previous run
next_filtering_expression = f"LastChangeDateTime > {max_timestamp}"

# Use this next_filtering_expression in your next run
```

次のセクションでは、これらのタイムスタンプベースの増分転送を管理するための自動化されたアプローチを提供し、実行間でフィルタリング式を手動で更新する必要がなくなります。

# SAP OData への書き込み
<a name="sap-odata-writing"></a>

 このセクションでは、SAP OData の AWS Glue コネクタを使用して SAP OData Service にデータを書き込む方法について説明します。

**前提条件**
+ SAP OData サービスへのアクセス
+ 書き込み先の SAP OData EntitySet Object。Object 名が必要になります。
+ 有効な SAP OData 認証情報と有効な接続
+ [IAM ポリシー](https://docs.aws.amazon.com/glue/latest/dg/sap-odata-configuring-iam-permissions.html)で説明されている適切なアクセス許可

SAP OData コネクタは、次の 2 つの書き込みオペレーションをサポートしています。
+ INSERT
+ UPDATE

UPDATE 書き込みオペレーションを使用する場合は、ID\$1FIELD\$1NAMES を指定してレコードの外部 ID フィールドを指定する必要があります。

**例:**

```
sapodata_write = glueContext.write_dynamic_frame.from_options(
    frame=frameToWrite,
    connection_type="sapodata",
    connection_options={
        "connectionName": "connectionName",
        "ENTITY_NAME": "entityName",
        "WRITE_OPERATION": "INSERT"
    }
```

# SAP OData 状態管理スクリプトの使用
<a name="sap-odata-state-management-script"></a>

AWS Glue ジョブで SAP OData 状態管理スクリプトを使用するには、次の手順に従います:
+ パブリック Amazon S3 バケットから状態管理スクリプト: `s3://aws-blogs-artifacts-public/artifacts/BDB-4789/sap_odata_state_management.zip ` をダウンロードします。
+ AWS Glue ジョブがアクセス許可を持つ Amazon S3 バケットにスクリプトをアップロードします。
+ AWS Glue ジョブ内のスクリプトを参照する: AWS Glue ジョブを作成または更新するときは、Amazon S3 バケット内のスクリプトパスを参照する `'--extra-py-files'` オプションを渡します。例: `--extra-py-files s3://your-bucket/path/to/sap_odata_state_management.py`
+ AWS Glue ジョブスクリプトで状態管理ライブラリをインポートして使用します。

## デルタトークンベースの増分転送の例
<a name="sap-odata-delta-token-incremental-transfer"></a>

以下は、デルタトークンベースの増分転送に 状態管理スクリプトを使用する方法の例です。

```
from sap_odata_state_management import StateManagerFactory, StateManagerType, StateType

# Initialize the state manager
state_manager = StateManagerFactory.create_manager(
    manager_type=StateManagerType.JOB_TAG,
    state_type=StateType.DELTA_TOKEN,
    options={
        "job_name": args['JOB_NAME'],
        "logger": logger
    }
)

# Get connector options (including delta token if available)
key = "SAPODataNode"
connector_options = state_manager.get_connector_options(key)

# Use the connector options in your Glue job
df = glueContext.create_dynamic_frame.from_options(
    connection_type="SAPOData",
    connection_options={
        "connectionName": "connectionName",
        "ENTITY_NAME": "entityName",
        "ENABLE_CDC": "true",
        **connector_options
    }
)

# Process your data here...

# Update the state after processing
state_manager.update_state(key, sapodata_df.toDF())
```

## タイムスタンプベースの増分転送の例
<a name="sap-odata-timestamp-incremental-transfer"></a>

以下は、デルタトークンベースの増分転送に 状態管理スクリプトを使用する方法の例です。

```
from sap_odata_state_management import StateManagerFactory, StateManagerType, StateType

# Initialize the state manager
state_manager = StateManagerFactory.create_manager(
    manager_type=StateManagerType.JOB_TAG,
    state_type=StateType.DELTA_TOKEN,
    options={
        "job_name": args['JOB_NAME'],
        "logger": logger
    }
)

# Get connector options (including delta token if available)
key = "SAPODataNode"
connector_options = state_manager.get_connector_options(key)

# Use the connector options in your Glue job
df = glueContext.create_dynamic_frame.from_options(
    connection_type="SAPOData",
    connection_options={
        "connectionName": "connectionName",
        "ENTITY_NAME": "entityName",
        "ENABLE_CDC": "true",
        **connector_options
    }
)

# Process your data here...

# Update the state after processing
state_manager.update_state(key, sapodata_df.toDF())
```

どちらの例でも、状態管理スクリプトはジョブ実行間の状態 (デルタトークンまたはタイムスタンプ) の保存の複雑さを処理します。コネクタオプションを取得するときに最後の既知の状態を自動的に取得し、処理後に状態を更新して、各ジョブ実行が新規または変更されたデータのみを処理するようにします。

# ODP 非対応エンティティのパーティション分割
<a name="sap-odata-non-odp-entities-partitioning"></a>

Apache Spark では、パーティション分割とは、並列処理のためにクラスター内のワーカーノード間でデータを分割して分散する方法を指します。各パーティションは、タスクによって個別に処理できるデータの論理的なチャンクです。パーティショニングは、Spark の基本的な概念であり、パフォーマンス、スケーラビリティ、リソース使用率に直接影響します。 AWS Glue ジョブは、Spark のパーティショニングメカニズムを使用してデータセットを小さなチャンク (パーティション) に分割し、クラスターのワーカーノード間で並列に処理できます。パーティション分割は ODP エンティティには適用されないことに注意してください。

詳細については、「[AWS Glue Spark と PySpark のジョブ](https://docs.aws.amazon.com/glue/latest/dg/spark_and_pyspark.html)」を参照してください。

**前提条件**

読み取り元の SAP OData オブジェクト。オブジェクト/EntitySet 名が必要です。例: ` /sap/opu/odata/sap/API_SALES_ORDER_SRV/A_SalesOrder `。

**例**

```
sapodata_read = glueContext.create_dynamic_frame.from_options(
    connection_type="SAPOData",
    connection_options={
        "connectionName": "connectionName",
        "ENTITY_NAME": "/sap/opu/odata/sap/API_SALES_ORDER_SRV/A_SalesOrder"
    }, transformation_ctx=key)
```

## パーティショニングクエリ
<a name="sap-odata-partitioning-queries"></a>

### フィールドベースのパーティション分割
<a name="sap-odata-field-based-partitioning"></a>

Spark で同時実行を使用する場合は、追加の Spark オプション `PARTITION_FIELD`、`LOWER_BOUND`、`UPPER_BOUND`、および `NUM_PARTITIONS` を指定できます。これらのパラメータを使用すると、元のクエリは Spark タスクで同時に実行できるサブクエリの `NUM_PARTITIONS` の数に分割されます。整数、日付、および DateTime フィールドは、SAP OData コネクタのフィールドベースのパーティショニングをサポートします。
+ `PARTITION_FIELD`: クエリのパーティション化に使用するフィールドの名前。
+ `LOWER_BOUND`: 選択したパーティションフィールドの包括的な下限値。

   データ型が DateTime であるフィールドでは、Spark SQL クエリで使用される Spark タイムスタンプ形式を受け入れます。

  有効な値の例: `"2000-01-01T00:00:00.000Z"` 
+ `UPPER_BOUND`: 選択したパーティションフィールドの排他的上限値。
+ `NUM_PARTITIONS`: パーティション数。
+ `PARTITION_BY`: 実行するパーティショニングのタイプ。フィールドベースのパーティショニングの場合は、`FIELD` を渡します。

**例**

```
sapodata= glueContext.create_dynamic_frame.from_options(
    connection_type="sapodata",
    connection_options={
        "connectionName": "connectionName",
        "ENTITY_NAME": "/sap/opu/odata/sap/SEPM_HCM_SCENARIO_SRV/EmployeeSet",
        "PARTITION_FIELD": "validStartDate"
        "LOWER_BOUND": "2000-01-01T00:00:00.000Z"
        "UPPER_BOUND": "2020-01-01T00:00:00.000Z"
        "NUM_PARTITIONS": "10",
        "PARTITION_BY": "FIELD"
    }, transformation_ctx=key)
```

### レコードベースのパーティション分割
<a name="sap-odata-record-based-partitioning"></a>

元のクエリは、元のクエリは Spark タスクで同時に実行できるサブクエリの `NUM_PARTITIONS` の数に分割されます。

レコードベースのパーティショニングは、ODP 以外のエンティティでのみサポートされます。ODP エンティティのページ分割は、次のトークン/スキップトークンを通じてサポートされるためです。
+ `PARTITION_BY`: 実行されるパーティション分割のタイプ。レコードベースのパーティション分割の場合は、`COUNT` が渡されます。

**例**

```
sapodata= glueContext.create_dynamic_frame.from_options(
    connection_type="sapodata",
    connection_options={
        "connectionName": "connectionName",
        "ENTITY_NAME": "/sap/opu/odata/sap/SEPM_HCM_SCENARIO_SRV/EmployeeSet",
        "NUM_PARTITIONS": "10",
        "PARTITION_BY": "COUNT"
    }, transformation_ctx=key)
```

# 制限/コールアウト
<a name="sap-odata-limitations"></a>
+ スキップトークン/デルタトークンでページネーションを行うため、ODP エンティティはレコードベースのパーティション分割と互換性がありません。したがって、レコードベースのパーティション分割の場合、maxConcurrency のデフォルト値は、ユーザー入力に関係なく「null」に設定されます。
+ 制限とパーティション分割の両方が適用された場合、制限はパーティション分割よりも優先されます。

# SAP OData 接続オプション
<a name="sap-odata-connection-options"></a>

SAP OData の接続オプションは次のとおりです:
+ `ENTITY_NAME` (文字列) – (必須) 読み取りに使用されます。SAP OData のオブジェクトの名前。

  例: /sap/opu/odata/sap/API\$1SALES\$1ORDER\$1SRV/A\$1SalesOrder
+ `API_VERSION`(文字列) - (オプション) 読み取りに使用。使用する SAP OData Rest API バージョン。例: 2.0。
+ `SELECTED_FIELDS`(List<String>) – Default: empty(SELECT \$1). 読み込みに使用されます。オブジェクトに選択する列です。

  例: SalesOrder
+ `FILTER_PREDICATE`(文字列) – デフォルト: 空 読み込みに使用されます。Spark SQL 形式である必要があります。

  例: `SalesOrder = "10"`
+ `QUERY`(文字列) – デフォルト: 空 読み込みに使用されます。完全な Spark SQL クエリです。

  例: `SELECT * FROM /sap/opu/odata/sap/API_SALES_ORDER_SRV/A_SalesOrder`
+ `PARTITION_FIELD`(文字列) - 読み取りに使用されます。クエリをパーティション化するために使用するフィールドです。

  例: `ValidStartDate`
+ `LOWER_BOUND`(文字列) - 読み取りに使用されます。選択したパーティションフィールドの包括的な下限値です。

  例: `"2000-01-01T00:00:00.000Z"`
+ `UPPER_BOUND`(文字列) - 読み取りに使用されます。選択したパーティションフィールドの排他的上限値です。

  例: `"2024-01-01T00:00:00.000Z"`
+ `NUM_PARTITIONS`(整数) – デフォルト: 1。読み込みに使用されます。読み取り用のパーティションの数です。
+ `INSTANCE_URL`(文字列) – SAP インスタンスアプリケーションのホスト URL。

  例: `https://example-externaldata.sierra.aws.dev`
+ `SERVICE_PATH`(文字列) – SAP インスタンスアプリケーションサービスパス。

  例: `/sap/opu/odata/iwfnd/catalogservice;v=2`
+ `CLIENT_NUMBER`(文字列) – SAP インスタンスアプリケーションのクライアント番号。

  例: 100
+ `PORT_NUMBER`(文字列) – デフォルト: SAP インスタンスアプリケーションのポート番号。

  例: 443
+ `LOGON_LANGUAGE`(文字列) – SAP インスタンスアプリケーションのログオン言語。

  例: `EN`
+ `ENABLE_CDC`(文字列) – CDC を有効にしてジョブを実行するかどうか、つまりトラックの変更でジョブを実行するかどうかを定義します。

  例: `True/False`
+ `DELTA_TOKEN`(文字列) – 指定された有効なデルタトークンに基づいて増分データプルを実行します。

  例: `D20241107043437_000463000`
+ `PAGE_SIZE` (整数) - レコードをクエリするためのページサイズを定義します。デフォルトのページサイズは 50,000 です。ページサイズを指定すると、SAP はデータセット全体ではなく、API コールごとに定義された数のレコードのみを返します。コネクタは引き続きレコードの合計数を提供し、指定したページサイズを使用してページ分割を処理します。ページサイズを大きくする必要がある場合は、最大 500,000 までの任意の値を選択できます。指定されたページサイズが 500,000 を超えると無視されます。代わりに、システムは許容される最大ページサイズを使用します。希望する値を指定した接続オプション `PAGE_SIZE` を追加することで、AWS Glue Studio UI でページサイズを指定できます。

  例: `20000`

# SAP OData エンティティとフィールドの詳細
<a name="sap-odata-entity-field-details"></a>

[\[See the AWS documentation website for more details\]](http://docs.aws.amazon.com/ja_jp/glue/latest/dg/sap-odata-entity-field-details.html)

# SendGrid に対する接続
<a name="connecting-to-data-sendgrid"></a>

SendGrid は、取引 E メールおよびマーケティング E メール用のカスタマーコミュニケーションプラットフォームです。
+ SendGrid コネクタは、連絡先リストの作成と管理、および E メールマーケティングキャンペーンの作成に役立ちます。
+ SendGrid を使用すると、オンラインビジネス、非営利団体、その他のオンラインエンティティは、マーケティング E メールを作成して多くの視聴者に送信し、それらの E メールへのエンゲージメントを監視できます。

**Topics**
+ [SendGrid 向けの AWS Glue サポート](sendgrid-support.md)
+ [接続を作成および使用するための API オペレーションを含むポリシー](sendgrid-configuring-iam-permissions.md)
+ [SendGrid の設定](sendgrid-configuring.md)
+ [SendGrid 接続の設定](sendgrid-configuring-connections.md)
+ [SendGrid エンティティからの読み取り](sendgrid-reading-from-entities.md)
+ [SendGrid 接続オプション](sendgrid-connection-options.md)
+ [SendGrid の制限](sendgrid-limitations.md)

# SendGrid 向けの AWS Glue サポート
<a name="sendgrid-support"></a>

AWS Glue は、次のように SendGrid をサポートします。

**ソースとしてサポートされていますか?**  
はい。AWS Glue ETL ジョブを使用して、SendGrid からデータをクエリできます。

**ターゲットとしてサポートされていますか?**  
いいえ。

**サポートされている SendGrid API バージョン**  
次の SendGrid API バージョンがサポートされています。
+ v3

# 接続を作成および使用するための API オペレーションを含むポリシー
<a name="sendgrid-configuring-iam-permissions"></a>

次のサンプル ポリシーで、接続の作成と使用に必要な AWS IAM 権限について説明します。新しいロールを作成する場合は、以下を含むポリシーを作成します。

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

****  

```
{
  "Version":"2012-10-17",		 	 	 
  "Statement": [
    {
      "Effect": "Allow",
      "Action": [
        "glue:ListConnectionTypes",
        "glue:DescribeConnectionType",
        "glue:RefreshOAuth2Tokens",
        "glue:ListEntities",
        "glue:DescribeEntity"
      ],
      "Resource": "*"
    }
  ]
}
```

------

上記の方法を使用しない場合は、代わりに次のマネージド IAM ポリシーを使用します:
+ [AWSGlueServiceRole](https://console.aws.amazon.com/iam/home#policies/arn:aws:iam::aws:policy/service-role/AWSGlueServiceRole) – さまざまな AWS Glue プロセスを実行するために必要なリソースへのアクセス権をユーザーに代わって付与します。これらのリソースには AWS Glue 、Amazon S3、IAM、CloudWatch Logs、および Amazon EC2 が含まれます。このポリシーで指定されたリソースの命名規則に従った場合、AWS Glue プロセスは必要なアクセス権限を使用できます。このポリシーは、通常、クローラ、ジョブ、開発エンドポイントを定義するときに指定されたロールにアタッチされます。
+ [AWSGlueConsoleFullAccess](https://console.aws.amazon.com/iam/home#policies/arn:aws:iam::aws:policy/AWSGlueConsoleFullAccess) — ポリシーがアタッチされているアイデンティティが AWS マネージメントコンソールを使用するときは、AWS Glue リソースへのフルアクセスを許可します。このポリシーで指定されたリソースの命名規則に従った場合、ユーザーは完全なコンソール機能を使用できます。このポリシーは、通常 AWS Glue コンソールのユーザーにアタッチされています。

# SendGrid の設定
<a name="sendgrid-configuring"></a>

AWS Glue を使用して SendGrid からデータを転送できるようにするには、次の要件を満たす必要があります。

## 最小要件
<a name="sendgrid-configuring-min-requirements"></a>

以下に、最小要件を示します。
+ API キーを持つ SendGrid アカウントがあります。
+ SendGrid アカウントには、有効なライセンスを持つ API アクセスがあります。

これらの要件を満たすと、SendGrid アカウントに AWS Glue を接続する準備が整います。一般的な接続では、SendGrid で他に何もする必要はありません。

# SendGrid 接続の設定
<a name="sendgrid-configuring-connections"></a>

SendGrid はカスタム認証をサポートしています。

カスタム認証に必要な API キーの生成に関する SendGrid のパブリックドキュメントについては、「[認証](https://www.twilio.com/docs/sendgrid/api-reference/how-to-use-the-sendgrid-v3-api/authentication)」を参照してください。

SendGrid 接続を設定するには:

1. AWS Secrets Manager で、次の詳細を含むシークレットを作成します。

   1. カスタマーマネージド接続アプリケーションの場合、シークレットには、`api_key` を使用して接続されたアプリケーションのコンシューマーシークレットをキーとして含める必要があります。

   1. 注: AWS Glue で接続にシークレットを作成する必要があります。

1. AWS Glue Glue Studio で、以下の手順に従って **[データ接続]** の下に接続を作成します。

   1. **[接続タイプ]** を選択する際に、[SendGrid] を選択します。

   1. 接続先の SendGrid インスタンスの `INSTANCE_URL` を指定します。

   1. 次のアクションを実行でき、AWS Glue がその権限を持つ AWS IAM ロールを選択します。

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

****  

      ```
      {
        "Version":"2012-10-17",		 	 	 
        "Statement": [
          {
            "Effect": "Allow",
            "Action": [
              "secretsmanager:DescribeSecret",
              "secretsmanager:GetSecretValue",
              "secretsmanager:PutSecretValue",
              "ec2:CreateNetworkInterface",
              "ec2:DescribeNetworkInterfaces",
              "ec2:DeleteNetworkInterface"
            ],
            "Resource": "*"
          }
        ]
      }
      ```

------

   1. AWS Glue でこの接続に使用する `secretName` を選択して、トークンを配置します。

   1. ネットワークを使用する場合は、ネットワークオプションを選択します。

1. AWS Glue ジョブに関連付けられている IAM ロールに `secretName` を読み取るアクセス許可を付与します。

# SendGrid エンティティからの読み取り
<a name="sendgrid-reading-from-entities"></a>

**前提条件**

読み取り元の SendGrid オブジェクト。`lists`、`singlesends`、または `segments` などのオブジェクト名が必要です。

**ソースに対応するエンティティ**:


| エンティティ | フィルタリング可能 | 制限をサポートする | Order By をサポートする | Select \$1 をサポートする | パーティション分割をサポートする | 
| --- | --- | --- | --- | --- | --- | 
| Lists | なし | あり | なし | あり | なし | 
| シングル送信 | はい | あり | なし | あり | なし | 
| マーケティングキャンペーンの統計自動化 | はい | あり | なし | あり | なし | 
| マーケティングキャンペーンの統計 – シングル送信 | はい | あり | なし | あり | なし | 
| セグメント | あり | なし | なし | あり | なし | 
| 問い合わせ | あり | なし | なし | あり | なし | 
| カテゴリ | なし | なし | なし | あり | なし | 
| 統計 | あり | なし | なし | あり | なし | 
| グループのサブスクリプションを解除する | あり | なし | なし | あり | なし | 

**例**:

```
sendgrid_read = glueContext.create_dynamic_frame.from_options(
    connection_type="sendgrid",
    connection_options={
        "connectionName": "connectionName",
        "ENTITY_NAME": "lists",
        "API_VERSION": "v3",
        "INSTANCE_URL": "instanceUrl"
    }
```

**SendGrid エンティティとフィールドの詳細**:

静的メタデータを持つエンティティ:

[\[See the AWS documentation website for more details\]](http://docs.aws.amazon.com/ja_jp/glue/latest/dg/sendgrid-reading-from-entities.html)

**注記**  
構造体データ型とリストデータ型は、コネクタの応答で文字列データ型に変換され、DateTime データ型は Timestamp に変換されます。

## パーティショニングクエリ
<a name="sendgrid-reading-partitioning-queries"></a>

SendGrid は、フィルターベースのパーティショニングまたはレコードベースのパーティション分割をサポートしていません。

# SendGrid 接続オプション
<a name="sendgrid-connection-options"></a>

SendGrid の接続オプションは次のとおりです。
+ `ENTITY_NAME`(文字列) – (必須) 読み取りに使用されます。SendGrid のオブジェクトの名前。
+ `API_VERSION`(文字列) – (必須) 読み取りに使用されます。使用する SendGrid Rest API バージョン。
+ `INSTANCE_URL`(文字列) – (必須) 読み取りに使用されます。有効な SendGrid インスタンス URL。
+ `SELECTED_FIELDS`(List<String>) – Default: empty(SELECT \$1). 読み込みに使用されます。オブジェクトに選択する列です。
+ `FILTER_PREDICATE`(文字列) – デフォルト: 空 読み込みに使用されます。Spark SQL 形式である必要があります。
+ `QUERY`(文字列) - デフォルト: 空 読み込みに使用されます。完全な Spark SQL クエリです。

# SendGrid の制限
<a name="sendgrid-limitations"></a>

SendGrid の制限事項または注意事項は次のとおりです。
+ 増分プルは、`start_date` フィールドの Stats エンティティと `event_timestamp` フィールドの Contact エンティティでのみサポートされます。
+ ページ分割は、Marketing Campaign Stats (Automations)、Marketing Campaign Stats (Single Sends)、Single Sends、Lists エンティティでのみサポートされています。
+ Stats エンティティの場合、`start_date` は必須のフィルターパラメータです。
+ アクセスが制限された API キーは、E メール API および Stats エンティティの読み取りアクセスをサポートできません。フルアクセスを持つ API キーを使用します。詳細については、「[API の概要](https://www.twilio.com/docs/sendgrid/api-reference/api-keys/create-api-keys#api-overview)」を参照してください。

# ServiceNow への接続
<a name="connecting-to-data-servicenow"></a>

ServiceNow は、IT 管理ワークフローを自動化するためのクラウドベースの SaaS プラットフォームです。ServiceNow プラットフォームは他のツールと簡単に統合できるため、ユーザーはさまざまなアプリケーションやプラグインを使用してプロジェクト、チーム、顧客とのやり取りを管理できます。ServiceNow ユーザーとして、AWS Glue を ServiceNow アカウントに接続できます。その後、ServiceNow を ETL ジョブのデータソースとして使用できます。これらのジョブを実行して、ServiceNow と AWS サービス、またはその他のサポートされているアプリケーション間でデータを転送します。

**Topics**
+ [ServiceNow 用の AWS Glue サポート](servicenow-support.md)
+ [接続を作成および使用するための API オペレーションを含むポリシー](servicenow-configuring-iam-permissions.md)
+ [ServiceNow の設定](servicenow-configuring.md)
+ [ServiceNow 接続の設定](servicenow-configuring-connections.md)
+ [ServiceNow エンティティからの読み取り](servicenow-reading-from-entities.md)
+ [ServiceNow 接続オプション](servicenow-connection-options.md)
+ [ServiceNow コネクタの制限と注意事項](servicenow-connector-limitations.md)

# ServiceNow 用の AWS Glue サポート
<a name="servicenow-support"></a>

AWS Glue は、次のように ServiceNow をサポートします。

**ソースとしてサポートされていますか?**  
はい。AWS Glue ETL ジョブを使用して、ServiceNow からデータをクエリできます。

**ターゲットとしてサポートされていますか?**  
いいえ。

**サポートされている ServiceNow の API バージョン**  
次の ServiceNow の API バージョンがサポートされています。
+ v2

バージョン固有のエンティティサポートについては、「ソースに対応するエンティティ」を参照してください。

# 接続を作成および使用するための API オペレーションを含むポリシー
<a name="servicenow-configuring-iam-permissions"></a>

次のサンプル ポリシーで、接続の作成と使用に必要な AWS IAM 権限について説明します。新しいロールを作成する場合は、以下を含むポリシーを作成します。

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

****  

```
{
  "Version":"2012-10-17",		 	 	 
  "Statement": [
    {
      "Effect": "Allow",
      "Action": [
        "glue:ListConnectionTypes",
        "glue:DescribeConnectionType",
        "glue:RefreshOAuth2Tokens",
        "glue:ListEntities",
        "glue:DescribeEntity"
      ],
      "Resource": "*"
    }
  ]
}
```

------

上記の方法を使用しない場合は、代わりに次のマネージド IAM ポリシーを使用します:
+ [AWSGlueServiceRole](https://console.aws.amazon.com/iam/home#policies/arn:aws:iam::aws:policy/service-role/AWSGlueServiceRole) – さまざまな AWS Glue プロセスを実行するために必要なリソースへのアクセス権をユーザーに代わって付与します。これらのリソースには AWS Glue 、Amazon S3、IAM、CloudWatch Logs、および Amazon EC2 が含まれます。このポリシーで指定されたリソースの命名規則に従った場合、AWS Glue プロセスは必要なアクセス権限を使用できます。このポリシーは、通常、クローラ、ジョブ、開発エンドポイントを定義するときに指定されたロールにアタッチされます。
+ [AWSGlueConsoleFullAccess](https://console.aws.amazon.com/iam/home#policies/arn:aws:iam::aws:policy/AWSGlueConsoleFullAccess) — ポリシーがアタッチされているアイデンティティが AWS マネージメントコンソールを使用するときは、AWS Glue リソースへのフルアクセスを許可します。このポリシーで指定されたリソースの命名規則に従った場合、ユーザーは完全なコンソール機能を使用できます。このポリシーは、通常 AWS Glue コンソールのユーザーにアタッチされています。

# ServiceNow の設定
<a name="servicenow-configuring"></a>

AWS Glue を使用して ServiceNow からデータを転送できるようにするには、次の要件を満たす必要があります。

## 最小要件
<a name="servicenow-configuring-min-requirements"></a>

以下に、最小要件を示します。
+ E メールおよびパスワードが設定されている ServiceNow アカウントを持っていること。詳細については、「[ServiceNow アカウントの作成](#servicenow-configuring-creating-servicenow-account)」を参照してください。
+ ServiceNow アカウントで API アクセスが有効になっていること。ServiceNow API の使用はすべて追加料金なしで可能であること。

これらの要件を満たしている場合、AWS Glue を ServiceNow アカウントに接続する準備ができています。

## ServiceNow アカウントの作成
<a name="servicenow-configuring-creating-servicenow-account"></a>

ServiceNow アカウントを作成するには:

1. servicenow.com のサインアップページに移動し、詳細を入力し、**[続行]** をクリックします。

1. 登録済みメールで認証コードを受信したら、そのコードを入力して **[認証]** を選択します。

1. 多要素認証を設定するか、その設定をスキップします。

アカウントが作成され、ServiceNow がプロファイルが表示されます。

## ServiceNow 開発者インスタンスの作成
<a name="servicenow-configuring-creating-servicenow-developer-instance"></a>

ServiceNow にログインした後、開発者インスタンスをリクエストします。

1. [ServiceNow ログインページ](https://signon.service-now.com/x_snc_sso_auth.do?pageId=username)で、アカウントの認証情報を入力します。

1. **[ServiceNow 開発者プログラム]** を選択します。  
![\[\]](http://docs.aws.amazon.com/ja_jp/glue/latest/dg/images/servicenow-dev-program.png)

1. 右上の **[インスタンスをリクエスト]** を選択します。

1. ジョブの職責を入力します。利用規約に同意して、**[セットアップを完了]** を選択します。

1. インスタンスが作成されたら、インスタンス URL および認証情報をメモします。

## BasicAuth 認証情報の取得
<a name="servicenow-configuring-basic-auth"></a>

無料アカウント用の BasicAuth 認証情報を取得するには:

1. [ServiceNow ログインページ](https://signon.service-now.com/x_snc_sso_auth.do?pageId=username)で、アカウントの認証情報を入力します。

1. ホームページでプロファイル編集のセクション (右上隅) を選択し、**[インスタンスパスワードを管理]** を選択します。

1. ユーザー名、パスワード、インスタンス URL などのログイン認証情報を取得します。

**注記**  
アカウントで MFA が有効になっている場合、基本認証の <username>:<password><MFA Token> でユーザーのパスワードの末尾に MFA トークンを追加します。

詳細については、ServiceNow ドキュメントの「[アプリケーションの構築](https://docs.servicenow.com/bundle/xanadu-application-development/page/build/custom-application/concept/build-applications.html)」を参照してください。

## OAuth 2.0 認証情報の作成
<a name="servicenow-configuring-basic-auth"></a>

ServiceNow コネクタで OAuth2.0 を使用するには、インバウンドクライアントを作成して、クライアント ID およびクライアントシークレットを生成する必要があります。

1. [ServiceNow ログインページ](https://signon.service-now.com/x_snc_sso_auth.do?pageId=username)で、アカウントの認証情報を入力します。

1. ホームページで、**[ビルドを開始]** を選択します。

1. App Engine Studio ページで、**[アプリケーションレジストリ]** を検索します。

1. 右上の **[新規]** を選択します。

1. **[外部クライアント用の OAuth API エンドポイントを作成]** オプションを選択します。

1. OAuth 設定に必要な変更を加えて、**[更新]** を選択します。

   リダイレクト URL の例: https://us-east-1.console.aws.amazon.com/gluestudio/oauth

1. 新しく作成した OAuth クライアントアプリを選択して、クライアント ID およびクライアントシークレットを取得します。

1. さらなる処理を行うため、クライアント ID およびクライアントシークレットを保存します。

本番稼働用以外の開発者アカウントで OAuth を設定するには:

1. ServiceNow ドキュメントの「[認証プロファイルの作成](https://docs.servicenow.com/bundle/washingtondc-platform-security/page/integrate/authentication/task/create-an-authentication-profile.html)」トピックを使用して、認証プロファイルを作成します。

1. OAuth の認証プロファイルで OAuth として **[タイプ]** を選択し、上記で作成したインバウンドクライアントを選択して **[OAuth エンティティ]** を設定します。

1. クライアントが複数存在する場合、複数の認証プロファイルを作成して、認証プロファイルに必要な OAuth エンティティを設定する必要があります。

1. 設定されていない場合、REST API のアクセスポリシーを作成して TABLE API へのアクセスを許可します。「[REST API アクセスポリシーの作成](https://docs.servicenow.com/bundle/washingtondc-platform-security/page/integrate/authentication/task/create-api-access-policy.html)」を参照してください。

# ServiceNow 接続の設定
<a name="servicenow-configuring-connections"></a>

グラントタイプは、AWS Glue が ServiceNow と通信してデータへのアクセスをリクエストする方法を決定します。選択すると、接続を作成する前に満たす必要がある要件に影響します。ServiceNow は、OAuth 2.0 の AUTHORIZATION\$1CODE のグラントタイプのみをサポートしています。
+ このグラントタイプは、ユーザーを認証するためにサードパーティーの認証サーバーにユーザーをリダイレクトすることから、「three-legged」の OAuth と見なされます。AWS Glue コンソール経由で接続を作成するときに使用されます。AWS Glue コンソールでは、ユーザーが ServiceNow にリダイレクトされます。ここではユーザーがログインし、ServiceNow インスタンスにアクセスするためのリクエストされた権限を AWS Glue に許可する必要があります。
+ ユーザーは、ServiceNow で独自の接続アプリを作成し、AWS Glue コンソールを介して接続を作成するときに独自のクライアント ID とクライアントシークレットを指定することを選択できます。このシナリオでは、引き続き ServiceNow にリダイレクトされてログインし、リソースへアクセスするために AWS Glue を承認します。
+ このグラントタイプは、更新トークンとアクセストークンになります。アクセストークンの有効期間は短く、更新トークンを使用してユーザーとやり取りすることなく自動的に更新される場合があります。
+ 認可コード OAuth フロー用の接続アプリケーションの作成に関する ServiceNow の公開ドキュメントについては、「[OAuth を設定する](https://docs.servicenow.com/bundle/vancouver-platform-security/page/administer/security/task/t_SettingUpOAuth.html)」を参照してください。

ServiceNow 接続を設定するには:

1. AWS Secrets Manager で、次の詳細を含むシークレットを作成します。

   1. 基本的な認証の場合、シークレットには、`USERNAME` と `PASSWORD` を使用して接続されたアプリケーションのコンシューマーシークレットをキーとして含める必要があります。

   1. 認可コード付与の場合、シークレットには、`USER_MANAGED_CLIENT_APPLICATION_CLIENT_SECRET` を使用して接続されたアプリケーションのコンシューマーシークレットをキーとして含める必要があります。

   1. 注: AWS Glue で接続ごとにシークレットを作成する必要があります。

1. AWS Glue Glue Studio で、以下の手順に従って **[データ接続]** の下に接続を作成します。

   1. **[接続タイプ]** を選択する際に、[ServiceNow] を選択します。

   1. 接続する ServiceNow インスタンスの INSTANCE\$1URL を指定します。

   1. 次のアクションを実行でき、AWS Glue がその権限を持つ AWS IAM ロールを選択します。

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

****  

      ```
      {
        "Version":"2012-10-17",		 	 	 
        "Statement": [
          {
            "Effect": "Allow",
            "Action": [
              "secretsmanager:DescribeSecret",
              "secretsmanager:GetSecretValue",
              "secretsmanager:PutSecretValue",
              "ec2:CreateNetworkInterface",
              "ec2:DescribeNetworkInterfaces",
              "ec2:DeleteNetworkInterface"
            ],
            "Resource": "*"
          }
        ]
      }
      ```

------

   1. AWS Glue でこの接続に使用する **[認証タイプ]** を選択します。

      1. 基本認証: この認証タイプは、ServiceNow インスタンス内の特定のユーザーのアクセス許可でユーザー名とパスワードを事前に使用できるため、自動化シナリオに適しています。AWS Glue はユーザー名とパスワードを使用して ServiceNow API を認証できます。基本認証の場合にのみ、`Username` と `Password` を入力します。

      1. OAuth2: OAuth2 の場合にのみ、`ClientId`、`ClientSecret`、`Authorization URL`、`Authorization Token URL` を入力します。

   1. AWS Glue でこの接続に使用する `secretName` を選択して、トークンを配置します。

   1. ネットワークを使用する場合は、ネットワークオプションを選択します。

1. AWS Glue ジョブに関連付けられている IAM ロールに `secretName` を読み取るアクセス許可を付与します。

# ServiceNow エンティティからの読み取り
<a name="servicenow-reading-from-entities"></a>

**前提条件**

読み取り元の ServiceNow Tables オブジェクト。pa\$1bucket や Incident などのオブジェクト名が必要になります。

**例**:

```
servicenow_read = glueContext.create_dynamic_frame.from_options(
    connection_type="servicenow",
    connection_options={
        "connectionName": "connectionName",
        "ENTITY_NAME": "pa_buckets",
        "API_VERSION": "v2"
        "instanceUrl": "https://<instance-name>.service-now.com"
    }
)
```

**ServiceNow エンティティとフィールドの詳細**:

次のエンティティについて、ServiceNow はメタデータを動的に取得するためのエンドポイントを備えているため、オペレータのサポートは各エンティティのデータ型レベルでキャプチャされます。

[\[See the AWS documentation website for more details\]](http://docs.aws.amazon.com/ja_jp/glue/latest/dg/servicenow-reading-from-entities.html)

**注記**  
構造体データ型は、コネクタの応答で文字列データ型に変換されます。

**注記**  
`DML_STATUS` は、CREATED/UPDATED レコードの追跡に使用される追加のユーザー定義属性です。

## パーティショニングクエリ
<a name="servicenow-reading-partitioning-queries"></a>

**フィールドベースのパーティショニング**:

Spark で同時実行を使用する場合は、追加の Spark オプション `PARTITION_FIELD`、`LOWER_BOUND`、`UPPER_BOUND`、および `NUM_PARTITIONS` を指定できます。これらのパラメータを使用すると、元のクエリは Spark タスクで同時に実行できるサブクエリの `NUM_PARTITIONS` の数に分割されます。

[\[See the AWS documentation website for more details\]](http://docs.aws.amazon.com/ja_jp/glue/latest/dg/servicenow-reading-from-entities.html)
+ `PARTITION_FIELD`: クエリのパーティション化に使用するフィールドの名前。
+ `LOWER_BOUND`: 選択したパーティションフィールドの**包括的な**下限値。

  Datetime フィールドでは、SPark SQL クエリで使用される Spark タイムスタンプ形式を受け入れます。

  有効な値の例は次のとおりです:

  ```
  "2024-01-30T06:47:51.000Z"
  ```
+ `UPPER_BOUND`: 選択したパーティションフィールドの**排他的**上限値。
+ `NUM_PARTITIONS`: パーティション数。

次の表に、エンティティパーティション分割フィールドのサポートの詳細を示します:

例:

```
servicenow_read = glueContext.create_dynamic_frame.from_options(
    connection_type="servicenow",
    connection_options={
        "connectionName": "connectionName",
        "ENTITY_NAME": "pa_buckets",
        "API_VERSION": "v2",
        "instanceUrl": "https://<instance-name>.service-now.com"
        "PARTITION_FIELD": "sys_created_on"
        "LOWER_BOUND": "2024-01-30T06:47:51.000Z"
        "UPPER_BOUND": "2024-06-30T06:47:51.000Z"
        "NUM_PARTITIONS": "10"
    }
```

**レコードベースのパーティション分割**:

Spark で並行処理を使用する場合は、追加の Spark オプション `NUM_PARTITIONS` を指定できます。これらのパラメータを使用すると、元のクエリは Spark タスクで同時に実行できるサブクエリの `NUM_PARTITIONS` 数に分割されます。

レコードベースのパーティショニングでは、存在するレコードの合計数が ServiceNow API からクエリされ、指定された `NUM_PARTITIONS` 数で割られます。その後、結果のレコード数は、各サブクエリによって同時に取得されます。
+ `NUM_PARTITIONS`: パーティション数。

例:

```
servicenow_read = glueContext.create_dynamic_frame.from_options(
    connection_type="servicenow",
    connection_options={
        "connectionName": "connectionName",
        "ENTITY_NAME": "pa_buckets",
        "API_VERSION": "v2",
        "instanceUrl": "https://<instance-name>.service-now.com"
        "NUM_PARTITIONS": "2"
    }
```

# ServiceNow 接続オプション
<a name="servicenow-connection-options"></a>

ServiceNow の接続オプションは次のとおりです。
+ `ENTITY_NAME`(文字列) – (必須) 読み取りに使用されます。ServiceNow 内のオブジェクトの名前です。
+ `API_VERSION`(文字列) – (必須) 読み取りに使用されます。使用する ServiceNow Rest API バージョンです。例: v1、v2、v3、v4。
+ `SELECTED_FIELDS`(List<String>) – Default: empty(SELECT \$1). 読み込みに使用されます。オブジェクトに選択する列です。
+ `FILTER_PREDICATE`(文字列) – デフォルト: 空 読み込みに使用されます。Spark SQL 形式である必要があります。
+ `QUERY`(文字列) - デフォルト: 空 読み込みに使用されます。完全な Spark SQL クエリです。
+ `PARTITION_FIELD`(文字列) - 読み取りに使用されます。クエリをパーティション化するために使用するフィールドです。
+ `LOWER_BOUND`(文字列) - 読み取りに使用されます。選択したパーティションフィールドの包括的な下限値です。例: 2024-01-30T06:47:51.000Z
+ `UPPER_BOUND`(文字列) - 読み取りに使用されます。選択したパーティションフィールドの排他的上限値です。例: 2024-06-30T06:47:51.000Z
+ `NUM_PARTITIONS`(整数) – デフォルト: 1。読み込みに使用されます。読み取り用のパーティションの数です。例: 10
+ `INSTANCE_URL`(文字列) - (必須) https://<instance-name>.servicenow.com 形式の有効な ServiceNow インスタンス URL です。
+ `PAGE_SIZE` (整数) - レコードをクエリするためのページサイズを定義します。デフォルトのページサイズは 1,000 です。ページサイズを指定すると、ServiceNow はデータセット全体ではなく、API コールごとに定義された数のレコードのみを返します。コネクタは引き続きレコードの合計数を提供し、指定したページサイズを使用してページ分割を処理します。ページサイズを大きくする必要がある場合は、最大 10,000 の任意の値を選択できます。10,000 を超える指定ページサイズはすべて無視されます。代わりに、システムは許容される最大ページサイズを使用します。AWS Glue Studio UI では、希望する値を指定した接続オプション `PAGE_SIZE` を追加することでページサイズを指定できます。例えば、5000 などです。

# ServiceNow コネクタの制限と注意事項
<a name="servicenow-connector-limitations"></a>

ServiceNow コネクタの制限事項または注意事項は次のとおりです。
+ [SaaS documentation](https://www.servicenow.com/docs/bundle/washingtondc-application-development/page/build/applications/reference/r_GlobalDefaultFields.html)によると、`sys_created_on`、`sys_updated_on`、`sys_mod_count` はシステム生成フィールドです。コネクタは SaaS API に依存して、レスポンス本文にこれらのフィールドを提供します。
  + SaaS がどのエンティティに対してもこれらのフィールドを生成しない場合、フィルターベースのパーティショニングはサポートできません。
+ SaaS API がレスポンスで `sys_created_on` フィールドと `sys_updated_on` フィールドを返さない場合、`DML_STATUS` は算出できません。
+ 読み取りパフォーマンスと効率の向上
  + ユーザーが ORDER BY 句を指定しない場合、ServiceNow コネクタはレコードを `sys_id` フィールドで昇順に自動でソートするようになりました (メタデータに存在する必要があります)。この場合、レコードは新しい最適化されたキーセットベースのページネーションによってページ分割されます。
  + ORDER BY 句を指定した場合、新しい最適化は使用されず、レコードは既存の (ユーザー定義の Order By および Offset-Limit ベースのページネーション) メソッドを使用して取得されます。

# AWS Glue Studio での Slack への接続
<a name="connecting-to-data-slack"></a>

 Slack は、ユーザーがさまざまなパブリックチャネルやプライベートチャネルを通じてメッセージや添付ファイルを送信できる、エンタープライズコミュニケーションアプリです。Slack ユーザーの場合は、Slack アカウントに AWS Glue を接続できます。その後、Slack を ETL ジョブのデータソースとして使用できます。これらのジョブを実行して、Slack と AWS サービス、またはその他のサポートされているアプリケーション間でデータを転送します。

**Topics**
+ [AWS Glue Slack のサポート](slack-support.md)
+ [接続を作成および使用するための API オペレーションを含むポリシー](slack-configuring-iam-permissions.md)
+ [Slack の設定](slack-configuring.md)
+ [Slack 接続の設定](slack-configuring-connections.md)
+ [Slack エンティティからの読み取り](slack-reading-from-entities.md)
+ [Slack 接続オプション](slack-connection-options.md)
+ [制限](slack-limitations.md)
+ [新しい Slack アカウントの作成とクライアントアプリの設定](slack-new-account-creation.md)

# AWS Glue Slack のサポート
<a name="slack-support"></a>

AWS Glue は、次のように Slack をサポートします:

**ソースとしてサポートされていますか?**  
はい。AWS Glue ETL ジョブを使用して、Slack からデータをクエリできます。

**ターゲットとしてサポートされていますか?**  
いいえ。

**サポートされている Slack API のバージョン**  
 Slack API v2。

# 接続を作成および使用するための API オペレーションを含むポリシー
<a name="slack-configuring-iam-permissions"></a>

 次のサンプル ポリシーで、接続の作成と使用に必要な IAM 権限について説明します。新しいロールを作成する場合は、以下を含むポリシーを作成します。

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

****  

```
{
  "Version":"2012-10-17",		 	 	 
  "Statement": [
    {
      "Effect": "Allow",
      "Action": [
        "glue:ListConnectionTypes",
        "glue:DescribeConnectionType",
        "glue:RefreshOAuth2Tokens",
        "glue:ListEntities",
        "glue:DescribeEntity"
      ],
      "Resource": "*"
    }
  ]
}
```

------

また、次のマネージド IAM ポリシーを使用して、アクセスを許可できます。
+  [ AWSGlueServiceRole ](https://console.aws.amazon.com/iam/home#policies/arn:aws:iam::aws:policy/service-role/AWSGlueServiceRole) – さまざまな AWS Glue プロセスを実行するために必要なリソースへのアクセス権をユーザーに代わって付与します。これらのリソースには、AWS Glue、Amazon S3、IAM、Amazon CloudWatch Logs および Amazon EC2 が含まれます。このポリシーで指定されたリソースの命名規則に従った場合、AWS Glue プロセスは必要なアクセス許可を使用できます。このポリシーは、通常、クローラー、ジョブ、開発エンドポイントを定義するときに指定されたロールにアタッチされます。
+  [ AWSGlueConsoleFullAccess ](https://console.aws.amazon.com/iam/home#policies/arn:aws:iam::aws:policy/AWSGlueConsoleFullAccess) — ポリシーがアタッチされているアイデンティティが AWS マネージメントコンソールを使用するときは、AWS Glue リソースへのフルアクセスを許可します。このポリシーで指定されたリソースの命名規則に従った場合、ユーザーは完全なコンソール機能を使用できます。このポリシーは、通常 AWS Glue コンソールのユーザーにアタッチされています。

# Slack の設定
<a name="slack-configuring"></a>

AWS Glue を使用して Slack との間でデータを転送できるようにするには、次の要件を満たす必要があります:

## 最小要件
<a name="slack-configuring-min-requirements"></a>
+  Slack アカウントが必要です。詳細については、「[新しい Slack アカウントの作成とクライアントアプリの設定](slack-new-account-creation.md)」を参照してください。

 これらの要件を満たすと、Slack アカウントに AWS Glue を接続する準備が整います。

# Slack 接続の設定
<a name="slack-configuring-connections"></a>

 Slack は OAuth 2 の `AUTHORIZATION_CODE` グラントタイプをサポートしています。

 このグラントタイプは、ユーザーを認証するためにサードパーティーの認証サーバーにユーザーをリダイレクトすることから、「three-legged」の OAuth と見なされます。AWS Glue コンソール経由で接続を作成するときに使用されます。AWS Glue コンソールでは、ユーザーが Slack にリダイレクトされます。ここではユーザーがログインし、Slack インスタンスにアクセスするためのリクエストされた権限を AWS Glue に許可する必要があります。

 ユーザーは、Slack で独自の接続アプリを作成し、AWS Glue コンソールを介して接続を作成するときに独自のクライアント ID とクライアントシークレットを指定することを選択できます。このシナリオでは、引き続き Slack にリダイレクトされてログインし、リソースへアクセスするために AWS Glue を承認します。

 このグラントタイプは、更新トークンとアクセストークンになります。このアクセストークンは、作成から 1 時間後に期限切れになります。新しいアクセストークンは、更新トークンを使用してフェッチできます。

 認可コード OAuth フロー用の接続アプリケーションの作成の詳細については、「[Slack API](https://api.slack.com/quickstart)」を参照してください。

Slack 接続を設定するには:

1.  AWS Secrets Manager で、次の詳細を含むシークレットを作成します。AWS Glue で接続ごとにシークレットを作成する必要があります。

   1.  カスタマーマネージド接続アプリケーションの場合 – シークレットには、`USER_MANAGED_CLIENT_APPLICATION_CLIENT_SECRET` を使用して接続されたアプリケーションのコンシューマーシークレットをキーとして含める必要があります。

1. AWS Glue Glue Studio で、以下の手順に従って **[データ接続]** の下に接続を作成します。

   1. **[接続タイプ]** を選択する際に、[Slack] を選択します。

   1. Slack 環境を指定します。

   1.  AWS Glue が次のアクションを担い、その権限を持つことができる IAM ロールを選択します。

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

****  

      ```
      {
        "Version":"2012-10-17",		 	 	 
        "Statement": [
          {
            "Effect": "Allow",
            "Action": [
              "secretsmanager:DescribeSecret",
              "secretsmanager:GetSecretValue",
              "secretsmanager:PutSecretValue",
              "ec2:CreateNetworkInterface",
              "ec2:DescribeNetworkInterfaces",
              "ec2:DeleteNetworkInterface"
            ],
            "Resource": "*"
          }
        ]
      }
      ```

------

   1.  AWS Glue でこの接続に使用する `secretName` を選択して、トークンを配置します。

   1.  ネットワークを使用する場合は、ネットワークオプションを選択します。

1.  AWS Glue ジョブに関連付けられている IAM ロールに `secretName` を読み取るアクセス許可を付与します。

# Slack エンティティからの読み取り
<a name="slack-reading-from-entities"></a>

 **前提条件** 
+  読み取り元の Slack オブジェクト。

 **サポートされているエンティティ** 


| エンティティ | フィルタリング可能 | 制限をサポートする | Order By をサポートする | Select \$1 をサポートする | パーティション分割をサポートする | 
| --- | --- | --- | --- | --- | --- | 
| 会話 | はい | あり | なし | あり | あり | 

 **例** 

```
slack_read = glueContext.create_dynamic_frame.from_options(
    connection_type="slack",
    connection_options={
        "connectionName": "connectionName",
        "ENTITY_NAME": "conversations/C058W38R5J8"
    }
)
```

 **Slack エンティティとフィールドの詳細** 


| エンティティ | フィールド | データタイプ | サポートされている演算子 | 
| --- | --- | --- | --- | 
| 会話 | attachments | リスト | NA | 
| 会話 | bot\$1id | 文字列 | NA | 
| 会話 | blocks | リスト | NA | 
| 会話 | client\$1msg\$1id | 文字列 | NA | 
| 会話 | is\$1starred | ブール値 | NA | 
| 会話 | last\$1read | 文字列 | NA | 
| 会話 | latest\$1reply | 文字列 | NA | 
| 会話 | reactions | リスト | NA | 
| 会話 | replies | リスト | NA | 
| 会話 | reply\$1count | 整数 | NA | 
| 会話 | reply\$1users | リスト | NA | 
| 会話 | reply\$1users\$1count | 整数 | NA | 
| 会話 | subscribed | ブール値 | NA | 
| 会話 | subtype | 文字列 | NA | 
| 会話 | text | 文字列 | NA | 
| 会話 | team | 文字列 | NA | 
| 会話 | thread\$1ts | 文字列 | NA | 
| 会話 | ts | 文字列 | EQUAL\$1TO、FORE, LESS\$1THAN, LESS\$1THAN\$1OR\$1EQUAL\$1TO, GREATER\$1THAN, GREATER\$1THAN\$1OR\$1EQUAL\$1TO | 
| 会話 | type | 文字列 | NA | 
| 会話 | ユーザー | 文字列 | NA | 
| 会話 | inviter | 文字列 | NA | 
| 会話 | ルート | Struct | NA | 
| 会話 | is\$1locked | ブール値 | NA | 
| 会話 | ファイル | リスト | NA | 
| 会話 | 部屋 | Struct | NA | 
| 会話 | アップロード | ブール値 | NA | 
| 会話 | display\$1as\$1bot | ブール値 | NA | 
| 会話 | チャンネル | 文字列 | NA | 
| 会話 | no\$1notifications | ブール値 | NA | 
| 会話 | permalink | 文字列 | NA | 
| 会話 | pinned\$1to | リスト | NA | 
| 会話 | pinned\$1info | Struct | NA | 
| 会話 | edited | Struct | NA | 
| 会話 | app\$1id | 文字列 | NA | 
| 会話 | bot\$1profile | Struct | NA | 
| 会話 | metadata | Struct | NA | 

 **パーティショニングクエリ** 

 Spark で同時実行を使用する場合は、追加の Spark オプション `PARTITION_FIELD`、`LOWER_BOUND`、`UPPER_BOUND`、および `NUM_PARTITIONS` を指定できます。これらのパラメータを使用すると、元のクエリは Spark タスクで同時に実行できるサブクエリの `NUM_PARTITIONS` の数に分割されます。
+  `PARTITION_FIELD`: クエリのパーティション化に使用するフィールドの名前。
+  `LOWER_BOUND`: 選択したパーティションフィールドの包括的な下限値。

   日付については、Spark SQL クエリで使用される Spark の日付形式を受け入れます。有効な値の例: `"2024-07-01T00:00:00.000Z"`。
+  `UPPER_BOUND`: 選択したパーティションフィールドの排他的上限値。
+  `NUM_PARTITIONS`: パーティション数。

 エンティティごとのパーティション分割フィールドのサポートの詳細は、以下の表にまとめられています。


| エンティティ名 | Partitioning Field | データタイプ | 
| --- | --- | --- | 
| 会話 | ts | 文字列 | 

 **例** 

```
slack_read = glueContext.create_dynamic_frame.from_options(
    connection_type="slack",
    connection_options={
        "connectionName": "connectionName",
        "ENTITY_NAME": "conversations/C058W38R5J8",
        "PARTITION_FIELD": "ts"
        "LOWER_BOUND": "2022-12-01T00:00:00.000Z"
        "UPPER_BOUND": "2024-09-23T15:00:00.000Z"
        "NUM_PARTITIONS": "2"
    }
)
```

# Slack 接続オプション
<a name="slack-connection-options"></a>

Slack の接続オプションは次のとおりです:
+  `ENTITY_NAME` (文字列) – (必須) 読み取りに使用されます。サポートされているエンティティ名。例えば、`conversations/C058W38R5J8` などです。
+  `SELECTED_FIELDS`(List<String>) – Default: empty(SELECT \$1). 読み込みに使用されます。オブジェクトに選択するフィールド。
+  `FILTER_PREDICATE`(文字列) – デフォルト: 空 読み込みに使用されます。Spark SQL 形式である必要があります。
+  `QUERY`(文字列) - デフォルト: 空 読み込みに使用されます。完全な Spark SQL クエリです。
+  `NUM_PARTITIONS`(整数) – デフォルト: 1。読み込みに使用されます。読み取り用のパーティションの数です。

# 制限
<a name="slack-limitations"></a>

Slack コネクタの制限は次のとおりです:
+  コネクタは、特定の会話で使用可能なレコード (メッセージ) の総数をフェッチする手段を備えていないため、レコードベースのパーティショニングはサポートされていません。

# 新しい Slack アカウントの作成とクライアントアプリの設定
<a name="slack-new-account-creation"></a>

**Slack アカウントの作成**

1. [Slack ホームページ](https://slack.com/intl/en-in/)を開いて、アカウントにサインアップします。

1. **[E メールアドレスでサインアップ]** を選択します。E メール ID を入力し、**[続行]** を選択します。

1. E メールアドレスに送信された 6 文字のコードを入力すると、ワークスペースの作成または既存のワークスペースへの参加にリダイレクトされます。

1. **[ワークスペースを作成]** を選択して、新しいワークスペースを作成します。セットアッププロセスの一環として、いくつかの質問に回答するようにリダイレクトされます。
   + 会社名
   + 氏名
   + E メールで同僚を追加するには
   + チームは何に取り組んでいますか? (これはチャンネル名になります)

1. これらの質問の入力フィールドに入力し、続行します。これで、アカウントを使用する準備ができました。



**Slack 開発者アプリの作成**

1. Slack アカウントにログインし、Slack ワークスペースにサインインします。

1. ワークスペースメニューから、**[ツールと設定]** を選択し、**[アプリの管理]** を選択します。

1. Slack アプリディレクトリのメニューから、**[ビルド]** を選択します。

1. **[アプリ]** ページで、**[アプリの作成]** を選択します。

1. **[アプリの作成]** ページで、**[最初から作成]** を選択します。

1. 開いた **[アプリ名とワークスペースの選択]** ダイアログボックスで、アプリ名を追加し、**[アプリをデプロイするワークスペースを選択します]**。次に、**[アプリの作成]** を選択します。

1. アプリ認証情報に表示されるクライアント ID とシークレットを書き留めます。

1. [OAuth とアクセス許可] サイドバーで、[スコープ] に移動し、**[OAuth スコープの追加]** を選択します。リダイレクト URL を設定のアプリに追加して、[Slack に追加] ボタンを自動的に生成したり、アプリを配信したりできます。[リダイレクト URL] セクションまでスクロールし、**[新しいリダイレクト URL を追加]** を選択して保存します。

1. 次に、[Workspace の OAuth トークン] セクションまでスクロールし、**[Workspace にインストール]** を選択します。

1. 作成したアプリが、接続先の Slack ワークスペースへのアクセス許可をリクエストしていることを知らせるために開くダイアログボックスで、**[許可]** を選択します。

1. 正常に完了すると、コンソールに [ワークスペースの OAuth トークン] 画面が表示されます。

1. [ワークスペースの OAuth トークン] 画面から、AWS Glue への接続に使用される OAuth トークンをコピーして保存します

1. 次に、Slack チーム ID を取得します。[Slack ワークスペース] メニューから、**[ツールと設定]** を選択し、**[アプリの管理]** を選択します。チーム ID は、開いたページの URL にあります。

1. アプリを公開するには、サイドバーの **[ディストリビューションの管理]** ボタンに進んでアクティブ化します。[アプリを他のワークスペースと共有] セクションまでスクロールし、**[ハードコードされた情報の削除]** を選択します。同意し、**[公開配布をアクティブ化]** を選択します。

1. これで、アプリが公開されました。エンティティ API にアクセスするには、ユーザーがアクセスするすべてのワークスペースチャンネルにアプリを追加する必要があります。

1. Slack アカウントにサインインし、チャンネルにアクセスする必要があるワークスペースを開きます。

1. ワークスペースで、アプリがアクセスするチャンネルを開き、チャンネルタイトルを選択します。ポップアップから **[統合]** タブを選択し、アプリを追加します。このようにして、アプリはチャンネルと統合され、その API にアクセスできます。

   OAuth 2.0 クライアント ID には、1 つ以上の許可されたリダイレクト URL が必要です。リダイレクト URL の形式は次のとおりです:
**注記**  
 Appflow リダイレクト URL は、AWS Glue プラットフォーム用のリダイレクト URL が利用可能になった後に変更される場合があります。クライアント ID とクライアントシークレットは、OAuth 2.0 クライアント ID の設定からのものです。    
<a name="slack-redirect-url-detail"></a>[\[See the AWS documentation website for more details\]](http://docs.aws.amazon.com/ja_jp/glue/latest/dg/slack-new-account-creation.html)

# Smartsheet に対する接続
<a name="connecting-to-smartsheet"></a>

Smartsheet は、ワーク管理およびコラボレーション SaaS 製品です。基本的に、Smartsheet を使用すると、ユーザーはスプレッドシートのようなオブジェクトを使用してビジネスデータを作成、保存、利用できます。

**Topics**
+ [Smartsheet 向けの AWS Glue サポート](smartsheet-support.md)
+ [接続を作成および使用するための API オペレーションを含むポリシー](smartsheet-configuring-iam-permissions.md)
+ [Smartsheet の設定](smartsheet-configuring.md)
+ [Smartsheet 接続の設定](smartsheet-configuring-connections.md)
+ [Smartsheet エンティティからの読み取り](smartsheet-reading-from-entities.md)
+ [Smartsheet 接続オプション](smartsheet-connection-options.md)
+ [Smartsheet アカウントの作成](smartsheet-create-account.md)
+ [制限](smartsheet-connector-limitations.md)

# Smartsheet 向けの AWS Glue サポート
<a name="smartsheet-support"></a>

AWS Glue は、次のように Smartsheet をサポートします。

**ソースとしてサポートされていますか?**  
はい。AWS Glue ETL ジョブを使用して、Smartsheet からデータをクエリできます。

**ターゲットとしてサポートされていますか?**  
いいえ。

**サポートされている Smartsheet API バージョン**  
 v2.0 

# 接続を作成および使用するための API オペレーションを含むポリシー
<a name="smartsheet-configuring-iam-permissions"></a>

次のサンプル ポリシーで、接続の作成と使用に必要な AWS の権限について説明します。新しいロールを作成する場合は、以下を含むポリシーを作成します。

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

****  

```
{
  "Version":"2012-10-17",		 	 	 
  "Statement": [
    {
      "Effect": "Allow",
      "Action": [
        "glue:ListConnectionTypes",
        "glue:DescribeConnectionType",
        "glue:RefreshOAuth2Tokens",
        "glue:ListEntities",
        "glue:DescribeEntity"
      ],
      "Resource": "*"
    }
  ]
}
```

------

上記の方法を使用しない場合は、代わりに次のマネージド IAM ポリシーを使用します。
+  [ AWSGlueServiceRole ](https://console.aws.amazon.com/iam/home#policies/arn:aws:iam::aws:policy/service-role/AWSGlueServiceRole) – さまざまな AWS Glue プロセスを実行するために必要なリソースへのアクセス権をユーザーに代わって付与します。これらのリソースには、AWS Glue、Amazon S3、IAM、CloudWatch Logs、および Amazon EC2 が含まれます。このポリシーで指定されたリソースの命名規則に従った場合、AWS Glue プロセスは必要なアクセス許可を使用できます。このポリシーは、通常、クローラー、ジョブ、開発エンドポイントを定義するときに指定されたロールにアタッチされます。
+  [ AWSGlueConsoleFullAccess ](https://console.aws.amazon.com/iam/home#policies/arn:aws:iam::aws:policy/AWSGlueConsoleFullAccess) — ポリシーがアタッチされているアイデンティティが AWS マネージメントコンソールを使用するときは、AWS Glue リソースへのフルアクセスを許可します。このポリシーで指定されたリソースの命名規則に従った場合、ユーザーは完全なコンソール機能を使用できます。このポリシーは、通常 AWS Glue コンソールのユーザーにアタッチされています。

# Smartsheet の設定
<a name="smartsheet-configuring"></a>

AWS Glue を使用して Smartsheet から転送できるようにするには、次の要件を満たす必要があります。

## 最小要件
<a name="smartsheet-configuring-min-requirements"></a>
+ E メールとパスワードが設定された Smartsheet アカウントがある。アカウントの作成の詳細については、「[Smartsheet アカウントの作成](smartsheet-create-account.md)」を参照してください。
+ Smartsheet アカウントには、有効なライセンスを持つ API アクセスがあります。
+ Smartsheet アカウントには、`Sheets` エンティティの **[Pro 料金]** プランと、`Events` エンティティの Event Reporting アドオンを使用するエンタープライズ料金プランがあります。

これらの要件を満たすと、Smartsheet アカウントに AWS Glue を接続する準備が整います。一般的な接続では、Smartsheet で他に何もする必要はありません。

# Smartsheet 接続の設定
<a name="smartsheet-configuring-connections"></a>

 Smartsheet は OAuth2 の `AUTHORIZATION_CODE` グラントタイプをサポートしています。

このグラントタイプは、ユーザーを認証するためにサードパーティーの認証サーバーにユーザーをリダイレクトすることから、「three-legged」の `OAuth` と見なされます。ユーザーは、Smartsheet で独自の接続アプリを作成し、AWS Glue コンソールを介して接続を作成するときに独自のクライアント ID とクライアントシークレットを指定することを選択できます。このシナリオでは、引き続き Smartsheet にリダイレクトされてログインし、リソースへアクセスするために AWS Glue を承認します。

このグラントタイプは、更新トークンとアクセストークンになります。アクセストークンの有効期間は短く、更新トークンを使用してユーザーとやり取りすることなく自動的に更新される場合があります。

AUTHORIZATION\$1CODE OAuth フローの接続アプリケーションの作成に関する Smartsheet の公開ドキュメントについては、「[Smartsheet API](https://smartsheet.redoc.ly/#section/OAuth-Walkthrough)」を参照してください。

Smartsheet 接続を設定するには:

1. AWS Secrets Manager で、次の詳細を含むシークレットを作成します。

   カスタマーマネージド接続アプリケーションの場合 – シークレットには、`USER_MANAGED_CLIENT_APPLICATION_CLIENT_SECRET` を使用して接続されたアプリケーションのコンシューマーシークレットをキーとして含める必要があります。
**注記**  
AWS Glue で接続ごとにシークレットを作成する必要があります。

1. AWS Glue Studio で、以下の手順に従って **[データ接続]** の下に接続を作成します。

   1. **[接続タイプ]** を選択する際に、[Smartsheet] を選択します。

   1. 接続先の Smartsheet の `instanceUrl` を指定します。

   1. AWS Glue が次のアクションを担い、その権限を持つことができる IAM ロールを選択します。

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

****  

      ```
      {
        "Version":"2012-10-17",		 	 	 
        "Statement": [
          {
            "Effect": "Allow",
            "Action": [
              "secretsmanager:DescribeSecret",
              "secretsmanager:GetSecretValue",
              "secretsmanager:PutSecretValue",
              "ec2:CreateNetworkInterface",
              "ec2:DescribeNetworkInterfaces",
              "ec2:DeleteNetworkInterface"
            ],
            "Resource": "*"
          }
        ]
      }
      ```

------

   1. AWS Glue でこの接続に使用する `secretName` を選択して、トークンを配置します。

   1.  ネットワークを使用する場合は、ネットワークオプションを選択します。

1. AWS Glue ジョブに関連付けられている IAM ロールに `secretName` を読み取るアクセス許可を付与します。

# Smartsheet エンティティからの読み取り
<a name="smartsheet-reading-from-entities"></a>

 **前提条件** 

読み取り元の `Smartsheet` オブジェクト。使用可能なエンティティを確認するには、以下のサポートされているエンティティの表を参照してください。

 **サポートされているエンティティ** 


| エンティティ | フィルタリング可能 | 制限をサポートする | Order By をサポートする | Select \$1 をサポートする | パーティショニングをサポートする | 
| --- | --- | --- | --- | --- | --- | 
| シートを一覧表示する | あり | あり | なし | あり | なし | 
| 行メタデータ | あり | あり | なし | あり | なし | 
| シートメタデータ | いいえ | なし | なし | あり | なし | 
| シートデータ | あり | はい | はい | あり | なし | 
| イベント | あり | あり | なし | あり | なし | 

 **例** 

```
Smartsheet_read = glueContext.create_dynamic_frame.from_options(
    connection_type="smartsheet",
    connection_options={
        "connectionName": "connectionName",
        "ENTITY_NAME": "list-sheets",
        "API_VERSION": "2.0",
        "INSTANCE_URL": "https://api.smartsheet.com"
    })
```

 **Smartsheet エンティティとフィールドの詳細** 

[\[See the AWS documentation website for more details\]](http://docs.aws.amazon.com/ja_jp/glue/latest/dg/smartsheet-reading-from-entities.html)

**動的メタデータを持つエンティティ**:

次のエンティティについて、Smartsheet はメタデータを動的に取得するためのエンドポイントを備えているため、オペレータのサポートはデータ型レベルでキャプチャされます。


| エンティティ |  データタイプ  | サポートされている演算子 | 
| --- | --- | --- | 
|  シートデータ  |  文字列  | NA | 
| シートデータ |  Long  | "=" | 
| シートデータ | 整数 | NA | 
| シートデータ | DateTime | > | 

 **例** 

```
Smartsheet_read = glueContext.create_dynamic_frame.from_options(
    connection_type="smartsheet",
    connection_options={
        "connectionName": "connectionName",
        "ENTITY_NAME": "list-sheets",
        "API_VERSION": "2.0",
        "INSTANCE_URL": "https://api.smartsheet.com"
    }
```

# Smartsheet 接続オプション
<a name="smartsheet-connection-options"></a>

Smartsheet の接続オプションは次のとおりです。
+ `ENTITY_NAME`(文字列) – (必須) 読み取り / 書き込みに使用されます。Smartsheet 内のオブジェクトの名前。
+ `API_VERSION`(文字列) – (必須) 読み取り / 書き込みに使用されます。使用する Smartsheet Rest API バージョン。例: v2.0。
+ `INSTANCE_URL`(文字列) – (必須) 読み取りに使用されます。Smartsheet インスタンス URL。
+ `SELECTED_FIELDS`(List<String>) – Default: empty(SELECT \$1). 読み込みに使用されます。オブジェクトに選択する列です。
+ `FILTER_PREDICATE`(文字列) – デフォルト: 空 読み込みに使用されます。Spark SQL 形式である必要があります。
+ `QUERY`(文字列) – デフォルト: 空 読み込みに使用されます。完全な Spark SQL クエリです。

# Smartsheet アカウントの作成
<a name="smartsheet-create-account"></a>

1. [Smartsheet のサインアップページ](https://app.smartsheet.com/home)にアクセスして、スマートシートアカウントにサインアップします。

1. **[1 つ作成]** を選択して新しいアカウントを作成するか、登録した Google、Microsoft、または Apple アカウントを使用してサインインします。

1.   プロンプトが表示されたら、職場の E メールアドレスを入力します。  

1.   **[続行]** を選択し、必要に応じて ID を確認します。  

1. Smartsheet からの確認 E メールを開き、確認リンクを選択してアカウントを確認します。

   デフォルトでは、トライアルプランにサブスクライブされます。

1. 左下隅の **[アカウント]** アイコンを選択し、**[ライセンスの追加/アップグレード]** を選択して料金プランをアップグレードします。
**注記**  
これは、**[エンタープライズ]** プランのアドオンである **[イベントレポート]** にアクセスするために必要です。

1. **[エンタープライズ]** プランで、**[お問い合わせ]** を選択して、サポートチームにアカウントのアップグレードをリクエストします。

1. サポートリクエストフォームで、プランのアップグレードに必要な詳細と要件を入力します。

   これで **[エンタープライズ]** プランへのアップグレードは完了です。

**`OAuth2.0` 認証情報の作成**

1. **[デベロッパー用ツール]** にアクセスできるようにアカウントの料金プランをアップグレードしたら、[Smartsheet デベロッパー](https://developers.smartsheet.com/)にアクセスします。

   アクティベーション E メールが届きます。

1. Smartsheet からのアクティベーション E メールを開き、アクティベーションリンクを選択してアカウントでデベロッパー用ツールをアクティブ化します。

   デベロッパーツールを使用すると、アプリケーションを作成できます。

1. Smartsheet アカウントのホームページを開き、**[アカウント]** を選択して、アクセスをチェックします。

1. サービスリストから **[デベロッパー用ツール]** を選択し、**[デベロッパープロファイル]** の詳細を入力します。

1. **[新しいアプリの作成]** を選択します。

1. アプリ登録フォームに次の詳細を入力します。
   + **[名前]** – アプリケーションの名前。
   + **[説明]** – アプリケーションの説明。
   + **[URL]** – アプリを起動できる URL、またはランディングページの URL。
   + **[連絡先/サポート]** – サポートチームの連絡先情報。
   + **[リダイレクト URL]** – [OAuth 2.0 ](https://.console.aws.amazon.com/appflow/oauth)認証情報を受け取るアプリケーション内の URL (コールバック URL とも呼ばれます)。

1. **[保存]** を選択します。

   Smartsheet は、クライアント ID とクライアントシークレットをアプリに割り当てます。次のステップで、これらの値を記録します。**[デベロッパー用ツール]** セクションの後半で再度参照することもできます。

# 制限
<a name="smartsheet-connector-limitations"></a>

Smartsheet は、フィールドベースまたはレコードベースのパーティショニングをサポートしていません。

# AWS Glue Studio での Snapchat 広告への接続
<a name="connecting-to-data-snapchat-ads"></a>

 Snapchat は、元々 Snapchat Inc. であった Snap Inc. が開発したマルチメディアインスタントメッセージングアプリおよびサービスです。Snapchat の主な特長の 1 つは、写真やメッセージが通常は短い時間しか利用できず、受信者がその後アクセスできなくなるということです。Snapchat Marketing は、企業が料金を払うことで Snapchat ユーザーに出すことができる投稿です。

**Topics**
+ [AWS Glue の Snapchat 広告サポート](snapchat-ads-support.md)
+ [接続を作成および使用するための API オペレーションを含むポリシー](snapchat-ads-configuring-iam-permissions.md)
+ [Snapchat 広告の設定](snapchat-ads-configuring.md)
+ [Snapchat 広告接続の設定](snapchat-ads-configuring-connections.md)
+ [Snapchat 広告エンティティからの読み取り](snapchat-ads-reading-from-entities.md)
+ [Snapchat 広告の接続オプション](snapchat-ads-connection-options.md)
+ [Snapchat 広告アカウントの作成とクライアントアプリの設定](connecting-to-data-snapchat-ads-new-account.md)
+ [Snapchat 広告アカウントでのアプリの作成](connecting-to-data-snapchat-ads-managed-client-application.md)

# AWS Glue の Snapchat 広告サポート
<a name="snapchat-ads-support"></a>

AWS Glue は、次のように Snapchat 広告をサポートします:

**ソースとしてサポートされていますか?**  
はい。AWS Glue ETL ジョブを使用して、Snapchat 広告からデータをクエリできます。

**ターゲットとしてサポートされていますか?**  
いいえ。

**サポートされている Snapchat 広告 API のバージョン**  
 v1。

# 接続を作成および使用するための API オペレーションを含むポリシー
<a name="snapchat-ads-configuring-iam-permissions"></a>

 次のサンプル ポリシーで、接続の作成と使用に必要な AWS の権限について説明します。新しいロールを作成する場合は、以下を含むポリシーを作成します。

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

****  

```
{
  "Version":"2012-10-17",		 	 	 
  "Statement": [
    {
      "Effect": "Allow",
      "Action": [
        "glue:ListConnectionTypes",
        "glue:DescribeConnectionType",
        "glue:RefreshOAuth2Tokens",
        "glue:ListEntities",
        "glue:DescribeEntity"
      ],
      "Resource": "*"
    }
  ]
}
```

------

また、次のマネージド IAM ポリシーを使用して、アクセスを許可できます。
+  [ AWSGlueServiceRole ](https://console.aws.amazon.com/iam/home#policies/arn:aws:iam::aws:policy/service-role/AWSGlueServiceRole) – さまざまな AWS Glue プロセスを実行するために必要なリソースへのアクセス権をユーザーに代わって付与します。これらのリソースには、AWS Glue、Amazon S3、IAM、Amazon CloudWatch Logs および Amazon EC2 が含まれます。このポリシーで指定されたリソースの命名規則に従った場合、AWS Glue プロセスは必要なアクセス許可を使用できます。このポリシーは、通常、クローラー、ジョブ、開発エンドポイントを定義するときに指定されたロールにアタッチされます。
+  [ AWSGlueConsoleFullAccess ](https://console.aws.amazon.com/iam/home#policies/arn:aws:iam::aws:policy/AWSGlueConsoleFullAccess) — ポリシーがアタッチされているアイデンティティが AWS マネージメントコンソールを使用するときは、AWS Glue リソースへのフルアクセスを許可します。このポリシーで指定されたリソースの命名規則に従った場合、ユーザーは完全なコンソール機能を使用できます。このポリシーは、通常 AWS Glue コンソールのユーザーにアタッチされています。

# Snapchat 広告の設定
<a name="snapchat-ads-configuring"></a>

AWS Glue を使用して Snapchat 広告からデータを転送できるようにするには、次の要件を満たす必要があります:

## 最小要件
<a name="snapchat-ads-configuring-min-requirements"></a>
+  Snapchat 広告アカウントを持っている。アカウントの作成の詳細については、「[Snapchat 広告アカウントの作成とクライアントアプリの設定](connecting-to-data-snapchat-ads-new-account.md)」を参照してください。
+  Snapchat 広告アカウントに OAuth2 アプリを作成しました。この統合により、AWS Glue がお客様のアカウントに対して認証呼び出しを行うときに、お客様のデータに安全にアクセスするために使用する認証情報が提供されます。詳細については、「[Snapchat 広告アカウントでのアプリの作成](connecting-to-data-snapchat-ads-managed-client-application.md)」を参照してください。

 これらの要件を満たすと、Snapchat 広告アカウントに AWS Glue を接続する準備が整います。Snapchat 広告では、接続されたアプリは、AWS Glue などの外部アプリが Snapchat 広告データにアクセスすることを許可するフレームワークです。

# Snapchat 広告接続の設定
<a name="snapchat-ads-configuring-connections"></a>

 Snapchat 広告は、`AUTHORIZATION_CODE` グラントタイプのみをサポートします。

 このグラントタイプは、ユーザーを認証するためにサードパーティーの認証サーバーにユーザーをリダイレクトすることから、「three-legged」の OAuth と見なされます。AWS Glue コンソール経由で接続を作成するときに使用されます。接続を作成するユーザーは、デフォルトで AWS Glue 所有の接続アプリ (AWS Glue マネージドクライアントアプリケーション) に依存する場合があります。この場合、Snapchat 広告のインスタンス URL 以外の OAuth 関連情報を提供する必要はありません。AWS Glue コンソールでは、ユーザーが Snapchat 広告にリダイレクトされます。ここではユーザーがログインし、Snapchat 広告インスタンスにアクセスするためのリクエストされた権限を AWS Glue に許可する必要があります。

 ユーザーは、Snapchat 広告で独自の接続アプリを作成し、AWS Glue コンソールを介して接続を作成するときに独自のクライアント ID とクライアントシークレットを指定することを選択できます。このシナリオでは、引き続き Snapchat 広告にリダイレクトされてログインし、リソースにアクセスするために AWS Glue を承認します。

 このグラントタイプは、更新トークンとアクセストークンになります。このアクセストークンは、作成から 1 時間後に期限切れになります。新しいアクセストークンは、更新トークンを使用してフェッチできます。

 OAuth 認証コードフローでの接続されたアプリケーションの作成の詳細については、「[Ads API](https://marketingapi.snapchat.com/docs/#authentication)」を参照してください。

Snapchat 広告の接続を設定するには:

1.  AWS Secrets Manager で、次の詳細を含むシークレットを作成します。AWS Glue で接続ごとにシークレットを作成する必要があります。

   1.  カスタマーマネージド接続アプリケーションの場合 – シークレットには、`USER_MANAGED_CLIENT_APPLICATION_CLIENT_SECRET` を使用して接続されたアプリケーションのコンシューマーシークレットをキーとして含める必要があります。

1. AWS Glue Glue Studio で、以下の手順に従って **[データ接続]** の下に接続を作成します。

   1. **[接続タイプ]** を選択する際に、[Snapchat 広告] を選択します。

   1. Snapchat 広告の環境を指定します。

   1.  AWS Glue が次のアクションを担い、その権限を持つことができる IAM ロールを選択します。

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

****  

      ```
      {
        "Version":"2012-10-17",		 	 	 
        "Statement": [
          {
            "Effect": "Allow",
            "Action": [
              "secretsmanager:DescribeSecret",
              "secretsmanager:GetSecretValue",
              "secretsmanager:PutSecretValue",
              "ec2:CreateNetworkInterface",
              "ec2:DescribeNetworkInterfaces",
              "ec2:DeleteNetworkInterface"
            ],
            "Resource": "*"
          }
        ]
      }
      ```

------

   1.  AWS Glue でこの接続に使用する `secretName` を選択して、トークンを配置します。

   1.  ネットワークを使用する場合は、ネットワークオプションを選択します。

1.  AWS Glue ジョブに関連付けられている IAM ロールに `secretName` を読み取るアクセス許可を付与します。

# Snapchat 広告エンティティからの読み取り
<a name="snapchat-ads-reading-from-entities"></a>

 **前提条件** 
+  読み取り元の Snapchat 広告のオブジェクト。使用可能なエンティティを確認するには、以下のサポートされているエンティティの表を参照してください。

 **サポートされているエンティティ** 


| エンティティ | フィルタリング可能 | 制限をサポートする | Order By をサポートする | Select \$1 をサポートする | パーティション分割をサポートする | 
| --- | --- | --- | --- | --- | --- | 
| 組織 | なし | なし | なし | あり | なし | 
| Ad Account | なし | なし | なし | あり | なし | 
| Creative | なし | なし | なし | あり | なし | 
| メディア | なし | なし | なし | あり | なし | 
| キャンペーン | あり | なし | なし | あり | なし | 
| Ad Under Ad Account | あり | なし | なし | あり | なし | 
| Ad Under Campaign | なし | なし | なし | あり | なし | 
| Ad Squad | あり | なし | なし | あり | なし | 
| Segment | なし | なし | なし | あり | なし | 

 **例** 

```
snapchatads_read = glueContext.create_dynamic_frame.from_options(
    connection_type="snapchatAds",
    connection_options={
        "connectionName": "connectionName",
        "ENTITY_NAME": "organization",
        "API_VERSION": "v1"
    }
)
```

 **Snapchat 広告エンティティとフィールドの詳細** 

 Snapchat 広告は、選択したエンティティで使用可能なフィールドを動的にロードします。フィールドのデータ型に応じて、次のフィルター演算子がサポートされます。


| フィールドデータタイプ | サポートされているフィルター演算子 | 
| --- | --- | 
| ブール値 | = | 

 **パーティショニングクエリ** 
+  フィールドベースのパーティショニング: サポートされていません。
+  レコードベースのパーティショニング: サポートされていません。

# Snapchat 広告の接続オプション
<a name="snapchat-ads-connection-options"></a>

Snapchat 広告の接続オプションは次のとおりです:
+  `ENTITY_NAME` (文字列) – (必須) 読み取りに使用されます。Snapchat 広告エンティティの名前。例えば、` campaign ` などです。
+  `API_VERSION` (文字列) – (必須) 読み取りに使用されます。使用する Snapchat 広告の Rest API バージョン。Snapchat 広告は現在バージョン v1 のみをサポートしているため、この値は v1 になります。
+  `SELECTED_FIELDS`(List<String>) – Default: empty(SELECT \$1). 読み込みに使用されます。選択したエンティティに対して選択する列のカンマ区切りリスト。
+  `FILTER_PREDICATE`(文字列) – デフォルト: 空 読み込みに使用されます。Spark SQL 形式である必要があります。
+  `QUERY`(文字列) - デフォルト: 空 読み込みに使用されます。完全な Spark SQL クエリです。

# Snapchat 広告アカウントの作成とクライアントアプリの設定
<a name="connecting-to-data-snapchat-ads-new-account"></a>

**Topics**
+ [Snapchat 広告にサインアップする](#snapchat-ads-sign-up)
+ [Snapchat 広告アカウントを作成する手順](#snapchat-ads-create-ad-account)

## Snapchat 広告にサインアップする
<a name="snapchat-ads-sign-up"></a>

**Snapchat 広告にサインアップするには:**

1.  [Snapchat 広告マネージャ](https://ads.snapchat.com/)に移動します。**[New to Snapchat?]** の横にある **[Sign up]** を選択します。

1.  **[アカウントを作成]** 画面で、プロンプトに従ってビジネス名、E メール、パスワードなどを入力します。[**次へ**] を選択します。

1.  **[プロフィールを作成]** 画面で、ユーザー名、ウェブサイト (省略可) を入力し、**[アカウントを作成]** を選択します。これにより、**[Edit Your Profile]** 画面にプロフィール写真と自己紹介を追加するオプションが表示されます。**[確認]** を選択します。

1.  **[ビジネス情報]** 画面で、国、通貨、電話番号、GSTIN などの必須フィールドを入力し、**[次へ]** を選択してアカウント作成プロセスを完了します。

## Snapchat 広告アカウントを作成する手順
<a name="snapchat-ads-create-ad-account"></a>

**Snapchat 広告アカウントを作成するには:**

1.  **[広告マネージャ]** にログインします。次に、上部隅にあるナビゲーションをクリックし、**[Ad Accounts]** を選択します。

1.  **[\$1 New Ad Account]** を選択します。広告主の詳細を入力します: 
   +  広告主の代わりに広告を購入する代理業者であるかどうかを選択します。「Yes」を選択すると、年齢、性別、郵便番号レベルのターゲティングなどのターゲティングパラメータを使用する場合、広告が拒否される可能性があります。最低年齢のターゲティングは、最大 21 歳まで適用できます。
   +  広告アカウントが住宅、クレジット、雇用広告を実行するかどうかを選択します。「Yes」を選択すると、年齢、性別、郵便番号レベルのターゲティングなどのターゲティングパラメータを使用する場合、広告が拒否される可能性があります。最低年齢のターゲティングは、最大 21 歳まで適用できます。
   +  政治広告に広告アカウントを使用するかどうかを選択します。政治広告を運営している場合は、広告の支払いを行っているスポンサーの政治組織または支持団体を入力します。政治組織を正確に入力しないと、広告が拒否される可能性があります。また、広告を送信する前に、リンクされた必須の「Political Ad Review Form」を入力する必要があります。

1.  **[Account Details]** を選択し、広告アカウント情報を入力します:     
<a name="snapchat-ads-account-details"></a>[\[See the AWS documentation website for more details\]](http://docs.aws.amazon.com/ja_jp/glue/latest/dg/connecting-to-data-snapchat-ads-new-account.html)

1.  **[アカウントの作成]** を選択します。広告アカウントが作成され、広告マネージャの広告アカウント部分に表示されます。広告の掲載を開始するには、支払い方法を入力します。広告アカウントにメンバーを追加することもできます。

1.  既存の支払い方法を使用するか、新しい支払い方法を作成するかを選択します。次に、**[Save Payment Method]** を選択します。

1.  ビジネスに[招待したメンバー](https://businesshelp.snapchat.com/s/article/manage-members?language=en_US)を選択して、広告アカウントに追加します。割り当てることができるロールとアクセス許可の詳細については、「[Roles and Permissions Overview](https://businesshelp.snapchat.com/s/article/roles-permissions?language=en_US)」を参照してください。追加したメンバーは、広告マネージャにログインしてこの広告アカウントにアクセスできます。完了したら、メンバーを保存します。

 広告アカウントの詳細については、[https://businesshelp.snapchat.com/s/article/roles-permissions?language=en_US](https://businesshelp.snapchat.com/s/article/roles-permissions?language=en_US)https://businesshelp.snapchat.com/s/article/roles-permissions?language=en\$1US を参照してください。

# Snapchat 広告アカウントでのアプリの作成
<a name="connecting-to-data-snapchat-ads-managed-client-application"></a>

 Snapchat の Marketing API へのアクセスを有効にするには、ビジネスアカウントが設定されていることを確認してください。次に、下記のステップを実行します。

1.  広告マネージャにログインします。次に、左上隅のメニューを選択し、**[Business Dashboard]** を選択し、**[Business Details]** を選択します。

1.  **[\$1OAuth アプリ]** を選択します。

1.  アプリ名を入力し、次の URL を Snap Redirect URI `https://<aws-region>.console.aws.amazon.com/gluestudio/oauth` として追加します。例えば、us-west-1 リージョンを使用する場合、URL は `https://us-west-1.console.aws.amazon.com/gluestudio/oauth) and choose Create OAuth App` になります。**[Create OAuth App]** を選択します。

1.  アプリの認証情報 (クライアント ID とクライアントシークレット) が表示されます。認証情報を保存します。これは接続を作成する際に必要になります。

# AWS Glue Studio での Snowflake への接続
<a name="connecting-to-data-snowflake"></a>

**注記**  
 AWS Glue for Spark を使用して、AWS Glue 4.0 以降のバージョンの Snowflake のテーブルからの読み取りとテーブルへの書き込みを行うことができます。AWS Glue ジョブで Snowflake 接続をプログラム的に設定する方法については、「[Redshift 接続](aws-glue-programming-etl-connect-redshift-home.md)」を参照してください。

 AWS Glue には、Snowflake に対するサポートが組み込まれています。AWS Glue Studio には、Snowflake に接続してデータ統合ジョブをオーサリングし、AWS Glue Studio の Spark ランタイム上でジョブをサーバーレスで実行できる、ビジュアルインターフェイスが用意されています。

 AWS Glue Studio は Snowflake の統合接続を作成します。詳細については、「[考慮事項](using-connectors-unified-connections.md#using-connectors-unified-connections-considerations)」を参照してください。

**Topics**
+ [Snowflake 接続の作成](creating-snowflake-connection.md)
+ [Snowflake ソースノードの作成](creating-snowflake-source-node.md)
+ [Snowflake ターゲットノードの作成](creating-snowflake-target-node.md)
+ [詳細オプション](#creating-snowflake-connection-advanced-options)

# Snowflake 接続の作成
<a name="creating-snowflake-connection"></a>

**注記**  
 統合接続 (接続 v2) は、基本的な認証認証情報の `USERNAME`、`PASSWORD` キーを使用するようにすべての接続を標準化します。`sfUser`、`sfPassword` を含むシークレットを使用して、API 経由で v1 接続を作成することもできます。

 AWS Glue Studio で **データソース - Snowflake** ノードを追加するには、既存の AWS Glue Snowflake 接続を選択するか、新しい接続を作成します。Snowflake に接続するように設定された `JDBC` タイプの接続ではなく、`SNOWFLAKE` タイプの接続を選択する必要があります。次の手順に従って、AWS Glue Snowflake 接続を作成します。

**Snowflake 接続を作成するには**

1. Snowflake でユーザー *snowflakeUser* とパスワード *snowflakePassword* を作成します。

1. このユーザーが操作する Snowflake ウェアハウス *snowflakeWarehouse* を決定します。これを Snowflake の *snowflakeUser* の `DEFAULT_WAREHOUSE` として設定するか、次のステップのために覚えておきます。

1. AWS Secrets Manager で、Snowflake の認証情報を使用してシークレットを作成します。Secrets Manager でシークレットを作成するには、AWS Secrets Manager ドキュメントの「[AWS Secrets Manager シークレットを作成する](https://docs.aws.amazon.com/secretsmanager/latest/userguide/create_secret.html#create_secret_cli)」にあるチュートリアルに従ってください。シークレットを作成したら、次のステップのためにシークレット名 *secretName* を保存しておきます。
   + **[キー/値のペア]** をクリックして、`sfUser` キーを使用して *snowflakeUser* のペアを作成します。
   + **[キー/値のペア]** をクリックして、`sfPassword` キーを使用して *snowflakePassword* のペアを作成します。
   + **[キー/値のペア]** をクリックして、`sfWarehouse` キーを使用して *snowflakeWarehouse* のペアを作成します。Snowflake にデフォルト設定がある場合、これは必要ありません。

1. AWS Glue データカタログで、「[AWS Glue 接続の追加](https://docs.aws.amazon.com//glue/latest/dg/console-connections.html)」にある手順に従って接続を作成します。接続を作成したら、次のステップのために接続名 *connectionName* を保存しておきます。
   + **[接続タイプ]** をクリックして、[Snowflake] を選択します。
   + **[Snowflake URL]** をクリックして、Snowflake インスタンスのホスト名を指定します。URL では、`account_identifier.snowflakecomputing.com` という形式のホスト名を使用します。
   + **[AWS Secret]** をクリックして、*secretName* を入力します。

# Snowflake ソースノードの作成
<a name="creating-snowflake-source-node"></a>

## 必要となる許可
<a name="creating-snowflake-source-node-permissions"></a>

 Snowflake データソースを使用する AWS Glue Studio ジョブには追加の許可が必要です。ETL ジョブに許可を追加する方法の詳細については、「[ETL ジョブに必要な IAM アクセス許可を確認する](https://docs.aws.amazon.com/glue/latest/ug/setting-up.html#getting-started-min-privs-job)」を参照してください。

 `SNOWFLAKE` AWS Glue 接続は、AWS Secrets Manager シークレットを使用して認証情報を提供します。AWS Glue Studio のジョブおよびデータプレビューのロールには、このシークレットを読み取る許可が必要です。

## Snowflake データソースの追加
<a name="creating-snowflake-source-node-add"></a>

**前提条件**:
+ Snowflake 認証情報用の AWS Secrets Manager シークレット
+ Snowflake タイプの AWS Glue データカタログ接続

****データソース - Snowflake** ノードを追加するには**

1.  Snowflake データソースの接続を選択します。既に接続が存在していて、それらの接続から選択できることが前提です。接続の作成が必要な場合は、**[Create Snowflake connection]** をクリックします。詳細については、「[コネクタと接続の使用に関する概要](https://docs.aws.amazon.com/glue/latest/ug/connectors-chapter.html#using-connectors-overview)」を参照してください。

    接続を選択したあとは、**[プロパティを表示]** をクリックすると、接続のプロパティを表示できます。URL、セキュリティグループ、サブネット、アベイラビリティーゾーン、説明、作成時刻 (UTC) と最終更新時刻 (UTC) のタイムスタンプなど、接続についての情報が表示されます。

1.  Snowflake ソースオプションを選択します。
   +  **[Choose a single table]** - これは、単一の Snowflake テーブルからアクセスするデータを含むテーブルです。
   +  **[Enter custom query]** - カスタムクエリに基づき、Snowflake の複数のテーブルからデータセットにアクセスできます。

1.  単一のテーブルを選択した場合は、Snowflake スキーマの名前を入力します。

    または、**[カスタムクエリを入力]** を選択します。このオプションを選択すると、Snowflake の複数のテーブルからカスタムデータセットにアクセスできます。このオプションを選択した場合は、Snowflake クエリを入力します。

1.  **[パフォーマンスとセキュリティ]** (オプション) で、次を設定します。
   +  **[クエリプッシュダウンを有効化]** - Snowflake インスタンスに作業をオフロードするかどうかを選択します。

1.  **[カスタムの Snowflake プロパティ]** (オプション) で、必要に応じてパラメータと値を入力します。

# Snowflake ターゲットノードの作成
<a name="creating-snowflake-target-node"></a>

## 必要となる許可
<a name="creating-snowflake-target-node-permissions"></a>

 Snowflake データソースを使用する AWS Glue Studio ジョブには追加の許可が必要です。ETL ジョブに許可を追加する方法の詳細については、「[ETL ジョブに必要な IAM アクセス許可を確認する](https://docs.aws.amazon.com/glue/latest/ug/setting-up.html#getting-started-min-privs-job)」を参照してください。

 `SNOWFLAKE` AWS Glue 接続は、AWS Secrets Manager シークレットを使用して認証情報を提供します。AWS Glue Studio のジョブおよびデータプレビューのロールには、このシークレットを読み取る許可が必要です。

## Snowflake データターゲットの追加
<a name="creating-snowflake-target-node-add"></a>

**Snowflake ターゲットノードを作成するには**

1.  既存の Snowflake テーブルをターゲットとして選択するか、新しいテーブル名を入力します。

1.  **データターゲット - Snowflake** ターゲットノードを使用する場合、次のオプションから選択できます。
   +  **APPEND** — テーブルがすでに存在している場合は、新しいデータをテーブルにすべて挿入してダンプします。テーブルが存在しない場合は、新規にテーブルを作成し、そこに新しいデータをすべて挿入します。
   +  **MERGE** — 指定した条件に基づいて、AWS Glue がターゲットとなるテーブルのデータを更新するか、またはデータを追加します。

      [オプション] を選択します。
     + **キーと簡単なアクションの選択** — ソースデータとターゲットデータセットとの、マッチングキーとして使用する列を選択します。

       一致した場合、次のオプションを指定します。
       + ターゲットのデータセットにあるレコードを、ソースのデータで更新します。
       + ターゲットのデータセットにあるレコードを削除します。

       一致しない場合、次のオプションを指定します。
       + ターゲットのデータセットに、新しい行としてソースデータを挿入します。
       + 何もしない。
     + **カスタム MERGE ステートメントの入力** — その後 **[MERGE ステートメントの検証]** を選択し、ステートメントが有効か、無効かを検証できます。
   +  **TRUNCATE** — 既にテーブルが存在している場合は、ターゲットのテーブルの内容を削除してから、ターゲットのテーブルを削除します。削除が成功してから、すべてのデータを挿入します。テーブルが存在していない場合、テーブルを作成し、すべてのデータを挿入します。削除が成功しなかった場合、操作は失敗します。
   +  **DROP** — 既にテーブルが存在している場合は、テーブルのメタデータとデータを削除します。削除が成功してから、すべてのデータを挿入します。テーブルが存在していない場合、テーブルを作成し、すべてのデータを挿入します。削除が成功しなかった場合、操作は失敗します。

## 詳細オプション
<a name="creating-snowflake-connection-advanced-options"></a>

「AWS Glue デベロッパーガイド」の「[Snowflake connections](https://docs.aws.amazon.com//glue/latest/dg/aws-glue-programming-etl-connect-snowflake-home.html)」を参照してください。

# AWS Glue Studio での Stripe への接続
<a name="connecting-to-data-stripe"></a>

 Stripe は、ビジネス向けのオンライン支払い処理およびクレジットカード処理のプラットフォームです。Stripe プラットフォームを使用すると、企業はオンライン支払いを受け取り、電子商取引のサブスクリプション (定期請求) を作成し、支払いを受け取るようにアカウントを設定できます。Stripe は、マルチパーティー支払いにも対応しており、企業がマーケットプレイスをセットアップして支払いを回収し、「接続済み」アカウントを通じて販売者またはサービスプロバイダーに支払うことができます。

**Topics**
+ [AWS Glue による Stripe サポート](stripe-support.md)
+ [接続を作成および使用するための API オペレーションを含むポリシー](stripe-configuring-iam-permissions.md)
+ [Stripe の設定](stripe-configuring.md)
+ [Stripe 接続の設定](stripe-configuring-connections.md)
+ [Stripe エンティティからの読み取り](stripe-reading-from-entities.md)
+ [Stripe 接続オプション](stripe-connection-options.md)
+ [制限](stripe-limitations.md)
+ [新しい Stripe アカウントの作成とクライアントアプリの設定](stripe-new-account-creation.md)

# AWS Glue による Stripe サポート
<a name="stripe-support"></a>

AWS Glue は、Stripe を次のようにサポートします:

**ソースとしてサポートされていますか?**  
はい。AWS Glue ETL ジョブを使用して、Stripe からデータをクエリできます。

**ターゲットとしてサポートされていますか?**  
いいえ。

**サポートされている Slack API のバージョン**  
 v1。

# 接続を作成および使用するための API オペレーションを含むポリシー
<a name="stripe-configuring-iam-permissions"></a>

 次のサンプル ポリシーで、接続の作成と使用に必要な IAM 権限について説明します。新しいロールを作成する場合は、以下を含むポリシーを作成します。

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

****  

```
{
  "Version":"2012-10-17",		 	 	 
  "Statement": [
    {
      "Effect": "Allow",
      "Action": [
        "glue:ListConnectionTypes",
        "glue:DescribeConnectionType",
        "glue:RefreshOAuth2Tokens",
        "glue:ListEntities",
        "glue:DescribeEntity"
      ],
      "Resource": "*"
    }
  ]
}
```

------

また、次のマネージド IAM ポリシーを使用して、アクセスを許可できます。
+  [ AWSGlueServiceRole ](https://console.aws.amazon.com/iam/home#policies/arn:aws:iam::aws:policy/service-role/AWSGlueServiceRole) – さまざまな AWS Glue プロセスを実行するために必要なリソースへのアクセス権をユーザーに代わって付与します。これらのリソースには、AWS Glue、Amazon S3、IAM、Amazon CloudWatch Logs および Amazon EC2 が含まれます。このポリシーで指定されたリソースの命名規則に従った場合、AWS Glue プロセスは必要なアクセス許可を使用できます。このポリシーは、通常、クローラー、ジョブ、開発エンドポイントを定義するときに指定されたロールにアタッチされます。
+  [ AWSGlueConsoleFullAccess ](https://console.aws.amazon.com/iam/home#policies/arn:aws:iam::aws:policy/AWSGlueConsoleFullAccess) — ポリシーがアタッチされているアイデンティティが AWS マネージメントコンソールを使用するときは、AWS Glue リソースへのフルアクセスを許可します。このポリシーで指定されたリソースの命名規則に従った場合、ユーザーは完全なコンソール機能を使用できます。このポリシーは、通常 AWS Glue コンソールのユーザーにアタッチされています。

# Stripe の設定
<a name="stripe-configuring"></a>

AWS Glue を使用して Stripe からデータを転送できるようにするには、次の要件を満たす必要があります:

## 最小要件
<a name="stripe-configuring-min-requirements"></a>
+  E メールとパスワードが設定されている Stripe アカウントを持っていること。詳細については、「[新しい Stripe アカウントの作成とクライアントアプリの設定](stripe-new-account-creation.md)」を参照してください。
+  Stripe アカウントで API アクセスが有効になっていること。Stripe API の使用はすべて追加料金なしで利用できます。

 これらの要件を満たすと、Stripe アカウントに AWS Glue を接続する準備が整います。

# Stripe 接続の設定
<a name="stripe-configuring-connections"></a>

 Stripe はカスタム認証をサポートしています。カスタム認可に必要な API キーの生成の詳細については、[STRIPE REST API のドキュメント](https://docs.stripe.com/api/authentication)を参照してください。

Stripe 接続を設定するには:

1.  AWS Secrets Manager で、次の詳細を含むシークレットを作成します。AWS Glue で接続ごとにシークレットを作成する必要があります。

   1.  カスタマーマネージド接続アプリケーションの場合 – シークレットには、`USER_MANAGED_CLIENT_APPLICATION_CLIENT_SECRET` を使用して接続されたアプリケーションのコンシューマーシークレットをキーとして含める必要があります。

1. AWS Glue Glue Studio で、以下の手順に従って **[データ接続]** の下に接続を作成します。

   1. **[接続タイプ]** を選択する際に、[Stripe] を選択します。

   1.  AWS Glue が次のアクションを担い、その権限を持つことができる IAM ロールを選択します。

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

****  

      ```
      {
        "Version":"2012-10-17",		 	 	 
        "Statement": [
          {
            "Effect": "Allow",
            "Action": [
              "secretsmanager:DescribeSecret",
              "secretsmanager:GetSecretValue",
              "secretsmanager:PutSecretValue",
              "ec2:CreateNetworkInterface",
              "ec2:DescribeNetworkInterfaces",
              "ec2:DeleteNetworkInterface"
            ],
            "Resource": "*"
          }
        ]
      }
      ```

------

   1.  AWS Glue でこの接続に使用する `secretName` を選択して、トークンを配置します。

   1.  ネットワークを使用する場合は、ネットワークオプションを選択します。

1.  AWS Glue ジョブに関連付けられている IAM ロールに `secretName` を読み取るアクセス許可を付与します。

# Stripe エンティティからの読み取り
<a name="stripe-reading-from-entities"></a>

 **前提条件** 
+  読み取り元の Stripe オブジェクト。

 **サポートされているエンティティ** 


| エンティティ | フィルタリング可能 | 制限をサポートする | Order By をサポートする | Select \$1 をサポートする | パーティション分割をサポートする | 
| --- | --- | --- | --- | --- | --- | 
| Balance | なし | なし | なし | あり | なし | 
| Balance Transactions | はい | あり | なし | あり | あり | 
| 料金 | はい | あり | なし | あり | あり | 
| Disputes | はい | あり | なし | あり | あり | 
| File Links | はい | あり | なし | あり | あり | 
| PaymentIntents | はい | あり | なし | あり | あり | 
| SetupIntents | はい | あり | なし | あり | あり | 
| Payouts | はい | あり | なし | あり | あり | 
| Refunds | はい | あり | なし | あり | あり | 
| 製品 | はい | あり | なし | あり | あり | 
| Prices | はい | あり | なし | あり | あり | 
| Coupons | はい | あり | なし | あり | あり | 
| Promotion Codes | はい | あり | なし | あり | あり | 
| Tax Codes | なし | あり | なし | あり | なし | 
| Tax Rates | はい | あり | なし | あり | あり | 
| Shipping Rates | はい | あり | なし | あり | あり | 
| セッション | はい | あり | なし | あり | あり | 
| Credit Notes | はい | あり | なし | あり | あり | 
| お客様 | はい | あり | なし | あり | あり | 
| 請求書 | はい | あり | なし | あり | あり | 
| Invoice Items | はい | あり | なし | あり | なし | 
| プラン | はい | あり | なし | あり | あり | 
| Quotes | はい | あり | なし | あり | なし | 
| サブスクリプション | はい | あり | なし | あり |  | 
| Subscription Items | なし | あり | なし | あり | なし | 
| Subscription Schedules | はい | あり | なし | あり | あり | 
| アカウント | なし | あり | なし | あり | あり | 
| Application Fees | はい | あり | なし | あり | あり | 
| Country Specs | なし | あり | なし | あり | なし | 
| 転送 | はい | あり | なし | あり | あり | 
| Early Fraud Warnings | はい | あり | なし | あり | あり | 
| レポートタイプ | なし | なし | なし | あり | なし | 

 **例** 

```
stripe_read = glueContext.create_dynamic_frame.from_options(
    connection_type="stripe",
    connection_options={
        "connectionName": "connectionName",
        "ENTITY_NAME": "coupons",
        "API_VERSION": "v1"
    }
)
```

 **ストライプエンティティとフィールドの詳細** 


| エンティティ | フィールド | データタイプ | サポートされている演算子 | 
| --- | --- | --- | --- | 
| Balance |  |  |  | 
|  | 使用可能 | リスト |  | 
|  | connect\$1reserved | リスト |  | 
|  | 保留中 | リスト |  | 
|  | livemode | ブール値 |  | 
|  | オブジェクト | 文字列 |  | 
|  | instant\$1available | リスト |  | 
|  | issuing | Struct |  | 
| Balance Transactions |  |  |  | 
|  | id | 文字列 |  | 
|  | オブジェクト | 文字列 |  | 
|  | amount | 整数 |  | 
|  | available\$1on | DateTime | =, >=, <=,<,> | 
|  | 作成済み | DateTime | =, >=, <=,<,> | 
|  | currency | 文字列 |  | 
|  | description | 文字列 |  | 
|  | exchange\$1rate | BigDecimal |  | 
|  | fee | 整数 |  | 
|  | fee\$1details | リスト |  | 
|  | net | 整数 |  | 
|  | reporting\$1category | 文字列 |  | 
|  | ソース | 文字列 | = | 
|  | ステータス | 文字列 |  | 
|  | type | 文字列 | = | 
|  | cross\$1border\$1classification | 文字列 |  | 
| 料金 |  |  |  | 
|  | id | 文字列 |  | 
|  | オブジェクト | 文字列 |  | 
|  | amount | 整数 | =, <, > | 
|  | amount\$1captured | 整数 |  | 
|  | amount\$1refunded | 整数 |  | 
|  | アプリケーション | 文字列 |  | 
|  | application\$1fee | 文字列 |  | 
|  | application\$1fee\$1amount | 整数 |  | 
|  | balance\$1transaction | 文字列 |  | 
|  | billing\$1details | Struct |  | 
|  | calculated\$1statement\$1descriptor | 文字列 |  | 
|  | captured | ブール値 |  | 
|  | 作成済み | DateTime | =, >=, <=,<,> | 
|  | currency | 文字列 |  | 
|  | カスタマー | 文字列 | = | 
|  | description | 文字列 |  | 
|  | destination | 文字列 |  | 
|  | dispute | 文字列 |  | 
|  | disputed | ブール値 | = | 
|  | failure\$1balance\$1transaction | 文字列 |  | 
|  | failure\$1code | 文字列 |  | 
|  | failure\$1message | 文字列 |  | 
|  | fraud\$1details | Struct |  | 
|  | 請求書 | 文字列 |  | 
|  | livemode | ブール値 |  | 
|  | metadata | Struct |  | 
|  | on\$1behalf\$1of | 文字列 |  | 
|  | order | 文字列 |  | 
|  | outcome | Struct |  | 
|  | paid | ブール値 |  | 
|  | payment\$1intent | 文字列 | = | 
|  | payment\$1method | 文字列 |  | 
|  | payment\$1method\$1details | Struct |  | 
|  | receipt\$1email | 文字列 |  | 
|  | receipt\$1number | 文字列 |  | 
|  | receipt\$1url | 文字列 |  | 
|  | refunded | ブール値 | = | 
|  | 返金 | Struct |  | 
|  | 確認 | 文字列 |  | 
|  | shipping | Struct |  | 
|  | ソース | Struct |  | 
|  | source\$1transfer | 文字列 |  | 
|  | statement\$1descriptor | 文字列 |  | 
|  | statement\$1descriptor\$1suffix | 文字列 |  | 
|  | ステータス | 文字列 |  | 
|  | 移管 | 文字列 |  | 
|  | transfer\$1data | Struct |  | 
|  | transfer\$1group | 文字列 | = | 
| Disputes |  |  |  | 
|  | id | 文字列 |  | 
|  | オブジェクト | 文字列 |  | 
|  | amount | 整数 | =, <, > | 
|  | balance\$1transaction | 文字列 |  | 
|  | balance\$1transactions | リスト |  | 
|  | 料金 | 文字列 | = | 
|  | 作成済み | DateTime | =, >=, <=,<,> | 
|  | currency | 文字列 |  | 
|  | evidence | Struct |  | 
|  | evidence\$1details | Struct |  | 
|  | is\$1charge\$1refundable | ブール値 |  | 
|  | livemode | ブール値 |  | 
|  | metadata | Struct |  | 
|  | payment\$1intent | 文字列 | = | 
|  | 理由 | 文字列 | = | 
|  | ステータス | 文字列 |  | 
|  | payment\$1method\$1details | Struct |  | 
| File Links |  |  |  | 
|  | id | 文字列 |  | 
|  | オブジェクト | 文字列 |  | 
|  | 作成済み | DateTime | =, >=, <=,<,> | 
|  | expired | ブール値 | = | 
|  | expires\$1at | DateTime |  | 
|  | ファイル | 文字列 | = | 
|  | livemode | ブール値 |  | 
|  | metadata | Struct |  | 
|  | url | 文字列 |  | 
| PaymentIntents |  |  |  | 
|  | id | 文字列 |  | 
|  | オブジェクト | 文字列 |  | 
|  | amount | 整数 |  | 
|  | amount\$1capturable | 整数 |  | 
|  | amount\$1details | Struct |  | 
|  | amount\$1received | 整数 |  | 
|  | アプリケーション | 文字列 |  | 
|  | application\$1fee\$1amount | 整数 |  | 
|  | automatic\$1payment\$1methods | Struct |  | 
|  | cancelled\$1at | DateTime |  | 
|  | cancellation\$1reason | 文字列 |  | 
|  | capture\$1method | 文字列 |  | 
|  | client\$1secret | 文字列 |  | 
|  | confirmation\$1method | 文字列 |  | 
|  | 作成済み | DateTime | =, >=, <=,<,> | 
|  | currency | 文字列 |  | 
|  | カスタマー | 文字列 | = | 
|  | description | 文字列 |  | 
|  | 請求書 | 文字列 |  | 
|  | last\$1payment\$1error | Struct |  | 
|  | latest\$1charge | 文字列 |  | 
|  | livemode | ブール値 |  | 
|  | metadata | Struct |  | 
|  | next\$1action | Struct |  | 
|  | on\$1behalf\$1of | 文字列 |  | 
|  | payment\$1method | 文字列 |  | 
|  | payment\$1method\$1options | Struct |  | 
|  | payment\$1method\$1types | リスト |  | 
|  | payment\$1method\$1configuration\$1details | Struct |  | 
|  | 処理 | Struct |  | 
|  | receipt\$1email | 文字列 |  | 
|  | 確認 | 文字列 |  | 
|  | setup\$1future\$1usage | 文字列 |  | 
|  | shipping | Struct |  | 
|  | ソース | 文字列 |  | 
|  | statement\$1descriptor | 文字列 |  | 
|  | statement\$1descriptor\$1suffix | 文字列 |  | 
|  | ステータス | 文字列 |  | 
|  | transfer\$1data | Struct |  | 
|  | transfer\$1group | 文字列 |  | 
| SetupIntents |  |  |  | 
|  | id | 文字列 |  | 
|  | オブジェクト | 文字列 |  | 
|  | アプリケーション | 文字列 |  | 
|  | cancellation\$1reason | 文字列 |  | 
|  | client\$1secret | 文字列 |  | 
|  | 作成済み | DateTime | =, >=, <=,<,> | 
|  | カスタマー | 文字列 | = | 
|  | description | 文字列 |  | 
|  | flow\$1directions | リスト |  | 
|  | last\$1setup\$1error | Struct |  | 
|  | latest\$1attempt | 文字列 |  | 
|  | livemode | ブール値 |  | 
|  | mandate | 文字列 |  | 
|  | metadata | Struct |  | 
|  | next\$1action | Struct |  | 
|  | on\$1behalf\$1of | 文字列 |  | 
|  | payment\$1method | 文字列 |  | 
|  | payment\$1method\$1options | Struct |  | 
|  | payment\$1method\$1types | リスト |  | 
|  | single\$1use\$1mandate | 文字列 |  | 
|  | ステータス | 文字列 |  | 
|  | 使用 | 文字列 |  | 
|  | automatic\$1payment\$1methods | Struct |  | 
| Payouts |  |  |  | 
|  | id | 文字列 |  | 
|  | オブジェクト | 文字列 |  | 
|  | amount | 整数 | =, <, > | 
|  | arrival\$1date | DateTime | =, >=, <=,<,> | 
|  | automatic | ブール値 |  | 
|  | balance\$1transaction | 文字列 |  | 
|  | 作成済み | DateTime | =, >=, <=,<,> | 
|  | currency | 文字列 |  | 
|  | description | 文字列 | = | 
|  | destination | 文字列 |  | 
|  | failure\$1balance\$1transaction | 文字列 |  | 
|  | failure\$1code | 文字列 |  | 
|  | failure\$1message | 文字列 |  | 
|  | livemode | ブール値 |  | 
|  | metadata | Struct |  | 
|  | method | 文字列 |  | 
|  | original\$1payout | 文字列 |  | 
|  | reversed\$1by | 文字列 |  | 
|  | reconciliation\$1status | 文字列 |  | 
|  | source\$1type | 文字列 |  | 
|  | statement\$1descriptor | 文字列 |  | 
|  | ステータス | 文字列 |  | 
|  | type | 文字列 |  | 
|  | application\$1fee | 文字列 |  | 
|  | application\$1fee\$1amount | 整数 |  | 
| Refunds |  |  |  | 
|  | id | 文字列 |  | 
|  | オブジェクト | 文字列 |  | 
|  | amount | 整数 |  | 
|  | balance\$1transaction | 文字列 |  | 
|  | 料金 | 文字列 | = | 
|  | 作成済み | DateTime | =, >=, <=,<,> | 
|  | currency | 文字列 |  | 
|  | metadata | Struct |  | 
|  | destination\$1details | Struct |  | 
|  | payment\$1intent | 文字列 | = | 
|  | 理由 | 文字列 |  | 
|  | receipt\$1number | 文字列 |  | 
|  | source\$1transfer\$1reversal | 文字列 |  | 
|  | ステータス | 文字列 |  | 
|  | transfer\$1reversal | 文字列 |  | 
| 製品 |  |  |  | 
|  | id | 文字列 |  | 
|  | オブジェクト | 文字列 |  | 
|  | ACTIVE | ブール値 | = | 
|  | 属性 | リスト |  | 
|  | 作成済み | DateTime | =, >=, <=,<,> | 
|  | default\$1price | 文字列 |  | 
|  | description | 文字列 |  | 
|  | 画像 | リスト |  | 
|  | livemode | ブール値 |  | 
|  | metadata | Struct |  | 
|  | 名前 | 文字列 |  | 
|  | package\$1dimensions | Struct |  | 
|  | shippable | ブール値 |  | 
|  | statement\$1descriptor | 文字列 |  | 
|  | tax\$1code | 文字列 |  | 
|  | type | 文字列 | = | 
|  | unit\$1label | 文字列 |  | 
|  | 更新済み | DateTime |  | 
|  | url | 文字列 |  | 
|  | 機能 | リスト |  | 
| Prices |  |  |  | 
|  | id | 文字列 |  | 
|  | オブジェクト | 文字列 |  | 
|  | ACTIVE | ブール値 | = | 
|  | billing\$1scheme | 文字列 |  | 
|  | 作成済み | DateTime | =, >=, <=,<,> | 
|  | currency | 文字列 | = | 
|  | custom\$1unit\$1amount | Struct |  | 
|  | livemode | ブール値 |  | 
|  | lookup\$1key | 文字列 |  | 
|  | metadata | Struct |  | 
|  | nickname | 文字列 |  | 
|  | product | 文字列 | = | 
|  | recurring | Struct |  | 
|  | tax\$1behavior | 文字列 |  | 
|  | tiers\$1mode | 文字列 |  | 
|  | transform\$1quantity | Struct |  | 
|  | type | 文字列 | = | 
|  | unit\$1amount | 整数 |  | 
|  | unit\$1amount\$1decimal | 文字列 |  | 
| Coupons |  |  |  | 
|  | ID | 文字列 |  | 
|  | オブジェクト | 文字列 |  | 
|  | amount\$1off | 整数 |  | 
|  | 作成済み | DateTime | =, >=, <=,<,> | 
|  | currency | 文字列 | = | 
|  | duration | 文字列 | = | 
|  | duration\$1in\$1months | 整数 | =,<,> | 
|  | livemode | ブール値 |  | 
|  | max\$1redemptions | 整数 | =, <, > | 
|  | metadata | Struct |  | 
|  | 名前 | 文字列 |  | 
|  | percent\$1off | 倍精度 | = | 
|  | redeem\$1by | DateTime | =, >=, <=, <, > | 
|  | times\$1redeemed | 整数 |  | 
|  | valid | ブール値 |  | 
| Promotion Codes |  |  |  | 
|  | ID | 文字列 |  | 
|  | オブジェクト | 文字列 |  | 
|  | ACTIVE | ブール値 | = | 
|  | コード | 文字列 | = | 
|  | coupon | Struct |  | 
|  | 作成済み | DateTime | =,>=,<=,<,> | 
|  | カスタマー | 文字列 |  | 
|  | expires\$1at | DateTime |  | 
|  | livemode | ブール値 |  | 
|  | max\$1redemptions | 整数 |  | 
|  | metadata | Struct |  | 
|  | 制限 | Struct |  | 
|  | times\$1redeemed | 整数 |  | 
| Tax Codes |  |  |  | 
|  | ID | 文字列 |  | 
|  | オブジェクト | 文字列 |  | 
|  | description | 文字列 |  | 
|  | 名前 | 文字列 |  | 
| Tax Rates |  |  |  | 
|  | ID | 文字列 |  | 
|  | オブジェクト | 文字列 |  | 
|  | ACTIVE | ブール値 | = | 
|  | country | 文字列 |  | 
|  | 作成済み | DateTime | =, >=, <=, <, > | 
|  | description | 文字列 |  | 
|  | display\$1name | 文字列 |  | 
|  | inclusive | ブール値 | = | 
|  | jurisdiction | 文字列 |  | 
|  | jurisdiction\$1level | 文字列 |  | 
|  | livemode | ブール値 |  | 
|  | metadata | Struct |  | 
|  | 割合(%) | 倍精度 |  | 
|  | effective\$1percentage | 倍精度 |  | 
|  | state | 文字列 |  | 
|  | tax\$1type | 文字列 |  | 
| Shipping Rates |  |  |  | 
|  | ID | 文字列 |  | 
|  | オブジェクト | 文字列 |  | 
|  | ACTIVE | ブール値 | = | 
|  | 作成済み | DateTime | =, >=, <=, <, > | 
|  | delivery\$1estimate | Struct |  | 
|  | display\$1name | 文字列 |  | 
|  | fixed\$1amount | Struct |  | 
|  | livemode | ブール値 |  | 
|  | metadata | Struct |  | 
|  | tax\$1behavior | 文字列 |  | 
|  | tax\$1code | 文字列 |  | 
|  | type | 文字列 |  | 
| セッション |  |  |  | 
|  | id | 文字列 |  | 
|  | オブジェクト | 文字列 |  | 
|  | after\$1expiration | Struct |  | 
|  | allow\$1promotion\$1codes | ブール値 |  | 
|  | amount\$1subtotal | 整数 |  | 
|  | amount\$1total | 整数 |  | 
|  | automatic\$1tax | Struct |  | 
|  | billing\$1address\$1collection | 文字列 |  | 
|  | cancel\$1url | 文字列 |  | 
|  | client\$1reference\$1id | 文字列 |  | 
|  | consent | Struct |  | 
|  | consent\$1collection | Struct |  | 
|  | 作成済み | DateTime | =, >=, <=, <, > | 
|  | currency | 文字列 |  | 
|  | custom\$1text | Struct |  | 
|  | カスタマー | 文字列 |  | 
|  | customer\$1creation | 文字列 |  | 
|  | customer\$1details | Struct |  | 
|  | customer\$1email | 文字列 |  | 
|  | expires\$1at | DateTime |  | 
|  | 請求書 | 文字列 |  | 
|  | invoice\$1creation | Struct |  | 
|  | livemode | ブール値 |  | 
|  | サイト | 文字列 |  | 
|  | metadata | Struct |  | 
|  | モード | 文字列 |  | 
|  | payment\$1intent | 文字列 | = | 
|  | payment\$1link | 文字列 |  | 
|  | payment\$1method\$1collection | 文字列 |  | 
|  | payment\$1method\$1options | Struct |  | 
|  | payment\$1method\$1types | リスト |  | 
|  | payment\$1status | 文字列 |  | 
|  | phone\$1number\$1collection | Struct |  | 
|  | recovered\$1from | 文字列 |  | 
|  | setup\$1intent | 文字列 |  | 
|  | shipping\$1address\$1collection | Struct |  | 
|  | shipping\$1cost | Struct |  | 
|  | shipping\$1details | Struct |  | 
|  | shipping\$1options | リスト |  | 
|  | ステータス | 文字列 |  | 
|  | submit\$1type | 文字列 |  | 
|  | サブスクリプション | 文字列 |  | 
|  | success\$1url | 文字列 |  | 
|  | tax\$1id\$1collection | Struct |  | 
|  | total\$1details | Struct |  | 
|  | url | 文字列 |  | 
|  | ui\$1mode | 文字列 |  | 
| Credit Notes |  |  |  | 
|  | id | 文字列 |  | 
|  | オブジェクト | 文字列 |  | 
|  | amount | 整数 |  | 
|  | 作成済み | DateTime | =, >=, <=, <, > | 
|  | currency | 文字列 |  | 
|  | カスタマー | 文字列 | = | 
|  | customer\$1balance\$1transaction | 文字列 |  | 
|  | discount\$1amount | 整数 |  | 
|  | discount\$1amounts | リスト |  | 
|  | 請求書 | 文字列 | = | 
|  | lines | Struct |  | 
|  | livemode | ブール値 |  | 
|  | memo | 文字列 |  | 
|  | metadata | Struct |  | 
|  | 数値 | 文字列 |  | 
|  | out\$1of\$1band\$1amount | 整数 |  | 
|  | pdf | 文字列 |  | 
|  | 理由 | 文字列 |  | 
|  | refund | 文字列 |  | 
|  | ステータス | 文字列 |  | 
|  | subtotal | 整数 |  | 
|  | subtotal\$1excluding\$1tax | 整数 |  | 
|  | tax\$1amounts | リスト |  | 
|  | total | 整数 |  | 
|  | total\$1excluding\$1tax | 整数 |  | 
|  | type | 文字列 |  | 
|  | voided\$1at | DateTime |  | 
|  | amount\$1shipping | 整数 |  | 
|  | effective\$1at | DateTime |  | 
|  | shipping\$1cost | Struct |  | 
| お客様 |  |  |  | 
|  | id | 文字列 |  | 
|  | オブジェクト | 文字列 |  | 
|  | アドレス | Struct |  | 
|  | balance | 整数 |  | 
|  | 作成済み | DateTime |  | 
|  | currency | 文字列 | =, >=, <=, <, > | 
|  | default\$1source | 文字列 |  | 
|  | delinquent | ブール値 | = | 
|  | description | 文字列 |  | 
|  | discount | Struct |  | 
|  | email | 文字列 | = | 
|  | invoice\$1prefix | 文字列 |  | 
|  | invoice\$1settings | Struct |  | 
|  | livemode | ブール値 |  | 
|  | metadata | Struct |  | 
|  | 名前 | 文字列 |  | 
|  | next\$1invoice\$1sequence | 整数 |  | 
|  | phone | 文字列 |  | 
|  | preferred\$1locales | リスト |  | 
|  | shipping | Struct |  | 
|  | tax\$1exempt | 文字列 |  | 
|  | test\$1clock | 文字列 |  | 
| 請求書 |  |  |  | 
|  | id | 文字列 |  | 
|  | オブジェクト | 文字列 |  | 
|  | account\$1country | 文字列 |  | 
|  | account\$1name | 文字列 |  | 
|  | account\$1tax\$1ids | リスト |  | 
|  | amount\$1due | 整数 |  | 
|  | amount\$1paid | 整数 |  | 
|  | amount\$1remaining | 整数 |  | 
|  | アプリケーション | 文字列 |  | 
|  | application\$1fee\$1amount | 整数 |  | 
|  | attempt\$1count | 整数 |  | 
|  | attempted | ブール値 | = | 
|  | auto\$1advance | ブール値 | = | 
|  | automatic\$1tax | Struct |  | 
|  | billing\$1reason | 文字列 |  | 
|  | 料金 | 文字列 |  | 
|  | collection\$1method | 文字列 | = | 
|  | 作成済み | DateTime | =, >=, <=, <, > | 
|  | currency | 文字列 |  | 
|  | custom\$1fields | リスト |  | 
|  | カスタマー | 文字列 | = | 
|  | customer\$1address | Struct |  | 
|  | customer\$1email | 文字列 |  | 
|  | customer\$1name | 文字列 |  | 
|  | customer\$1phone | 文字列 |  | 
|  | customer\$1shipping | Struct |  | 
|  | customer\$1tax\$1exempt | 文字列 |  | 
|  | customer\$1tax\$1ids | リスト |  | 
|  | default\$1payment\$1method | 文字列 |  | 
|  | default\$1source | 文字列 |  | 
|  | default\$1tax\$1rates | リスト |  | 
|  | description | 文字列 |  | 
|  | discount | Struct |  | 
|  | discounts | リスト |  | 
|  | due\$1date | DateTime | =, >=, <=, <, > | 
|  | ending\$1balance | 整数 |  | 
|  | footer | 文字列 |  | 
|  | from\$1invoice | Struct |  | 
|  | hosted\$1invoice\$1url | 文字列 |  | 
|  | invoice\$1pdf | 文字列 |  | 
|  | last\$1finalization\$1error | Struct |  | 
|  | latest\$1revision | 文字列 |  | 
|  | lines | Struct |  | 
|  | livemode | ブール値 |  | 
|  | metadata | Struct |  | 
|  | next\$1payment\$1attempt | DateTime |  | 
|  | 数値 | 文字列 |  | 
|  | on\$1behalf\$1of | 文字列 |  | 
|  | paid | ブール値 | = | 
|  | paid\$1out\$1of\$1band | ブール値 |  | 
|  | payment\$1intent | 文字列 |  | 
|  | payment\$1settings | Struct |  | 
|  | period\$1end | DateTime | =, >=, <=, <, > | 
|  | period\$1start | DateTime | =, >=, <=, <, > | 
|  | post\$1payment\$1credit\$1notes\$1amount | 整数 |  | 
|  | pre\$1payment\$1credit\$1notes\$1amount | 整数 |  | 
|  | quote | 文字列 |  | 
|  | receipt\$1number | 文字列 |  | 
|  | rendering | Struct |  | 
|  | rendering\$1options | Struct |  | 
|  | starting\$1balance | 整数 |  | 
|  | statement\$1descriptor | 文字列 |  | 
|  | ステータス | 文字列 | = | 
|  | status\$1transitions | Struct |  | 
|  | サブスクリプション | 文字列 |  | 
|  | subscription\$1details | Struct |  | 
|  | subtotal | 整数 | =, <, > | 
|  | subtotal\$1excluding\$1tax | 整数 |  | 
|  | tax | 整数 |  | 
|  | test\$1clock | 文字列 |  | 
|  | total | 整数 | =, <, > | 
|  | total\$1discount\$1amounts | リスト |  | 
|  | total\$1excluding\$1tax | 整数 |  | 
|  | total\$1tax\$1amounts | リスト |  | 
|  | transfer\$1data | Struct |  | 
|  | webhooks\$1delivered\$1at | DateTime |  | 
|  | automatically\$1finalizes\$1at | DateTime |  | 
|  | effective\$1at | DateTime |  | 
|  | 発行者 | Struct |  | 
| Invoice Items |  |  |  | 
|  | id | 文字列 |  | 
|  | オブジェクト | 文字列 |  | 
|  | amount | 整数 | =, <, > | 
|  | currency | 文字列 |  | 
|  | カスタマー | 文字列 | = | 
|  | date | DateTime |  | 
|  | description | 文字列 |  | 
|  | discountable | ブール値 |  | 
|  | discounts | リスト |  | 
|  | 請求書 | 文字列 | = | 
|  | livemode | ブール値 |  | 
|  | metadata | Struct |  | 
|  | 期間 | Struct |  | 
|  | 計画 | Struct |  | 
|  | 料金 | Struct |  | 
|  | proration | ブール値 | = | 
|  | 数量 | 整数 |  | 
|  | サブスクリプション | 文字列 |  | 
|  | subscription\$1item | 文字列 |  | 
|  | tax\$1rates | リスト |  | 
|  | test\$1clock | 文字列 |  | 
|  | unit\$1amount | 整数 |  | 
|  | unit\$1amount\$1decimal | 文字列 |  | 
| プラン |  |  |  | 
|  | id | 文字列 |  | 
|  | オブジェクト | 文字列 |  | 
|  | ACTIVE | ブール値 | = | 
|  | aggregate\$1usage | 文字列 |  | 
|  | amount | 整数 |  | 
|  | amount\$1decimal | 文字列 |  | 
|  | billing\$1scheme | 文字列 |  | 
|  | 作成済み | DateTime | =, >=, <=, <, > | 
|  | currency | 文字列 | = | 
|  | interval | 文字列 | = | 
|  | interval\$1count | 整数 |  | 
|  | livemode | ブール値 |  | 
|  | metadata | Struct |  | 
|  | nickname | 文字列 |  | 
|  | product | 文字列 | = | 
|  | tiers\$1mode | 文字列 |  | 
|  | transform\$1usage | Struct |  | 
|  | trial\$1period\$1days | 整数 | =, <, > | 
|  | usage\$1type | 文字列 |  | 
|  | 測定 | 文字列 |  | 
| Quotes |  |  |  | 
|  | id | 文字列 |  | 
|  | オブジェクト | 文字列 |  | 
|  | amount\$1subtotal | 整数 |  | 
|  | amount\$1total | 整数 |  | 
|  | アプリケーション | 文字列 |  | 
|  | application\$1fee\$1amount | 整数 |  | 
|  | application\$1fee\$1percent | 倍精度 |  | 
|  | automatic\$1tax | Struct |  | 
|  | collection\$1method | 文字列 |  | 
|  | computed | Struct |  | 
|  | 作成済み | DateTime |  | 
|  | currency | 文字列 |  | 
|  | カスタマー | 文字列 | = | 
|  | default\$1tax\$1rates | リスト |  | 
|  | description | 文字列 |  | 
|  | discounts | リスト |  | 
|  | expires\$1at | DateTime |  | 
|  | footer | 文字列 |  | 
|  | from\$1quote | Struct |  | 
|  | ヘッダー | 文字列 |  | 
|  | 請求書 | 文字列 |  | 
|  | invoice\$1settings | Struct |  | 
|  | livemode | ブール値 |  | 
|  | metadata | Struct |  | 
|  | 数値 | 文字列 |  | 
|  | on\$1behalf\$1of | 文字列 |  | 
|  | ステータス | 文字列 | = | 
|  | status\$1transitions | Struct |  | 
|  | サブスクリプション | 文字列 |  | 
|  | subscription\$1data | Struct |  | 
|  | subscription\$1schedule | 文字列 |  | 
|  | test\$1clock | 文字列 |  | 
|  | total\$1details | Struct |  | 
|  | transfer\$1data | Struct |  | 
| サブスクリプション |  |  |  | 
|  | id | 文字列 |  | 
|  | オブジェクト | 文字列 |  | 
|  | アプリケーション | 文字列 |  | 
|  | application\$1fee\$1percent | 倍精度 |  | 
|  | automatic\$1tax | Struct |  | 
|  | billing\$1cycle\$1anchor | DateTime |  | 
|  | billing\$1thresholds | Struct |  | 
|  | cancel\$1at | DateTime |  | 
|  | cancel\$1at\$1period\$1end | ブール値 |  | 
|  | cancelled\$1at | DateTime |  | 
|  | collection\$1method | 文字列 | = | 
|  | 作成済み | DateTime | =, >=, <=,<,> | 
|  | currency | 文字列 |  | 
|  | current\$1period\$1end | DateTime | =, >=, <= | 
|  | current\$1period\$1start | DateTime | =, >=, <= | 
|  | カスタマー | 文字列 | = | 
|  | days\$1until\$1due | 整数 |  | 
|  | default\$1payment\$1method | 文字列 |  | 
|  | default\$1source | 文字列 |  | 
|  | default\$1tax\$1rates | リスト |  | 
|  | description | 文字列 |  | 
|  | discount | Struct |  | 
|  | ended\$1at | DateTime |  | 
|  | 項目 | Struct |  | 
|  | latest\$1invoice | 文字列 |  | 
|  | livemode | ブール値 |  | 
|  | metadata | Struct |  | 
|  | next\$1pending\$1invoice\$1item\$1invoice | DateTime |  | 
|  | pause\$1collection | Struct |  | 
|  | payment\$1settings | Struct |  | 
|  | pending\$1invoice\$1item\$1interval | Struct |  | 
|  | pending\$1setup\$1intent | 文字列 |  | 
|  | pending\$1update | Struct |  | 
|  | 計画 | Struct |  | 
|  | 数量 | 整数 |  | 
|  | スケジュール | 文字列 |  | 
|  | start\$1date | DateTime |  | 
|  | ステータス | 文字列 | = | 
|  | test\$1clock | 文字列 |  | 
|  | transfer\$1data | Struct |  | 
|  | trial\$1end | DateTime |  | 
|  | trial\$1start | DateTime |  | 
| Subscription Items |  |  |  | 
|  | ID | 文字列 |  | 
|  | オブジェクト | 文字列 |  | 
|  | billing\$1thresholds | Struct |  | 
|  | 作成済み | DateTime | =, >=, <=, <, > | 
|  | metadata | Struct |  | 
|  | 計画 | Struct |  | 
|  | 料金 | Struct |  | 
|  | サブスクリプション | 文字列 |  | 
|  | tax\$1rates | リスト |  | 
|  | discounts | リスト |  | 
| Subscription Schedules |  |  |  | 
|  | オブジェクト | 文字列 |  | 
|  | アプリケーション | 文字列 |  | 
|  | cancelled\$1at | DateTime |  | 
|  | completed\$1at | DateTime |  | 
|  | 作成済み | DateTime |  | 
|  | current\$1phase | Struct |  | 
|  | カスタマー | 文字列 | = | 
|  | default\$1settings | Struct |  | 
|  | end\$1behavior | 文字列 |  | 
|  | livemode | ブール値 |  | 
|  | metadata | Struct |  | 
|  | phases | リスト |  | 
|  | released\$1at | DateTime |  | 
|  | released\$1subscription | 文字列 |  | 
|  | renewal\$1interval | 文字列 |  | 
|  | ステータス | 文字列 |  | 
|  | サブスクリプション | 文字列 |  | 
|  | test\$1clock | 文字列 |  | 
| アカウント |  |  |  | 
|  | details\$1submitted | ブール値 |  | 
|  | tos\$1acceptance | Struct |  | 
|  | type | 文字列 |  | 
|  | metadata | Struct |  | 
|  | id | 文字列 |  | 
|  | オブジェクト | 文字列 |  | 
|  | default\$1currency | 文字列 |  | 
|  | 機能 | Struct |  | 
|  | charges\$1enabled | ブール値 |  | 
|  | 設定 | Struct |  | 
|  | 要件 | Struct |  | 
|  | payouts\$1enabled | ブール値 |  | 
|  | future\$1requirements | Struct |  | 
|  | external\$1accounts | Struct |  | 
|  | コントローラ | Struct |  | 
|  | country | 文字列 |  | 
|  | email | 文字列 |  | 
|  | 作成済み | DateTime | =, >=, <=, <, > | 
|  | business\$1profile | Struct |  | 
|  | business\$1type | 文字列 |  | 
|  | company | Struct |  | 
| Application Fees |  |  |  | 
|  | id | 文字列 |  | 
|  | オブジェクト | 文字列 |  | 
|  | アカウント | 文字列 |  | 
|  | amount | 整数 | =, <, > | 
|  | amount\$1refunded | 整数 | =, <, > | 
|  | アプリケーション | 文字列 |  | 
|  | balance\$1transaction | 文字列 |  | 
|  | 料金 | 文字列 | = | 
|  | 作成済み | DateTime |  | 
|  | currency | 文字列 |  | 
|  | livemode | ブール値 |  | 
|  | originating\$1transaction | 文字列 |  | 
|  | refunded | ブール値 | = | 
|  | 返金 | Struct |  | 
|  | fee\$1source | Struct |  | 
| Country Specs |  |  |  | 
|  | id | 文字列 |  | 
|  | オブジェクト | 文字列 |  | 
|  | default\$1currency | 文字列 |  | 
|  | supported\$1bank\$1account\$1currencies | Struct |  | 
|  | supported\$1payment\$1currencies | リスト |  | 
|  | supported\$1payment\$1methods | リスト |  | 
|  | supported\$1transfer\$1countries | リスト |  | 
|  | verification\$1fields | Struct |  | 
| 転送 |  |  |  | 
|  | id | 文字列 |  | 
|  | オブジェクト | 文字列 |  | 
|  | amount | 整数 | =, <, > | 
|  | amount\$1reversed | 整数 |  | 
|  | balance\$1transaction | 文字列 |  | 
|  | 作成済み | DateTime | =, >=, <=, <, > | 
|  | currency | 文字列 | = | 
|  | description | 文字列 |  | 
|  | destination | 文字列 | = | 
|  | destination\$1payment | 文字列 |  | 
|  | livemode | ブール値 |  | 
|  | metadata | Struct |  | 
|  | reversals | Struct |  | 
|  | reversed | ブール値 |  | 
|  | source\$1transaction | 文字列 |  | 
|  | source\$1type | 文字列 |  | 
|  | transfer\$1group | 文字列 | = | 
| Early Fraud Warnings |  |  |  | 
|  | id | 文字列 |  | 
|  | オブジェクト | 文字列 |  | 
|  | actionable | ブール値 |  | 
|  | 料金 | 文字列 | = | 
|  | 作成済み | DateTime | =, >=, <=, <, > | 
|  | fraud\$1type | 文字列 |  | 
|  | livemode | ブール値 |  | 
|  | payment\$1intent | 文字列 | = | 
| レポートタイプ |  |  |  | 
|  | id | 文字列 |  | 
|  | オブジェクト | 文字列 |  | 
|  | data\$1available\$1end | DateTime |  | 
|  | data\$1available\$1start | DateTime |  | 
|  | default\$1columns | リスト |  | 
|  | livemode | ブール値 |  | 
|  | 名前 | 文字列 |  | 
|  | 更新済み | DateTime |  | 
|  | version | 整数 |  | 

 **パーティショニングクエリ** 

 Spark で同時実行を使用する場合は、追加の Spark オプション `PARTITION_FIELD`、`LOWER_BOUND`、`UPPER_BOUND`、および `NUM_PARTITIONS` を指定できます。これらのパラメータを使用すると、元のクエリは Spark タスクで同時に実行できるサブクエリの `NUM_PARTITIONS` の数に分割されます。
+  `PARTITION_FIELD`: クエリのパーティション化に使用するフィールドの名前。
+  `LOWER_BOUND`: 選択したパーティションフィールドの包括的な下限値。

   日付については、Spark SQL クエリで使用される Spark の日付形式を受け入れます。有効な値の例: `"2024-07-01T00:00:00.000Z"`。
+  `UPPER_BOUND`: 選択したパーティションフィールドの排他的上限値。
+  `NUM_PARTITIONS`: パーティション数。

 エンティティごとのパーティション分割フィールドのサポートの詳細は、以下の表にまとめられています。


| エンティティ名 | Partitioning Field | データタイプ | 
| --- | --- | --- | 
| Balance Transactions | 作成済み | DateTime | 
| 料金 | 作成済み | DateTime | 
| Disputes | 作成済み | DateTime | 
| File Links | 作成済み | DateTime | 
| PaymentIntents | 作成済み | DateTime | 
| SetupIntents | 作成済み | DateTime | 
| Payouts | 作成済み | DateTime | 
| Refunds | 作成済み | DateTime | 
| 製品 | 作成済み | DateTime | 
| Prices | 作成済み | DateTime | 
| Coupons | 作成済み | DateTime | 
| Promotion Codes | 作成済み | DateTime | 
| Tax Rates | 作成済み | DateTime | 
| Shipping Rates | 作成済み | DateTime | 
| セッション | 作成済み | DateTime | 
| Credit Notes | 作成済み | DateTime | 
| お客様 | 作成済み | DateTime | 
| 請求書 | 作成済み | DateTime | 
| プラン | 作成済み | DateTime | 
| サブスクリプション | 作成済み | DateTime | 
| Subscription Schedules | 作成済み | DateTime | 
| アカウント | 作成済み | DateTime | 
| Application Fees | 作成済み | DateTime | 
| 転送 | 作成済み | DateTime | 
| Early Fraud Warnings | 作成済み | DateTime | 

 **例** 

```
stripe_read = glueContext.create_dynamic_frame.from_options(
    connection_type="stripe",
    connection_options={
        "connectionName": "connectionName",
        "ENTITY_NAME": "coupons",
        "API_VERSION": "v1",
        "PARTITION_FIELD": "created"
        "LOWER_BOUND": "2024-05-01T20:55:02.000Z"
        "UPPER_BOUND": "2024-07-11T20:55:02.000Z"
        "NUM_PARTITIONS": "10"
    }
)
```

# Stripe 接続オプション
<a name="stripe-connection-options"></a>

Stripe の接続オプションは次のとおりです:
+  `ENTITY_NAME`(文字列) – (必須) 読み取り / 書き込みに使用されます。Stripe のオブジェクトの名前。
+  `API_VERSION`(文字列) – (必須) 読み取り / 書き込みに使用されます。使用する Stripe Rest API バージョン。例: v1。
+  `SELECTED_FIELDS`(List<String>) – Default: empty(SELECT \$1). 読み込みに使用されます。オブジェクトに選択する列です。
+  `FILTER_PREDICATE`(文字列) – デフォルト: 空 読み込みに使用されます。Spark SQL 形式である必要があります。
+  `QUERY`(文字列) - デフォルト: 空 読み込みに使用されます。完全な Spark SQL クエリです。
+  `PARTITION_FIELD`(文字列) - 読み取りに使用されます。クエリをパーティション化するために使用するフィールドです。
+  `LOWER_BOUND`(文字列) - 読み取りに使用されます。選択したパーティションフィールドの包括的な下限値。
+  `UPPER_BOUND` (文字列) - 読み取りに使用されます。選択したパーティションフィールドの排他的上限値。
+  `NUM_PARTITIONS`(整数) – デフォルト: 1。読み込みに使用されます。読み取り用のパーティションの数です。

# 制限
<a name="stripe-limitations"></a>

Stripe コネクタの制限は次のとおりです:
+  コネクタがサポートするのはフィールドベースのパーティション分割のみです。
+  レコードベースのパーティション分割はコネクタではサポートされておらず、レコードの合計数を取得するためのプロビジョニングはありません。
+  プライマリキーのデータ型は文字列であるため、ID ベースのパーティション分割はコネクタでサポートされません。

# 新しい Stripe アカウントの作成とクライアントアプリの設定
<a name="stripe-new-account-creation"></a>

**Stripe アカウントの作成**

1. リンク **https://dashboard.stripe.com/register** を選択します。

1. E メール、氏名、パスワードを入力し、**[Create Account]** を選択します。

1. アカウントでログインしたら、**[Open Gmail]** を選択してアカウントを検証します。

1. E メールで受信した検証リンクをクリックして、アカウントを確認します。

1. E メールアドレスの検証をクリックすると、別のページにリダイレクトされます。

1. **[Activate payments]** をクリックしてアカウントをアクティブ化すると、[Activate payments] (**https://dashboard.stripe.com/welcome**) ページにリダイレクトされます。必要な情報すべてを正しく入力してから、**[Continue]** ボタンを選択します。



**Slack 開発者アプリの作成**

1. [Stripe](https://dashboard.stripe.com/login) にログインします。

1. 下の図の一番上に表示される **[Developers]** を選択します。

1. [開発者] で **[API keys]**を選択します。

1. **[Reveal test key]** を選択して API キーを取得します。

# AWS Glue Studio での Teradata Vantage に対する接続
<a name="connecting-to-data-teradata"></a>

 AWS Glue は、Teradata Vantage のための組み込みサポートを提供します。AWS Glue Studio は、Teradata に接続してデータ統合ジョブをオーサリングし、AWS Glue Studio サーバーレス Spark ランタイム上でそれらのジョブを実行するためのビジュアルインターフェイスを提供します。

 AWS Glue Studio は Teradata Vantage の統合接続を作成します。詳細については、「[考慮事項](using-connectors-unified-connections.md#using-connectors-unified-connections-considerations)」を参照してください。

**Topics**
+ [Teradata Vantage 接続の作成](creating-teradata-connection.md)
+ [Teradata ソースノードの作成](creating-teradata-source-node.md)
+ [Teradata ターゲットノードの作成](creating-teradata-target-node.md)
+ [詳細オプション](#creating-teradata-connection-advanced-options)

# Teradata Vantage 接続の作成
<a name="creating-teradata-connection"></a>

AWS Glue から Teradata Vantage に接続するには、Teradata 認証情報を作成して AWS Secrets Manager シークレットに保存し、そのシークレットを 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]**、**[サブネット]**、および **[セキュリティグループ]** を設定します。

# Teradata ソースノードの作成
<a name="creating-teradata-source-node"></a>

## 必要な前提条件
<a name="creating-teradata-source-node-prerequisites"></a>
+ 前のセクション [Teradata Vantage 接続の作成](creating-teradata-connection.md) で説明したように、AWS Secrets Manager シークレットを使用して設定された AWS Glue Teradata Vantage 接続。
+ 接続で使用されるシークレットを読み取るためのジョブに対する適切なアクセス許可。
+ 読み取り元とする Teradata テーブル、*tableName*、またはクエリ *targetQuery*。

## Teradata データソースの追加
<a name="creating-teradata-source-node-add"></a>

****[データソース — Teradata]** ノードを追加するには:**

1.  Teradata データソース用の接続を選択します。すでに作成したので、ドロップダウンに表示されているはずです。接続を作成する必要がある場合は、**[新しい接続を作成]** を選択します。詳細については、前の「[Teradata Vantage 接続の作成](creating-teradata-connection.md)」セクションを参照してください。

    接続を選択したあとは、**[プロパティを表示]** をクリックすると、接続のプロパティを表示できます。

1.  **[Teradata ソース]** オプションを選択します。
   +  **[単一のテーブルを選択]** – 単一のテーブルからすべてのデータにアクセスします。
   +  **[カスタムクエリを入力]** — カスタムクエリに基づいて、複数のテーブルからデータセットにアクセスします。

1.  単一のテーブルを選択した場合は、*tableName* を入力します。

    **[カスタムクエリを入力]** を選択した場合は、SQL SELECT クエリを入力します。

1.  **[Teradata のカスタムプロパティ]** で、必要に応じてパラメータと値を入力します。

# Teradata ターゲットノードの作成
<a name="creating-teradata-target-node"></a>

## 必要な前提条件
<a name="creating-teradata-target-node-prerequisites"></a>
+ 前のセクション [Teradata Vantage 接続の作成](creating-teradata-connection.md) で説明したように、AWS Secrets Manager シークレットを使用して設定された AWS Glue Teradata Vantage 接続。
+ 接続で使用されるシークレットを読み取るためのジョブに対する適切なアクセス許可。
+ 書き込み先とする Teradata テーブルである *tableName*。

## Teradata データターゲットの追加
<a name="creating-teradata-target-node-add"></a>

****[データターゲット — Teradata]** ノードを追加するには:**

1.  Teradata データソース用の接続を選択します。すでに作成したので、ドロップダウンに表示されているはずです。接続を作成する必要がある場合は、**[Teradata 接続を作成]** を選択します。詳細については、「[コネクタと接続の使用に関する概要](https://docs.aws.amazon.com/glue/latest/ug/connectors-chapter.html#using-connectors-overview)」を参照してください。

    接続を選択したあとは、**[プロパティを表示]** をクリックすると、接続のプロパティを表示できます。

1. *tableName* を指定して **[テーブル名]** を設定します。

1.  **[Teradata のカスタムプロパティ]** で、必要に応じてパラメータと値を入力します。

## 詳細オプション
<a name="creating-teradata-connection-advanced-options"></a>

Teradata ノードを作成する際に、高度なオプションを指定できます。これらのオプションは Spark AWS Glue スクリプトのプログラミング時に使用できるオプションと同じです。

「[Teradata Vantage 接続](aws-glue-programming-etl-connect-teradata-home.md)」を参照してください。

# Twilio に対する接続
<a name="connecting-to-data-twilio"></a>

Twilio は、ウェブサービス API を使用して、通話の送受信、テキストメッセージの送受信、その他の通信機能を実行するためのプログラム可能な通信ツールを提供します。Twilio の API は、通信用のプラットフォームを強化します。これらの API の背後にあるのは、世界中の通信ネットワークを接続し最適化するソフトウェアレイヤーです。これにより、ユーザーはグローバルに誰でも呼び出し、メッセージを送信できます。Twilio ユーザーとして、Twilio アカウントに AWS Glue を接続できます。その後、Twilio を ETL ジョブのデータソースとして使用できます。これらのジョブを実行して、Twilio と AWS サービス、またはその他のサポートされているアプリケーション間でデータを転送します。

**Topics**
+ [Twilio 向けの AWS Glue サポート](twilio-support.md)
+ [接続を作成および使用するための API オペレーションを含むポリシー](twilio-configuring-iam-permissions.md)
+ [Twilio の設定](twilio-configuring.md)
+ [Twilio 接続の設定](twilio-configuring-connections.md)
+ [Twilio エンティティからの読み取り](twilio-reading-from-entities.md)
+ [Twilio 接続オプション](twilio-connection-options.md)
+ [Twilio コネクタの制限と注意事項](twilio-connector-limitations.md)

# Twilio 向けの AWS Glue サポート
<a name="twilio-support"></a>

AWS Glue は、次のように Twilio をにサポートします。

**ソースとしてサポートされていますか?**  
はい。AWS Glue ETL ジョブを使用して、Twilio からデータをクエリできます。

**ターゲットとしてサポートされていますか?**  
いいえ。

**サポートされている Twilio API バージョン**  
次の Twilio API バージョンがサポートされています。
+ v1
+ 2010-04-01

# 接続を作成および使用するための API オペレーションを含むポリシー
<a name="twilio-configuring-iam-permissions"></a>

次のサンプル ポリシーで、接続の作成と使用に必要な AWS IAM 権限について説明します。新しいロールを作成する場合は、以下を含むポリシーを作成します。

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

****  

```
{
  "Version":"2012-10-17",		 	 	 
  "Statement": [
    {
      "Effect": "Allow",
      "Action": [
        "glue:ListConnectionTypes",
        "glue:DescribeConnectionType",
        "glue:RefreshOAuth2Tokens",
        "glue:ListEntities",
        "glue:DescribeEntity"
      ],
      "Resource": "*"
    }
  ]
}
```

------

上記の方法を使用しない場合は、代わりに次のマネージド IAM ポリシーを使用します:
+ [AWSGlueServiceRole](https://console.aws.amazon.com/iam/home#policies/arn:aws:iam::aws:policy/service-role/AWSGlueServiceRole) – さまざまな AWS Glue プロセスを実行するために必要なリソースへのアクセス権をユーザーに代わって付与します。これらのリソースには AWS Glue 、Amazon S3、IAM、CloudWatch Logs、および Amazon EC2 が含まれます。このポリシーで指定されたリソースの命名規則に従った場合、AWS Glue プロセスは必要なアクセス権限を使用できます。このポリシーは、通常、クローラ、ジョブ、開発エンドポイントを定義するときに指定されたロールにアタッチされます。
+ [AWSGlueConsoleFullAccess](https://console.aws.amazon.com/iam/home#policies/arn:aws:iam::aws:policy/AWSGlueConsoleFullAccess) — ポリシーがアタッチされているアイデンティティが AWS マネージメントコンソールを使用するときは、AWS Glue リソースへのフルアクセスを許可します。このポリシーで指定されたリソースの命名規則に従った場合、ユーザーは完全なコンソール機能を使用できます。このポリシーは、通常 AWS Glue コンソールのユーザーにアタッチされています。

# Twilio の設定
<a name="twilio-configuring"></a>

AWS Glue を使用して Twilio からデータを転送できるようにするには、次の要件を満たす必要があります。

## 最小要件
<a name="twilio-configuring-min-requirements"></a>

以下に、最小要件を示します。
+ ユーザー名とパスワードを持つ Twilio アカウントがある。
+ Twilio アカウントで API アクセスが有効になっている。

これらの要件を満たすと、Twilio アカウントに AWS Glue を接続する準備が整います。一般的な接続では、Twilio で他に何もする必要はありません。

# Twilio 接続の設定
<a name="twilio-configuring-connections"></a>

Twilio は、基本認証のユーザー名とパスワードをサポートしています。基本認証は、クライアントが保護されたリソースにアクセスするための認証情報を直接提供する簡単な認証方法です。AWS Glue はユーザー名 (アカウント SID) とパスワード (認証トークン) を使用して Twilio API を認証できます。

基本的な認証フローに関する Twilio のパブリックドキュメントについては、「[基本認証 \$1 Twilio](https://www.twilio.com/docs/glossary/what-is-basic-authentication)」を参照してください。

Twilio 接続を設定するには:

1. AWS Secrets Manager で、次の詳細を含むシークレットを作成します。
   + 基本認証の場合: シークレットには、**[アカウント SID]** (ユーザー名) と **[認証トークン]** (パスワード) を使用して接続されたアプリケーションのコンシューマーシークレットを含める必要があります。
**注記**  
AWS Glue で接続ごとにシークレットを作成する必要があります。

1. AWS Glue Glue Studio で、以下の手順に従って **[データ接続]** の下に接続を作成します。

   1. **[接続タイプ]** を選択する際に、[Twilio] を選択します。

   1. 接続先の Twilio インスタンスの `[Edge\$1Location](https://www.twilio.com/docs/global-infrastructure/edge-locations)` を指定します。

   1. 次のアクションを実行でき、AWS Glue がその権限を持つ AWS IAM ロールを選択します。

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

****  

      ```
      {
        "Version":"2012-10-17",		 	 	 
        "Statement": [
          {
            "Effect": "Allow",
            "Action": [
              "secretsmanager:DescribeSecret",
              "secretsmanager:GetSecretValue",
              "secretsmanager:PutSecretValue",
              "ec2:CreateNetworkInterface",
              "ec2:DescribeNetworkInterfaces",
              "ec2:DeleteNetworkInterface"
            ],
            "Resource": "*"
          }
        ]
      }
      ```

------

   1. AWS Glue でこの接続に使用する `secretName` を選択して、トークンを配置します。

   1. ネットワークを使用する場合は、ネットワークオプションを選択します。

1. AWS Glue ジョブに関連付けられている IAM ロールに `secretName` を読み取るアクセス許可を付与します。

# Twilio エンティティからの読み取り
<a name="twilio-reading-from-entities"></a>

**前提条件**

読み取り元の Twilio オブジェクト。`SMS-Message` または `SMS-CountryPricing` などのオブジェクト名が必要です。

**ソースに対応するエンティティ**:


| エンティティ | インターフェイス | フィルタリング可能 | 制限をサポートする | Order By をサポートする | Select \$1 をサポートする | パーティション分割をサポートする | 
| --- | --- | --- | --- | --- | --- | --- | 
| SMS-Message | REST | はい | あり | なし | あり | あり | 
| SMS-CountryPricing | REST | なし | なし | なし | あり | なし | 
| Voice-Call | REST | はい | あり | なし | あり | なし | 
| Voice-Application | REST | はい | あり | なし | あり | なし | 
| Voice-OutgoingCallerID | REST | はい | あり | なし | あり | なし | 
| Voice-Queue | REST | はい | あり | なし | あり | なし | 
| Conversations-Conversation | REST | はい | あり | なし | あり | なし | 
| Conversations-User | REST | なし | あり | なし | あり | なし | 
| Conversations-Role | REST | なし | あり | なし | あり | なし | 
| Conversations-Configuration | REST | なし | なし | なし | あり | なし | 
| Conversations-AddressConfiguration | REST | はい | あり | なし | あり | なし | 
| Conversations-WebhookConfiguration | REST | なし | なし | なし | あり | なし | 
| Conversations-ParticipantConversation | REST | なし | なし | なし | あり | なし | 
| Conversations-Credential | REST | なし | あり | なし | あり | なし | 
| Conversations-ConversationService | REST | なし | あり | なし | あり | なし | 

**例**:

```
twilio_read = glueContext.create_dynamic_frame.from_options(
    connection_type="twilio",
    connection_options={
        "connectionName": "connectionName",
        "ENTITY_NAME": "sms-message",
        "API_VERSION": "2010-04-01",
        "Edge_Location": "sydney.us1"
    }
```

**Twilio エンティティとフィールドの詳細**:

[\[See the AWS documentation website for more details\]](http://docs.aws.amazon.com/ja_jp/glue/latest/dg/twilio-reading-from-entities.html)

## パーティショニングクエリ
<a name="twilio-reading-partitioning-queries"></a>

**パーティション分割をサポートするフィールド**:

Twilio では、DateTime データ型フィールドはフィールドベースのパーティシン分割をサポートしています。

Spark で同時実行を使用する場合は、追加の Spark オプション `PARTITION_FIELD`、`LOWER_BOUND`、`UPPER_BOUND`、および `NUM_PARTITIONS` を指定できます。これらのパラメータを使用すると、元のクエリは Spark タスクで同時に実行できるサブクエリの `NUM_PARTITIONS` の数に分割されます。
+ `PARTITION_FIELD`: クエリのパーティション化に使用するフィールドの名前。
+ `LOWER_BOUND`: 選択したパーティションフィールドの**包括的な**下限値。

  Datetime フィールドでは、Spark SQL クエリで使用される Spark タイムスタンプ形式を受け入れます。

  有効な値の例は次のとおりです:

  ```
  "2024-05-01T20:55:02.000Z"
  ```
+ `UPPER_BOUND`: 選択したパーティションフィールドの**排他的**上限値。
+ `NUM_PARTITIONS`: パーティション数。

例:

```
twilio_read = glueContext.create_dynamic_frame.from_options(
    connection_type="twilio",
    connection_options={
        "connectionName": "connectionName",
        "ENTITY_NAME": "sms-message",
        "API_VERSION": "2010-04-01",
        "PARTITION_FIELD": "date_sent"
        "LOWER_BOUND": "2024-05-01T20:55:02.000Z"
        "UPPER_BOUND": "2024-06-01T20:55:02.000Z"
        "NUM_PARTITIONS": "10"
    }
```

# Twilio 接続オプション
<a name="twilio-connection-options"></a>

Twilio の接続オプションは次のとおりです。
+ `ENTITY_NAME`(文字列) – (必須) 読み取りに使用されます。Twilio のオブジェクトの名前。
+ `EDGE_LOCATION`(文字列) – (必須) 有効な Twilio エッジロケーション。
+ `API_VERSION`(文字列) – (必須) 読み取りに使用されます。使用する Twilio Rest API バージョン。Twilio は、「v1」と「2010-04-01」の 2 つの API バージョンをサポートしています。
+ `SELECTED_FIELDS`(List<String>) – Default: empty(SELECT \$1). 読み込みに使用されます。オブジェクトに選択する列です。
+ `FILTER_PREDICATE`(文字列) – デフォルト: 空 読み込みに使用されます。Spark SQL 形式である必要があります。
+ `QUERY`(文字列) - デフォルト: 空 読み込みに使用されます。完全な Spark SQL クエリです。
+ `PARTITION_FIELD`(文字列) - 読み取りに使用されます。クエリをパーティション化するために使用するフィールドです。
+ `LOWER_BOUND`(文字列) - 読み取りに使用されます。選択したパーティションフィールドの包括的な下限値。
+ `UPPER_BOUND` (文字列) - 読み取りに使用されます。選択したパーティションフィールドの排他的上限値。
+ `NUM_PARTITIONS`(整数) – デフォルト: 1。読み込みに使用されます。読み取り用のパーティションの数。
+ `INSTANCE_URL` (文字列) – (必須) 読み取りに使用されます。有効な Twilio インスタンス URL。

# Twilio コネクタの制限と注意事項
<a name="twilio-connector-limitations"></a>

Twilio コネクタの制限事項または注意事項は次のとおりです。
+ レコードベースのパーティション分割はサポートされていないのは、Twilio からレコードの合計数を取得するためのプロビジョニングがないためです
+ フィールド `date_sent`、`start_time`、`end_time` は Datetime データ型ですが、フィルタリング時には日付値のみをサポートします (時間コンポーネントは考慮されません)。
+ 「from」フィールドまたは「to」フィールドのフィルタリングは、値にプレフィックス (プロトコルやラベルなど) が含まれていない場合にのみ機能します。プレフィックスが存在する場合、それぞれのフィールドのフィルタリングは機能しません。たとえば、「to」:「whatsapp:\$114xxxxxxxxxx」をフィルターとして渡すと、Twilio はレスポンスを返しません。「to」:「\$114xxxxxxxx」として渡す必要があります。レコードが存在する場合はレコードが返されます。
+ `conversation-participant-conversation` エンティティをクエリするときは、「identity」フィールドフィルターは必須です。

# AWS Glue Studio での Vertica に対する接続
<a name="connecting-to-data-vertica"></a>

 AWS Glue は、Vertica のための組み込みサポートを提供します。AWS Glue Studio は、Vertica に接続してデータ統合ジョブをオーサリングし、AWS Glue Studio サーバーレス Spark ランタイム上でそれらのジョブを実行するためのビジュアルインターフェイスを提供します。

 AWS Glue Studio は Vertica の統合接続を作成します。詳細については、「[考慮事項](using-connectors-unified-connections.md#using-connectors-unified-connections-considerations)」を参照してください。

**Topics**
+ [Vertica 接続の作成](creating-vertica-connection.md)
+ [Vertica ソースノードの作成](creating-vertica-source-node.md)
+ [Vertica ターゲットノードの作成](creating-vertica-target-node.md)
+ [詳細オプション](#creating-vertica-connection-advanced-options)

# Vertica 接続の作成
<a name="creating-vertica-connection"></a>

**前提条件**:
+ データベースの読み取りおよび書き込み時に一時ストレージとして使用する Amazon S3 バケットまたはフォルダ。*tempS3Path* によって参照されます。
**注記**  
AWS Glue ジョブデータプレビューで Vertica を使用する場合、一時ファイルは *tempS3Path* から自動的に削除されない場合があります。一時ファイルを確実に削除するには、**[データプレビュー]** ペインで **[セッションの終了]** を選択して、データプレビューセッションを直接終了します。  
データプレビューセッションが直接終了することを保証できない場合は、Amazon S3 ライフサイクル構成を設定して古いデータを削除することを検討してください。ジョブの最大実行時間にマージンを加えた値に基づいて、49 時間を超える時間が経過しているデータを削除することをお勧めします。Amazon S3 ライフサイクルの設定の詳細については、Amazon S3 ドキュメントの「[ストレージのライフサイクルの管理](https://docs.aws.amazon.com/AmazonS3/latest/userguide/object-lifecycle-mgmt.html)」を参照してください。
+ AWS Glue ジョブロールに関連付けることができる、Amazon S3 パスに対する適切な許可を持つ IAM ポリシー。
+ Vertica インスタンスが Amazon VPC 内にある場合は、トラフィックがパブリックインターネットを経由することなく、AWS Glue ジョブが Vertica インスタンスと通信できるように Amazon VPC を設定します。

  Amazon VPC で、AWS Glue がジョブの実行中に使用する **VPC**、**サブネット**、**セキュリティグループ** を特定または作成します。さらに、Vertica インスタンスとこの場所の間のネットワークトラフィックを許可するように Amazon VPC が設定されているようにする必要があります。ジョブは、Vertica クライアントポート (デフォルトは 5433) との TCP 接続を確立する必要があります。ネットワークレイアウトに基づいて、セキュリティグループルール、ネットワーク ACL、NAT ゲートウェイ、およびピアリング接続の変更が必要になる場合があります。

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

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

1. AWS Glue コンソールで、「[AWS Glue 接続の追加](console-connections.md)」にあるステップに従って接続を作成します。接続を作成したら、次のステップのために接続名 *connectionName* を保存しておきます。
   + **[接続タイプ]** を選択する際に、[Vertica] を選択します。
   + **[Vertica ホスト]** を選択する場合は、Vertica インストールのホスト名を入力します。
   + **[Vertica ポート]** を選択すると、Vertica インストールを使用できるポートが選択されます。
   + **[AWS Secret]** をクリックして、*secretName* を入力します。

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

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

AWS Glue ジョブを実行する前に、次のステップを実行する必要があります。
+ AWS Glue ジョブの許可に関連付けられた IAM ロールを *tempS3Path* に付与します。
+ AWS Glue ジョブに関連付けられている IAM ロールに *secretName* を読み取るアクセス許可を付与します。

# Vertica ソースノードの作成
<a name="creating-vertica-source-node"></a>

## 必要な前提条件
<a name="creating-vertica-source-node-prerequisites"></a>
+ 前のセクション「[Vertica 接続の作成](creating-vertica-connection.md)」で説明したように、Vertica タイプの AWS Glue データカタログ接続である *connectionName* と、一時的な Amazon S3 の場所である *tempS3Path*。
+ 読み取り元とする Vertica テーブル、*tableName*、またはクエリ *targetQuery*。

## Vertica データソースの追加
<a name="creating-vertica-source-node-add"></a>

****[データソース — Vertica]** ノードを追加するには:**

1.  Vertica データソース用の接続を選択します。すでに作成したので、ドロップダウンに表示されているはずです。接続を作成する必要がある場合は、**[Vertica 接続を作成]** を選択します。詳細については、前の「[Vertica 接続の作成](creating-vertica-connection.md)」セクションを参照してください。

    接続を選択したあとは、**[プロパティを表示]** をクリックすると、接続のプロパティを表示できます。

1. テーブルを含む **[データベース]** を選択します。

1. **[Amazon S3 のステージングエリア]** を選択し、S3A URI を *tempS3Path* に入力します。

1. **[Vertica ソース]** を選択します。
   +  **[単一のテーブルを選択]** – 単一のテーブルからすべてのデータにアクセスします。
   +  **[カスタムクエリを入力]** — カスタムクエリに基づいて、複数のテーブルからデータセットにアクセスします。

1.  単一のテーブルを選択した場合は、*tableName* を入力し、オプションで **[スキーマ]** を選択します。

    **[カスタムクエリを入力]** を選択した場合は、SQL SELECT クエリを入力し、オプションで **[スキーマ]** を選択します。

1.  **[Vertica のカスタムプロパティ]** で、必要に応じてパラメータと値を入力します。

# Vertica ターゲットノードの作成
<a name="creating-vertica-target-node"></a>

## 必要な前提条件
<a name="creating-vertica-target-node-prerequisites"></a>
+ 前のセクション「[Vertica 接続の作成](creating-vertica-connection.md)」で説明したように、Vertica タイプの AWS Glue データカタログ接続である *connectionName* と、一時的な Amazon S3 の場所である *tempS3Path*。

## Vertica データターゲットの追加
<a name="creating-vertica-target-node-add"></a>

****[データターゲット — Vertica]** ノードを追加するには:**

1.  Vertica データソース用の接続を選択します。すでに作成したので、ドロップダウンに表示されているはずです。接続を作成する必要がある場合は、**[Vertica 接続を作成]** を選択します。詳細については、前の「[Vertica 接続の作成](creating-vertica-connection.md)」セクションを参照してください。

    接続を選択したあとは、**[プロパティを表示]** をクリックすると、接続のプロパティを表示できます。

1. テーブルを含む **[データベース]** を選択します。

1. **[Amazon S3 のステージングエリア]** を選択し、S3A URI を *tempS3Path* に入力します。

1. *tableName* を入力し、オプションで **[スキーマ]** を選択します。

1.  **[Vertica のカスタムプロパティ]** で、必要に応じてパラメータと値を入力します。

## 詳細オプション
<a name="creating-vertica-connection-advanced-options"></a>

Vertica ノードを作成する際に、高度なオプションを指定できます。これらのオプションは Spark AWS Glue スクリプトのプログラミング時に使用できるオプションと同じです。

「[Vertica 接続](aws-glue-programming-etl-connect-vertica-home.md)」を参照してください。

# WooCommerce に対する接続
<a name="connecting-to-data-woocommerce"></a>

WooCommerce は、WordPress ベースのウェブサイト用に構築されたオープンソースの柔軟なソフトウェアソリューションです。オンラインの e コマースショップを作成するのによく使用されます。このソフトウェアソリューションを使用すると、誰でも通常のウェブサイトを完全に機能するオンラインストアに変えることができます。

**Topics**
+ [WooCommerce 向け AWS Glue サポート](woocommerce-support.md)
+ [接続を作成および使用するための API オペレーションを含むポリシー](woocommerce-configuring-iam-permissions.md)
+ [WooCommerce の設定](woocommerce-configuring.md)
+ [WooCommerce 接続の設定](woocommerce-configuring-connections.md)
+ [WooCommerce エンティティからの読み取り](woocommerce-reading-from-entities.md)
+ [WooCommerce 接続オプション](woocommerce-connection-options.md)

# WooCommerce 向け AWS Glue サポート
<a name="woocommerce-support"></a>

AWS Glue は、次のように WooCommerce をサポートします。

**ソースとしてサポートされていますか?**  
はい。AWS Glue ETL ジョブを使用して、WooCommerce からデータをクエリできます。

**ターゲットとしてサポートされていますか?**  
いいえ。

**サポートされている WooCommerce API バージョン**  
次の WooCommerce API バージョンがサポートされています。
+ v3

# 接続を作成および使用するための API オペレーションを含むポリシー
<a name="woocommerce-configuring-iam-permissions"></a>

次のサンプル ポリシーで、接続の作成と使用に必要な AWS IAM 権限について説明します。新しいロールを作成する場合は、以下を含むポリシーを作成します。

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

****  

```
{
  "Version":"2012-10-17",		 	 	 
  "Statement": [
    {
      "Effect": "Allow",
      "Action": [
        "glue:ListConnectionTypes",
        "glue:DescribeConnectionType",
        "glue:RefreshOAuth2Tokens",
        "glue:ListEntities",
        "glue:DescribeEntity"
      ],
      "Resource": "*"
    }
  ]
}
```

------

上記の方法を使用しない場合は、代わりに次のマネージド IAM ポリシーを使用します:
+ [AWSGlueServiceRole](https://console.aws.amazon.com/iam/home#policies/arn:aws:iam::aws:policy/service-role/AWSGlueServiceRole) – さまざまな AWS Glue プロセスを実行するために必要なリソースへのアクセス権をユーザーに代わって付与します。これらのリソースには AWS Glue 、Amazon S3、IAM、CloudWatch Logs、および Amazon EC2 が含まれます。このポリシーで指定されたリソースの命名規則に従った場合、AWS Glue プロセスは必要なアクセス権限を使用できます。このポリシーは、通常、クローラ、ジョブ、開発エンドポイントを定義するときに指定されたロールにアタッチされます。
+ [AWSGlueConsoleFullAccess](https://console.aws.amazon.com/iam/home#policies/arn:aws:iam::aws:policy/AWSGlueConsoleFullAccess) — ポリシーがアタッチされているアイデンティティが AWS マネージメントコンソールを使用するときは、AWS Glue リソースへのフルアクセスを許可します。このポリシーで指定されたリソースの命名規則に従った場合、ユーザーは完全なコンソール機能を使用できます。このポリシーは、通常 AWS Glue コンソールのユーザーにアタッチされています。

# WooCommerce の設定
<a name="woocommerce-configuring"></a>

AWS Glue を使用して WooCommerce からデータを転送できるようにするには、次の要件を満たす必要があります。

## 最小要件
<a name="woocommerce-configuring-min-requirements"></a>

以下に、最小要件を示します。
+ `consumerKey` と `consumerSecret` を持つ WooCommerce アカウントがある。
+ お客様の WooCommerce アカウントには、有効なライセンスを持つ API アクセスがある。

これらの要件を満たすと、WooCommerce アカウントに AWS Glue を接続する準備が整います。一般的な接続では、WooCommerce で他に何もする必要はありません。

# WooCommerce 接続の設定
<a name="woocommerce-configuring-connections"></a>

WooCommerce はカスタム認証をサポートしています。カスタム認可に必要な API キーの生成に関する WooCommerce の公開ドキュメントについては、「[認証 – WooCommerce REST API ドキュメント](https://woocommerce.github.io/woocommerce-rest-api-docs/#authentication)」を参照してください。

WooCommerce 接続を設定するには:

1. AWS Secrets Manager で、次の詳細を含むシークレットを作成します。
   + カスタマーマネージド接続アプリケーションの場合、シークレットには、`consumerKey` と `consumerSecret` をキーとした接続アプリのコンシューマーシークレットを含める必要があります。注: AWS Glue で接続ごとにシークレットを作成する必要があります。

1. AWS Glue Glue Studio で、以下の手順に従って **[データ接続]** の下に接続を作成します。

   1. **[接続タイプ]** を選択する際に、[WooCommerce] を選択します。

   1. 接続先の WooCommerce インスタンスの `INSTANCE_URL` を指定します。

   1. 次のアクションを実行でき、AWS Glue がその権限を持つ AWS IAM ロールを選択します。

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

****  

      ```
      {
        "Version":"2012-10-17",		 	 	 
        "Statement": [
          {
            "Effect": "Allow",
            "Action": [
              "secretsmanager:DescribeSecret",
              "secretsmanager:GetSecretValue",
              "secretsmanager:PutSecretValue",
              "ec2:CreateNetworkInterface",
              "ec2:DescribeNetworkInterfaces",
              "ec2:DeleteNetworkInterface"
            ],
            "Resource": "*"
          }
        ]
      }
      ```

------

   1. AWS Glue でこの接続に使用する `secretName` を選択して、トークンを配置します。

   1. ネットワークを使用する場合は、ネットワークオプションを選択します。

1. AWS Glue ジョブに関連付けられている IAM ロールに `secretName` を読み取るアクセス許可を付与します。

# WooCommerce エンティティからの読み取り
<a name="woocommerce-reading-from-entities"></a>

**前提条件**

読み取り元の WooCommerce オブジェクト。クーポン、注文、製品などのオブジェクト名が必要です。

**ソースに対応するエンティティ**:


| エンティティ | フィルタリング可能 | 制限をサポートする | Order By をサポートする | Select \$1 をサポートする | パーティション分割をサポートする | 
| --- | --- | --- | --- | --- | --- | 
| クーポン | はい | あり | あり | あり | あり | 
| クーポンの合計 | なし | なし | なし | あり | なし | 
| 顧客合計 | なし | なし | なし | あり | なし | 
| 注文 | はい | あり | あり | あり | あり | 
| 注文合計 | なし | なし | なし | あり | なし | 
| ペイメントゲートウェイ | なし | なし | なし | あり | なし | 
| 製品 | はい | あり | あり | あり | あり | 
| 製品属性 | はい | あり | あり | あり | あり | 
| 製品カテゴリ | はい | あり | あり | あり | あり | 
| 製品レビュー | はい | あり | あり | あり | あり | 
| 製品の配送クラス | はい | あり | あり | あり | あり | 
| 製品タグ | はい | あり | あり | あり | あり | 
| 製品のバリエーション | はい | あり | あり | あり | あり | 
| 製品合計 | なし | なし | なし | あり | なし | 
| レポート (リスト) | なし | なし | なし | あり | なし | 
| レビュー合計 | なし | なし | なし | あり | なし | 
| 販売レポート | あり | なし | なし | あり | なし | 
| 配送方法 | なし | なし | なし | あり | なし | 
| 配送ゾーン | なし | なし | なし | あり | なし | 
| 配送ゾーンの場所 | なし | なし | なし | あり | なし | 
| 配送ゾーンの方法 | なし | なし | なし | あり | なし | 
| 税率 | はい | あり | あり | あり | あり | 
| 税クラス | なし | なし | なし | あり | なし | 
| 上位の販売者レポート | あり | なし | なし | あり | なし | 

**例**:

```
woocommerce_read = glueContext.create_dynamic_frame.from_options(
    connection_type="glue.spark.woocommerce",
    connection_options={
        "connectionName": "connectionName",
        "ENTITY_NAME": "coupon",
        "API_VERSION": "v3",
        "INSTANCE_URL": "instanceUrl"
    }
```

**WooCommerce エンティティとフィールドの詳細**:

[\[See the AWS documentation website for more details\]](http://docs.aws.amazon.com/ja_jp/glue/latest/dg/woocommerce-reading-from-entities.html)

**注記**  
構造体データ型とリストデータ型は、コネクタの応答で文字列データ型に変換され、DateTime データ型は Timestamp に変換されます。

## パーティショニングクエリ
<a name="woocommerce-reading-partitioning-queries"></a>

**レコードベースのパーティション分割**:

Spark で並行処理を使用する場合は、追加の Spark オプション `NUM_PARTITIONS` を指定できます。これらのパラメータを使用すると、元のクエリは Spark タスクで同時に実行できるサブクエリの `NUM_PARTITIONS` の数に分割されます。

レコードベースのパーティショニングでは、存在するレコードの合計数が WooCommerce API からクエリされ、指定された `NUM_PARTITIONS` 数で割られます。その後、結果のレコード数は、各サブクエリによって同時に取得されます。
+ `NUM_PARTITIONS`: パーティション数。

次のエンティティは、レコードベースのパーティショニングをサポートしています。
+ coupon
+ order
+ product
+ product-attribute
+ product-attribute-term
+ product-category
+ product-review
+ product-shipping-class
+ product-tag
+ product-variation
+ tax-rate

例:

```
woocommerce_read = glueContext.create_dynamic_frame.from_options(
    connection_type="glue.spark.woocommerce",
    connection_options={
        "connectionName": "connectionName",
        "ENTITY_NAME": "coupon",
        "API_VERSION": "v3",
        "INSTANCE_URL": "instanceUrl"
        "NUM_PARTITIONS": "10"
    }
```

**レコードベースのパーティション分割**:

元のクエリは、元のクエリは Spark タスクで同時に実行できるサブクエリの `NUM_PARTITIONS` の数に分割されます。
+ `NUM_PARTITIONS`: パーティション数。

例:

```
WooCommerce_read = glueContext.create_dynamic_frame.from_options(
    connection_type="WooCommerce",
    connection_options={
        "connectionName": "connectionName",
        "REALMID": "1234567890123456789",
        "ENTITY_NAME": "Bill",
        "API_VERSION": "v3",
        "NUM_PARTITIONS": "10"
    }
```

# WooCommerce 接続オプション
<a name="woocommerce-connection-options"></a>

WooCommerce の接続オプションは次のとおりです。
+ `ENTITY_NAME`(文字列) – (必須) 読み取りに使用されます。WooCommerce のオブジェクトの名前。
+ `API_VERSION`(文字列) – (必須) 読み取りに使用されます。使用する WooCommerce Rest API バージョン。
+ `REALM_ID`(文字列) – リクエストを送信する個々の WooCommerce Online 会社を識別する ID。
+ `SELECTED_FIELDS`(List<String>) – Default: empty(SELECT \$1). 読み込みに使用されます。オブジェクトに選択する列です。
+ `FILTER_PREDICATE`(文字列) – デフォルト: 空 読み込みに使用されます。Spark SQL 形式である必要があります。
+ `QUERY`(文字列) - デフォルト: 空 読み込みに使用されます。完全な Spark SQL クエリです。
+ `INSTANCE_URL`(文字列) – (必須) https://<instance>.wpcomstaging.com 形式の有効な WooCommerce インスタンス URL
+ `NUM_PARTITIONS`(整数) – デフォルト: 1。読み込みに使用されます。読み取り用のパーティションの数です。

# Zendesk への接続
<a name="connecting-to-data-zendesk"></a>

Zendesk は、カスタマーサービスポータル、ナレッジベース、オンラインコミュニティを構築するためのカスタマイズ可能なツールを提供するクラウドベースのヘルプデスク管理ソリューションです。

**Topics**
+ [Zendesk 用 AWS Glue サポート](zendesk-support.md)
+ [接続を作成および使用するための API オペレーションを含むポリシー](zendesk-configuring-iam-permissions.md)
+ [Zendesk の設定](zendesk-configuring.md)
+ [Zendesk 接続の設定](zendesk-configuring-connections.md)
+ [Zendesk エンティティからの読み取り](zendesk-reading-from-entities.md)
+ [Zendesk 接続オプション](zendesk-connection-options.md)
+ [制限](zendesk-limitations.md)

# Zendesk 用 AWS Glue サポート
<a name="zendesk-support"></a>

AWS Glue は、次のように Zendesk をサポートします。

**ソースとしてサポートされていますか?**  
はい。AWS Glue ETL ジョブを使用して、Zendesk からデータをクエリできます。

**ターゲットとしてサポートされていますか?**  
いいえ。

**サポートされている Zendesk の API バージョン**  
次の Zendesk の API バージョンがサポートされています
+ v2

# 接続を作成および使用するための API オペレーションを含むポリシー
<a name="zendesk-configuring-iam-permissions"></a>

次のサンプル ポリシーで、接続の作成と使用に必要な AWS IAM 権限について説明します。新しいロールを作成する場合は、以下を含むポリシーを作成します。

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

****  

```
{
  "Version":"2012-10-17",		 	 	 
  "Statement": [
    {
      "Effect": "Allow",
      "Action": [
        "glue:ListConnectionTypes",
        "glue:DescribeConnectionType",
        "glue:RefreshOAuth2Tokens",
        "glue:ListEntities",
        "glue:DescribeEntity"
      ],
      "Resource": "*"
    }
  ]
}
```

------

上記の方法を使用しない場合は、代わりに次のマネージド IAM ポリシーを使用します。
+ [AWSGlueServiceRole](https://console.aws.amazon.com/iam/home#policies/arn:aws:iam::aws:policy/service-role/AWSGlueServiceRole) – さまざまな AWS Glue プロセスを実行するために必要なリソースへのアクセス権をユーザーに代わって付与します。これらのリソースには AWS Glue 、Amazon S3、IAM、CloudWatch Logs、および Amazon EC2 が含まれます。このポリシーで指定されたリソースの命名規則に従った場合、AWS Glue プロセスは必要なアクセス権限を使用できます。このポリシーは、通常、クローラ、ジョブ、開発エンドポイントを定義するときに指定されたロールにアタッチされます。
+ [AWSGlueConsoleFullAccess](https://console.aws.amazon.com/iam/home#policies/arn:aws:iam::aws:policy/AWSGlueConsoleFullAccess) — ポリシーがアタッチされているアイデンティティが AWS マネージメントコンソールを使用するときは、AWS Glue リソースへのフルアクセスを許可します。このポリシーで指定されたリソースの命名規則に従った場合、ユーザーは完全なコンソール機能を使用できます。このポリシーは、通常 AWS Glue コンソールのユーザーにアタッチされています。

# Zendesk の設定
<a name="zendesk-configuring"></a>

AWS Glue を使用して Zendesk からデータを転送できるようにするには、次の要件を満たす必要があります。

## 最小要件
<a name="zendesk-configuring-min-requirements"></a>

以下に、最小要件を示します。
+ Zendesk アカウントを持っていること。詳細については、「[Zendesk アカウントの作成](#zendesk-configuring-creating-account)」を参照してください。
+ Zendesk アカウントに API アクセスが有効になっていること。
+ Zendesk アカウントにより、接続されたアプリをインストールできること。

これらの要件を満たしている場合、AWS Glue を Zendesk アカウントに接続する準備ができています。

## Zendesk アカウントの作成
<a name="zendesk-configuring-creating-account"></a>

Zendesk アカウントを作成するには:

1. https://www.zendesk.com/in/register/ に移動します

1. 勤務先の E メールアドレス、名、姓、電話番号、役職、会社名、会社の従業員数、パスワード、優先言語などの詳細を入力します。次に、**[トライアルサインアップを完了]** を選択します。

1. アカウントが作成されたら、受信した認証リンクを完了させて E メールアドレスを確認します。

1. 勤務先の E メールアドレスが確認されたら、Zendesk アカウントにリダイレクトされます。任意のプランに **[Zendesk の購入オプション]** を選択します。注: Zendesk コネクタには、Suite Enterprise プランを購入することをお勧めします。

## クライアントアプリケーションと OAuth 2.0 認証情報の作成
<a name="zendesk-configuring-creating-client-app"></a>

クライアントアプリと OAuth 2.0 の認証情報を作成するには:

1. OAuth 2.0 アプリの作成先になる Zendesk アカウントにログインします。https://www.zendesk.com/in/login/

1. 歯車アイコンをクリックします。**[管理センターに移動]** リンクを選択し、管理センターのページを開きます。

1. 左側のサイドバーで **[アプリと統合]** を選択し、**[API]** > **[Zendesk API]** を選択します。

1. Zendesk API ページで、**[OAuth クライアント]** タブを選択します。

1. 右側で **[Oauth クライアントを追加]** を選択します。

1. 次のフィールドに入力して、クライアントを作成します。

   1. クライアント名 – アプリの名前を入力します。アプリケーションのアクセス許可が求められる際、ユーザーに表示される名前です。Zendesk にアクセス可能なサードパーティアプリのリストを確認するときにも表示されます。

   1. 説明 – オプション。アプリへのアクセス許可が求められる際、ユーザーに表示されるアプリの簡潔な説明。

   1. Company – オプション。アプリケーションへのアクセス許可が求められる際、ユーザーに表示される会社名。この情報は、ユーザーがアクセスを許可する相手を理解するために役立ちます。

   1. ロゴ – オプション。アプリケーションへのアクセス許可が求められる際、ユーザーに表示されるロゴです。画像は JPG、GIF、PNG の形式を利用できます。最良の結果を得るには、正方形の画像をアップロードしてください。認可ページに合わせてサイズ変更されます。

   1. 一意の識別子 – フィールドには、アプリに入力した名前のリフォーマットされたバージョンが自動的に入力されます。この名前は必要な場合、変更できます。

   1. リダイレクト URL – アプリケーションへのアクセスを許可するユーザーの決定を送信するため、Zendesk が使用する URL を入力します。

      例: https://us-east-1.console.aws.amazon.com/gluestudio/oauth

1. **[保存]** をクリックします。

1. ページが更新されたら、新しい事前入力された **[シークレット]** フィールドが下部に表示されます。これは OAuth2 仕様で指定された「client\$1secret」値です。シークレット値をクリップボードにコピーし、安全な場所に保存してください。注意: 文字はテキストボックスの幅を超える可能性があるため、コピーする前に必ずすべての内容を選択してください。

1. **[保存]** をクリックします。

# Zendesk 接続の設定
<a name="zendesk-configuring-connections"></a>

Zendesk コネクタは認可コードの付与タイプをサポートしています。
+ このグラントタイプは、ユーザーを認証するためにサードパーティーの認証サーバーにユーザーをリダイレクトすることから、「three-legged」の OAuth と見なされます。AWS Glue コンソール経由で接続を作成するときに使用されます。接続を作成するユーザーは、デフォルトで AWS Glue 所有の接続されたアプリケーション (AWS Glue マネージドクライアントアプリケーション) に依存する場合があります。この場合、Zendesk インスタンス URL 以外の OAuth 関連情報を提供する必要はありません。AWS Glue コンソールでは、ユーザーが Zendesk にリダイレクトされます。ここではユーザーがログインし、Zendesk インスタンスにアクセスするためのリクエストされた権限を AWS Glue に許可する必要があります。
+ Zendesk で独自の接続アプリを作成し、AWS Glue コンソールを介して接続を作成するときに独自のクライアント ID とクライアントシークレットを指定することを選択できます。このシナリオでは、引き続き Zendesk にリダイレクトされてログインし、リソースへアクセスするために AWS Glue を承認します。
+ このグラントタイプは、アクセストークンになります。アクセストークンは期限切れになりません。

認可コード OAuth フロー用の接続アプリケーションの作成に関する Zendesk の公開ドキュメントについては、「[グラントタイプの OAuth トークン](https://developer.zendesk.com/api-reference/ticketing/oauth/grant_type_tokens/)」を参照してください。

Zendesk 接続を設定するには:

1. AWS Secrets Manager で、次の詳細を含むシークレットを作成します。

   1. AuthorizationCode グラントタイプの場合: カスタマーマネージド接続アプリケーションの場合、シークレットには `USER_MANAGED_CLIENT_APPLICATION_CLIENT_SECRET` を使用して接続されたアプリケーションのコンシューマーシークレットをキーとして含める必要があります。

   1. 注: AWS Glue で接続ごとにシークレットを作成する必要があります。

1. AWS Glue Glue Studio で、以下の手順に従って **[データ接続]** の下に接続を作成します。

   1. **[接続タイプ]** を選択する際に、[Zendesk] を選択します。

   1. 接続する Zendesk の INSTANCE\$1URL を指定します。

   1. Zendesk 環境を指定します。

   1. 次のアクションを実行でき、AWS Glue がその権限を持つ AWS IAM ロールを選択します。

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

****  

      ```
      {
        "Version":"2012-10-17",		 	 	 
        "Statement": [
          {
            "Effect": "Allow",
            "Action": [
              "secretsmanager:DescribeSecret",
              "secretsmanager:GetSecretValue",
              "secretsmanager:PutSecretValue",
              "ec2:CreateNetworkInterface",
              "ec2:DescribeNetworkInterfaces",
              "ec2:DeleteNetworkInterface"
            ],
            "Resource": "*"
          }
        ]
      }
      ```

------

   1. AWS Glue でこの接続に使用する `secretName` を選択して、トークンを配置します。

   1. ネットワークを使用する場合は、ネットワークオプションを選択します。

1. AWS Glue ジョブに関連付けられている IAM ロールに `secretName` を読み取るアクセス許可を付与します。

# Zendesk エンティティからの読み取り
<a name="zendesk-reading-from-entities"></a>

**前提条件**

読み取り元の Zendesk オブジェクト。次の表に示すように、チケット、ユーザー、記事などのオブジェクト名が必要になります。


| エンティティ | フィルタリング可能 | 制限をサポートする | Order By をサポートする | Select \$1 をサポートする | パーティション分割をサポートする | 
| --- | --- | --- | --- | --- | --- | 
| Ticket | Y | Y | Y | Y | N | 
| ユーザー | Y | Y | Y | Y | N | 
| 組織 | Y | Y | Y | Y | N | 
| Article | Y | Y | N | Y | N | 
| Ticket Event | Y | Y | N | Y | N | 
| Ticket Metric Event | Y | Y | N | Y | N | 
| Ticket Comment | Y | Y | Y | Y | N | 
| Ticket Field | Y | Y | N | Y | N | 
| Ticket Metric | Y | Y | N | Y | N | 
| Ticket Activity | Y | Y | N | Y | N | 
| Ticket Skip | N | Y | N | Y | N | 
| グループ | Y | Y | Y | Y | N | 
| Group Membership | N | Y | Y | Y | N | 
| Satisfaction Rating | Y | Y | N | Y | N | 
| ビュー | Y | Y | Y | Y | N | 
| Trigger トリガー) | Y | Y | Y | Y | N | 
| Trigger Category | N | Y | Y | Y | N | 
| マクロ | Y | Y | Y | Y | N | 
| Automation | N | Y | Y | Y | N | 

**例**:

```
Zendesk_read = glueContext.create_dynamic_frame.from_options(
    connection_type="Zendesk",
    connection_options={
        "connectionName": "connectionName",
        "ENTITY_NAME": "Account",
        "API_VERSION": "v2"
    }
```

**Zendesk エンティティとフィールドの詳細**:

[\[See the AWS documentation website for more details\]](http://docs.aws.amazon.com/ja_jp/glue/latest/dg/zendesk-reading-from-entities.html)

**注記**  
構造体データ型とリストデータ型は、コネクタの応答で文字列データ型に変換されます。

## パーティショニングクエリ
<a name="zendesk-reading-partitioning-queries"></a>

パーティションは Zendesk ではサポートされていません。

# Zendesk 接続オプション
<a name="zendesk-connection-options"></a>

Zendesk の接続オプションは次のとおりです。
+ `ENTITY_NAME`(文字列) – (必須) 読み取りに使用されます。Zendesk のオブジェクトの名前。
+ `API_VERSION`(文字列) – (必須) 読み取りに使用されます。使用する Zendesk Rest の API バージョン。例: v2。
+ `SELECTED_FIELDS`(List<String>) – Default: empty(SELECT \$1). 読み込みに使用されます。オブジェクトに選択する列です。例: id、name、url、created\$1at
+ `FILTER_PREDICATE`(文字列) – デフォルト: 空 読み込みに使用されます。Spark SQL 形式である必要があります。例: group\$1id = 100
+ `QUERY`(文字列) – デフォルト: 空 読み込みに使用されます。完全な Spark SQL クエリです。例: "SELECT id,url FROM users WHERE role=\$1"end-user\$1""
+ `PARTITION_FIELD`(文字列) - 読み取りに使用されます。クエリをパーティション化するために使用するフィールドです。増分エクスポート API をサポートするエンティティの場合、デフォルトフィールドは `update_at` です (`ticket-events` の場合は `created_at`、`ticket-metric-events` の場合は `time`)。
+ `LOWER_BOUND`(文字列) - 読み取りに使用されます。選択したパーティションフィールドの包括的な下限値。
+ `UPPER_BOUND` (文字列) - 読み取りに使用されます。選択したパーティションフィールドの排他的上限値です。オプション – ジョブオプションで指定されていない場合、このオプションはコネクタによって処理されます。デフォルト値 – "2024-05-01T20:55:02.000Z"
+ `NUM_PARTITIONS`(整数) – デフォルト: 1。読み込みに使用されます。読み取り用のパーティションの数です。オプション – ジョブオプションで指定されていない場合、このオプションはコネクタによって処理されます。デフォルト値: 1。
+ `IMPORT_DELETED_RECORDS` (文字列) - デフォルト: FALSE。読み込みに使用されます。クエリ中に削除レコードを取得するには。
+ `ACCESS_TOKEN` – リクエストで使用されるアクセストークン。
+ `INSTANCE_URL` – ユーザーがオペレーションを実行するインスタンスの URL。例: https://\$1subdomain\$1/.zendesk.com

# 制限
<a name="zendesk-limitations"></a>

Zendesk コネクタの制限内容は次のとおりです。
+ オフセットベースのページ分割によって取得できるページ数が 100 に制限されますが、取得できるレコードの総数が 10,000 であるため、お勧めしません。ただし、Zendesk コネクタに実装されているカーソルベースのページ分割により、この制限は無効になります。EQUAL\$1TO フィルターの演算子のみが Zendesk API を介してサポートされています。

  この制限により、パーティションは Zendesk コネクタをサポートしていません。
+ 「チケットイベント」エンティティの場合、レート制限は 1 分あたり 10 リクエストです。ETL AWS Glue ジョブの実行中、429 (リクエストが多すぎる) エラーが発生することがあります。

# Zoho CRM への接続
<a name="connecting-to-data-zoho-crm"></a>

Zoho CRM は、販売、マーケティング、カスタマーサポートのアクティビティをまとめて、プロセス、ポリシー、人材を 1 つのプラットフォームに合理化する単一のリポジトリとして機能します。Zoho CRM は、あらゆるビジネスのタイプや規模の特定のニーズに合わせて簡単にカスタマイズできます。

Zoho CRM の開発者プラットフォームは、作業を自動化し、エンタープライズスタック間でデータを統合し、ウェブやモバイル用のカスタムソリューションを作成するために、ビジネス/企業向けにローコードツールとプロコードツールの適切に組み合わせて提供します。

**Topics**
+ [AWS Glue の Zoho CRM サポート](zoho-crm-support.md)
+ [接続を作成および使用するための API オペレーションを含むポリシー](zoho-crm-configuring-iam-permissions.md)
+ [Zoho CRM の設定](zoho-crm-configuring.md)
+ [Zoho CRM 接続の設定](zoho-crm-configuring-connections.md)
+ [Zoho CRM エンティティからの読み取り](zoho-crm-reading-from-entities.md)
+ [Zoho CRM 接続オプション](zoho-crm-connection-options.md)
+ [Zoho CRM コネクタの制限と注意事項](zoho-crm-connector-limitations.md)

# AWS Glue の Zoho CRM サポート
<a name="zoho-crm-support"></a>

AWS Glue は、Zoho CRM を次のようにサポートします。

**ソースとしてサポートされていますか?**  
はい – Sync と Async。AWS Glue ETL ジョブを使用して、Zoho CRM からデータをクエリできます。

**ターゲットとしてサポートされていますか?**  
いいえ。

**サポートされている Zoho CRM API バージョン**  
次の Zoho CRM API バージョンがサポートされています:
+ v7

# 接続を作成および使用するための API オペレーションを含むポリシー
<a name="zoho-crm-configuring-iam-permissions"></a>

次のサンプル ポリシーで、接続の作成と使用に必要な AWS IAM 権限について説明します。新しいロールを作成する場合は、以下を含むポリシーを作成します。

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

****  

```
{
  "Version":"2012-10-17",		 	 	 
  "Statement": [
    {
      "Effect": "Allow",
      "Action": [
        "glue:ListConnectionTypes",
        "glue:DescribeConnectionType",
        "glue:RefreshOAuth2Tokens",
        "glue:ListEntities",
        "glue:DescribeEntity"
      ],
      "Resource": "*"
    }
  ]
}
```

------

上記の方法を使用しない場合は、代わりに次のマネージド IAM ポリシーを使用します:
+ [AWSGlueServiceRole](https://console.aws.amazon.com/iam/home#policies/arn:aws:iam::aws:policy/service-role/AWSGlueServiceRole) – さまざまな AWS Glue プロセスを実行するために必要なリソースへのアクセス権をユーザーに代わって付与します。これらのリソースには AWS Glue 、Amazon S3、IAM、CloudWatch Logs、および Amazon EC2 が含まれます。このポリシーで指定されたリソースの命名規則に従った場合、AWS Glue プロセスは必要なアクセス権限を使用できます。このポリシーは、通常、クローラ、ジョブ、開発エンドポイントを定義するときに指定されたロールにアタッチされます。
+ [AWSGlueConsoleFullAccess](https://console.aws.amazon.com/iam/home#policies/arn:aws:iam::aws:policy/AWSGlueConsoleFullAccess) — ポリシーがアタッチされているアイデンティティが AWS マネージメントコンソールを使用するときは、AWS Glue リソースへのフルアクセスを許可します。このポリシーで指定されたリソースの命名規則に従った場合、ユーザーは完全なコンソール機能を使用できます。このポリシーは、通常 AWS Glue コンソールのユーザーにアタッチされています。

# Zoho CRM の設定
<a name="zoho-crm-configuring"></a>

AWS Glue を使用して Zoho CRM からデータを転送できるようにするには、次の要件を満たす必要があります:

## 最小要件
<a name="zoho-crm-configuring-min-requirements"></a>

以下に、最小要件を示します。
+ Zoho CRM アカウントを持っている。
+ Zoho CRM アカウントで API アクセスが有効になっている。
+ API コンソールの下に OAuth 認証情報を取得するための登録済みの API クライアントがあります。

# Zoho CRM 接続の設定
<a name="zoho-crm-configuring-connections"></a>

グラントタイプは、AWS Glue が Zoho CRM と通信してデータへのアクセスをリクエストする方法を決定します。選択すると、接続を作成する前に満たす必要がある要件に影響します。Zoho CRM は、OAuth 2.0 の AUTHORIZATION\$1CODE のグラントタイプのみをサポートしています。
+ このグラントタイプは、ユーザーを認証するためにサードパーティーの認証サーバーにユーザーをリダイレクトすることから、「three-legged」の OAuth と見なされます。AWS Glue コンソール経由で接続を作成するときに使用されます。AWS Glue コンソールでは、ユーザーが Zoho CRM にリダイレクトされます。ここではユーザーがログインし、Zoho CRM インスタンスにアクセスするためのリクエストされた権限を Glue に許可する必要があります。
+ ユーザーは、Zoho CRM で独自の接続アプリを作成し、AWS Glue コンソールを介して接続を作成するときに独自のクライアント ID や認証 URL、トークン URL、インスタンス URL を指定することを選択できます。このシナリオでは、引き続き Zoho CRM にリダイレクトされてログインし、リソースへアクセスするために AWS Glue を承認します。
+ このグラントタイプは、更新トークンとアクセストークンになります。アクセストークンの有効期間は 1 時間のままなので、更新トークンを使用することでユーザーとやり取りすることなく自動的に更新される場合があります。
+ 認可コード OAuth フロー用の接続アプリケーションの作成に関する Zoho CRM の公開ドキュメントについては、「[認証](https://www.zoho.com/crm/developer/docs/api/v7/oauth-overview.html)」を参照してください。

Zoho CRM 接続を設定するには:

1. AWS Glue Glue Studio で、以下の手順に従って **[データ接続]** の下に接続を作成します。

   1. **[接続タイプ]** を選択する際に、[Zoho CRM] を選択します。

   1. 接続したい Zoho CRM インスタンスの `INSTANCE_URL` を指定します。

   1. ユーザークライアントアプリケーションのクライアント ID を指定します。

   1. ドロップダウンから適切な **[認証 URL]** を選択します。

   1. ドロップダウンから適切な **[トークン URL]** を選択します。

   1. 次のアクションを実行でき、AWS Glue がその権限を持つ AWS IAM ロールを選択します。

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

****  

      ```
      {
        "Version":"2012-10-17",		 	 	 
        "Statement": [
          {
            "Effect": "Allow",
            "Action": [
              "secretsmanager:DescribeSecret",
              "secretsmanager:GetSecretValue",
              "secretsmanager:PutSecretValue",
              "ec2:CreateNetworkInterface",
              "ec2:DescribeNetworkInterfaces",
              "ec2:DeleteNetworkInterface"
            ],
            "Resource": "*"
          }
        ]
      }
      ```

------

   1. AWS Glue でこの接続に使用する `secretName` を選択して、トークンを配置します。

   1. ネットワークを使用する場合は、ネットワークオプションを選択します。

1. AWS Glue ジョブに関連付けられている IAM ロールに `secretName` を読み取るアクセス許可を付与します。

1. AWS Glue ジョブ設定で、**[追加のネットワーク接続]** として `connectionName` を指定します。

# Zoho CRM エンティティからの読み取り
<a name="zoho-crm-reading-from-entities"></a>

**前提条件**

読み取り元の Zoho CRM オブジェクト。オブジェクト名が必要になります。

**Sync ソースに対応するエンティティ**:


| エンティティ | フィルタリング可能 | 制限をサポートする | Order By をサポートする | Select \$1 をサポートする | パーティション分割をサポートする | 
| --- | --- | --- | --- | --- | --- | 
| 製品 | はい | あり | あり | あり | あり | 
| Quote | はい | あり | あり | あり | あり | 
| Purchase Order | はい | あり | あり | あり | あり | 
| ソリューション | はい | あり | あり | あり | あり | 
| 電話 | はい | あり | あり | あり | あり | 
| タスク | はい | あり | あり | あり | あり | 
| イベント | はい | あり | あり | あり | あり | 
| Invoice | はい | あり | あり | あり | あり | 
| アカウント | はい | あり | あり | あり | あり | 
| 連絡先 | はい | あり | あり | あり | あり | 
| Vendor | はい | あり | あり | あり | あり | 
| キャンペーン | はい | あり | あり | あり | あり | 
| Deal | はい | あり | あり | あり | あり | 
| リード | はい | あり | あり | あり | あり | 
| Custom Module | はい | あり | あり | あり | あり | 
| Sales Order | はい | あり | あり | あり | あり | 
| Price Books | はい | あり | あり | あり | あり | 
| ケース | はい | あり | あり | あり | あり | 

**例**:

```
zoho_read = glueContext.create_dynamic_frame.from_options(
    connection_type="ZOHO",
    connection_options={
        "connectionName": "connectionName",
        "ENTITY_NAME": "entityName",
        "API_VERSION": "v7",
        "INSTANCE_URL": "https://www.zohoapis.in/"
    }
```

**Async ソースに対応するエンティティ**:


| エンティティ | フィルタリング可能 | 制限をサポートする | Order By をサポートする | Select \$1 をサポートする | パーティション分割をサポートする | 
| --- | --- | --- | --- | --- | --- | 
| 製品 | あり | なし | なし | あり | なし | 
| Quote | あり | なし | なし | あり | なし | 
| Purchase Order | あり | なし | なし | あり | なし | 
| ソリューション | あり | なし | なし | あり | なし | 
| 電話 | あり | なし | なし | あり | なし | 
| タスク | あり | なし | なし | あり | なし | 
| イベント | あり | なし | なし | あり | なし | 
| Invoice | あり | なし | なし | あり | なし | 
| アカウント | あり | なし | なし | あり | なし | 
| 問い合わせ | あり | なし | なし | あり | なし | 
| Vendor | あり | なし | なし | あり | なし | 
| キャンペーン | あり | なし | なし | あり | なし | 
| Deal | あり | なし | なし | あり | なし | 
| リード | あり | なし | なし | あり | なし | 
| Custom Module | あり | なし | なし | あり | なし | 
| Sales Order | あり | なし | なし | あり | なし | 
| Price Books | あり | なし | なし | あり | なし | 
| ケース | あり | なし | なし | あり | なし | 

**例**:

```
zoho_read = glueContext.create_dynamic_frame.from_options(
    connection_type="ZOHO",
    connection_options={
        "connectionName": "connectionName",
        "ENTITY_NAME": "entityName",
        "API_VERSION": "v7",
        "INSTANCE_URL": "https://www.zohoapis.in/",
        "TRANSFER_MODE": "ASYNC"
    }
```

**Zoho CRM フィールドの詳細**:

Zoho CRM では、サポートされているエンティティのメタデータを動的に取得するためのエンドポイントが提供されます。したがって、オペレータのサポートはデータ型レベルでキャプチャされます。

[\[See the AWS documentation website for more details\]](http://docs.aws.amazon.com/ja_jp/glue/latest/dg/zoho-crm-reading-from-entities.html)

## パーティショニングクエリ
<a name="zoho-crm-reading-partitioning-queries"></a>

パーティショニングは Async モードではサポートされていません。

**フィルターベースのパーティショニング (Sync モード)**:

Spark で同時実行を使用する場合は、追加の Spark オプション `PARTITION_FIELD`、`LOWER_BOUND`、`UPPER_BOUND`、および `NUM_PARTITIONS` を指定できます。これらのパラメータを使用すると、元のクエリは Spark タスクで同時に実行できるサブクエリの `NUM_PARTITIONS` の数に分割されます。
+ `PARTITION_FIELD`: クエリのパーティション化に使用するフィールドの名前。
+ `LOWER_BOUND`: 選択したパーティションフィールドの**包括的な**下限値。

  Datetime フィールドでは、Spark SQL クエリで使用される Spark タイムスタンプ形式を受け入れます。

  有効な値の例は次のとおりです:

  ```
  "2024-09-30T01:01:01.000Z"
  ```
+ `UPPER_BOUND`: 選択したパーティションフィールドの**排他的**上限値。
+ `NUM_PARTITIONS`: パーティション数。

例:

```
zoho_read = glueContext.create_dynamic_frame.from_options(
    connection_type="zohocrm",
    connection_options={
        "connectionName": "connectionName",
        "ENTITY_NAME": "entityName",
        "API_VERSION": "v7",
        "PARTITION_FIELD": "Created_Time"
        "LOWER_BOUND": "2022-01-01T01:01:01.000Z"
        "UPPER_BOUND": "2024-01-01T01:01:01.000Z"
        "NUM_PARTITIONS": "10"
    }
```

# Zoho CRM 接続オプション
<a name="zoho-crm-connection-options"></a>

Zoho CRM の接続オプションは次のとおりです:
+ `ENTITY_NAME` (文字列) – (必須) 読み取りに使用されます。Zoho CRM のオブジェクトの名前。
+ `API_VERSION` (文字列) – (必須) 読み取りに使用されます。使用する Zoho CRM Rest API バージョン。
+ `SELECTED_FIELDS`(List<String>) – Default: empty(SELECT \$1). 読み込みに使用されます。オブジェクトに選択する列です。
+ `FILTER_PREDICATE`(文字列) – デフォルト: 空 読み込みに使用されます。Spark SQL 形式である必要があります。
+ `QUERY`(文字列) - デフォルト: 空 読み込みに使用されます。完全な Spark SQL クエリです。
+ `PARTITION_FIELD`(文字列) - 読み取りに使用されます。クエリをパーティション化するために使用するフィールドです。
+ `LOWER_BOUND`(文字列) - 読み取りに使用されます。選択したパーティションフィールドの包括的な下限値。
+ `UPPER_BOUND` (文字列) - 読み取りに使用されます。選択したパーティションフィールドの排他的上限値。
+ `NUM_PARTITIONS`(整数) – デフォルト: 1。読み込みに使用されます。読み取り用のパーティションの数です。
+ `INSTANCE_URL` (文字列) – (必須) 読み取りに使用されます。有効な Zoho CRM インスタンス URL。
+ `TRANSFER_MODE`(文字列) - クエリを Async モードで実行するかどうかを示すために使用されます。

# Zoho CRM コネクタの制限と注意事項
<a name="zoho-crm-connector-limitations"></a>

Zoho CRM コネクタの制限と注意事項は次のとおりです:
+ API バージョン v7 では、最大 100,000 件のレコードをフェッチできます。[Zoho のドキュメント](https://www.zoho.com/crm/developer/docs/api/v7/get-records.html)を参照してください。
+ イベントエンティティの場合、「会議」というラベルが[Zoho のドキュメント](https://www.zoho.com/crm/developer/docs/api/v7/modules-api.html)で説明されているように表示されます。
+ Select All 機能の場合:
  + GET コールと POST コールの両方で、SaaS から最大 50 個のフィールドをフェッチできます。
  + 最初の 50 個のフィールドに属さない特定のフィールドのデータがある場合は、選択したフィールドのリストを手動で指定する必要があります。
  + 50 以上のフィールドが選択されている場合、50 を超えるフィールドはすべて調整され、Amazon S3 には NULL データが入ります。
  + フィルター式の場合、ユーザーが指定した 50 個のフィールドのリストに「id」と「Created\$1Time」がない場合、カスタム例外が発生し、ユーザーにこれらのフィールドを含めるように求められます。
+ フィルター演算子は、データ型が同じであっても、フィールドに応じて異なる場合があります。したがって、SaaS プラットフォームでエラーをトリガーするフィールドには、別の演算子を手動で指定する必要があります。
+ Sort By 機能の場合:
  + データはフィルター式なしで 1 つのフィールドでのみソートできますが、フィルター式が適用されると複数のフィールドでソートできます。
  + 選択したフィールドにソート順が指定されていない場合、データはデフォルトで昇順で取得されます。
+ Zoho CRM コネクタでサポートされているリージョンは、米国、欧州、インド、オーストラリア、および日本です。
+ Async 読み取り機能 [制限事項:](https://www.zoho.com/crm/developer/docs/api/v7/bulk-read/limitations.html)
  + Async モードでは、制限順序およびパーティショニングはサポートされていません。
  + Async モードでは、最大 500 ページ、1 ページあたり 200,000 レコードのデータを転送できます。
  + 1 分間隔では、ダウンロードできるリクエストは 10 件のみです。ダウンロード制限を超えると、システムは HTTP 429 エラーを返し、すべてのダウンロードリクエストを 1 分間一時停止し、その後処理が再開されます。
  + 一括ジョブが完了したら、ダウンロード可能なファイルには 1 日間のみアクセスできます。その後、エンドポイント経由でファイルにアクセスすることはできません。
  + エンドポイントを介して指定できる選択フィールドは最大 200 個です。エンドポイントで 200 を超える選択フィールドを指定すると、そのモジュールで使用可能なすべてのフィールドが自動的にエクスポートされます。
  + モジュールで作成された外部フィールドは、Bulk Read API ではサポートされていません。
  + この API エンドポイントでは、Sorting および `Group_by` 句はサポートされていません。
  + 機密ヘルスデータを含むフィールドの値は、コンプライアンス設定の **[API を介したデータアクセスの制限]** オプションが **[無効]** になっている場合にのみ取得されます。オプションが有効になっている場合、結果は **[空]** になります。
  + フィルタリング/基準の制限
    + クエリで使用できる基準の最大数は 25 です。
    + 複数行のテキストフィールドでのフィルタリング/基準はサポートされていません。

# Zoom Meetings に対する接続
<a name="connecting-to-data-zoom-meetings"></a>

Zoom Meetings は、ビデオ会議、音声会議、ウェビナー、会議録音、ライブチャットに使用できるクラウドベースのビデオ会議プラットフォームです。

**Topics**
+ [Zoom Meetings 向けの AWS Glue サポート](zoom-meetings-support.md)
+ [接続を作成および使用するための API オペレーションを含むポリシー](zoom-meetings-configuring-iam-permissions.md)
+ [Zoom Meetings の設定](zoom-meetings-configuring.md)
+ [Zoom Meetings クライアントアプリの設定](zoom-meetings-configuring-client-app.md)
+ [Zoom Meetings 接続の設定](zoom-meetings-configuring-connections.md)
+ [Zoom Meetings エンティティからの読み取り](zoom-meetings-reading-from-entities.md)
+ [Zoom Meetings 接続オプション](zoom-meetings-connection-options.md)
+ [Zoom Meetings の制限事項](zoom-meetings-limitations.md)

# Zoom Meetings 向けの AWS Glue サポート
<a name="zoom-meetings-support"></a>

AWS Glue は、次のように Zoom Meetings をサポートします。

**ソースとしてサポートされていますか?**  
はい。AWS Glue ETL ジョブを使用して、Zoom Meetings からデータをクエリできます。

**ターゲットとしてサポートされていますか?**  
いいえ。

**サポートされている Zoom Meetings API バージョン**  
次の Zoom Meetings API バージョンがサポートされています。
+ v2

# 接続を作成および使用するための API オペレーションを含むポリシー
<a name="zoom-meetings-configuring-iam-permissions"></a>

次のサンプル ポリシーで、接続の作成と使用に必要な AWS IAM 権限について説明します。新しいロールを作成する場合は、以下を含むポリシーを作成します。

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

****  

```
{
  "Version":"2012-10-17",		 	 	 
  "Statement": [
    {
      "Effect": "Allow",
      "Action": [
        "glue:ListConnectionTypes",
        "glue:DescribeConnectionType",
        "glue:RefreshOAuth2Tokens",
        "glue:ListEntities",
        "glue:DescribeEntity"
      ],
      "Resource": "*"
    }
  ]
}
```

------

上記の方法を使用しない場合は、代わりに次のマネージド IAM ポリシーを使用します:
+ [AWSGlueServiceRole](https://console.aws.amazon.com/iam/home#policies/arn:aws:iam::aws:policy/service-role/AWSGlueServiceRole) – さまざまな AWS Glue プロセスを実行するために必要なリソースへのアクセス権をユーザーに代わって付与します。これらのリソースには AWS Glue 、Amazon S3、IAM、CloudWatch Logs、および Amazon EC2 が含まれます。このポリシーで指定されたリソースの命名規則に従った場合、AWS Glue プロセスは必要なアクセス権限を使用できます。このポリシーは、通常、クローラ、ジョブ、開発エンドポイントを定義するときに指定されたロールにアタッチされます。
+ [AWSGlueConsoleFullAccess](https://console.aws.amazon.com/iam/home#policies/arn:aws:iam::aws:policy/AWSGlueConsoleFullAccess) — ポリシーがアタッチされているアイデンティティが AWS マネージメントコンソールを使用するときは、AWS Glue リソースへのフルアクセスを許可します。このポリシーで指定されたリソースの命名規則に従った場合、ユーザーは完全なコンソール機能を使用できます。このポリシーは、通常 AWS Glue コンソールのユーザーにアタッチされています。

# Zoom Meetings の設定
<a name="zoom-meetings-configuring"></a>

AWS Glue を使用して Zoom Meetings からデータを転送できるようにするには、次の要件を満たす必要があります。

## 最小要件
<a name="zoom-meetings-configuring-min-requirements"></a>

以下に、最小要件を示します。
+ Zoom Meetings アカウントを持っている。
+ Zoom アカウントで API アクセスが有効になっている。
+ Zoom Meetings アカウントに OAuth2 アプリを作成している。この統合により、AWS Glue がお客様のアカウントに対して認証呼び出しを行うときに、お客様のデータに安全にアクセスするために使用する認証情報が提供されます。詳細については、「[Zoom Meetings クライアントアプリの設定](zoom-meetings-configuring-client-app.md)」を参照してください。

これらの要件を満たすと、Zoom Meetings アカウントに AWS Glue を接続する準備が整います。一般的な接続では、Zoom Meetings で他に何もする必要はありません。

# Zoom Meetings クライアントアプリの設定
<a name="zoom-meetings-configuring-client-app"></a>

1. Zoom App Marketplace にログインします。

1. **[開発]**、**[アプリの構築]** の順で選択します。

1. OAuth 2.0 ベースのアプリの **[一般アプリ]** を選択します。

1. **[基本情報]** ページで、アプリの名前、アプリの管理方法、アプリの認証情報、OAuth 情報など、アプリに関する情報を追加または更新します。

1. **[アプリの管理方法の選択]** セクションで、アプリの管理方法を確認します。

   1. **[管理者管理]**: アカウント管理者はアプリを追加および管理します

   1. **[ユーザー管理]**: 個々のユーザーがアプリを追加および管理します。アプリは、ユーザーの承認されたデータにのみアクセスできます。

1. **[アプリ認証情報]**: ビルドフローは、アプリのアプリ認証情報 (クライアント ID とクライアントシークレット) を自動的に生成します。

1. OAuth 情報セクションで、アプリの OAuth を設定します。

   1. **[OAuth リダイレクト URL]** (必須): リダイレクト URL またはエンドポイントを入力して、アプリと Zoom の間に OAuth を設定します。

   1. **[厳格モード URL を使用する]** (オプション)

   1. **サブドメインチェック** (オプション)

   1. **[OAuth 許可リスト]** (必須): Zoom が OAuth フローの有効なリダイレクトとして許可する一意の URL を追加します。

1. **[スコープ]** ページで、アプリが呼び出すことができる Zoom API メソッドを選択します。スコープは、ユーザーが利用できる情報と機能を定義します。次の詳細なスコープを選択します。
   + user:read:list\$1users:admin
   + zoom\$1rooms:read:list\$1rooms:admin
   + group:read:list\$1members:admin
   + group:read:administrator:admin
   + group:read:list\$1groups:admin
   + report:read:admin
   + role:read:list\$1roles、role:read:list\$1roles:admin

   スコープが追加されたら、**[続行]** を選択すると、アプリを使用する準備が整います。

OAuth 2.0 のセットアップの詳細については、「[統合 (OAuth アプリ)](https://developers.zoom.us/docs/integrations/)」を参照してください。

# Zoom Meetings 接続の設定
<a name="zoom-meetings-configuring-connections"></a>

Zoom Meetings は、OAuth2 の AUTHORIZATION\$1CODE のグラントタイプをサポートしています。グラントタイプは、AWS Glue が Zoom Meetings と通信してデータへのアクセスをリクエストする方法を決定します。
+ このグラントタイプは、ユーザーを認証するためにサードパーティーの認証サーバーにユーザーをリダイレクトすることから、「three-legged」の OAuth と見なされます。AWS Glue コンソール経由で接続を作成するときに使用されます。接続を作成するユーザーは、Zoom Meetings クライアントアプリケーションのクライアント ID やクライアントシークレットなどの OAuth 関連情報を指定する必要があります。AWS Glue コンソールでは、ユーザーが Zoom にリダイレクトされます。ここではユーザーがログインし、Zoom Meetings インスタンスにアクセスするためのリクエストされた権限を AWS Glue に許可する必要があります。
+ ユーザーは、Zoom Meetings で独自の接続アプリを作成し、AWS Glue コンソールを介して接続を作成するときに独自のクライアント ID とクライアントシークレットを指定することを選択できます。このシナリオでは、引き続き Zoom Meetings にリダイレクトされてログインし、リソースへアクセスするために AWS Glue を承認します。
+ このグラントタイプは、更新トークンとアクセストークンになります。アクセストークンの有効期間は短く、更新トークンを使用してユーザーとやり取りすることなく自動的に更新される場合があります。
+ 認可コード OAuth フロー用の接続アプリの作成に関する Zoom Meetings の公開ドキュメントについては、「[OAuth 2.0 を使用する](https://developers.zoom.us/docs/api/using-zoom-apis/#using-oauth-20)」を参照してください。

Zoom Meetings 接続を設定するには:

1. AWS Secrets Manager で、次の詳細を含むシークレットを作成します。

   1. カスタマーマネージド接続アプリケーションの場合、シークレットには、`USER_MANAGED_CLIENT_APPLICATION_CLIENT_SECRET` を使用して接続されたアプリケーションのコンシューマーシークレットをキーとして含める必要があります。

   1. 注: AWS Glue で接続にシークレットを作成する必要があります。

1. AWS Glue Glue Studio で、以下の手順に従って **[データ接続]** の下に接続を作成します。

   1. **[接続タイプ]** を選択する際に、[Zoom Meetings] を選択します。

   1. 接続先の Zoom Meetings 環境を指定します。

   1. 次のアクションを実行でき、AWS Glue がその権限を持つ AWS IAM ロールを選択します。

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

****  

      ```
      {
        "Version":"2012-10-17",		 	 	 
        "Statement": [
          {
            "Effect": "Allow",
            "Action": [
              "secretsmanager:DescribeSecret",
              "secretsmanager:GetSecretValue",
              "secretsmanager:PutSecretValue",
              "ec2:CreateNetworkInterface",
              "ec2:DescribeNetworkInterfaces",
              "ec2:DeleteNetworkInterface"
            ],
            "Resource": "*"
          }
        ]
      }
      ```

------

   1. AWS Glue でこの接続に使用する `secretName` を選択して、トークンを配置します。

   1. ネットワークを使用する場合は、ネットワークオプションを選択します。

1. AWS Glue ジョブに関連付けられている IAM ロールに `secretName` を読み取るアクセス許可を付与します。

# Zoom Meetings エンティティからの読み取り
<a name="zoom-meetings-reading-from-entities"></a>

**前提条件**

読み取り元の Zoom Meetings オブジェクト。`Group` または `Zoom Rooms` などのオブジェクト名が必要です。

**ソースに対応するエンティティ**:


| エンティティ | フィルタリング可能 | 制限をサポートする | Order By をサポートする | Select \$1 をサポートする | パーティション分割をサポートする | 
| --- | --- | --- | --- | --- | --- | 
| Zoom Rooms | なし | あり | なし | あり | なし | 
| グループ | なし | なし | なし | あり | なし | 
| グループメンバー | はい | あり | なし | あり | なし | 
| グループ管理者 | なし | あり | なし | あり | なし | 
| レポート (毎日) | あり | なし | なし | あり | なし | 
| ロール | なし | なし | なし | あり | なし | 
| [ユーザー] | はい | あり | なし | あり | なし | 

**例**:

```
zoom_read = glueContext.create_dynamic_frame.from_options(
    connection_type="zoom",
    connection_options={
        "connectionName": "connectionName",
        "ENTITY_NAME": "organization",
        "API_VERSION": "v2"
    }
)
```

**Zoom Meetings エンティティとフィールドの詳細**:

Zoom Meetings は、選択したエンティティで使用可能なフィールドを動的にロードします。フィールドのデータ型に応じて、次のフィルター演算子がサポートされます。

[\[See the AWS documentation website for more details\]](http://docs.aws.amazon.com/ja_jp/glue/latest/dg/zoom-meetings-reading-from-entities.html)

## パーティショニングクエリ
<a name="zoom-meetings-reading-partitioning-queries"></a>

Zoom Meetings は、フィルターベースのパーティショニングまたはレコードベースのパーティショニングをサポートしていません。

# Zoom Meetings 接続オプション
<a name="zoom-meetings-connection-options"></a>

Zoom Meetings の接続オプションは次のとおりです。
+ `ENTITY_NAME`(文字列) – (必須) 読み取りに使用されます。Zoom Meetings エンティティの名前。例えば、`group`。
+ `API_VERSION`(文字列) – (必須) 読み取りに使用されます。使用する Zoom Meetings Rest API バージョン。Zoom Meetings は現在バージョン v2 のみをサポートしているため、この値は `v2` になります。
+ `SELECTED_FIELDS`(List<String>) – Default: empty(SELECT \$1). 読み込みに使用されます。選択したエンティティに対して選択する列のカンマ区切りリスト。
+ `FILTER_PREDICATE`(文字列) – デフォルト: 空 読み込みに使用されます。Spark SQL 形式である必要があります。
+ `QUERY`(文字列) - デフォルト: 空 読み込みに使用されます。完全な Spark SQL クエリです。

# Zoom Meetings の制限事項
<a name="zoom-meetings-limitations"></a>

以下は、Zoom Meetings の制限事項または注意事項は次のとおりです。
+ Zoom Meetings は orderby をサポートしていません。
+ Zoom Meetings では、必要な条件を満たすフィールドがないため、フィルターベースのパーティション分割はサポートされていません。
+ Zoom Meetings では、ページ分割の制限とオフセットベースのページ分割がサポートされていないため、レコードベースのパーティション分割はサポートされていません。

# 独自の JDBC ドライバーを使用した JDBC 接続の追加
<a name="console-connections-jdbc-drivers"></a>

 JDBC 接続を使用する際に、独自の JDBC ドライバーを使用できます。AWS Glue クローラーが使用するデフォルトドライバーがデータベースに接続できない場合、独自の JDBC ドライバーを使用できます。例えば、Postgres データベースで SHA-256 を使用したいが、古い Postgres ドライバーがこれをサポートしていない場合は、独自の JDBC ドライバーを使用できます。

## サポート対象データソース
<a name="w2aac25c27d135b5"></a>


| サポート対象データソース | サポートされていないデータソース | 
| --- | --- | 
| MySQL | Snowflake | 
| Postgres |  | 
| Oracle |  | 
| Redshift |  | 
| SQL Server |  | 
| Aurora\$1 |  | 

 \$1 ネイティブの JDBC ドライバーが使用されている場合にサポートされます。すべてのドライバー機能を使用できるわけではありません。

## JDBC 接続への JDBC ドライバーの追加
<a name="w2aac25c27d135b9"></a>

**注記**  
 独自の JDBC ドライバーバージョンを導入する場合、AWS Glue クローラーは AWS Glue ジョブと Amazon S3 バケットのリソースを使用して、用意したドライバーが自分の環境で実行されるようにします。リソースの追加使用量はアカウントに反映されます。AWS Glue クローラーとジョブのコストは、請求の AWS Glue カテゴリに含まれます。さらに、独自の JDBC ドライバーを用意しても、クローラーがドライバーの機能をすべて活用できるわけではありません。

**独自の JDBC ドライバーを JDBC 接続に追加するには:**

1.  JDBC ドライバーファイルを Amazon S3 の場所に追加します。バケットおよび/またはフォルダを作成または使用できます。

1.  AWS Glue コンソールで、左側のメニューの **[データカタログ]** の **[接続]** を選択し、新しい接続を作成します。

1.  **[接続プロパティ]** のフィールドに入力し、**[接続タイプ]** で JDBC を選択します。

1.  **[接続アクセス]** に、**[JDBC URL]** と **[JDBC ドライバーのクラス名]** – *[オプション]* を入力します。ドライバークラス名は、AWS Glue クローラーがサポートするデータソースのものである必要があります。  
![\[このスクリーンショットは、JDBC が選択されたデータソースと、[データソースの追加] ウィンドウ内の接続を示しています。\]](http://docs.aws.amazon.com/ja_jp/glue/latest/dg/images/add-connection-connection-access.png)

1.  JDBC ドライバーが置かれている Amazon S3 パスを **[JDBC ドライバーの Amazon S3 パス]** – *[オプション]* フィールドで選択します。

1.  ユーザー名とパスワード、またはシークレットを入力する場合は、認証情報タイプのフィールドに入力します。完了したら、**[接続を作成]** を選択します。
**注記**  
 テスト接続は現在サポートされていません。用意した JDBC ドライバーを使用してデータソースをクローリングする場合、クローラーはこのステップをスキップします。

1.  新しく作成した接続をクローラーに追加します。AWS Glue コンソールで、左側のメニューの **[データカタログ]** で **[クローラー]** を選択し、新しいクローラーを作成します。

1.  **[クローラーの追加]** ウィザードの [ステップ 2] で **[データソースの追加]** を選択します。  
![\[このスクリーンショットは、JDBC が選択されたデータソースと、[データソースの追加] ウィンドウ内の接続を示しています。\]](http://docs.aws.amazon.com/ja_jp/glue/latest/dg/images/add-crawler-add-data-source.png)

1.  データソースとして **[JDBC]** を選択し、これまでの手順で作成した接続を選択します。完了 

1.  AWS Glue クローラーで独自の JDBC ドライバーを使用するには、クローラーで使用されるロールに次の権限を追加します。
   +  ジョブアクション `CreateJob`、`DeleteJob`、`GetJob`、`GetJobRun`、`StartJobRun` にアクセス権限を付与します。
   +  IAM アクション `iam:PassRole` にアクセス権限を付与します。
   +  Amazon S3 アクション `s3:DeleteObjects`、`s3:GetObject`、`s3:ListBucket`、`s3:PutObject` にアクセス権限を付与します。
   +  サービスプリンシパルに IAM ポリシーのバケット/フォルダへのアクセス権限を付与します。

    IAM ポリシーの例: 

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

****  

   ```
   {
     "Version":"2012-10-17",		 	 	 
     "Statement": [
       {
         "Sid": "VisualEditor0",
         "Effect": "Allow",
         "Action": [
           "s3:PutObject",
           "s3:GetObject",
           "s3:ListBucket",
           "s3:DeleteObject"
         ],
         "Resource": [
           "arn:aws:s3:::amzn-s3-demo-bucket/driver-parent-folder/driver.jar",
           "arn:aws:s3:::amzn-s3-demo-bucket"
         ]
       }
     ]
   }
   ```

------

    AWS Glue クローラーは、\$1glue\$1job\$1crawler と \$1crawler の 2 つのフォルダを作成します。

   ドライバー jar が `s3://amzn-s3-demo-bucket/driver.jar"` フォルダにある場合は、次のリソースを追加します: 

   ```
   "Resource": [
                   "arn:aws:s3:::amzn-s3-demo-bucket/_glue_job_crawler/*",
     		 "arn:aws:s3:::amzn-s3-demo-bucket/_crawler/*"
               ]
   ```

   ドライバー jar が `s3://amzn-s3-demo-bucket/tmp/driver/subfolder/driver.jar"` フォルダにある場合は、次のリソースを追加します: 

   ```
   "Resource": [
                  "arn:aws:s3:::amzn-s3-demo-bucket/tmp/_glue_job_crawler/*",
     		"arn:aws:s3:::amzn-s3-demo-bucket/tmp/_crawler/*"
               ]
   ```

1.  VPC を使用している場合は、インターフェイスエンドポイントを作成し、これをルートテーブルに追加して AWS Glue へのアクセスを許可する必要があります。詳細については、[AWS Glue 用のインターフェイス VPC エンドポイントの作成](https://docs.aws.amazon.com/glue/latest/dg/vpc-interface-endpoints.html#vpc-endpoint-create)を参照してください。

1.  データカタログで暗号化を使用している場合は、AWS KMS インターフェイスエンドポイントを作成し、これをルートテーブルに追加します。詳細については、[AWS KMS 用の VPC エンドポイントの作成](https://docs.aws.amazon.com/kms/latest/developerguide/kms-vpc-endpoint.html#vpce-create-endpoint) を参照してください。