AWS Lambdaを使用し、CloudfrontのInvalidationを走らせる

こんにちは。エンジニアの志村です。
先日assets on S3についての実装を行いました。  

その記事は下記になります。

今回はasset_syncにより、S3にassetファイルがアップロードされた段階でCloudfrontのInvalidationをLambdaを使用して走らせるという処理を実装したいと思います。

Invalidationとは

Cloudfrontのキャッシュを明示的に消す機能です。

クラスメソッドさんの上記の記事が非常に分かりやすいかと思います。

キャッシュを使用するのに重要なポイントは適切なキャッシュ期間を設けることです。それを行わないと古いファイルがいつまで経っても配信され続けてしまいます。
特にassets on S3を使用する場合には、明示的にファイルをInvalidationしないといつまで経っても最新のassetsファイルがユーザーに配信されなくなります。
このような状況を防ぐために、S3にファイルが転送された段階で、assetsのキャッシュを消去する必要があります。

Lambdaの実装

ではLambdaの実装を始めていきます。

1. AWSコンソールからLambdaを選択します

2.「Create Lambda Function」を選択します


3. 今回はBlueprintは使用しないので「Skip」を選択します


4. S3を選択します。


※Prefix, Suffixは必要であれば入力して下さい。

5. Lambda Functionを作成します


コードは下記のコードが非常に分かりやすかったのでそれを使用します。

※DistributionIDは自身のCloudfrontディストリビューションのIDを入力して下さい

因みにですが、boto3はPython用のAWS SDKです。
Lambda FunctionをPythonで書く際には必ずと言って良いほど良く使用します。
ドキュメントも充実しているので非常に使い勝手が良いと思います。


6. ロールやその他の設定をします

「Lambda function handler and role」のRole→「Create a custom role」を選択します。


そうすると下記のような画面が現れるので、下記のCloudfrontのInvalidationを許可するロールを作成します。


下記のようなポリシードキュメントになります。

{
"Version": "2012-10-17",
"Statement": [
{
"Effect": "Allow",
"Action": [
"logs:CreateLogGroup",
"logs:CreateLogStream",
"logs:PutLogEvents"
],
"Resource": "arn:aws:logs:*:*:*"
},
{
"Effect": "Allow",
"Action": [
"cloudfront:CreateInvalidation"
],
"Resource": [
"*"
]
}
]
}


7. 最後に「Create function」を押下すれば完成です!

使い方

asset_syncでデプロイすると勝手にInvalidationが走ってくれます。
下記の画面で確認が出来ます。

1. AWSコンソールからCloudfrontを選択します

2. 該当するディストリビューションのIDを選択します


3.「Invalidations」タブを選択すると、Invalidationsの状態が閲覧出来ます。ここでデプロイ直後にStatusがProgressとなっていればトリガーがきちんと走っています。


以上になります。

キャッシュの扱いって本当難しいなーと感じますが、この様に自動化してしまえば特に意識することも少なくなって、よりCloudfrontが使いやすくなりますね。

株式会社クルイト's job postings
Anonymous
8b7c0642 b272 40eb b5ff daf2888da0a0?1504184836
8f6db7b0 b7b0 4cfc b231 32a43c0d9422
153a8e6f 8c3b 4863 8216 7b0fbcfe71d2?1550470180
85dc8374 8691 4bf1 82b4 78d6ffd826c6?1550648134
661f6fa3 a707 430c b0ad 334cd4dff9e8
7 Likes
Anonymous
8b7c0642 b272 40eb b5ff daf2888da0a0?1504184836
8f6db7b0 b7b0 4cfc b231 32a43c0d9422
153a8e6f 8c3b 4863 8216 7b0fbcfe71d2?1550470180
85dc8374 8691 4bf1 82b4 78d6ffd826c6?1550648134
661f6fa3 a707 430c b0ad 334cd4dff9e8
7 Likes

S3

Weekly ranking

Show other rankings

Page top icon