

# 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。読み込みに使用されます。読み取り用のパーティションの数です。