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

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

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

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

 

原因:データの型

エラーの文言通り「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の値も運用・管理できた方が良さそうです。

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

 

コメント