Skip to content

Commit 005fbab

Browse files
committed
moved code to examples
1 parent 3534d1d commit 005fbab

File tree

16 files changed

+392
-371
lines changed

16 files changed

+392
-371
lines changed

docs/index.md

Lines changed: 21 additions & 371 deletions
Large diffs are not rendered by default.

examples/install/arm64/amplify.txt

Lines changed: 21 additions & 0 deletions
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

examples/install/arm64/pulumi.py

Lines changed: 31 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,31 @@
1+
import json
2+
import pulumi
3+
import pulumi_aws as aws
4+
5+
role = aws.iam.Role("role",
6+
assume_role_policy=json.dumps({
7+
"Version": "2012-10-17",
8+
"Statement": [
9+
{
10+
"Action": "sts:AssumeRole",
11+
"Principal": {
12+
"Service": "lambda.amazonaws.com"
13+
},
14+
"Effect": "Allow"
15+
}
16+
]
17+
}),
18+
managed_policy_arns=[aws.iam.ManagedPolicy.AWS_LAMBDA_BASIC_EXECUTION_ROLE]
19+
)
20+
21+
lambda_function = aws.lambda_.Function("function",
22+
layers=[pulumi.Output.concat("arn:aws:lambda:",aws.get_region_output().name,":017000801446:layer:AWSLambdaPowertoolsPythonV2-Arm64:11")],
23+
tracing_config={
24+
"mode": "Active"
25+
},
26+
runtime=aws.lambda_.Runtime.PYTHON3D9,
27+
handler="index.handler",
28+
role=role.arn,
29+
architectures=["arm64"],
30+
code=pulumi.FileArchive("lambda_function_payload.zip")
31+
)

examples/install/arm64/sam.yaml

Lines changed: 7 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,7 @@
1+
Resources:
2+
MyLambdaFunction:
3+
Type: AWS::Serverless::Function
4+
Properties:
5+
Architectures: [arm64]
6+
Layers:
7+
- !Sub arn:aws:lambda:${AWS::Region}:017000801446:layer:AWSLambdaPowertoolsPythonV2-Arm64:69
Lines changed: 6 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,6 @@
1+
functions:
2+
hello:
3+
handler: lambda_function.lambda_handler
4+
architecture: arm64
5+
layers:
6+
- arn:aws:lambda:${aws:region}:017000801446:layer:AWSLambdaPowertoolsPythonV2-Arm64:69

examples/install/arm64/terraform.tf

Lines changed: 41 additions & 0 deletions
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/install/sar/cdk.py

Lines changed: 37 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,37 @@
1+
from aws_cdk import (
2+
Stack,
3+
aws_lambda,
4+
aws_sam
5+
)
6+
from constructs import Construct
7+
8+
POWERTOOLS_BASE_NAME = 'AWSLambdaPowertools'
9+
# Find latest from github.com/aws-powertools/powertools-lambda-python/releases
10+
POWERTOOLS_VER = '2.37.0'
11+
POWERTOOLS_ARN = 'arn:aws:serverlessrepo:eu-west-1:057560766410:applications/aws-lambda-powertools-python-layer'
12+
13+
class SampleApp(Stack):
14+
15+
def __init__(self, scope: Construct, id_: str) -> None:
16+
super().__init__(scope, id_)
17+
18+
# Launches SAR App as CloudFormation nested stack and return Lambda Layer
19+
powertools_app = aws_sam.CfnApplication(self,
20+
f'{POWERTOOLS_BASE_NAME}Application',
21+
location={
22+
'applicationId': POWERTOOLS_ARN,
23+
'semanticVersion': POWERTOOLS_VER
24+
},
25+
)
26+
27+
powertools_layer_arn = powertools_app.get_att("Outputs.LayerVersionArn").to_string()
28+
powertools_layer_version = aws_lambda.LayerVersion.from_layer_version_arn(self, f'{POWERTOOLS_BASE_NAME}', powertools_layer_arn)
29+
30+
aws_lambda.Function(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+
)

examples/install/sar/sam.yaml

