Skip to main content

AWS CDK based lambda layer including useful utilities.

Project description

B.LambdaLayerCommon

Pipeline

A lambda layer resource that contains various useful methods.

Description

This is a simple lambda layer, that contains various useful methods that will make infrastructure development much easier. It also allows you to easily manage (add) additional external dependencies. Note, docker is used to build this code.

Remarks

Biomapas aims to modernise life-science industry by sharing its IT knowledge with other companies and the community. This is an open source library intended to be used by anyone. Improvements and pull requests are welcome.

Related technology

  • Python3
  • Docker
  • AWS CDK
  • AWS Lambda
  • AWS Lambda Layer

Assumptions

This project assumes you know what Lambda functions are and how code is being shared between them (Lambda layers).

  • Excellent knowledge in IaaC (Infrastructure as a Code) principles.
  • Excellent knowledge in Lambda functions and Lambda layers.
  • Good experience in AWS CDK and AWS CloudFormation.
  • Good Python skills and basis of OOP.

Useful sources

Install

Before installing this library, ensure you have these tools setup:

  • Python / Pip
  • AWS CDK
  • Docker

To install this project from source run:

pip install .

Or you can install it from a PyPi repository:

pip install b-lambda_layer_common

Usage & Examples

Main modules:

  • api_gateway
    Contains various functionalities related to API Gateway service and integrations.

  • cache
    Contains caching mechanisms for lambda functions.

  • events
    Contains functionality that supports event-driven architectures.

  • exceptions
    Contains advanced exception handling and propagation between lambda function chains.

  • ssm
    Contains SSM parameter store handling logic.

  • util
    Contains random fun stuff ;)

  • ws_api_gateway
    Contains various functionalities related to API Gateway websocket service and integrations.

Using this layer is extremely simple. Create it like this:

from aws_cdk.core import Stack, DockerImage
from b_lambda_layer_common.layer import Layer
from b_cfn_lambda_layer.package_version import PackageVersion

Layer(
    scope=Stack(),
    name='MyLayer',
    additional_pip_install_args='--pre',
    dependencies={
        'boto3': PackageVersion.from_string('1.16.35'),
    },
    docker_image=DockerImage.from_registry('python:3.9')
)

Or without any optional arguments:

from aws_cdk.core import Stack
from b_lambda_layer_common.layer import Layer

Layer(
    scope=Stack(),
    name='MyLayer',
)

Once you have deployed a lambda function with this layer, you can start using previously mentioned modules. For example, lets use an API-Gateway-formatted response:

from b_lambda_layer_common.api_gateway.response import Response

def handler(*args, **kwargs):
    return Response.json(
      http_status=200,
      body={
        'key': 'value'
      }
    )

Testing

This package has unit tests based on pytest. To run tests simply run:

pytest --cov=b_lambda_layer_common b_lambda_layer_common_test/unit --cov-fail-under=80

This package has integration tests based on pytest. To run tests simply run:

pytest b_lambda_layer_common_test/integration/tests

Contribution

Found a bug? Want to add or suggest a new feature? Contributions of any kind are gladly welcome. You may contact us directly, create a pull-request or an issue in github platform. Lets modernize the world together.

Release history

2.0.1

  • Include .txt files.

2.0.0

  • Complete refactor.
  • Fix ugly if/else imports.
  • Run unit tests inside lambda functions.
  • Use b_cfn_lambda_layer dependency.
  • Write more unit and integration tests.
  • Add README documentation.

1.20.0

  • Add validation when bundling with Docker.

1.19.0

  • General testing improvements.
  • Add Layer V2 integration tests.

1.18.0

  • Add V2 Layer class to enable installation of dependencies.

1.16.0

  • Add response method to return any type.
  • Add text/html and text/plain headers.
  • Add missing fields parameter support to NeighbourEndpoint class.

1.15.1

  • Improve function return value handling for InMemoryDataCache class.

1.15.0

  • Add in-memory data caching functionality.

1.14.0

  • Add fields parameter support to HttpEndpoint class.

1.11.1

  • Update DoNotUpdate class to be usable as a type.

1.11.0

  • Add WebSocket Api Gateway message class to form consistent messages.

1.10.2

  • Allow for changing HttpEndpoint behavior.

1.10.1

  • Add ability to specify if to fail to errors.
  • Try to read from env event bus name.

1.10.0

  • Add factory to emit EventBridge events.

1.9.5

  • Make the code a little more robust and less error prone.

1.9.4

  • Assets input may contain garbage files too, hence, apply cleanup commands directly on asset outputs folder.

1.9.3

  • Add builds badge.

1.9.2

  • Remove leftover code.
  • Update requirements.

1.9.1

  • Delete unnecessary files which result in different asset hash.
  • Calculate hash when bundling.

1.9.0

  • Add CSV headers.

1.8.3

  • Ensure everything works with a robust integration test.

1.8.2

  • Improve Boto3Version class.

1.8.1

  • Fix bug when boto3 version is specified project files are not copied.

1.8.0

  • Change asset bundling to asset docker bundling if additional dependencies are specified.
  • Add ability to install boto3 library.
  • Add more unit tests.
  • Add integration tests to deploy and test the Layer in AWS.

