AWSのBlogを見ていたら、こんな記事が
新着 – Amazon CloudFront で Amazon S3 Object Lambda を使用してエンドユーザーのためにコンテンツをカスタマイズする
https://aws.amazon.com/jp/blogs/news/new-use-amazon-s3-object-lambda-with-amazon-cloudfront-to-tailor-content-for-end-users/
AWSのサービスは多岐にわたっているけれど、いくつかのサービスは全く新しいものというよりは、既存のサービスの組み合わせで出来ていることもある。
今回紹介されているS3 Object Lambdaも名前からそうなんだろうと想像はついたんだけど、聞いたことはなかったので触ってみた
Amazon S3 Object Lambda
https://aws.amazon.com/jp/s3/features/object-lambda/
S3に配備されたファイルを取得したりする際に、前処理としてLambdaを走らせることができるというものらしい。
単純にS3格納時に処理してしまえばいいのでは?と思ったが、画像などを複数のアプリケーションで共用するケースには難しくなってしまう。
S3にはオリジナルを配備し、アプリケーションごとに必要な加工を施して提供するという場合には間にLambdaなどで処理を挟み込めれば楽だ。
それら用途を考えた際に、アクセスする経路を作るのがS3 Access PointでそこにLambdaを関連付けるのがObject Lambda Access Point。。。
言ってる意味はわかるがややこしくなってきそうだ
チュートリアル
Using Amazon S3 Object Lambda to Dynamically Watermark Images as They Are Retrieved
https://aws.amazon.com/jp/getting-started/hands-on/amazon-s3-object-lambda-to-dynamically-watermark-images/
Pythonで書かれたLambdaをS3 Get時に呼び出すことによって、ObjectLambda経由で呼び出された際には画像に対して文字を埋め込むというチュートリアル。
Lambda Layerがうまく関連づかなくてエラーになってしまったけど、マネージドコンソールで設定したら問題なく実施できた
今回のAWSブログで紹介されていたエイリアスももちろん確認。
CloudFrontまでは設定してはいないけれど、この機能周りに関しては少しは理解が進んだかな。
他のユースケース
今回は、画像に対して文字を埋め込むという内容だったけれど、元画像に対しての処理としてはサイズ変更や拡張子変更などのほうがユースケースとしては多そうだ。
もちろん、それらはクライアントサイドでもできるだろうけれど。
一方で、そのたびにLambdaが走るというのは積み重なると結構な金額になってしまわないのだろうか?は気になる。
利用目的がはっきりしているのであればやはり、S3格納時に処理をするべきだし、セキュリティ的な意味合いがないのであればこれらの処理に関してはクライアント側で処理することも選択肢の一つとして考えるべきだと思う。
Lambdaを逐次走らせるという利点を考えるのであれば、やはり動的な処理ということなんだろうな。
これじゃないとNGな処理に関しては何があるのか、気がついたらまた考えてみよう。