- Run
yarn
- Edit
./config.yaml
as needed - Edit
./serverless.yml
as needed - Run
make build
- Run
make deploy
Run make destroy
node_modules |
node_modules | |
# Distribution / packaging | |
.Python | |
env/ | |
build/ | |
develop-eggs/ | |
dist/ | |
downloads/ | |
eggs/ | |
.eggs/ | |
lib/ | |
lib64/ | |
parts/ | |
sdist/ | |
var/ | |
*.egg-info/ | |
.installed.cfg | |
*.egg | |
# Serverless directories | |
.serverless | |
layer |
source "$(poetry env info -p)/bin/activate" | |
nvm use --lts | |
export AWS_PROFILE="cuda-opsdev" |
prefix: shollingsworth-lambda-testing | |
role: some-role-name |
version: "3.9" | |
services: | |
build_img: | |
image: stackimg_bs | |
build: | |
context: . | |
dockerfile: Dockerfile | |
args: | |
UID: 1000 | |
GID: 1000 | |
volumes: | |
- ./:/home/docker/working | |
command: /home/docker/working/gen_layer.sh |
FROM python:3.9.13-bullseye | |
ARG UID | |
ARG GID | |
RUN apt update \ | |
&& apt upgrade -y \ | |
&& apt install zip -y | |
RUN pip3 install --upgrade pip | |
RUN groupadd -g $GID docker \ | |
&& useradd -m -u $UID -g $GID -G sudo -s /bin/bash docker | |
RUN pip3 install poetry | |
RUN mkdir -p /home/docker/working | |
USER docker |
#!/usr/bin/env bash | |
set -euo pipefail | |
IFS=$'\n\t' | |
cd ~/working | |
poetry export \ | |
--without-hashes \ | |
-o /tmp/requirements.txt | |
test -d layer && rm -rfv layer/ | |
mkdir -p layer | |
pip3 install -r /tmp/requirements.txt -t layer |
#!/usr/bin/env python3 | |
# -*- coding: utf-8 -*- | |
"""lambda demo.""" | |
import json | |
import logging | |
logging.basicConfig() | |
LOG = logging.getLogger(__name__) | |
LOG.setLevel(logging.INFO) | |
def hello(event, _): | |
LOG.info("Received event: " + json.dumps(event)) | |
source = event.get("source") | |
if (source == "serverless-plugin-warmup"): | |
return "Warmup - Lambda is warm!" | |
body = { | |
"message": "Go Serverless v3.0! Your function executed successfully!", | |
"input": event, | |
} | |
return {"statusCode": 200, "body": json.dumps(body)} |
.DEFAULT_GOAL := help | |
help: | |
@echo "Available commands:" | |
@echo | |
@cat Makefile | grep '^\w.*:$$' | cut -d ':' -f 1 | grep -v '^help$$' | |
build: | |
docker-compose up --build --remove-orphans | |
deploy: | |
serverless deploy | |
destroy: | |
serverless remove |
{ | |
"name": "python-serverless-template", | |
"version": "1.0.0", | |
"description": "python serverless template", | |
"main": "index.js", | |
"repository": "https://gist.github.com/53fa5d29dfb62cf1eadb844b55ddecb1.git", | |
"author": "Steven Hollingsworth <shollingsworth@barracuda.com>", | |
"license": "MIT", | |
"private": true, | |
"dependencies": { | |
"serverless": "^3.21.0" | |
}, | |
"scripts": { | |
"clean": "rm -rf node_modules yarn.lock && yarn" | |
}, | |
"devDependencies": { | |
"serverless-offline": "^9.1.7", | |
"serverless-plugin-log-retention": "^2.0.0", | |
"serverless-plugin-warmup": "^7.3.0" | |
} | |
} |
[[package]] | |
name = "certifi" | |
version = "2022.6.15" | |
description = "Python package for providing Mozilla's CA Bundle." | |
category = "main" | |
optional = false | |
python-versions = ">=3.6" | |
[[package]] | |
name = "charset-normalizer" | |
version = "2.1.0" | |
description = "The Real First Universal Charset Detector. Open, modern and actively maintained alternative to Chardet." | |
category = "main" | |
optional = false | |
python-versions = ">=3.6.0" | |
[package.extras] | |
unicode_backport = ["unicodedata2"] | |
[[package]] | |
name = "idna" | |
version = "3.3" | |
description = "Internationalized Domain Names in Applications (IDNA)" | |
category = "main" | |
optional = false | |
python-versions = ">=3.5" | |
[[package]] | |
name = "requests" | |
version = "2.28.1" | |
description = "Python HTTP for Humans." | |
category = "main" | |
optional = false | |
python-versions = ">=3.7, <4" | |
[package.dependencies] | |
certifi = ">=2017.4.17" | |
charset-normalizer = ">=2,<3" | |
idna = ">=2.5,<4" | |
urllib3 = ">=1.21.1,<1.27" | |
[package.extras] | |
socks = ["PySocks (>=1.5.6,!=1.5.7)"] | |
use_chardet_on_py3 = ["chardet (>=3.0.2,<6)"] | |
[[package]] | |
name = "urllib3" | |
version = "1.26.11" | |
description = "HTTP library with thread-safe connection pooling, file post, and more." | |
category = "main" | |
optional = false | |
python-versions = ">=2.7, !=3.0.*, !=3.1.*, !=3.2.*, !=3.3.*, !=3.4.*, !=3.5.*, <4" | |
[package.extras] | |
brotli = ["brotlicffi (>=0.8.0)", "brotli (>=1.0.9)", "brotlipy (>=0.6.0)"] | |
secure = ["pyOpenSSL (>=0.14)", "cryptography (>=1.3.4)", "idna (>=2.0.0)", "certifi", "ipaddress"] | |
socks = ["PySocks (>=1.5.6,!=1.5.7,<2.0)"] | |
[metadata] | |
lock-version = "1.1" | |
python-versions = ">=3.9,<3.10" | |
content-hash = "7b03bdb9c6c523b394552b090d0de4c53412e924d80d1ca13222a2a00234f0c9" | |
[metadata.files] | |
certifi = [] | |
charset-normalizer = [] | |
idna = [ | |
{file = "idna-3.3-py3-none-any.whl", hash = "sha256:84d9dd047ffa80596e0f246e2eab0b391788b0503584e8945f2368256d2735ff"}, | |
{file = "idna-3.3.tar.gz", hash = "sha256:9d643ff0a55b762d5cdb124b8eaa99c66322e2157b69160bc32796e824360e6d"}, | |
] | |
requests = [] | |
urllib3 = [] |
[tool.poetry] | |
name = "python-serverless-template" | |
version = "0.1.0" | |
description = "" | |
authors = ["Steven Hollingsworth <shollingsworth@barracuda.com>"] | |
[tool.poetry.dependencies] | |
python = ">=3.9,<3.10" | |
requests = "^2.28.1" | |
[tool.poetry.dev-dependencies] | |
[build-system] | |
requires = ["poetry-core>=1.0.0"] | |
build-backend = "poetry.core.masonry.api" |
service: ${file(./config.yaml):prefix} | |
frameworkVersion: '3' | |
provider: | |
name: aws | |
region: us-east-2 | |
memorySize: 128 | |
# iam: | |
# role: ${file(./config.yaml):role} | |
runtime: python3.9 | |
custom: | |
logRetentionInDays: 30 | |
prefix: aws-python-project | |
warmup: | |
default: | |
enabled: true | |
name: ${file(./config.yaml):prefix}-warmup | |
verbose: false # Disable the logs | |
logRetentionInDays: 7 | |
prewarm: true # Run WarmUp immediately after a deploymentlambda | |
serverless-offline: | |
host: 0.0.0.0 | |
httpPort: 4000 | |
plugins: | |
- serverless-offline | |
- serverless-plugin-log-retention | |
- serverless-plugin-warmup | |
layers: | |
backend: | |
name: ${file(./config.yaml):prefix}-layer | |
path: layer | |
package: | |
include: | |
- "**/*" | |
description: "Dependencies for ${file(./config.yaml):prefix}" | |
package: | |
individually: false | |
patterns: | |
- handler.py | |
functions: | |
hello: | |
handler: handler.hello | |
layers: | |
- { Ref: BackendLambdaLayer } | |
events: | |
- httpApi: | |
method: "*" | |
path: "/{proxy+}" |