2017-04-24 15 views
1

アプリケーションで使用される画像は、Amazon CloudFrontからレンダリングされます。Amazon CloudFront無効化API

既存の画像が変更された場合、CloudFrontは更新に約24時間かかりますので、すぐに画像が反映されることはありません。

回避策として、CreateInvalidationに連絡して、すぐにファイルの変更を反映させる予定です。

SDKなしでこの無効化呼び出しを使用できますか?

ColdFusionプログラミング言語を使用していて、SDKがこれを持っていないようです。

答えて

0

POSTリクエストを行うだけです。

<?php 
/** 
* Super-simple AWS CloudFront Invalidation Script 
* Modified by Steve Jenkins <steve stevejenkins com> to invalidate a single file via URL. 
* 
* Steps: 
* 1. Set your AWS Access Key 
* 2. Set your AWS Secret Key 
* 3. Set your CloudFront Distribution ID (or pass one via the URL with &dist) 
* 4. Put cf-invalidate.php in a web accessible and password protected directory 
* 5. Run it via: http://example.com/protected_dir/cf-invalidate.php?filename=FILENAME 
* or http://example.com/cf-invalidate.php?filename=FILENAME&dist=DISTRIBUTION_ID 
* 
* The author disclaims copyright to this source code. 
* 
* Details on what's happening here are in the CloudFront docs: 
* http://docs.amazonwebservices.com/AmazonCloudFront/latest/DeveloperGuide/Invalidation.html 
* 
*/ 
$onefile = $_GET['filename']; // You must include ?filename=FILENAME in your URL or this won't work 
if (!isset($_GET['dist'])) { 
     $distribution = 'DISTRIBUTION_ID'; // Your CloudFront Distribution ID, or pass one via &dist= 
} else { 
     $distribution = $_GET['dist']; 
} 
$access_key = 'AWS_ACCESS_KEY'; // Your AWS Access Key goes here 
$secret_key = 'AWS_SECRET_KEY'; // Your AWS Secret Key goes here 
$epoch = date('U'); 
$xml = <<<EOD 
<InvalidationBatch> 
    <Path>{$onefile}</Path> 
    <CallerReference>{$distribution}{$epoch}</CallerReference> 
</InvalidationBatch> 
EOD; 
/** 
* You probably don't need to change anything below here. 
*/ 
$len = strlen($xml); 
$date = gmdate('D, d M Y G:i:s T'); 
$sig = base64_encode(
    hash_hmac('sha1', $date, $secret_key, true) 
); 
$msg = "POST /2010-11-01/distribution/{$distribution}/invalidation HTTP/1.0\r\n"; 
$msg .= "Host: cloudfront.amazonaws.com\r\n"; 
$msg .= "Date: {$date}\r\n"; 
$msg .= "Content-Type: text/xml; charset=UTF-8\r\n"; 
$msg .= "Authorization: AWS {$access_key}:{$sig}\r\n"; 
$msg .= "Content-Length: {$len}\r\n\r\n"; 
$msg .= $xml; 
$fp = fsockopen('ssl://cloudfront.amazonaws.com', 443, 
    $errno, $errstr, 30 
); 
if (!$fp) { 
    die("Connection failed: {$errno} {$errstr}\n"); 
} 
fwrite($fp, $msg); 
$resp = ''; 
while(! feof($fp)) { 
    $resp .= fgets($fp, 1024); 
} 
fclose($fp); 
print '<pre>'.$resp.'</pre>'; // Make the output more readable in your browser 
0
オブジェクトを無効にするためにいくつかの選択肢

スティーブ・ジェンキンスからPHPの例は以下のとおりです。

0

頻繁に変更する場合は、イメージURL(オブジェクトのタイムスタンプまたはハッシュ値)にクエリ文字列を追加し、クエリ文字列を転送するようにCloudfrontを設定することをお勧めします。クエリ文字列は異なります。

SDK以外にも、AWS CLIを使用すると、CI/CDツールと統合されたビルド時にキャッシュを無効にすることができます。

例えば

aws cloudfront create-invalidation --distribution-id S11A16G5KZMEQD \ 
    --paths /index.html /error.html 
関連する問題