Checkout my other plugin hatch-aws-publisher.
Add hatch-aws
within the build-system.requires
field in your pyproject.toml
file.
[build-system]
requires = ["hatchling", "hatch-aws"]
build-backend = "hatchling.build"
The builder plugin name is called aws
.
To start build process, run hatch build -t aws
:
❯ hatch build -t aws
[aws]
Building lambda functions ...
MyAwsLambdaFunc ... success
Build successfull 🚀
/path/to/build/.aws-sam/build
-
Put your module and lambdas inside of
src
folder.. ├── pyproject.toml ├── src │ └── my_app │ ├── __init__.py │ ├── common │ │ ├── __init__.py │ │ ├── config.py │ │ └── models.py │ └── lambdas │ ├── lambda1 │ │ ├── __init__.py │ │ └── main.py │ └── lambda2 │ ├── __init__.py │ └── main.py └── template.yml
-
Specify common requirements for your project in
pyproject.toml
as dependencies.[project] dependencies = ["boto3"]
-
Specify requirements for your lambda functions in
pyproject.toml
as optional dependencies. Use resource name from SAM template, but you have to adapt it to be compliant with PEP standard (transform to lower case and replace_
with-
). For example, if you function name in SAM template isGetAll_Accounts
, usegetall-accounts
.[project.optional-dependencies] lambda1 = ["pyaml"] lambda2 = ["request", "pydantic"]
-
Specify additional paths(source/destination) you want to copy to the build folder. Destination is relative to a build directory (
.aws-sam/build
by default). You can use glob*
to copy common to all lambda functions.[tool.hatch.build.force-include] "src/batman/common" = "*/batman/common" # copy to all lambda functions ".editorconfig" = ".editorconfig.txt" "CHANGELOG.md" = "../CH.txt" "images/" = "*/images"
-
Set the
CodeUri
andHandler
parameter pointing to your lambdas in SAM template. Only resources withRuntime: python{version}
are supported. The rest is ignored.Resources: Lambda1: Type: AWS::Serverless::Function Properties: Runtime: python3.9 FunctionName: lambda1-function CodeUri: src Handler: my_app.lambdas.lambda1.main.app ... Lambda2: Type: AWS::Serverless::Function Properties: Runtime: python3.9 FunctionName: lambda2-function CodeUri: src Handler: my_app.lambdas.lambda2.main.app ...
Following table contains available customization of builder behavior. You can find example of pyproject.toml
in tests/assets/pyproject.toml.
Option | Type | Default | Description |
---|---|---|---|
template |
str |
template.yml |
SAM template filename. |
use-sam |
bool |
false |
Use only sam build command without any custom actions. |
sam-exec |
str |
sam |
Path to sam executable. Env var: HATCH_SAM_EXEC . |
sam-params |
array |
Additional sam build args. |
Plugin hatch-aws
is distributed under the terms of the MIT license.