1.7.0

  • Simplify SSM parameters functionality.
  • Add robust SSM parameter tests.

1.6.2

  • Do not serialize returned ssm parameters.

1.6.1

  • Add more logging for better visibility.

1.6.0

  • SSM should_refresh function should be public.

1.5.1

  • Add logging on ssm error decorator.

1.5.0

  • Force using error_class to error_classes.

1.4.0

  • Add functionality to fetch and cache SSM parameters.
  • Add OS type parameters.

1.3.0

  • Add media Response and wav/mpeg headers.

1.2.0

  • Add DoNotUpdate class, useful when checking what parameters to update and what not.

1.1.3

  • Implement retrying logic to HttpCall.

1.1.2

  • Make sure test coverage is at least 80%.
  • Add CI/CD pipeline.
  • Add more encodings to decode responses.

1.1.1

  • Add urllib3 dependency.

1.1.0

  • Add DynamoDBEncoder that subclasses DecimalEncoder and additionally encodes sets as lists.

1.0.3

  • Modify call_to_json function by checking whether the response contains body.

1.0.2

  • Add exception logging for failed imports.

1.0.1

  • Expose http_endpoint on NeigbourEndpoint class.

1.0.0

  • Release version with major braking changes.
  • Consistent naming for imports.
  • Unit tests to cover all functions and classes.
  • Add neighbour endpoint.
  • General code improvements and cleanup.

0.0.16

  • Fix logging imports.
  • Add logging of exception tracebacks to exception_middleware.
  • Add logging about HTTP requests.
  • Set request scheme for parent API Gateway urls depending on current protocol.

0.0.15

  • Add a CognitoAccessToken for parsing access token information provided by the API Gateway using Cognito authorizer.

0.0.14

  • Add a LoggingManager for setting up logging configuration

0.0.13

  • Add custom JSON encoder with support for decimal.Decimal encoding

0.0.12

  • Implement API Gateway body parsing.

0.0.11

  • Fix imports.

0.0.10

  • Implement exceptions.

0.0.9

  • Fix api gateway url.

0.0.8

  • Add xml to dict converter utility. No dependencies.

0.0.7

  • Fix imports.

0.0.6

  • Add ability to check whether singleton was initialized.

0.0.5

  • Remove description.

0.0.4

  • Do not create an extra stack.

0.0.3

  • Add safe initialization.

0.0.2

  • Add Layer class and Singleton.

0.0.1

  • Initial build.

Project details


Release history Release notifications | RSS feed

Download files

Download the file for your platform. If you're not sure which to choose, learn more about installing packages.

Source Distribution

b_lambda_layer_common-2.0.2.tar.gz (39.2 kB view details)

Uploaded Source

Built Distribution

If you're not sure about the file name format, learn more about wheel file names.

b_lambda_layer_common-2.0.2-py3-none-any.whl (65.0 kB view details)

Uploaded Python 3

File details

Details for the file b_lambda_layer_common-2.0.2.tar.gz.

File metadata

  • Download URL: b_lambda_layer_common-2.0.2.tar.gz
  • Upload date:
  • Size: 39.2 kB
  • Tags: Source
  • Uploaded using Trusted Publishing? No
  • Uploaded via: twine/3.4.2 importlib_metadata/4.8.1 pkginfo/1.7.1 requests/2.26.0 requests-toolbelt/0.9.1 tqdm/4.62.3 CPython/3.8.12

File hashes

Hashes for b_lambda_layer_common-2.0.2.tar.gz
Algorithm Hash digest
SHA256 eb68942b743473c08594b070c38b199834abad19068c19b5c067d952919febf8
MD5 3a35c28bf55d8a46a847cb8309c3e41c
BLAKE2b-256 51d05d0fb2437cc8fc3ba37c992891f0c94f60ba08229253ce0aeb04c61e79f8

See more details on using hashes here.

File details

Details for the file b_lambda_layer_common-2.0.2-py3-none-any.whl.

File metadata

  • Download URL: b_lambda_layer_common-2.0.2-py3-none-any.whl
  • Upload date:
  • Size: 65.0 kB
  • Tags: Python 3
  • Uploaded using Trusted Publishing? No
  • Uploaded via: twine/3.4.2 importlib_metadata/4.8.1 pkginfo/1.7.1 requests/2.26.0 requests-toolbelt/0.9.1 tqdm/4.62.3 CPython/3.8.12

File hashes

Hashes for b_lambda_layer_common-2.0.2-py3-none-any.whl
Algorithm Hash digest
SHA256 0c3bfb951d9a3b1d0e349f0484cbfb932b0dd7edf9e574df5c4eff23fcb1aad3
MD5 7c5d5018fbcd66da67ee763c9a72087c
BLAKE2b-256 5c728c72c3d78913c662d0afac5db6262fc22720eb2acd1ee605210dc88a622a

See more details on using hashes here.

Supported by

AWS Cloud computing and Security Sponsor Datadog Monitoring Depot Continuous Integration Fastly CDN Google Download Analytics Pingdom Monitoring Sentry Error logging StatusPage Status page