Amazonで買ってよかったもの

記事内に広告を含む場合があります

AWS.CloudFrontエラー「Expected params.InvalidationBatch.CallerReference」

AWS CloudFrontにキャッシュさせたコンテンツをJavaScriptから削除できるというので試してみました。

試しにコード書いてみて実行したら以下のようなエラーが出て少しハマっていましました。

Error: Expected params.InvalidationBatch.CallerReference to be a string

 

スポンサーリンク
この記事を書いた人:まちゃ
ガジェット好き 自作PC歴20年超え スマホゲームのエンジニア アニメ・ゲーム好き

原因:データの型

エラーの文言通り「CallerReference」のパラメーターが原因で、string型じゃないとダメということでした。

CallerReferenceは何でもいいと言うので、とりあえずタイムスタンプを数値で送ったのが問題でした。

公式のリファレンスにも「string」と書いてありました。

CallerReference — required — (String)

出典:公式リファレンス

 

AWS.CloudFront エラーログ内容

AWS.CloudFront エラー

 

Error: Expected params.InvalidationBatch.CallerReference to be a string
    at ParamValidator.fail (aws-sdk-2.366.0.js:151939)
    at ParamValidator.validateType (aws-sdk-2.366.0.js:152121)
    at ParamValidator.validateString (aws-sdk-2.366.0.js:152043)
    at ParamValidator.validateScalar (aws-sdk-2.366.0.js:152019)
    at ParamValidator.validateMember (aws-sdk-2.366.0.js:151983)
    at ParamValidator.validateStructure (aws-sdk-2.366.0.js:151964)
    at ParamValidator.validateMember (aws-sdk-2.366.0.js:151977)
    at ParamValidator.validateStructure (aws-sdk-2.366.0.js:151964)
    at ParamValidator.validateMember (aws-sdk-2.366.0.js:151977)
    at ParamValidator.validate (aws-sdk-2.366.0.js:151923) "InvalidParameterType: Expected params.InvalidationBatch.CallerReference to be a string
    at ParamValidator.fail (http://localhost:11012/static/admin/amazon/aws-sdk-2.366.0.js:151939:37)
    at ParamValidator.validateType (http://localhost:11012/static/admin/amazon/aws-sdk-2.366.0.js:152121:10)
    at ParamValidator.validateString (http://localhost:11012/static/admin/amazon/aws-sdk-2.366.0.js:152043:32)
    at ParamValidator.validateScalar (http://localhost:11012/static/admin/amazon/aws-sdk-2.366.0.js:152019:21)
    at ParamValidator.validateMember (http://localhost:11012/static/admin/amazon/aws-sdk-2.366.0.js:151983:21)
    at ParamValidator.validateStructure (http://localhost:11012/static/admin/amazon/aws-sdk-2.366.0.js:151964:14)
    at ParamValidator.validateMember (http://localhost:11012/static/admin/amazon/aws-sdk-2.366.0.js:151977:21)
    at ParamValidator.validateStructure (http://localhost:11012/static/admin/amazon/aws-sdk-2.366.0.js:151964:14)
    at ParamValidator.validateMember (http://localhost:11012/static/admin/amazon/aws-sdk-2.366.0.js:151977:21)
    at ParamValidator.validate (http://localhost:11012/static/admin/amazon/aws-sdk-2.366.0.js:151923:10)

 

試したAWS.CloudFrontコード

ASW CloudFrontのキャッシュさせるJavaScriptのコードはこんな感じで試してみました。

 

var config = new AWS.Config({
    apiVersion: '2018-11-05',
    accessKeyId : 'xxxxxxxxxx',
    secretAccessKey : 'xxxxxxxxxxxxx'
});
cloudfront = new AWS.CloudFront(config);

var params = {
    DistributionId: 'xxxxxxxx',
    InvalidationBatch: {
        CallerReference: 1,
        Paths: {
            Quantity: fileList.length,
            Items: fileList
        }
    }
};

cloudfront.createInvalidation(params, function(err, data) {
    if (err){
        // エラー発生時
        console.log(err, err.stack);
    }
    else{
        // 成功(削除IDなどが返却される)
        console.log(data);
    }
});

 

AWS.CloudFront APIの修正内容

「cloudfront.createInvalidation」を実行する時のパラメータの「CallerReference」がダメでした。

数値で渡していたのを

CallerReference: 1,

 

とりあえず文字列にして実行したら無事、成功しました。

CallerReference: “1”,

 

AWS.CloudFrontのAPIで「CallerReference」はランダムな文字列でも問題ないです。

ただし、キャッシュ削除の結果を非同期で確認したい時に同じ文字列を送る必要があります。

CallerReferenceの値も運用・管理できた方が良さそうです。

削除するファイルなどでハッシュ値とか作れれば良さそうですが。。。

 

購入して本当によかった、おすすめガジェット
購入して本当によかった、おすすめガジェット

おもしろそうなガジェットや生活が便利・快適になりそうなのを見つけると、ついついポチってしまいます。

そんな様々なガジェットの中から、実際に購入して良かったと感じたおすすめのガジェットを紹介します。

\ 今すぐチェック /
Amazonで安く買い物する方法

ガジェットなどをAmazonでお得に買い物するには、Amazonギフト券にあらかじめチャージしてから購入するのがおすすめです。

Amazonギフト券は現金でチャージするたびにポイントが 最大2.5% 貯まります。

現金派クレカを持てなくても、Amazonギフト券を活用するとお得です!

 
\ 最大2.5%のポイントバック /
現金なので安心
クレカ無くてもOK
JavaScript
このページをシェアする
プロガジ.DEV

コメント

目次へ
タイトルとURLをコピーしました