AWS PHP SDK v3 で Amazon CloudFront のキャッシュをパージする

#

コンクリートファイブジャパン 菱川です。

今回は、Amazon が提供するCDNサービス「CloudFront」でキャッシュされているオブジェクトを、PHP SDK v3 を使って無効化する方法をご紹介します。v3 になってまた書き方が変わりましたので、その忘備録も兼ねてます。

CloudFront では、エッジキャッシュ上のオブジェクトを無効化するバッチをAPI経由で作成することができます。オブジェクトを無効にするには、個々のオブジェクトのパスまたは * ワイルドカードで終わるパスのいずれかを指定します。ワイルドカードが使用できるようになったことで、API 経由での無効化がやりやすくなりました。

参考資料:

まず最初に、クライアントのインスタンスを作成します。リージョンとアクセスキーが必要です。また、v3 から API のバージョン指定が必須になりました。

また、ここハマりポイントなのですが、CloudFront はリージョン指定に us-east-1 しか受け付けません。無くても怒られるので、忘れてると時間を無駄にします。。脱力。。

$client = new \Aws\CloudFront\CloudFrontClient([
    'region'  => 'us-east-1', // これ以外は受け付けない
    'version' => '2016-01-28', // バージョン指定は v3 で必須になった
    'credentials' => [
        'key'    => $access_key,
        'secret' => $access_secret,
    ],
]);

クライアントに接続できたら、無効化バッチを作成しましょう。バッチの作成には、ディストリビューションIDと、無効化するオブジェクトを指定するパスの指定が必要です。CallerReference が必須なのですが、タイムスタンプでいいですよとドキュメントに書いてあります。二重送信を防ぐためにユニークな値が必要だそうです。

// 無効化するオブジェクトをパスで指定
$paths = [
    '/*',
];

/** @var \Aws\Result $result */
$result = $client->createInvalidation([
    'DistributionId' => $distribution_id,
    'InvalidationBatch' => [
        'Paths' => [
            'Quantity' => count($paths),
            'Items' => $paths,
        ],
        'CallerReference' => time(),
    ],
]);

バッチがうまく作成できたかどうかは、コンソールから確認してもいいのですが、SDK 経由でも確認できます。

/** @var \Aws\Result $result */
$result = $client->listInvalidations([
	'DistributionId' => $distribution_id
]);
$items = $result->search('InvalidationList.Items'));

コンソールから確認したところ。


コメント欄を読み込み中