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

菱川拓郎
菱川拓郎

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

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

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

参考資料:

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

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

// 無効化するオブジェクトをパスで指定
$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'));

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