- Run
yarn - Edit
./config.yamlas needed - Edit
./serverless.ymlas 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 <[email protected]>", | |
| "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 <[email protected]>"] | |
| [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+}" |