· 

Salesforce指定ログイン情報を使用したAWS S3へのコールアウト

以前、DropBoxとの連携記事をアップしたことがありますが、今回はS3との連携です。


AppFlowでのAWS連携もできますが、技術ブログなのでREST APIを使用したコールアウトのやり方を試してみようと思います。

Salesforceの指定ログイン情報(外部システムへの認証情報を保存する設定)を使用します。

 

・表示ラベル:任意の名称

・名前:任意の名称

・U R L:https://BUCKETNAME.s3.amazonaws.comのBUCKETNAMEに

 設定したバケットネームを設定

・I D種別:指定ユーザ

・認証プロトコル:AWS署名バージョン4

・AWSアクセスキーI D:AWSのI A Mユーザの適切なアクセスキーを設定

・AWSシークレットキー:AWSのI A Mユーザの適切なシークレットキーを設定

・AWSリージョン:該当するリージョンを設定

 ※リージョン参照:https://docs.aws.amazon.com/ja_jp/general/latest/gr/rande.html

・AWSサービス:s3を設定

・認証ヘッダーを生成をチェック


Getのサンプル

Getの場合は下記のようになります。

setEndpointのcalloutの後には、先ほど設定した指定ログイン情報の名前(AWS_S3)、ディレクトリ、ファイル名を指定することにより取得が可能となっています。

  1. HttpRequest req = new HttpRequest();
  2. req.setEndpoint('callout:AWS_S3/hogedir/hogefile.txt');
  3. req.setMethod('GET');
  4. Http http = new Http();
  5. HttpResponse res = http.send(req);

Putのサンプル

setHeaderには送信する形式を設定します。

setBodyに送信内容を設定します。

setMethodにはPUTを設定します。

  1. String bucketName = 'test';
  2. String fileName = 'test.csv';
  3. String csv_body = 'テスト1,テスト2,テスト3\r\nサンプル1,サンプル2,サンプル3';
  4. HttpRequest req = new HttpRequest();
  5. req.setEndpoint('callout:AWS_S3/' + bucketName + '/' + fileName);
  6. req.setHeader('Content-Type','text/csv; charset = Shift_JIS');
  7. req.setBody(csv_body);
  8. req.setMethod('PUT');
  9. Http http = new Http();
  10. HTTPResponse res = http.send(req);

このように指定ログイン情報を使用することによって、認証が全てSalesforceで管理されるため通常なら設定しなくてはならないリモートサイト設定も省略することができます。