- vừa được xem lúc

[AWS Associate] 1.Lambda

0 0 34

Người đăng: KIEU BAO DUY

Theo Viblo Asia

1. 背景:

S3にアップロードするWebを作成する

2. 構成:

① クライアントからAPIGatewayにアクセスする
② Lambda機能をコールする
③ クライアントがアップロードするファイルをS3に書き込む

3. 処理概要:

  1. クライアントからファイル名存在しているかをチェックするリクエストを送る
  2. サーバーはpresigned_urlを作成し返却する
  3. 貰ったpresigned_urlによりファイルをアップロード実行する

4. 作成手順:

Step1: HTMLFrontEndを作成

image.png

Step2: Lambda変数を作成

① 変数名
② Lambda書く言語を選択
③ 選択するロールの権限でLambda作成

Step3: Lambdaコード書く

① GETステートメントであればユーザーから送るファイル名が存在しているかをチェックする

if event['httpMethod'] == 'GET': #1 ユーザーから送ったファイル名を取得し処理する fileName = event['queryStringParameters']['fileNameOfCSV'] # どのフォルダーをチェック対象にする変数 bucket = "XXX" prefix = "YYY/" try : s3Objects = s3.list_objects(Bucket=bucket, Prefix=prefix) if 'Contents' in s3Objects: keys = [content['Key'] for content in s3Objects['Contents']] keys.remove(prefix) for i in range(0, len(keys)): if keys[i] == (prefix + fileName) : booCheckFileNameIsValid = False break else: booCheckFileNameIsValid = False except: booCheckFileNameIsValid = False

② POSTステートメントであればpresigned_urlを作成し返却する

 elif event['httpMethod'] == 'POST': print("POST") #メイン csvFromUser = event['body'] #1 S3に保存する bucket = 'XXX' data = json.loads(csvFromUser) upload_key = 'YYY/' + data['fileNameOfCSV'] # Generate the presigned URL for put requests presigned_url = s3.generate_presigned_url( ClientMethod='put_object', Params={ 'Bucket': 'XXX', 'Key': upload_key, 'ContentType': 'text/csv', } )

Step4: APIGateway作成

① トリガーを追加

image.png

② リソース(とメゾンド)を作成

③ ステージを作成

作成したらURLを取得しFrontEndでAPIコール処理にて利用する

5. CORS問題:

実行してみればGETステートメントでCORS問題が発生する

image.png

原因:APIGatewayの方がCORS有効を設定していない。

でも、設定したら再デプロイするとCORS問題まだ発生している

image.png

原因:s3にCORS設定していない。

[ { "AllowedHeaders": [ "*" ], "AllowedMethods": [ "PUT", "POST", "HEAD", "DELETE" ], "AllowedOrigins": [ "*" ], "ExposeHeaders": [ "x-amz-request-id", "x-amz-id-2", "Content-Length", "Content-Type", "Connection", "Server", "Etag" ], "MaxAgeSeconds": 3000 }
]

設定したら、再度テスト見れば正常にアップロードできました!!!

image.png

6. まとめ:

APIGateWay → Lambda → S3を概要的に紹介した。
一番留意点はCORS問題です。対応方法も記載している。
ソースコードもGithubに上げましたのでご参考のほどお願い致します。

参考資料

参考ソース

Bình luận

Bài viết tương tự

- vừa được xem lúc

REST API sử dụng AWS API Gateway, Lambda và DynamoDB

Mục tiêu. Mục tiêu của chúng ta là tạo REST API đơn giản bằng cách sử dụng Amazon API gateway, Lambda và DynamoDB.

0 0 191

- vừa được xem lúc

Tạo REST API với Serverless Framework, Lambda, và Node.js

Ý tưởng của Serverless là bạn không cần phải lo lắng về việc cấu hình server hay autoscale nữa. Việc đó đã được các nhà cung cấp điện toán đám mây lo rồi, và giờ bạn chỉ cần quan tâm đến việc code thô

0 0 54

- vừa được xem lúc

Serverless Series (Golang) - Bài 1 - Serverless và AWS Lambda

Giới thiệu. Chào các bạn tới với series về Serverless.

0 0 69

- vừa được xem lúc

Tìm hiểu về Serverless Framework

Bài viết gốc xem tại: https://vtitech.vn/tim-hieu-ve-serverless-framework/.

0 0 29

- vừa được xem lúc

Vì mẹ anh bắt tìm hiểu serverless

1. Lịch sử hình thành. Để bắt đầu tìm hiểu về serverless, mình sẽ tóm lược sơ lịch sử phát triển phần mềm. .

0 0 42