

# 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 は、フィールドベースまたはレコードベースのパーティショニングをサポートしていません。