FivetranとSalesforceをAPI連携する方法について

FivetranとSalesforceを連携する方法を紹介します。

## 接続アプリケーションを作成する

アプリケーションマネージャーから新規接続アプリケーションを作成します。

![スクリーンショット 2024-02-23 16.07.19.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/449065/890eb7b9-cd7a-9089-1cb7-ebd9ac9fe3e2.png)

設定ではOAuth設定を有効化しましょう。

![スクリーンショット 2024-02-23 16.22.03.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/449065/ab7e2871-5901-f22e-aadf-b7812786b791.png)

その他設定はこちらです。
- コールバックURL:http://localhost:8080/oauth2/callback
- 選択したOAuth範囲
    - いつでも要求を実行
    - APIを使用してユーザーデータを管理（api）
- PKCF拡張を要求：オフ


コールバックURLにはローカルを指定しました。
このURLにアクセスすることで認証コードを受け取れます。
コールバックURL（リダイレクトURL）の作り方はこちらを確認ください。
[リダイレクトURLとは？URLを作成しアクセストークンを受け取る方法を紹介](https://tellingbook.com/redirect-url-get-access-token/)

またOAuth範囲にいつでも要求を実行（refresh_token, offline_access）を含めることでrefresh_tokenが取れます。

Fivetranの連携では必ずrefresh_tokenが必要なのでこの設定は忘れてはいけません。

以上で保存します。

### コンシューマーキーと秘密鍵を取得する

コンシューマーの詳細を管理をクリックしシークレット情報を得ます。

![スクリーンショット 2024-02-23 16.23.50.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/449065/db0e1c93-4fa6-0c99-6f95-a7cebb80d5e8.png)

シークレット情報は大切に保管しましょう。

![スクリーンショット 2024-02-23 16.26.06.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/449065/6e4afc6b-f626-bc86-183b-a7ed74aee28d.png)

## OAuth2.0認証をする

### 認証コードを取得する

認証URLをブラウザで実行します。

```
https://login.salesforce.com/services/oauth2/authorize?response_type=code&client_id=YOUR_CONSUMER_KEY&redirect_uri=YOUR_CALLBACK_URL
```

実行するときは一部の値を変えましょう。

- login.salesforce.com：私のドメインのURL
- client_id：コンシューマー鍵
- redirect_uri：http://localhost:8080/oauth2/callback

ドメインは設定から私のドメインで確認ができます。
![スクリーンショット 2024-02-23 17.07.38.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/449065/dbbf992f-7eaa-e4fa-481f-9a4db96a9329.png)

認証URLを実行すると承認を求められるので許可しましょう。
![スクリーンショット 2024-02-23 17.06.45.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/449065/dee25a05-d668-9087-b2fa-2fcc86f36695.png)


するとURLが変わりました。
code以下が認証コードです。

![スクリーンショット 2024-02-23 17.10.48.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/449065/72453493-88c6-0275-ba93-95d1a4fa42a6.png)

### リフレッシュトークンを取得する

続いてリフレッシュトークンを取得しましょう。

```bash
# リクエストパラメータ
CLIENT_ID="xxxxxxxxxxxxxxxxx"
CLIENT_SECRET="yyyyyyyyyyyyyyyyyy"
# 認証コード
CODE="zzzzzzzzzzzzzzzzzzzz"
# リダイレクトURI
REDIRECT_URI="http://localhost:8080/oauth2/callback"

# cURLを使用してリクエストの実行
curl -X POST "https://[私のドメイン]の名前.my.salesforce.com/services/oauth2/token" \
     -d "grant_type=authorization_code" \
     -d "client_id=${CLIENT_ID}" \
     -d "client_secret=${CLIENT_SECRET}" \
     -d "code=${CODE}" \
     -d "redirect_uri=${REDIRECT_URI}" | jq
```
- client_id：コンシューマー鍵
- client_secret：コンシューマーの秘密
- code：認証コード

それぞれ置き換えましょう。

実行結果
![スクリーンショット 2024-02-23 17.21.39.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/449065/6732ad1b-2549-75ac-bdc7-e6df8d622f00.png)

リフレッシュトークンが取得できていますね！

## FivetranとSalesforceの連携

Fivetran APIを使いSalesforce用コネクタを作成します。

```bash
# FivetranのAPIキーとシークレットを設定
API_KEY="aaaaaaaaaaaa"
API_SECRET_KEY="bbbbbbbbbbbb"

# APIエンドポイント
URL="https://api.fivetran.com/v1/connectors"

# リクエストボディ
BODY='{
    "service": "salesforce",
    "group_id": "herring_idealness",
    "config": {
    	"schema": "test"
  	},
    "auth": {
        "client_access": {
            "client_id": "xxxxxxxxxxxx",
            "client_secret": "yyyyyyyyyyyyyy"
        },
        "refresh_token": "zzzzzzzzzzzzzzz"
    }
}'

# APIリクエストの実行
curl -X POST "$URL" \
     -u "$API_KEY:$API_SECRET_KEY" \
     -H "Content-Type: application/json" \
     -d "$BODY" | jq
```

実行結果
![スクリーンショット 2024-02-23 17.46.21.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/449065/3c0f18d6-fcec-4d37-9791-41bbbca6ff1e.png)

コネクタを作成できましたね。

![スクリーンショット 2024-02-23 17.50.10.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/449065/93dbb043-fd05-29c4-3fa7-22444b21d683.png)

Salesforceがトライヤルのためか連携が完了していません。（残念）
本利用している場合は適切な権限があればこの手順で連携が完了すると思います。

```json
{
  "title": "Connecting to API",
  "status": "FAILED",
  "message": "The REST API is not enabled for this Organization."
}
```

※補足
> APIアクセスの制限
Professional Editionでは、デフォルトではAPIアクセスが提供されないか、または非常に限定的です。

トライヤルはProfessional EditionのためAPIが使えないようですね。

## まとめ
今回はFivetranとSalesforceのAPI連携について紹介しました。

OAuth認証で詰まった方も多いでしょう。
私もだいぶ苦労したので手順をまとめました。

参考になれば幸いです。