From cfdec0f18908e87a94433f1632e50e8f768a85f5 Mon Sep 17 00:00:00 2001 From: Arie Bregman Date: Fri, 2 Sep 2022 17:19:56 +0300 Subject: [PATCH] Add three AWS Lambda questions SSIA. --- topics/aws/README.md | 28 ++++++++++++++++++ .../lambda/aws_lambda_direct_access.png | Bin 0 -> 24129 bytes 2 files changed, 28 insertions(+) create mode 100644 topics/aws/images/lambda/aws_lambda_direct_access.png diff --git a/topics/aws/README.md b/topics/aws/README.md index 3061419..8991fda 100644 --- a/topics/aws/README.md +++ b/topics/aws/README.md @@ -1230,6 +1230,34 @@ False. Charges are being made when the code is executed. True +
+What's one of the issues with the current architecture? + + +
+ +Users shouldn't access directly AWS Lambda directly. If you'd to like to expose your Lambda function to users a better approach would be to set up API Gateway endpoint between the users and the Lambda function. + +This not only provides enhanced security but also easier access for the user where he can use HTTP or HTTPS for accessing the function. +
+ +
+Specify one or more use cases for using AWS Lambda
+ +- Uploading images to S3 and tagging them or inserting information on the images to a database +- Uploading videos to S3 and edit them or add subtitles/captions to them and store the result in S3 +- Use SNS and/or SQS to trigger functions based on notifications or messages receieved from these services. +- Cron Jobs: Use Lambda together with CloudWatch events to schedule tasks/functions periodically. +
+ +
+You run an architecture where you have a Lambda function that uploads images to S3 bucket and stores information on the images in DynamoDB. You would like to expose the function to users so they can invoke it. Your friend Carlos suggests you expose the credentials to the Lambda function. What's your take on that?
+ +That's a big no. You shouldn't let users direct access to your Lambda function. + +The way to go here and expose the Lambda function to users is to to an API Gateway endpoint. +
+ ### Containers #### ECS diff --git a/topics/aws/images/lambda/aws_lambda_direct_access.png b/topics/aws/images/lambda/aws_lambda_direct_access.png new file mode 100644 index 0000000000000000000000000000000000000000..4c5b37a8a573db64bd1b01989032156584f0a88d GIT binary patch literal 24129 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 literal 0 HcmV?d00001