# Salesforce Marketing Cloud Export Integration Using SFTP

ジョブの結果をSalesforce Marketing Cloud（SFMC）SFTPサーバーに直接送信できます。

## 前提条件

- [TD Toolbelt](https://toolbelt.treasuredata.com/)を含むTreasure Dataの基本知識
- Salesforce Marketing Cloudの基本知識
- Treasure アカウント


## SMC SFTPアカウント

SFMCダッシュボードのアカウントで、**Administration**を選択します。

![](/assets/salesforce-admin1.eff935cefb395b606aeb602a0100eb6df485b8000cd50e06061add703ef6929a.b90f87c9.png)

Accountドロップダウンメニューから、**FTP Accounts**を選択します。SFTPアカウントを設定します。

![](/assets/salesforce-ftpacct1.66adda154fad3d9777d81bf78d545cdff27a9b96adcc03d5ed2f7332fa91d165.b90f87c9.png)

FTP Accountsペインで、**Add FTP User**を選択します。

![](/assets/salesforce-ftpacct2.b0528d5777b879eabdd4d741ef76fe4e0dcc3c81f074704ef8b2ece9e49a3820.b90f87c9.png)

FTPアカウントのパスワードを入力します。

![](/assets/salesforce-ftpacct3.18166e62986ed047a31a9dac4e446e6e53a92e578eca2337cb60d7644fdcfd52.b90f87c9.png)

## SMC KeyとIV

次の記事の説明に従って、keyとIV（初期化ベクトル）の値を取得します：[Field-Level Encryption](https://help.salesforce.com/articleView?id=mc_overview_implement_field_level_encryption.htm)

### 基本的な使い方

Treasure コンソールで、Queriesに移動し、**New Query**を選択してクエリエディタにアクセスします。クエリ言語を選択してクエリを記述します。**Output Results**を選択します。

![](/assets/smc_sftp_result_outputs.6a2c98a3a74720eb951a1d28e99cf35487af32a2a6cfb4194f4575668e93e84a.b90f87c9.png)

### SMC SFTP接続を作成または既存の接続を選択する

| オプション | タスクステップ | ヒント |
|  --- | --- | --- |
| コネクタを作成する | - Integrations Hub > Catalogに移動 - Salesforce Marketing Cloud via SFTPアイコンを選択 - 最初のペインで必要なフィールドを入力します。次に、Configurationフィールドを入力します。 | クエリを記述する前に列のマッピングを定義する必要がある場合があります。 |
| コネクタを選択する | - Treasure コンソールに移動 - クエリエディタに移動します。- データをエクスポートするために使用する予定のクエリにアクセスします。- Output Resultsを選択します。Choose Save Connection ダイアログが開きます。- 検索ボックスに接続名を入力してフィルタリングし、使用する接続を選択します。次に、Configurationフィールドを入力します。 | Create New Connectionを選択して、ここから新しい接続を作成することもできます。 |


## 新しい接続の作成

### ユーザー名とパスワードの指定

Authentication modeとしてPasswordを選択する必要があります

![](/assets/create_new_smc_sftp_con.035d953826da388bf84511b92a16fe7a80749a27115e8c9c970c28fea02a09fc.b90f87c9.png)

### シークレットキーファイルの指定

Authentication modeとしてPublic/Private key pairを選択する必要があります。

![](/assets/create_new_smc_sdtp_con1.3c6cf651aff7eaaf7650183a6dbe240c3823ab5e3d39f1e6e42f2abc9244c051.b90f87c9.png)

認証情報を入力した後、Choose Saved Connectionダイアログで接続をフィルタリングするために、接続名を入力する必要があります。

![](/assets/smc_sftp_connection_name.0df6f79c7796046f0ce7928b62b459dbdd76531d8af1ba709821c0a36c3be1f6.b90f87c9.png)

## 既存の接続を選択する

![](/assets/smc_sftp_connection.85e7fe13d8586ad17a83907a384bfde0f9b8f302f111d7bd330045fde9e7b501.b90f87c9.png)

## Configurationフィールドを入力する

ここから、暗号化する対象列を入力します。SMC SFTPサーバーに送信する前に列を暗号化するには、KeyとIVが必要です

![](/assets/smc_sftp_configuration.101dc17e8a96ba7e32b68b6e3dc9e20ed0dd7f16fb383ede6659cb76cbeba483.b90f87c9.png)

configurationダイアログを完了した後、configurationダイアログのフィールドを編集および更新する場合は、SFMCに暗号化されたデータを送信するためにkeyとIVを再入力する必要があります。

SMC SFTPに送信するデータを暗号化したくない場合は、encryption columns、key、IVを空白のままにしてください。

## 暗号化データ

| Field  | Type  | Description |
|  --- | --- | --- |
| Encoders | string | - `None`: エンコーダーを適用しない（デフォルト）
- `GZ`: アップロード前にgzipでファイルを圧縮する
- `BZIP2`: アップロード前にbzip2でファイルを圧縮する
- `PGP Encryption`: アップロード前に提供された公開鍵でファイルを暗号化する

 |
| Public Key（Encoderが`PGP Encryption`の場合は必須） | string | アップロード前にファイルを暗号化するために使用される公開鍵。 |
| Key Identifier（Encoderが`PGP Encryption`の場合は必須） | string | ファイルを保護するために使用される暗号化サブキーのKey ID。マスターキーは暗号化プロセスから除外されます。 |
| Armor（オプション） | checkbox | 暗号化されたファイルのASCII armorを有効にします。 |
| Compression Type（オプション） | string | SFTPサーバーへのアップロードのために暗号化の前に適用される圧縮アルゴリズム。暗号化とアップロードの前にファイルを圧縮します。復号化後、ファイルは元の圧縮形式（例：`.gz`または`.bz2`）に戻ります。
 |


### クエリを実行する

クエリに名前を付けて保存して実行するか、単にクエリを実行します。クエリが正常に完了すると、クエリ結果は指定されたContainer宛先に自動的にインポートされます。

ジョブが終了したら、次の例に示すように、一般的なSFTPコマンドを使用してSMC SFTPサーバー上の出力ファイルを確認できます：

![](/assets/salesforce-outputfile.82a2e9a1afd1180e6081dccfb4440db89906dfa70366a457fcbceccaeefb8b32.b90f87c9.png)

SFMCダッシュボードをチェックして、インポートが成功したことを確認します。

## CLIからの使用

CLIを使用してSMC SFTPへのResult Exportを行うことができます。

### シークレットキーファイルの使用

次の例では、キー内のバックスラッシュによる改行のエスケープに注意してください。

例：


```bash
td query \
--result '{"type":"smc_sftp","host":"xx.xx.xx.xx","port":22,"username":"xxxx","secret_key_file":"{\"content\":\"-----BEGIN RSA PRIVATE KEY-----\nABCDEFJ\nABCDEFJ\n-----END RSA PRIVATE KEY-----\"}","secret_key_passphrase":"xxxxxx", "user_directory_is_root":true,"path_prefix":"/path/to/file.csv","sequence_format":"","rename_file_after_upload":false,"header_line":true,"quote_policy":"MINIMAL","delimiter":",","null_string":"","newline":"CRLF","encryption_column_names":"name, email", "encryption_key": "xxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxx", "encryption_iv":"xxxxxxxxxxxxxxxxxxxxxxxxxxxxxx"}' \
-d sample_datasets \
"SELECT id, name, email FROM (\ VALUES (1,'a','a@gmail.com'),\ (2,'b','b@gmail.com'),\ (3,'c','c@gmail.com')\ ) tbl (id, name, email)" \
-T presto
```

### ユーザー名とパスワードの使用

次の例を参照してください：


```bash
td query --result \
'{"type":"smc_sftp","host":"xx.xx.xx.xx","port":22,"auth_method":"Password","username":"xxxx","password":"xxxxx","user_directory_is_root":true,"path_prefix":"/path/to/file.csv","sequence_format":"","rename_file_after_upload":false,"header_line":true,"quote_policy":"MINIMAL","delimiter":",","null_string":"","newline":"CRLF","encryption_column_names":"name, email", "encryption_key": "xxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxx", "encryption_iv":"xxxxxxxxxxxxxxxxxxxxxxxxxxxxxx"}' \
-d sample_datasets \
"SELECT id, name, email FROM (VALUES (1,'a','a@gmail.com'),(2,'b','b@gmail.com'),(3,'c','c@gmail.com')) tbl (id, name, email)" -T presto
```

## 参考資料

- [The Embulk-encoder-Encryption document](/int/embulk-encoder-encryption-pgp)


## SMC_SFTP Data Connectorに関するFAQ

Q: SFTPサーバーに接続できません。どうすればよいですか？

A: 以下の点を確認してください：

- プロトコルが有効であることを確認してください。*SFTP*を使用する場合は、このインテグレーションを使用できます。*FTP*/*FTPS*を使用する場合は、[FTP Server Import Integration](/int/ftp-server-import-integration)で接続してみてください。
- ファイアウォールを使用している場合は、許可されたIP範囲とポートを確認してください。サーバー管理者は、セキュリティ上の理由から、デフォルトのポート番号TCP 22を変更することがあります。
- プライベートキーが*OpenSSH*形式であることを確認してください。Treasure Dataは「PuTTY」などの他の形式をサポートしていません。
- Treasure Dataは、[OpenSSH 7.8](https://www.openssh.com/releasenotes.html)以降のプライベートキーのデフォルト形式をサポートしていません。'-m PEM'オプションを使用してキーを再生成してください。


Q: アップロードしたファイルがSFTPサーバー上で見つかりません。何が起こったのでしょうか？

A: SFTPサーバーがAppendモードをサポートしていない場合、インテグレーションは「SFTP Exception: no such file.」というエラーでファイルを更新できない可能性があります。安定性の理由から、インテグレーションはファイルの内容をバッチでアップロードします。そのため、SFTPサーバーでAppendモードを有効にする必要があります。SFTPサーバーでAppendモードを有効にできない場合は、この機能をバイパスするためにtemp_file_thresholdを0に設定する必要があります。

注：暗号化とアップロードの前にファイルを圧縮してください。

1. ビルトインでない暗号化を使用して復号化する場合、ファイルは.gzや.bz2などの圧縮形式に戻ります。
2. ビルトインの暗号化を使用して復号化する場合、ファイルは生データに戻ります。