If you want an official reference from AWS, you can refer to it here: https://docs.aws.amazon.com/cdk/latest/guide/serverless_example.html
Remember our original high-level diagram here:
We want to be able to put files into our S3 bucket so that it could automatically send a notification to the AWS Lambda, and the Lambda would perform an ETL process into an AuroraDB table.
However, for simplicity sake, we want to deploy a basic Lambda function and make sure it works first before connecting the bucket and function together for a seamless integration
Install the relevant npm libraries
First, install the aws-lambda package: npm install @aws-cdk/aws-lambda
Make sure this package’s version is in sync with the other AWS CDK libraries, or it will fail to deploy!
Create your Lambda code for deployment
Prepare some basic Python lambda code for deployment. In my Github repo, it is stored in: src/lambda/basic_lambda/lambda_function.py
def lambda_handler(event, context): return { "statusCode":200 } # For direct invocation and testing on the local machine if __name__ == '__main__': print(lambda_handler(None,None))
This function only outputs statusCode:200
as part of the payload. We don’t need anything complicated here as we want something simple to test if this block of code is executable.
Building the basic Lambda Stack
Now that you have some code to deploy, we move on to prepare AWS CDK to deploy our Lambda function. As an example, I created a basic stack configuration here within the repo: lib/basic_lambda_stack.ts
Here we deploy the above function with some basic configurations. I’m not going through the VPC, security, and subnet configurations as these settings can be found in the official AWS docs (https://docs.aws.amazon.com/cdk/api/latest/docs/aws-lambda-readme.html), and it will differ from mine because our environments are different. However, we are going through some foundational code here:
Let’s break it down:
- Declare the
aws-lambda
library as shown. Make sure to update all your libraries or your deployment will fail if they aren’t in sync! basicLambdaStack
is the class name for this app. Feel free to change it to anything you want.- I prepared both function_name and lambda_path for quick reference. You can do what you need as per your Python style guide.
- Within the handler, provide the
- functionName
- runtime
- code (based on the structure of the Git repo)
- handler (This is the file itself and the function to invoke within the file)
Initialize the stack through the app
We want to create the stack from our bin file, and in my Github repo, it is bin/gefyra-cdk-demo.ts:
As shown above, I initialized the stack by referencing the library file and creating an object of the class.
AWS CDK is now ready to deploy your new stack!
You shouldn’t see any errors at this stage.
What is happening under the hood?
- AWS CDK will create a new IAM role that can execute the lambda instance
- It will also create the necessary privileges required
- You can add additional policies to this role, but it is another subject altogether. This is a basic tutorial for how it works.
AWS CDK will proceed to deploy if you allow the changes, and you should be able to see it on the console after it finished:
I went ahead and tested my deployment to receive a successful result.