Lines changed: 14 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,14 @@
1+
Resources:
2+
AwsLambdaPowertoolsPythonLayer:
3+
Type: AWS::Serverless::Application
4+
Properties:
5+
Location:
6+
ApplicationId: arn:aws:serverlessrepo:eu-west-1:057560766410:applications/aws-lambda-powertools-python-layer
7+
SemanticVersion: 2.0.0 # change to latest semantic version available in SAR
8+
9+
MyLambdaFunction:
10+
Type: AWS::Serverless::Function
11+
Properties:
12+
Layers:
13+
# fetch Layer ARN from SAR App stack output
14+
- !GetAtt AwsLambdaPowertoolsPythonLayer.Outputs.LayerVersionArn
Lines changed: 54 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,54 @@
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+
PowertoolsLayerIamPolicy:
17+
Type: "AWS::IAM::Policy"
18+
Properties:
19+
PolicyName: PowertoolsLambdaLayerPolicy
20+
PolicyDocument:
21+
Version: "2012-10-17"
22+
Statement:
23+
- Sid: CloudFormationTransform
24+
Effect: Allow
25+
Action: cloudformation:CreateChangeSet
26+
Resource:
27+
- arn:aws:cloudformation:us-east-1:aws:transform/Serverless-2016-10-31
28+
- Sid: GetCfnTemplate
29+
Effect: Allow
30+
Action:
31+
- serverlessrepo:CreateCloudFormationTemplate
32+
- serverlessrepo:GetCloudFormationTemplate
33+
Resource:
34+
# this is arn of the Powertools for AWS Lambda (Python) SAR app
35+
- arn:aws:serverlessrepo:eu-west-1:057560766410:applications/aws-lambda-powertools-python-layer
36+
- Sid: S3AccessLayer
37+
Effect: Allow
38+
Action:
39+
- s3:GetObject
40+
Resource:
41+
# AWS publishes to an external S3 bucket locked down to your account ID
42+
# The below example is us publishing Powertools for AWS Lambda (Python)
43+
# Bucket: awsserverlessrepo-changesets-plntc6bfnfj
44+
# Key: *****/arn:aws:serverlessrepo:eu-west-1:057560766410:applications-aws-lambda-powertools-python-layer-versions-1.10.2/aeeccf50-****-****-****-*********
45+
- arn:aws:s3:::awsserverlessrepo-changesets-*/*
46+
- Sid: GetLayerVersion
47+
Effect: Allow
48+
Action:
49+
- lambda:PublishLayerVersion
50+
- lambda:GetLayerVersion
51+
Resource:
52+
- !Sub arn:aws:lambda:${AWS::Region}:${AWS::AccountId}:layer:aws-lambda-powertools-python-layer*
53+
Roles:
54+
- Ref: "PowertoolsLayerIamRole"

examples/install/sar/serverless.yaml

Lines changed: 16 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,16 @@
1+
functions:
2+
main:
3+
handler: lambda_function.lambda_handler
4+
layers:
5+
- !GetAtt AwsLambdaPowertoolsPythonLayer.Outputs.LayerVersionArn
6+
7+
resources:
8+
Transform: AWS::Serverless-2016-10-31
9+
Resources:****
10+
AwsLambdaPowertoolsPythonLayer:
11+
Type: AWS::Serverless::Application
12+
Properties:
13+
Location:
14+
ApplicationId: arn:aws:serverlessrepo:eu-west-1:057560766410:applications/aws-lambda-powertools-python-layer
15+
# Find latest from github.com/aws-powertools/powertools-lambda-python/releases
16+
SemanticVersion: 2.0.0

examples/install/sar/terraform.tf

Lines changed: 41 additions & 0 deletions
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+
}

examples/install/x86_64/amplify.txt

Lines changed: 21 additions & 0 deletions
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

examples/install/x86_64/pulumi.py

Lines changed: 31 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,31 @@
1+
import json
2+
import pulumi
3+
import pulumi_aws as aws
4+
5+
role = aws.iam.Role("role",
6+
assume_role_policy=json.dumps({
7+
"Version": "2012-10-17",
8+
"Statement": [
9+
{
10+
"Action": "sts:AssumeRole",
11+
"Principal": {
12+
"Service": "lambda.amazonaws.com"
13+
},
14+
"Effect": "Allow"
15+
}
16+
]
17+
}),
18+
managed_policy_arns=[aws.iam.ManagedPolicy.AWS_LAMBDA_BASIC_EXECUTION_ROLE]
19+
)
20+
21+
lambda_function = aws.lambda_.Function("function",
22+
layers=[pulumi.Output.concat("arn:aws:lambda:",aws.get_region_output().name,":017000801446:layer:AWSLambdaPowertoolsPythonV2:11")],
23+
tracing_config={
24+
"mode": "Active"
25+
},
26+
runtime=aws.lambda_.Runtime.PYTHON3D9,
27+
handler="index.handler",
28+
role=role.arn,
29+
architectures=["x86_64"],
30+
code=pulumi.FileArchive("lambda_function_payload.zip")
31+
)

examples/install/x86_64/sam.yaml

Lines changed: 6 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,6 @@
1+
Resources:
2+
MyLambdaFunction:
3+
Type: AWS::Serverless::Function
4+
Properties:
5+
Layers:
6+
- !Sub arn:aws:lambda:${AWS::Region}:017000801446:layer:AWSLambdaPowertoolsPythonV2:69
Lines changed: 5 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,5 @@
1+
functions:
2+
hello:
3+
handler: lambda_function.lambda_handler
4+
layers:
5+
- arn:aws:lambda:${aws:region}:017000801446:layer:AWSLambdaPowertoolsPythonV2:69

examples/install/x86_64/terraform.tf

Lines changed: 40 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,40 @@
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.12"
37+
layers = ["arn:aws:lambda:{region}:017000801446:layer:AWSLambdaPowertoolsPythonV2:69"]
38+
39+
source_code_hash = filebase64sha256("lambda_function_payload.zip")
40+
}

0 commit comments

Comments
 (0)