You signed in with another tab or window. Reload to refresh your session.You signed out in another tab or window. Reload to refresh your session.You switched accounts on another tab or window. Reload to refresh your session.Dismiss alert
{{ message }}
Repository navigation
Add AWS CDK examples for creating and using a layer from the Serverless Application Repository #355
What were you initially searching for in the docs?
Using the AWS CDK, I wanted to deploy a Lambda layer from the Powertools Serverless Application Repository ARN for re-use within my CDK application.
The Lambda Layer documentation does not include how to do this.
Describe how we could make it clearer
A code snippet and details could be provided to make it easier for a customer to get up and running faster.
If you have a proposed update, please share it here
Using similar language to the existing documentation, but some rewording could also used to provide the overall detail with SAM and CDK examples below it.
If using the AWS CDK, you can create include this SAR App and lock to a specific semantic version. The Layer can be used in the same CDK application. Once deployed, it'll be available across the account this is deployed to.
** insert a TypeScript CDK example **
# Create the AWS Lambda Powertools for Python layerpowertools_arn='arn:aws:serverlessrepo:eu-west-1:057560766410:applications/aws-lambda-powertools-python-layer'powertools_application=aws_sam.CfnApplication(self, 'AWSLambdaPowertoolsApplication',
location={'applicationId': powertools_arn,
'semanticVersion': '1.12.0'})
powertools_resource=cdk.CfnResource(powertools_application, 'AWSLambdaPowertoolsResource',
type='AWS::Serverless::Application',
properties={'Location': {
'ApplicationId': powertools_arn,
'SemanticVersion': '1.12.0'
}})
powertools_layer=aws_lambda.LayerVersion.from_layer_version_arn(
self, 'AWSLambdaPowertoolsLayer', powertools_resource.get_att("Outputs.LayerVersionArn").to_string())
# Reference the Layer in a Lambda definitionmy_function=aws_lambda.Function(
self, "MyFunction",
layers=[powertools_layer],
runtime=aws_lambda.Runtime.PYTHON_3_8,
)
is there a way to always get the latest published version?
sadly no, you would need to run CLI or some custom resource to fetch it and sort by version
For CDK, I like to load that kind of thing via configuration settings.
I will need to write a function that takes the powertools version from my pipfile.lock file and set the layer version parameter. annoying, but will work.
@michaelbrewer i got the same code in my project but we are using pipenv instead. I'm working on adding a code that will extract the powertools version from the pipenv.lock file and use that for the layer version is the cdk. that way when you upgrade your layer locally, it will also be used automatically for uploaded lambdas layer.
@am29d is on PTO until next week so this will come after 1.14.0 release this week
We've decided to publish a public Lambda Layer from our accounts to ease consumption.
We agreed that there are too many customers having challenges with the SAR App approach. Despite providing semantic versioning, these deployment gymnastics to get sem versions for Lambda Layers cause more harm than good whether that is SAM, CDK, Serverless framework etc.
We'll take on these maintenance costs by
Publishing a new public Lambda Layer upon new releases
Create a dynamic GitHub Badge that shows the latest Lambda Layer available
Clean up old Lambda Layers every 6 months (we'll document this)
Continue to collect customers feedback to feed in to Lambda Product management team on the need for Lambda Layers Aliases to solve this problem in the long term
We'll start working on that once Alex is back.
Thank you
Reacted by Ran Isenberg, Michael Brewer and Andrew Pearce
@heitorlessa , arent you already publishing a new layer every version?
Yes, but it's different. We need additional infrastructure, a cadence for removing old versions without breaking anyone (SAR doesn't as it's local to your account), and a public API to fetch the latest Layer and by version(s).
@heitorlessa@michaelbrewer@am29d
so after i finally got enough dev permissions to use SAR, i came to a realisation that you dont need to deploy both cdk.CfnResource and the sam application in the cdk example. You need only the the sam application.
This creates a nested stack with the lambda layerversion resource .
Here's the shortened version that creates only 1 nested stack (instead of 2 in the example):
@michaelbrewer I'd like to wait for more customers to raise before we do. Terraform is more widely used, so I'd like to add all of them as soon as we get our next biggest chunk of work done - Public Lambda Layers ARN by @am29d
Added both CDK and Serverless framework examples - This will be available in the next release. Closing this now and tagging to share when it's released.
Activity
michaelbrewer commentedon Mar 23, 2021
Possibly a Python CDK example :P
austoonz commentedon Mar 23, 2021
The example I included was Python CDK. 😁
ran-isenberg commentedon Mar 25, 2021
+1 for this, was on my todo list for a long time ;)
ran-isenberg commentedon Mar 25, 2021
is there a way to always get the latest published version?
am29d commentedon Mar 25, 2021
Hi Andrew,
Thanks for opening the issue and providing the sample code. I will find a good spot in the docs to add it.
am29d commentedon Mar 25, 2021
sadly no, you would need to run CLI or some custom resource to fetch it and sort by version
michaelbrewer commentedon Mar 30, 2021
For CDK, I like to load that kind of thing via configuration settings.
ran-isenberg commentedon Mar 31, 2021
I will need to write a function that takes the powertools version from my pipfile.lock file and set the layer version parameter. annoying, but will work.
michaelbrewer commentedon Mar 31, 2021
@risenberg-cyberark for docs i would just use the
cdk.jsonor runtime context to configure the version of powertools.michaelbrewer commentedon Apr 3, 2021
@risenberg-cyberark @austoonz here is a full working example using Poetry:
Directory structure like below, with
cdkfolder for the AWS CDK code andhello-worldwith the lambda code.Source for:
cdk/pyproject.tomlSource code for
cdk/Makefile:dev: pip install --upgrade pip poetry poetry installSource code for the
cdk/cdk.json:{ "app": "poetry run python3 app.py", "context": { "powertools_version": "1.13.0" } }Source code for the main stack
cdk/lambda_stack/lambda_stack.py:michaelbrewer commentedon Apr 3, 2021
@heitorlessa @am29d ☝🏼 what do you think?
ran-isenberg commentedon Apr 5, 2021
@michaelbrewer i got the same code in my project but we are using pipenv instead. I'm working on adding a code that will extract the powertools version from the pipenv.lock file and use that for the layer version is the cdk. that way when you upgrade your layer locally, it will also be used automatically for uploaded lambdas layer.
3 remaining items
heitorlessa commentedon Apr 5, 2021
Hey everyone - two quick updates
@am29d is on PTO until next week so this will come after 1.14.0 release this week
We've decided to publish a public Lambda Layer from our accounts to ease consumption.
We agreed that there are too many customers having challenges with the SAR App approach. Despite providing semantic versioning, these deployment gymnastics to get sem versions for Lambda Layers cause more harm than good whether that is SAM, CDK, Serverless framework etc.
We'll take on these maintenance costs by
We'll start working on that once Alex is back.
Thank you
ran-isenberg commentedon Apr 5, 2021
@heitorlessa , arent you already publishing a new layer every version?
heitorlessa commentedon Apr 5, 2021
Yes, but it's different. We need additional infrastructure, a cadence for removing old versions without breaking anyone (SAR doesn't as it's local to your account), and a public API to fetch the latest Layer and by version(s).
ran-isenberg commentedon Apr 5, 2021
@heitorlessa @michaelbrewer @am29d
so after i finally got enough dev permissions to use SAR, i came to a realisation that you dont need to deploy both cdk.CfnResource and the sam application in the cdk example. You need only the the sam application.
This creates a nested stack with the lambda layerversion resource .
Here's the shortened version that creates only 1 nested stack (instead of 2 in the example):
michaelbrewer commentedon May 18, 2021
@heitorlessa should we be adding CDK examples along side the AWS Sam instructions?
heitorlessa commentedon Jun 4, 2021
@michaelbrewer I'd like to wait for more customers to raise before we do. Terraform is more widely used, so I'd like to add all of them as soon as we get our next biggest chunk of work done - Public Lambda Layers ARN by @am29d
heitorlessa commentedon Jul 2, 2021
Added both CDK and Serverless framework examples - This will be available in the next release. Closing this now and tagging to share when it's released.