Skip to content

Instantly share code, notes, and snippets.

import os
import boto3
# Explicitly specifying where the default AWS region is found
# (as an environment variable) to be able to mock it in the test
s3_client = boto3.client('s3', region_name=os.environ['AWS_REGION'])
translate_client = boto3.client('translate', region_name=os.environ['AWS_REGION'])
def lambda_handler(event, context):
print(event)
# Mock S3 new file uploaded event
def s3_upload_event(self, file_name):
return {
"Records":[
{
"eventVersion":"2.1",
"eventSource":"aws:s3",
"awsRegion":"us-east-1",
"eventTime":"2021-06-18T16:03:17.567Z",
class TranslateFileTest(unittest.TestCase):
# Test for valid file type (.txt)
@mock.patch('translate_file.app.read_file', side_effect=mocked_read_file)
@mock.patch('translate_file.app.translate_text', side_effect=mocked_translate_text)
def test_valid_file(self, translate_text_mock, read_file_mock):
response = lambda_handler(self.s3_upload_event("valid_file.txt"), "")
expected_response = {
"success": True,
# Mock call to S3 to read file
def mocked_read_file(bucket_name, key_name):
return "我爱写单元测试!"
# Mock call to Translate to translate file text
def mocked_translate_text(original_text):
return {
"original_text":"我爱写单元测试!",
"translated_text":"I love writing unit tests!",
"original_language":"zh",
import unittest
from unittest import mock
# Setting the default AWS region environment variable required by the Python SDK boto3
with mock.patch.dict('os.environ', {'AWS_REGION': 'us-east-1'}):
from translate_file.app import lambda_handler
{
"Version": "2012-10-17",
"Statement": [
{
"Effect": "Allow",
"Action": [
"iam:*",
"lambda:*",
"cloudformation:*",
"sns:CreateTopic",
@em-shea
em-shea / eventbridge-lambda.yaml
Last active November 3, 2023 21:03
EventBridge scheduled event Lambda example
AWSTemplateFormatVersion: '2010-09-09'
Transform: 'AWS::Serverless-2016-10-31'
Resources:
Function:
Type: 'AWS::Serverless::Function'
Properties:
CodeUri: src/Function
Handler: handler.handler
Runtime: python3.11
@em-shea
em-shea / template.yaml
Created May 12, 2020 01:44
An example SAM template for a Lambda function invoked by API Gateway
AWSTemplateFormatVersion: '2010-09-09'
Transform: 'AWS::Serverless-2016-10-31'
Description: An example SAM template for a Lambda function invoked by API Gateway.
Resources:
MyFunction:
Type: 'AWS::Serverless::Function'
Properties:
FunctionName: MyFunction
Handler: MyFunction.lambda_handler
@em-shea
em-shea / template.yaml
Last active June 17, 2020 21:11
An example SAM template for a Lambda & API Gateway app that sends messages using SNS
AWSTemplateFormatVersion: '2010-09-09'
Transform: 'AWS::Serverless-2016-10-31'
Description: An example SAM template for a Lambda & API Gateway app that sends messages using SNS.
Parameters:
# For any variables you don't want stored in your repo, you can pass them through the SAM deploy command
# Ie, sam deploy .... --parameter-overrides MyEmail=myemail@gmail.com
MyEmail:
Type: String
Resources:
@em-shea
em-shea / template.yaml
Last active April 15, 2024 18:54
An example SAM template that creates a DynamoDB table, a Lambda function that writes to DynamoDB, and an EventBridge trigger
AWSTemplateFormatVersion: '2010-09-09'
Transform: 'AWS::Serverless-2016-10-31'
Description: An app that includes a DynamoDB table, a Lambda function that writes to DynamoDB, and a scheduled EventBridge event
Resources:
LambdaWriteToDynamoDB:
# A function that writes to a DynamoDB table on a schedule
Type: 'AWS::Serverless::Function'
Properties:
FunctionName: LambdaWriteToDynamoDB