File tree Expand file tree Collapse file tree 4 files changed +106
-2
lines changed
lambda_extension_framework Expand file tree Collapse file tree 4 files changed +106
-2
lines changed Original file line number Diff line number Diff line change 11# Python Extension Framework
22
33This is a framework for building [ AWS Lambda Extensions] ( https://aws.amazon.com/blogs/compute/introducing-aws-lambda-extensions-in-preview/ ) .
4+
5+ ## Quickstart
6+
7+ To get started you can use the default ` Extension ` class, or extend it.
8+
9+ Example:
10+
11+ ``` python
12+ from lambda_extension_framework import Extension
13+
14+ def handler (event ):
15+ print (event)
16+
17+ extension = Extension()
18+ extension.register([EventType.INVOKE ], handler)
19+ ```
Original file line number Diff line number Diff line change 1+ #!/usr/bin/env python3
2+
3+ import os
4+ import sys
5+ from pathlib import Path
6+ from enum import Enum
7+
8+ from lambda_extension_framework .utils import get , post
9+
10+ class EventType (Enum ):
11+ INVOKE = 'INVOKE'
12+ SHUTDOWN = 'SHUTDOWN'
13+
14+ class Extension :
15+ def __init__ (self , name = None , runtime_api_endpoint = None ):
16+ self .handlers = {}
17+ self .name = name or Path (__file__ ).parent .name
18+ self .runtime_api_endpoint = runtime_api_endpoint or os .environ ['AWS_LAMBDA_RUNTIME_API' ]
19+
20+ @staticmethod
21+ def handle_signal (signal , frame ):
22+ sys .exit (0 )
23+
24+ def register (self , events , handler ):
25+ response = post (
26+ url = f'https://{ self .runtime_api_endpoint } /2020-01-01/extension/register' ,
27+ data = {
28+ 'events' : events
29+ },
30+ headers = {
31+ 'Lambda-Extension-Name' : self .name ,
32+ }
33+ )
34+
35+ extension_id = response .headers ['Lambda-Extension-Identifier' ]
36+ return self .process_events (extension_id , handler )
37+
38+ def process_events (self , extension_id , handler ):
39+ while True :
40+ response = get (
41+ url = f"https://{ self .runtime_api_endpoint } /2020-01-01/extension/event/next" ,
42+ headers = {
43+ 'Lambda-Extension-Identifier' : extension_id
44+ },
45+ timeout = None
46+ )
47+
48+ if response ['eventType' ] == EventType .SHUTDOWN :
49+ sys .exit (0 )
50+ else :
51+ handler (response )
Original file line number Diff line number Diff line change 1+ import json
2+ from urllib import request
3+
4+ def get (url , headers = None ):
5+ kwargs = {
6+ 'url' : url ,
7+ 'headers' : headers or {}
8+ }
9+
10+ req = request .Request (** kwargs )
11+ response = request .urlopen (req )
12+ return response .read ().decode ('utf8' )
13+
14+ def post (url , headers = None , data = None ):
15+ kwargs = {
16+ 'url' : url ,
17+ 'headers' : headers or {}
18+ }
19+
20+ if data :
21+ kwargs ['data' ] = json .dumps (data )
22+ kwargs ['headers' ]['Content-Type' ] = 'application/json'
23+
24+ req = request .Request (** kwargs )
25+ response = request .urlopen (req )
26+ return response .read ().decode ('utf8' )
Original file line number Diff line number Diff line change 11[tool .poetry ]
2- name = " python -extension-framework"
2+ name = " lambda -extension-framework"
33version = " 0.1.0"
4- description = " "
4+ description = " Framework for creating AWS Lambda Extensions "
55authors = [" Joe Snell <joepsnell@gmail.com>" ]
66license = " MIT"
7+ readme = " README.md"
8+ repository = " https://github.com/lambda-extensions/python-extension-framework"
9+ documentation = " https://github.com/lambda-extensions/python-extension-framework"
10+ homepage = " https://github.com/lambda-extensions/python-extension-framework"
11+ keywords = [
12+ " AWS" ,
13+ " AWS Lambda" ,
14+ " Lambda Extensions" ,
15+ " Framework" ,
16+ " Extension Framework"
17+ ]
718
819[tool .poetry .dependencies ]
920python = " ^3.8"
You can’t perform that action at this time.
0 commit comments