https://docs.aws.amazon.com/lambda/latest/dg/images-create.html
FROM public.ecr.aws/lambda/python:3.8
RUN pip install wikipedia
# Copy function code
COPY demo.py ${LAMBDA_TASK_ROOT}
# Set the CMD to your handler (could also be done as a parameter override outside of the Dockerfile)
CMD [ "demo.handler" ]
#!/usr/bin/env python3
import wikipedia
def handler(event, context):
if event:
result = wikipedia.page(event.get('wiki', 'los angeles'))
return "{}".format(result.summary)
else:
return "Hello from CFTC! You didn't tell me to look anything up, much sad."
docker build -t test .
docker run -p 8080:8080 test
curl -XPOST "http://localhost:9000/2015-03-31/functions/function/invocations" -d '{"wiki": "los angeles"}'
from aws_cdk import core, aws_lambda
class LambdaContainerImageSupportStack(core.Stack):
def __init__(self, scope: core.Construct, construct_id: str, **kwargs) -> None:
super().__init__(scope, construct_id, **kwargs)
# I <3 Lambda
self.lambda_function = aws_lambda.Function(
self, "ContainerImageDemo",
code=aws_lambda.Code.from_asset_image(directory="./", exclude=["cdk.out"]),
handler=aws_lambda.Handler.FROM_IMAGE,
runtime=aws_lambda.Runtime.FROM_IMAGE,
function_name="cftc_wiki_lambda"
)
app = core.App()
LambdaContainerImageSupportStack(app, "lambda-container-image-support")
app.synth()
cdk deploy --require-approval never
Create test event, json '{"wiki": "amazon web services"}'
aws lambda invoke --function-name cftc_wiki_lambda --payload '{"wiki": "amazon web services"}' lambda_out
docker run with port 8080, but curl with 9000