

# 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 では、フィルタリングによる順序が期待どおりに機能しません。