この記事は公開されてから1年以上経過しています。情報が古い可能性がありますので十分ご注意ください。
最初に書く
協栄情報の陸です。AWSの初心者です。この記事は、日々の学習と発生した問題を記録するために使用されます。記事の中に問題を解決するには遅すぎる場所があるかもしれませんが、解決策を知った後、問題に解決策を追加しますので、ご安心ください。
初めに
今日はs3ストレージバケットにアップロードされた画像をラムダ関数で圧縮する実験をしてみました。
実験な流れ
- ロールを作成する
- s3ストレージバケットを2つ作成する
- ラムダ関数を作成する
- ラムダ関数にトリガーを追加する
- 最後にテスト
操作
まず、s3のパーミッションを持つロールを作成します。
次に、2つのamazon s3ストレージバケットを作成し、そのうちの1つに画像をアップロードします。
次にlambda関数を作成します。
ここではpythonのバージョンは3.8を選択してください! じゃないと、あとでエラーが多発するぞ!
最初にテストコードを書きます。
テストのイベントの設定
そして、新しいテストイベントの作成、選択します。 入力ボックスにs3と入力し、amazon s3 putを選択します。
その後、情報を修正し、バケット内の名前を画像がアップロードされたストレージバケットに変更し、そのバケットのARNを変更した後、オブジェクト内のキーをアップロードされた画像の名前に変更します。
トリーカーを追加選択
amazon s3サービスを選択し、画像がアップロードされたストレージバケットを選択します。 ivertstails は put または all を選択することができます。
そして、小さなボックスにチェックを入れて、appendを選択します。
この時点で、lambda関数はすでにamazon s3サービスに関連付けられています。
この時点でテストを実行すると、テストが失敗することがわかります。
これは lambda が amazon Linux イメージを使用していて、デフォルトでは PIL 依存関係がインストールされていないため、手動で追加する必要があるためです。 依存関係を追加するには2つの方法があります。1つは、再デプロイ後にローカルコードをパッケージ化してラムダにアップロードする方法です。 もう一つはLambdaが提供するLayersを介したもので、単純に環境の依存関係をLayersに渡すことで再利用できることを意味しています。
ここではレイヤーアプローチを選択します。 レイヤーをクリックして、レイヤーの追加
ここでは3つの方法が用意されており、1つはAWS レイヤ、1つはカスタムレイヤ、最後の1つはARNを指定。 最初の2つは探している依存パッケージを持っていないので、3つ目を選択します。また、[ARNを指定]とは、自分で定義しなくても第三者が作った依存パッケージを参照することを意味します。 いくつかの特定の依存パッケージは、以下のリンクから見つけることができます。
https://github.com/keithrozario/Klayers/blob/master/deployments/python3.8/arns/ap-northeast-1.csv
追加した後、再度テストしてみたところ、うまくいきました。
amazon s3 storage bucketのインターフェイスに戻り、それぞれのバケツの中の情報を個別に確認します。 まずは元のバケツに入っている画像の大きさを見てみましょう。 そして、リサイズされたバケツの中の画像のサイズを見てください。
オリジナル
圧縮後
問題点
今日のこの実験には多くの問題点があります。
1:コードを書いていない時に注意を払っていなかった、関数名を変えてしまった、:記号を書くのを忘れていた。
2:lambda関数を作成するときに、バージョンはバージョン3.6を選択し、その結果、レイヤーの参照Layers依存パッケージ、バージョンが対応していません。 情報を確認したところ、3.7版のぴぉpilowが非推奨になっていることが判明しました。
3:コードを書くときにパスが不明瞭だった。 圧縮後、古い画像が上書きされていました。
まとめ
今日の実験は全体的には、途中で色々と問題はあったものの、最終的には全て解決したものの、やはり多くの利益を得ることができました。 最後に、情報技術の急速な発展のために、いくつかのエラーは、間違ったコードを書くことの問題ではなく、バージョンの問題であることを覚えておいてほしいと思います。