![見出し画像](https://assets.st-note.com/production/uploads/images/28063770/rectangle_large_type_2_0764f36822e77d67778c5213e152a0c8.jpg?width=1200)
AWS Lambda Python S3へファイルアップロードで別のS3にその暗号化ファイルをアップロード(1/3)
こんにちは。現在、AWSにつきまして、勉強させて頂いております者です。
今回は、AWSのLambda(Python)で、S3バケットにファイルがアップロードされたイベントで、別のS3バケットに、その暗号化ファイルをアップロードする方法につきまして、書かせて頂きたいと存じ上げます。
私はWSL(Windows10)を使用中で、WSL環境での説明になりますが、他の環境をお使いの方は、ご自身で環境に合わせてご対応頂きたく存じ上げます。
◆使うAWSサービス ・EC2仮想サーバー(Amazon Linux 2) ・S3バケット ・Lambda
◆対象者 ・AWSのアカウントを取得されておられます方 ・AWSコンソールのセキュリティステータス設定を全て完了されておられます方
![画像1](https://assets.st-note.com/production/uploads/images/27998860/picture_pc_ab4c17811148502d9839c2a86f29c336.png?width=1200)
◆事前にご準備頂くもの
・FileZillaのインストール ・TeraTermのインストール ・IAMロールの作成
![画像5](https://assets.st-note.com/production/uploads/images/28000707/picture_pc_6744b8aabf63b35d2a43af224b8bb7fd.png?width=1200)
※話が前後致しまして、大変、申し訳ありませんが、「ロール」につきまして、説明が巻末にございます。解り易く説明致しておりますので、そちらを先に、ご購読頂きたい次第です。
Appendix A →(3/3)の最後です。
※あともう一つ。AWSのセキュリティ対策としまして、S3に、「アクセスコントロール」というものが必要になります。テストをしてから、「どうしてS3にアクセス出来ないんだ」と、慌てないように、巻末のAppendix Bにて、ご説明致しております。話が前後して、大変、申し訳ありませんが、「始められます前に」、巻末の(3/3)のAppendix A、Appendix Bをご参照頂きますよう、宜しくお願い申し上げます。
◆概要
1. EC2インスタンスの作成 2. VenvでEC2内仮想環境構築 3. S3バケット作成 4. ライブラリデプロイ前のLambdaのテスト 5. pyminizipというファイル暗号圧縮ライブラリのLambda関数へのデプロイ 6. デプロイ済のLambda_function.zipをLambdaにアップロード 7. AWS料金節約の為、使用済みのS3バケットとEC2インスタンスの削除
![画像2](https://assets.st-note.com/production/uploads/images/28000246/picture_pc_4e1a1007d7092efb5a67a60170492ba4.jpg?width=1200)
1. EC2インスタンス作成
(1)AWSコンソールから、EC2を選択し、EC2インスタンスを起動します。
![画像3](https://assets.st-note.com/production/uploads/images/28000496/picture_pc_2fb5387966ff474cf4697de43064e936.png?width=1200)
(2) 「Amazon Linux 2」を選択します。
![画像30](https://assets.st-note.com/production/uploads/images/28061650/picture_pc_bef8d57347567d2061780e27616eb60f.png?width=1200)
(3)無料枠の「t2.micro」サービスを選択します。
![画像6](https://assets.st-note.com/production/uploads/images/28000788/picture_pc_4700f79db04a694e6fa5dcf0db6a72cf.png?width=1200)
(4) 詳細を設定します。
![画像7](https://assets.st-note.com/production/uploads/images/28001190/picture_pc_5466be69c9805798bd0fdbb2ea517c34.png?width=1200)
(5)ストレージの追加をします。
![画像8](https://assets.st-note.com/production/uploads/images/28001266/picture_pc_bc4cc5ea4c84f323f555a943cad72b72.png?width=1200)
(6)タグの追加もそのままで、次の「セキュリティグループの設定」へ進みます。
![画像9](https://assets.st-note.com/production/uploads/images/28001367/picture_pc_bded64c9384981b69c8b074661c57e26.png?width=1200)
(7) 内容を確認し、「確認と作成」へ進みます。
![画像10](https://assets.st-note.com/production/uploads/images/28001573/picture_pc_483feb63044ace32728660bd641dbda3.png?width=1200)
(8)インスタンス作成の確認をしインスタンスを起動します。
![画像11](https://assets.st-note.com/production/uploads/images/28001688/picture_pc_14da6e6b38c2032df1944aede6b23719.png?width=1200)
(9)キーペアを作成します。 適当な名前を決めて下さい。そして必ず、「キーペアのダウンロードをした後で」 インスタンスを作成します。キーペアは、WindowsのDownloadsフォルダに格納されます。
![画像12](https://assets.st-note.com/production/uploads/images/28002010/picture_pc_240ca54f45594de339a55ad0be43ef72.png?width=1200)
※EC2インスタンスは、起動までに約10分以上時間がかかります。
(10) EC2インスタンスが起動したら、パブリックIPアドレスとパブリックDNSをメモするか、こちらの画面のスクリーンショットを撮っておきます。
![画像13](https://assets.st-note.com/production/uploads/images/28002164/picture_pc_828afe7c824db8a1bae383a17adae988.png?width=1200)
2. VenvでEC2内仮想環境構築
(1)TeraTermを起動し、このまま「OK」を押します。
![画像14](https://assets.st-note.com/production/uploads/images/28002774/picture_pc_e54dc7d9f85474d64725069683dd8741.png?width=1200)
(2)ユーザー名に「ec2-user」と入力し、認証方式は「RSA/DSA/ECDSA/ED25519鍵を使う」を選択し、右側の「…」ボタンを押すと、Windowsのエクスプローラが開くので、Downloadsフォルダから、先程ダウンロードしたキーペアをクリックします。
![画像15](https://assets.st-note.com/production/uploads/images/28002882/picture_pc_10be1af8b74771c7905f4b6a7c3e7cad.png?width=1200)
(3)「OK」を押したら、EC2環境に入ることが出来ました。プロンプトには、[ec2-user@ip-*******]$と表示されればOKです。
![画像16](https://assets.st-note.com/production/uploads/images/28003359/picture_pc_6cff8258acd7bb9b397e9f7b73460cd8.png?width=1200)
(4)Venvを使い、EC2内に仮想環境を作ります。
a. Python3をインストールします。
【注意】インストールする為に、Ubuntuなどでは、「apt 」を使いますが、現在は、Amazon Linux 2 環境内におりますので、「yum」を使います。
$ sudo yum install python3 -y
b. Venv(旧Virtualenv)を使い、仮想環境を作ります。
$ python3 -m venv ***/env
「***」の部分は、好きな環境名を決めて下さい。
c. 仮想環境に入ります。
[ec2-user ~]$ source ~/***/env/bin/activate
上手く入れたら、プロンプトの先頭に(env)が追加されます。
(env)[ec2-user@~]$
d. pipの最新版をインストールします。
(env)[ec2-user@~]$ pip install pip --upgrade
e.開発に必要なBoto3ライブラリをインストールします。
(env)[ec2-user@~]$pip install boto3
f.「pyminizip」というファイル暗号圧縮ライブラリもインストールしておきます。
(env)[ec2-user@~]$ sudo yum install -y gcc zlib-devel
(env)[ec2-user@~]$ pip install pyminizip
g.最後に、Venv環境から抜けます。
(env)[ec2-user@~]$ deactivate
h. プロンプトが元に戻ります。
[ec2-user@~]$
i. 接続を終わります。右上の×を押し、切断しますか?で「OK」を押します。
![画像17](https://assets.st-note.com/production/uploads/images/28005574/picture_pc_676a72dad3850fbe7918c386afa74f0b.png?width=1200)
3. S3バケットを2つ作ります。
コンソールで、「read用」と「write用」のS3バケットを2つ作ります。
(1) コンソールから、S3を選択し、「バケットを作成する」を押します。
![画像18](https://assets.st-note.com/production/uploads/images/28006113/picture_pc_ea393cc49495551acbaf61b1d613a2c6.png?width=1200)
(2) 世界でユニークな(唯一ひとつだけの)名前をつけ、日本在住の方は、東京リージョンのままで、次へ進みます。(バケットを2つ作るので、名前の末尾に、それぞれreadとwriteをつけると解り易い)
![画像19](https://assets.st-note.com/production/uploads/images/28006198/picture_pc_52702c1e9b07c9af8e918c7e917fc6bf.png?width=1200)
(3)そのまま「次へ」を押します。
![画像20](https://assets.st-note.com/production/uploads/images/28006445/picture_pc_c46fb28a48ca516ca297e8ecec4d0fe3.png?width=1200)
(4)S3にアクセス出来ない問題が発生したら困るので、テストとして「完了後、直ぐに削除する前提で」パブリックアクセスをONにします。
![画像21](https://assets.st-note.com/production/uploads/images/28006535/picture_pc_92bd4298139d9ab2ca13e761515eea23.png?width=1200)
(5)確認し、S3バケットを作成します。
![画像22](https://assets.st-note.com/production/uploads/images/28006716/picture_pc_26d0b4181f093824532064dce577ca56.png?width=1200)
(6)同様のことを繰り返し、read用とwrite用にS3バケットを2つ、作成します。
![画像23](https://assets.st-note.com/production/uploads/images/28006947/picture_pc_99e6f73231f0e33bc66fe5a33c1cab19.png?width=1200)
4.ライブラリデプロイ前のLambdaのテスト
まずは簡単な動作から、確認します。簡単なLambda関数を作成します。
(1)コンソールから、Lambdaを選択し、「関数の作成」ボタンを押します。
![画像24](https://assets.st-note.com/production/uploads/images/28007237/picture_pc_430d81907341db822b7c773782c1054f.png?width=1200)
(2)「設計図の使用」と「s3-get-object-python」を選択し、画面を下にスクロールさせて「設定」を押します。
![画像25](https://assets.st-note.com/production/uploads/images/28007333/picture_pc_8bef2d642654eae7feca5f54e6885596.png?width=1200)
(3)詳細を設定します。実行ロールというのは、Lambdaに与えられる権限のことです。作成済なら、「既存のロールを使用する」を選択し、トリガーは、作成した「read用の」S3バケットを指定します。トリガーとは、これから作戦するLambda関数を呼び出す「引き金となる」イベントのことです。ここで、read用のS3バケットに、動作が起こった場合に、Lambdaの関数が実行されます。
![画像26](https://assets.st-note.com/production/uploads/images/28007552/picture_pc_5f3edb51998ecee6e4df8943f5b4828c.png?width=1200)
(4) テストの際は、「トリガーの有効化」のチェックを外しておいても良いですが、忘れない為に、チェックしておきます。
![画像27](https://assets.st-note.com/production/uploads/images/28008362/picture_pc_6e243d2c6e678aeb735f7e3f8af3ad7a.png?width=1200)
(5)「関数の作成」を押します。
![画像28](https://assets.st-note.com/production/uploads/images/28008516/picture_pc_cfe886fb82262a44cf68ff363a906f98.png?width=1200)
(6)関数が作成されたら、中央の「Lambda_function」のボタンをクリックして、Lambda関数を編集します。
![画像29](https://assets.st-note.com/production/uploads/images/28008943/picture_pc_f311a84cba8eac5a852cf98637d19b96.png?width=1200)
(7)まずは一旦、表示されているコードを全て削除して、「こちらの画面の通りに」コードを書き、右上の「保存」ボタンを押して下さい。
![画像30](https://assets.st-note.com/production/uploads/images/28009104/picture_pc_4b272be147b79fc5c8a19f1c6585220e.png?width=1200)
AWS Lambda(2/3)へ続く
この記事が気に入ったらサポートをしてみませんか?