Skip to content

Instantly share code, notes, and snippets.

@michaelbrewer
Last active April 3, 2021 20:16
Show Gist options
  • Save michaelbrewer/b8d085fa1b0152c5eb823092c4555036 to your computer and use it in GitHub Desktop.
Save michaelbrewer/b8d085fa1b0152c5eb823092c4555036 to your computer and use it in GitHub Desktop.
aws-lambda powertools cdk

Welcome to your CDK Python project!

This is a blank project for Python development with CDK.

The cdk.json file tells the CDK Toolkit how to execute your app.

Install dependencies by running

$ make dev

At this point you can now synthesize the CloudFormation template for this code.

$ cdk synth

To add additional dependencies, for example other CDK libraries, just add them using poetry add

Useful commands

  • cdk ls list all stacks in the app
  • cdk synth emits the synthesized CloudFormation template
  • cdk deploy deploy this stack to your default AWS account/region
  • cdk diff compare deployed stack with current state
  • cdk docs open CDK documentation

Enjoy!

# cdk/app.py
from aws_cdk import core as cdk
from lambda_stack.lambda_stack import LambdaStack
app = cdk.App()
LambdaStack(app, "LambdaStack")
app.synth()
{
"app": "poetry run python3 app.py",
"context": {
"powertools_version": "1.13.0"
}
}
# cdk/lambda_stack/lambda_stack.py
import pathlib
import aws_cdk.aws_lambda as aws_lambda
import aws_cdk.aws_sam as sam
from aws_cdk import core as cdk
class LambdaStack(cdk.Stack):
def __init__(self, scope: cdk.Construct, construct_id: str, **kwargs) -> None:
super().__init__(scope, construct_id, **kwargs)
lambda_src_dir = str(pathlib.Path(__file__).parent.parent.parent) + "/hello-world/"
# Reference the Layer in a Lambda definition
aws_lambda.Function(
self,
"MyFunction",
layers=[self.get_powertools_lambda_layer()],
runtime=aws_lambda.Runtime.PYTHON_3_8,
handler="app.lambda_handler",
code=aws_lambda.Code.from_asset(lambda_src_dir),
)
def get_powertools_lambda_layer(self):
powertools_version = self.node.try_get_context("powertools_version")
powertools_arn = "arn:aws:serverlessrepo:eu-west-1:057560766410:applications/aws-lambda-powertools-python-layer"
powertools_application = sam.CfnApplication(
self,
"AWSLambdaPowertoolsApplication",
location={
"applicationId": powertools_arn,
"semanticVersion": powertools_version,
},
)
powertools_resource = cdk.CfnResource(
powertools_application,
"AWSLambdaPowertoolsResource",
type="AWS::Serverless::Application",
properties={
"Location": {
"ApplicationId": powertools_arn,
"SemanticVersion": powertools_version,
}
},
)
return aws_lambda.LayerVersion.from_layer_version_arn(
self,
"AWSLambdaPowertoolsLayer",
powertools_resource.get_att("Outputs.LayerVersionArn").to_string(),
)
# cdk/Makefile
dev:
# Installs peotry and the dependencies
pip install --upgrade pip poetry
poetry install
[tool.poetry]
name = "cdk"
version = "0.1.0"
description = "CDK code for the hello world example"
authors = ["Michael Brewer <michael.brewer@gyft.com>"]
[tool.poetry.dependencies]
python = "^3.8"
"aws-cdk.core" = "^1.96.0"
"aws-cdk.aws-sam" = "^1.96.0"
"aws-cdk.aws-lambda" = "^1.96.0"
[tool.poetry.dev-dependencies]
[build-system]
requires = ["poetry-core>=1.0.0"]
build-backend = "poetry.core.masonry.api"
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment