##概要
- AWS SDK使ったらCDNの設定も一発でまとめて更新できるよ。
- JS使ったコード書いたよ
- 使いたい人は自己責任でどうぞ
##コード
index.js
var AWS = require('aws-sdk');
var conf = require('./config.js');
var cloudfront = new AWS.CloudFront({
apiVersion: '2016-09-07',
accessKeyId: AWS_ACCESS_KEY,
secretAccessKey: AWS_SECRET_KEY,
});
function updateCloudFrontDistribution( distribution ) {
var params = {
Id: distribution.Id
};
cloudfront.getDistributionConfig(params).promise()
.then( function(data){
// Write CloudFront Distribution Setting
data.DistributionConfig.HttpVersion = 'http2';
// Do update distribution setting
doUpdateCloudFront( data, distribution );
}).catch( function(err) {
console.log(err);
});
}
function updateCloudFrontDistributions( Marker ) {
if ( Marker === undefined ) {
console.log('end');
return;
}
console.log('start to ' + Marker);
var params = {
Marker: Marker,
MaxItems: '3'
};
cloudfront.listDistributions(params).promise()
.then( function(data) {
i = 0;
while(i < data.DistributionList.Items.length) {
Marker = data.DistributionList.Items[i].Id;
updateCloudFrontDistribution( data.DistributionList.Items[i] );
i=(i+1)|0;
}
console.log(i);
if ( i !== 0 ){
return Marker;
}
}).then( function(Marker){
setTimeout(function(){
console.log('Next start is ' + Marker);
updateCloudFrontDistributions( Marker );
}, 10000);
}).catch( function(err) {
console.log(err);
});
}
function doUpdateCloudFront( data, distribution ) {
var params = {
Id: distribution.Id,
IfMatch: data.ETag,
DistributionConfig: data.DistributionConfig
};
cloudfront.updateDistribution(params).promise()
.then( function(data){
console.log(data);
}).catch( function(err) {
console.log(err);
});
}
updateCloudFrontDistributions( '' );
##使い方
まずAWS_ACCESS_KEY
とAWS_SECRET_KEY
を自分のアカウントのものに差し替えてください。
その後、updateCloudFrontDistribution
というfunctionの中にある、Write CloudFront Distribution Setting
というコメントの部分でCloudFrontの設定を上書きします。(サンプルコードではHTTP2サポートに変更しています。)
そこまで準備が終わればnode index.js
などでJSを実行してもらえればOKです。
3件ずつせっせと設定を更新してくれますので、更新が終わるまで待ちましょう。
##なぜ作った
自社サービスの関係で100も200もCloudFrontの設定を更新しないといけないケースが出てきたので、まとめてやれるコード書かないとつらい。