Skip to content

Commit fc376f9

Browse files
docs(homepage): Change installation to CDK v2 (#4351)
* changed to AWS CDK v2 * modified to python312 * moved cdk to examples * moved code to examples * Moving files + small fix --------- Signed-off-by: Keith Rozario <[email protected]> Co-authored-by: Leandro Damascena <[email protected]>
1 parent dd77ae1 commit fc376f9

19 files changed

+489
-416
lines changed

.pre-commit-config.yaml

+1
Original file line numberDiff line numberDiff line change
@@ -34,6 +34,7 @@ repos:
3434
entry: poetry run cfn-lint
3535
language: system
3636
types: [yaml]
37+
exclude: examples/homepage/install/.*?/serverless\.yml$
3738
files: examples/.*
3839
- repo: https://github.com/rhysd/actionlint
3940
rev: "fd7ba3c382e13dcc0248e425b4cbc3f1185fa3ee" # v1.6.24

docs/index.md

+31-416
Large diffs are not rendered by default.
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,21 @@
1+
# Create a new one with the layer
2+
❯ amplify add function
3+
? Select which capability you want to add: Lambda function (serverless function)
4+
? Provide an AWS Lambda function name: <NAME-OF-FUNCTION>
5+
? Choose the runtime that you want to use: Python
6+
? Do you want to configure advanced settings? Yes
7+
...
8+
? Do you want to enable Lambda layers for this function? Yes
9+
? Enter up to 5 existing Lambda layer ARNs (comma-separated): arn:aws:lambda:eu-central-1:017000801446:layer:AWSLambdaPowertoolsPythonV2-Arm64:69
10+
❯ amplify push -y
11+
12+
13+
# Updating an existing function and add the layer
14+
❯ amplify update function
15+
? Select the Lambda function you want to update test2
16+
General information
17+
- Name: <NAME-OF-FUNCTION>
18+
? Which setting do you want to update? Lambda layers configuration
19+
? Do you want to enable Lambda layers for this function? Yes
20+
? Enter up to 5 existing Lambda layer ARNs (comma-separated): arn:aws:lambda:eu-central-1:017000801446:layer:AWSLambdaPowertoolsPythonV2-Arm64:69
21+
? Do you want to edit the local lambda function now? No
+23
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,23 @@
1+
from aws_cdk import Aws, Stack, aws_lambda
2+
from constructs import Construct
3+
4+
5+
class SampleApp(Stack):
6+
7+
def __init__(self, scope: Construct, construct_id: str, **kwargs) -> None:
8+
super().__init__(scope, construct_id, **kwargs)
9+
10+
powertools_layer = aws_lambda.LayerVersion.from_layer_version_arn(
11+
self,
12+
id="lambda-powertools",
13+
layer_version_arn=f"arn:aws:lambda:{Aws.REGION}:017000801446:layer:AWSLambdaPowertoolsPythonV2-Arm64:69",
14+
)
15+
aws_lambda.Function(
16+
self,
17+
"sample-app-lambda",
18+
runtime=aws_lambda.Runtime.PYTHON_3_12,
19+
layers=[powertools_layer],
20+
architecture=aws_lambda.Architecture.ARM_64,
21+
code=aws_lambda.Code.from_asset("lambda"),
22+
handler="hello.handler",
23+
)
+34
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,34 @@
1+
import json
2+
3+
import pulumi
4+
import pulumi_aws as aws
5+
6+
role = aws.iam.Role(
7+
"role",
8+
assume_role_policy=json.dumps(
9+
{
10+
"Version": "2012-10-17",
11+
"Statement": [
12+
{"Action": "sts:AssumeRole", "Principal": {"Service": "lambda.amazonaws.com"}, "Effect": "Allow"},
13+
],
14+
},
15+
),
16+
managed_policy_arns=[aws.iam.ManagedPolicy.AWS_LAMBDA_BASIC_EXECUTION_ROLE],
17+
)
18+
19+
lambda_function = aws.lambda_.Function(
20+
"function",
21+
layers=[
22+
pulumi.Output.concat(
23+
"arn:aws:lambda:",
24+
aws.get_region_output().name,
25+
":017000801446:layer:AWSLambdaPowertoolsPythonV2-Arm64:69",
26+
),
27+
],
28+
tracing_config={"mode": "Active"},
29+
runtime=aws.lambda_.Runtime.PYTHON3D9,
30+
handler="index.handler",
31+
role=role.arn,
32+
architectures=["arm64"],
33+
code=pulumi.FileArchive("lambda_function_payload.zip"),
34+
)
+12
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,12 @@
1+
AWSTemplateFormatVersion: '2010-09-09'
2+
Transform: AWS::Serverless-2016-10-31
3+
4+
Resources:
5+
MyLambdaFunction:
6+
Type: AWS::Serverless::Function
7+
Properties:
8+
Architectures: [arm64]
9+
Runtime: python3.12
10+
Handler: app.lambda_handler
11+
Layers:
12+
- !Sub arn:aws:lambda:${AWS::Region}:017000801446:layer:AWSLambdaPowertoolsPythonV2-Arm64:69
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,13 @@
1+
service: powertools-lambda
2+
3+
provider:
4+
name: aws
5+
runtime: python3.12
6+
region: us-east-1
7+
8+
functions:
9+
powertools:
10+
handler: lambda_function.lambda_handler
11+
architecture: arm64
12+
layers:
13+
- arn:aws:lambda:${aws:region}:017000801446:layer:AWSLambdaPowertoolsPythonV2-Arm64:69
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,41 @@
1+
terraform {
2+
required_version = "~> 1.0.5"
3+
required_providers {
4+
aws = "~> 3.50.0"
5+
}
6+
}
7+
8+
provider "aws" {
9+
region = "{region}"
10+
}
11+
12+
resource "aws_iam_role" "iam_for_lambda" {
13+
name = "iam_for_lambda"
14+
15+
assume_role_policy = <<EOF
16+
{
17+
"Version": "2012-10-17",
18+
"Statement": [
19+
{
20+
"Action": "sts:AssumeRole",
21+
"Principal": {
22+
"Service": "lambda.amazonaws.com"
23+
},
24+
"Effect": "Allow"
25+
}
26+
]
27+
}
28+
EOF
29+
}
30+
31+
resource "aws_lambda_function" "test_lambda" {
32+
filename = "lambda_function_payload.zip"
33+
function_name = "lambda_function_name"
34+
role = aws_iam_role.iam_for_lambda.arn
35+
handler = "index.test"
36+
runtime = "python3.9"
37+
layers = ["arn:aws:lambda:{region}:017000801446:layer:AWSLambdaPowertoolsPythonV2-Arm64:69"]
38+
architectures = ["arm64"]
39+
40+
source_code_hash = filebase64sha256("lambda_function_payload.zip")
41+
}

examples/homepage/install/sar/cdk.py

+37
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,37 @@
1+
from aws_cdk import Stack, aws_lambda, aws_sam
2+
from constructs import Construct
3+
4+
POWERTOOLS_BASE_NAME = "AWSLambdaPowertools"
5+
# Find latest from github.com/aws-powertools/powertools-lambda-python/releases
6+
POWERTOOLS_VER = "2.37.0"
7+
POWERTOOLS_ARN = "arn:aws:serverlessrepo:eu-west-1:057560766410:applications/aws-lambda-powertools-python-layer"
8+
9+
10+
class SampleApp(Stack):
11+
12+
def __init__(self, scope: Construct, id_: str) -> None:
13+
super().__init__(scope, id_)
14+
15+
# Launches SAR App as CloudFormation nested stack and return Lambda Layer
16+
powertools_app = aws_sam.CfnApplication(
17+
self,
18+
f"{POWERTOOLS_BASE_NAME}Application",
19+
location={"applicationId": POWERTOOLS_ARN, "semanticVersion": POWERTOOLS_VER},
20+
)
21+
22+
powertools_layer_arn = powertools_app.get_att("Outputs.LayerVersionArn").to_string()
23+
powertools_layer_version = aws_lambda.LayerVersion.from_layer_version_arn(
24+
self,
25+
f"{POWERTOOLS_BASE_NAME}",
26+
powertools_layer_arn,
27+
)
28+
29+
aws_lambda.Function(
30+
self,
31+
"sample-app-lambda",
32+
runtime=aws_lambda.Runtime.PYTHON_3_12,
33+
function_name="sample-lambda",
34+
code=aws_lambda.Code.from_asset("lambda"),
35+
handler="hello.handler",
36+
layers=[powertools_layer_version],
37+
)
+19
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,19 @@
1+
AWSTemplateFormatVersion: '2010-09-09'
2+
Transform: AWS::Serverless-2016-10-31
3+
4+
Resources:
5+
AwsLambdaPowertoolsPythonLayer:
6+
Type: AWS::Serverless::Application
7+
Properties:
8+
Location:
9+
ApplicationId: arn:aws:serverlessrepo:eu-west-1:057560766410:applications/aws-lambda-powertools-python-layer
10+
SemanticVersion: 2.0.0 # change to latest semantic version available in SAR
11+
12+
MyLambdaFunction:
13+
Type: AWS::Serverless::Function
14+
Properties:
15+
Runtime: python3.12
16+
Handler: app.lambda_handler
17+
Layers:
18+
# fetch Layer ARN from SAR App stack output
19+
- !GetAtt AwsLambdaPowertoolsPythonLayer.Outputs.LayerVersionArn
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,55 @@
1+
AWSTemplateFormatVersion: "2010-09-09"
2+
Resources:
3+
PowertoolsLayerIamRole:
4+
Type: "AWS::IAM::Role"
5+
Properties:
6+
AssumeRolePolicyDocument:
7+
Version: "2012-10-17"
8+
Statement:
9+
- Effect: "Allow"
10+
Principal:
11+
Service:
12+
- "cloudformation.amazonaws.com"
13+
Action:
14+
- "sts:AssumeRole"
15+
Path: "/"
16+
17+
PowertoolsLayerIamPolicy:
18+
Type: "AWS::IAM::Policy"
19+
Properties:
20+
PolicyName: PowertoolsLambdaLayerPolicy
21+
PolicyDocument:
22+
Version: "2012-10-17"
23+
Statement:
24+
- Sid: CloudFormationTransform
25+
Effect: Allow
26+
Action: cloudformation:CreateChangeSet
27+
Resource:
28+
- arn:aws:cloudformation:us-east-1:aws:transform/Serverless-2016-10-31
29+
- Sid: GetCfnTemplate
30+
Effect: Allow
31+
Action:
32+
- serverlessrepo:CreateCloudFormationTemplate
33+
- serverlessrepo:GetCloudFormationTemplate
34+
Resource:
35+
# this is arn of the Powertools for AWS Lambda (Python) SAR app
36+
- arn:aws:serverlessrepo:eu-west-1:057560766410:applications/aws-lambda-powertools-python-layer
37+
- Sid: S3AccessLayer
38+
Effect: Allow
39+
Action:
40+
- s3:GetObject
41+
Resource:
42+
# AWS publishes to an external S3 bucket locked down to your account ID
43+
# The below example is us publishing Powertools for AWS Lambda (Python)
44+
# Bucket: awsserverlessrepo-changesets-plntc6bfnfj
45+
# Key: *****/arn:aws:serverlessrepo:eu-west-1:057560766410:applications-aws-lambda-powertools-python-layer-versions-1.10.2/aeeccf50-****-****-****-*********
46+
- arn:aws:s3:::awsserverlessrepo-changesets-*/*
47+
- Sid: GetLayerVersion
48+
Effect: Allow
49+
Action:
50+
- lambda:PublishLayerVersion
51+
- lambda:GetLayerVersion
52+
Resource:
53+
- !Sub arn:aws:lambda:${AWS::Region}:${AWS::AccountId}:layer:aws-lambda-powertools-python-layer*
54+
Roles:
55+
- Ref: "PowertoolsLayerIamRole"
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,20 @@
1+
service: powertools-lambda
2+
3+
provider:
4+
name: aws
5+
runtime: python3.12
6+
region: us-east-1
7+
8+
functions:
9+
powertools:
10+
handler: lambda_function.lambda_handler
11+
layers:
12+
- !GetAtt AwsLambdaPowertoolsPythonLayer.Outputs.LayerVersionArn
13+
14+
resources:
15+
- AwsLambdaPowertoolsPythonLayer:
16+
Type: AWS::Serverless::Application
17+
Properties:
18+
Location:
19+
ApplicationId: arn:aws:serverlessrepo:eu-west-1:057560766410:applications/aws-lambda-powertools-python-layer
20+
SemanticVersion: 2.0.0
+41
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,41 @@
1+
terraform {
2+
required_version = "~> 0.13"
3+
required_providers {
4+
aws = "~> 3.50.0"
5+
}
6+
}
7+
8+
provider "aws" {
9+
region = "us-east-1"
10+
}
11+
12+
resource "aws_serverlessapplicationrepository_cloudformation_stack" "deploy_sar_stack" {
13+
name = "aws-lambda-powertools-python-layer"
14+
15+
application_id = data.aws_serverlessapplicationrepository_application.sar_app.application_id
16+
semantic_version = data.aws_serverlessapplicationrepository_application.sar_app.semantic_version
17+
capabilities = [
18+
"CAPABILITY_IAM",
19+
"CAPABILITY_NAMED_IAM"
20+
]
21+
}
22+
23+
data "aws_serverlessapplicationrepository_application" "sar_app" {
24+
application_id = "arn:aws:serverlessrepo:eu-west-1:057560766410:applications/aws-lambda-powertools-python-layer"
25+
semantic_version = var.aws_powertools_version
26+
}
27+
28+
variable "aws_powertools_version" {
29+
type = string
30+
default = "2.0.0"
31+
description = "The Powertools for AWS Lambda (Python) release version"
32+
}
33+
34+
output "deployed_powertools_sar_version" {
35+
value = data.aws_serverlessapplicationrepository_application.sar_app.semantic_version
36+
}
37+
38+
# Fetch Powertools for AWS Lambda (Python) Layer ARN from deployed SAR App
39+
output "aws_lambda_powertools_layer_arn" {
40+
value = aws_serverlessapplicationrepository_cloudformation_stack.deploy_sar_stack.outputs.LayerVersionArn
41+
}
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,21 @@
1+
# Create a new one with the layer
2+
❯ amplify add function
3+
? Select which capability you want to add: Lambda function (serverless function)
4+
? Provide an AWS Lambda function name: <NAME-OF-FUNCTION>
5+
? Choose the runtime that you want to use: Python
6+
? Do you want to configure advanced settings? Yes
7+
...
8+
? Do you want to enable Lambda layers for this function? Yes
9+
? Enter up to 5 existing Lambda layer ARNs (comma-separated): arn:aws:lambda:eu-central-1:017000801446:layer:AWSLambdaPowertoolsPythonV2:69
10+
❯ amplify push -y
11+
12+
13+
# Updating an existing function and add the layer
14+
❯ amplify update function
15+
? Select the Lambda function you want to update test2
16+
General information
17+
- Name: <NAME-OF-FUNCTION>
18+
? Which setting do you want to update? Lambda layers configuration
19+
? Do you want to enable Lambda layers for this function? Yes
20+
? Enter up to 5 existing Lambda layer ARNs (comma-separated): arn:aws:lambda:eu-central-1:017000801446:layer:AWSLambdaPowertoolsPythonV2:69
21+
? Do you want to edit the local lambda function now? No
+22
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,22 @@
1+
from aws_cdk import Aws, Stack, aws_lambda
2+
from constructs import Construct
3+
4+
5+
class SampleApp(Stack):
6+
7+
def __init__(self, scope: Construct, construct_id: str, **kwargs) -> None:
8+
super().__init__(scope, construct_id, **kwargs)
9+
10+
powertools_layer = aws_lambda.LayerVersion.from_layer_version_arn(
11+
self,
12+
id="lambda-powertools",
13+
layer_version_arn=f"arn:aws:lambda:{Aws.REGION}:017000801446:layer:AWSLambdaPowertoolsPythonV2:69",
14+
)
15+
aws_lambda.Function(
16+
self,
17+
"sample-app-lambda",
18+
runtime=aws_lambda.Runtime.PYTHON_3_12,
19+
layers=[powertools_layer],
20+
code=aws_lambda.Code.from_asset("lambda"),
21+
handler="hello.handler",
22+
)

0 commit comments

Comments
 (0)