2011年4月11日月曜日

PHPでCloudFrontのInvalidation(CDNのキャッシュクリア)

スズキです。

まず下記プログラムで、キャッシュクリア(Invalidation)したい
CDN(Distribution)のIDを探します。

--------【PHP】--------
require_once("./sdk.class.php");
$cf = new AmazonCloudFront();
$response = $cf->list_distributions();
var_dump($response);
--------

次に下記プログラムで、その"Distribution ID"(XXXXXXXXXXXXXX)に対して、
指定したパス("/index1.txt", "/index2.txt")の
キャッシュクリア(Invalidation)を行います。

--------【PHP】--------
require_once("./sdk.class.php");
$cf = new AmazonCloudFront();
$response = $cf->create_invalidation("XXXXXXXXXXXXXX", time(), array(
    "/index1.txt",
    "/index2.txt"
));
var_dump($response);
--------

最後に下記のプログラムで、"Distribution ID"(XXXXXXXXXXXXXX)と
上記の実行結果の"Invalidation ID"(YYYYYYYYYYYYYY)を指定して、
キャッシュクリア(Invalidation)の状況を確認します。

--------【PHP】--------
require_once("./sdk.class.php");
$cf = new AmazonCloudFront();
$response = $cf->get_invalidation("XXXXXXXXXXXXXX", "YYYYYYYYYYYYYY");
var_dump($response);
--------

そして、これらのプログラムを実行するには、
下記アクションを許可するポリシーを与える必要があります。
(IAMユーザーの場合)

cloudfront:ListDistributions
cloudfront:CreateInvalidation
cloudfront:GetInvalidation

ポリシーの付与は、例えば以下のようなコマンド(IAM Command Line Toolkit)
で実現できます。

# ./iam-groupaddpolicy --aws-credential-file credentials.txt \
> -a cloudfront:ListDistributions \
> -e Allow \
> -g suz-lab \
> -p policy1 \
> -r "*"

# ./iam-groupaddpolicy --aws-credential-file credentials.txt \
> -a cloudfront:CreateInvalidation \
> -e Allow \
> -g suz-lab \
> -p policy2 \
> -r "*"

# ./iam-groupaddpolicy --aws-credential-file credentials.txt \
> -a cloudfront:GetInvalidation \
> -e Allow \
> -g suz-lab \
> -p policy3 \
> -r "*"

一つのAWSアカウントに、複数の会社が関わるときは、IAMが必須ですね...
--------
http://www.suz-lab.com

0 コメント: