見出し画像

「AWS Lambdaを使って自動化する -実践-」AWSをマスターする#26

結論からいうと、s3のフォルダに以下のようなファイル(620×300)を一つのフォルダに格納すると、

画像1

下のような画像(300×145)が自動で別のフォルダに格納されるという形にすることができました!

画像2

昨日の続きからーー

昨日は、「アクセスする権限がない」というところで完全に詰まっておりました。

「アクセスする権限がない」と思って調べていたが、今日も権限周りを見渡したのだけれど、全部許可されているようで、そこは問題なさそう。。

Node.jsの記載が間違っていた(画像の取得元がちゃんと指定できていなかった)

画像7

「s3-get-object」というAWSが用意してくれているs3の画像を取得するnode.jsのテンプレートがあって、まずそれを使っていました。
自分はてっきり、これをそのまま使えば元の画像の情報が取得できるのではないかと思っていたのですが、違いました。。

const bucket = event.Records[0].s3.bucket.name;
const key = decodeURIComponent(event.Records[0].s3.object.key.replace(/\+/g, ' '));

上のような記載が基のテンプレートにあるんですが、ここの記載の方法が原因でアップロードした画像の情報が拾えていないようでした。。
node.jsを全然やったことがないので、手探りで検索しまくって、以下のような記載にしました。

 const bucket = "image-wwd";
 const Key = decodeURIComponent(
   event.Records[0].s3.object.key.replace("/key", ".jpg")
 );

buketというのが画像を取得する元のs3のバケットで
keyというのがs3に格納されているバケットのことです。
これを指定してあげることで、このAWSLambdaで情報を取得してきてリサイズの操作が出来るようになります。
buketの指定は直接今回アップロードをするs3のバケットの名前を指定して、keyはs3の画像情報を取得してきて、最後に.jpgの名前を付けたデータにしている形です。

この指定をしてあげるとちゃんと情報が取ってこれていることを確認することができました。(Node.jsを勉強してもっと物を作れるようにします)

今回どういう情報が取得できているか全くわからなかったので、上のconsole.log()でいちいちどの情報がとられているかを確認していきました。
何の情報が取られてきているか分からないときは、上のconsole.log()のコマンドでいちいち確認しながらやるとより理解が出来るようになります!

画像のリサイズの処理

次に取得した画像に対して、リサイズの処理をしていきます。
以下のサンプルを参考にここは進めました。

そして、以下の形でwidth、heightなど設定してリサイズした時のサイズを設定します。
widthを決めると縦は自動で決めます。

 // リサイズする画像のサイズを指定
 const width = 300;

 // リサイズを実行
 console.log('リサイズ');
 try {
   var buffer = await sharp(origimage.Body)
     .resize(width)
     .toBuffer();
   console.log(buffer);
 } catch (error) {
   console.log(error);
   return;
 }

ここでもまた詰まりポイントが発生。。

 var buffer = await sharp(origimage.Body).resize(width).toBuffer();

この記載で元にアップされている画像をリサイズするという処理をしているのだけれど、このsharp()というコマンドがSharp ライブラリというものを入れないと使えないらしい。。。
下のライブラリー。。

ここの領域が本当に無知過ぎて本当に困ったのだけれど、
調べまくって、なんとかインストールして動かすところまで到達!
(ここら辺のnode.js とかの勉強してものを作る記事も書いてきます)

このライブラリーなどを使った時は、処理を書いているjsと、sharpライブラリーを合わせて、zipにしてLambdaの方へアップする必要がある!!

画像3

関数コードという箇所の「アクション」にzipファイルをアップロードという箇所があるので、そちらにアップロード!!
これで関数の設定が完了!

S3に画像をアップロードして試してみる

あとは、指定したs3にバケットの方に画像をアップロードしてみると、自動でリサイズした画像がアップロードされてるのを確認できます。

画像4


画像5

これをアップロードすると、

画像6

こういう形になります!

この画像リサイズ自動化は下の記事のようなECサイトなどで威力をはっきする!

今回画像のリサイズという形でしたがLmbdaが他にも応用できそうなものは、
・ライブ配信の動画をアップロードして、どの端末でも見れるようフォーマットを変えて格納する
・画像認識のサービスと組み合わせて、特定の人だけ写っている動画を自動で作る
とか、このLambdaを活用することで色んなことが自動化できそう!!

この記事が気に入ったらサポートをしてみませんか?