

# 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)