はじめに
まず、GASとS3を連携したいと思った時に以下のS3ライブラリが挙げられると思います。
ただ、こちらをそのまま利用しようとすると署名バージョン4に対応しておらず、困る場合があるかと思います。
Amazon S3 は、すべての AWS リージョンで、AWS サービスへの受信 API リクエストを認証するためのプロトコルである署名バージョン 4 をサポートしています。現時点では、2014 年 1 月 30 日より前に作成された AWS リージョンは、以前のプロトコルである署名バージョン 2 を引き続きサポートします。2014 年 1 月 30 日以降の新しいリージョンは署名バージョン 4 のみをサポートするため、これらのリージョンへのすべてのリクエストは署名を使用して行う必要があります。
とあるように、新しく作成されたリージョンでは署名バージョン4のみをサポートするため、例えばap-northeast-1(東京)
リージョンでは署名バージョン4の認証エラーは発生しませんが、ap-northeast-3(大阪)
リージョンでこのライブラリをそのまま利用しようとした場合エラーが発生します。
この記事では、この問題を解決してGASから署名バージョン4のS3と連携ができるようにする方法を書いていきます。
方法
GAS上のS3ライブラリは署名バージョン4に対応していないですが、github上では対応がされているので、githubからS3ライブラリのコードをGASのファイルへコピーしてください。
コピーする対象はS3.gs
とS3Request.gs
の2つです。
あとは、S3Request.gs
のregion指定を実際に使用するリージョンに書き換えてください。
this.date = new Date();
this.serviceName = 's3';
this.region = 'us-east-1'; // ←ここ
this.expiresHeader = 'presigned-expires';
this.extQueryString = '';
以上です。
おわりに
誰かのお役に立てれば幸いです。