This repository was archived by the owner on Dec 29, 2023. It is now read-only.
File tree Expand file tree Collapse file tree 5 files changed +94
-34
lines changed Expand file tree Collapse file tree 5 files changed +94
-34
lines changed Original file line number Diff line number Diff line change 1- FROM public.ecr.aws/lambda/python:latest
2- COPY lambda.py ./
3- COPY requirements.txt ./
4- RUN python3 -m pip install -r requirements.txt
1+ ARG FUNCTION_DIR="/function"
52
6- CMD ["lambda.lambda_handler" ]
3+ FROM python:3.11 as build-image
4+
5+ ARG FUNCTION_DIR
6+
7+ RUN mkdir -p ${FUNCTION_DIR}
8+ COPY lambda.py ${FUNCTION_DIR}
9+ COPY requirements.txt ${FUNCTION_DIR}
10+
11+ RUN pip install --target ${FUNCTION_DIR} -r "${FUNCTION_DIR}/requirements.txt"
12+ RUN pip install --target ${FUNCTION_DIR} awslambdaric
13+
14+ FROM python:3.11-slim
15+
16+ ARG FUNCTION_DIR
17+ WORKDIR ${FUNCTION_DIR}
18+
19+ COPY --from=build-image ${FUNCTION_DIR} ${FUNCTION_DIR}
20+
21+ ENTRYPOINT [ "/usr/local/bin/python" , "-m" , "awslambdaric" ]
22+ CMD [ "lambda.handler" ]
Original file line number Diff line number Diff line change @@ -26,29 +26,24 @@ curl -XPOST "http://localhost:9000/2015-03-31/functions/function/invocations" \
2626<br >
2727
2828## Upload Docker image on ECR and Lambda
29- Lambda function continers must be hosted on the AWS Elastic Container Registry.
29+ Lambda function containers must be hosted on the AWS Elastic Container Registry.
3030
31- 1 . Export your AWS account id in the shell or better yet, add it your ~ /.bashrc or ~ /.bash_profile
32- ```
33- $ export AWS_ACCOUNT_ID = <account_id>
34- ```
35-
36- 2 . Install the AWS CLI and configure with your AWS credentials
31+ 1 . Install the AWS CLI and configure with your AWS credentials
3732```
3833$ aws configure
3934```
4035
41- 3 . Review and execute the ‘deploy.sh’ script:
36+ 2 . Review and execute the ‘deploy.sh’ script:
4237```
43- $ ./deploy.sh
38+ $ ./deploy.sh [--tag <value>] [--region <value>] [--profile <default>] [--no-push]
4439```
4540
46- 4 . Create Lambda function and attach your ECR Image. Make sure the name and image ID match:
41+ 3 . Create Lambda function and attach your ECR Image. Make sure the name and image ID match:
4742
4843![ image] ( https://github.com/chdb-io/chdb-server/assets/1423657/887894c3-35ef-4083-a4b8-29d247f1fc1c )
4944
5045
51- 6 . Test your Lambda function with a JSON payload:
46+ 4 . Test your Lambda function with a JSON payload:
5247
5348![ image] ( https://github.com/chdb-io/chdb-server/assets/1423657/daa26b0b-68e2-4cec-b665-5505efe99b99 )
5449
Original file line number Diff line number Diff line change 1- URL_STRING=" .dkr.ecr.us-east-1.amazonaws.com"
2- CONTAINER_STRING=" chdb"
3- IMAGE_STRING=" latest"
4- ECR_IMAGE_URI=" $AWS_ACCOUNT_ID$URL_STRING /$CONTAINER_STRING :$IMAGE_STRING "
1+ # get flag variables
2+ profile=" default"
3+ region=" us-east-1"
4+ tag=" latest"
5+ no_push=false
6+
7+ while (( "$# " )) ; do
8+ case " $1 " in
9+ --tag)
10+ tag=" $2 "
11+ shift 2
12+ ;;
13+ --region)
14+ region=" $2 "
15+ shift 2
16+ ;;
17+ --profile)
18+ profile=" $2 "
19+ shift 2
20+ ;;
21+ --no-push)
22+ no_push=true
23+ shift
24+ ;;
25+ --)
26+ shift
27+ break
28+ ;;
29+ -* |--* =)
30+ echo " Error: Unsupported flag $1 " >&2
31+ exit 1
32+ ;;
33+ * )
34+ shift
35+ ;;
36+ esac
37+ done
38+
39+
40+ # set variables
41+ AWS_ACCOUNT_ID=$( aws sts get-caller-identity --query Account --output text)
42+ ECR_IMAGE_URI=" $AWS_ACCOUNT_ID .dkr.ecr.$region .amazonaws.com"
43+ IMAGE_NAME=" $ECR_IMAGE_URI /chdb:$tag "
44+
545# log in to ECR
6- aws ecr get-login-password --region us-east-1 | docker login --username AWS --password-stdin " $AWS_ACCOUNT_ID$URL_STRING "
7- # remove previous images to save space
8- docker rmi " $AWS_ACCOUNT_ID$URL_STRING /$CONTAINER_STRING "
9- docker rmi " $CONTAINER_STRING "
46+ aws ecr get-login-password --region $region --profile $profile | \
47+ docker login --username AWS --password-stdin $ECR_IMAGE_URI
48+
49+ # remove existing image
50+ docker rmi $IMAGE_NAME 2> /dev/null || true
51+
1052# build image
11- docker build --tag " $CONTAINER_STRING " .
12- # tag and push to AWS ECR
13- docker tag $CONTAINER_STRING :latest " $ECR_IMAGE_URI "
14- docker push " $ECR_IMAGE_URI "
53+ docker build -t $IMAGE_NAME .
54+
55+ if [ " $no_push " = false ]; then
56+ # push to ECR
57+ docker push $IMAGE_NAME
58+ fi
Original file line number Diff line number Diff line change 11import json
2+
23import chdb
34
4- def lambda_handler (event , context ):
5- query = event ['query' ] or "SELECT version()"
6- format = event ['default_format' ] or "JSONCompact"
7- res = chdb .query (query , format )
8- out = json .loads (res .data ())
5+
6+ def handler (event , context ):
7+ if "requestContext" in event :
8+ event = json .loads (event ["body" ])
9+ query = event ["query" ] if "query" in event else "SELECT version()"
10+ format = event ["default_format" ] if "default_format" in event else "JSONCompact"
11+
12+ res = chdb .query (query , format ).data ()
913 return {
1014 "statusCode" : 200 ,
1115 "headers" : {
1216 "Content-Type" : "application/json"
1317 },
14- "body" : json .dumps (out )
18+ "body" : str ( res ) if not isinstance ( res , ( dict , list )) else json .dumps (res ),
1519 }
Original file line number Diff line number Diff line change 1+ boto3
12chdb
You can’t perform that action at this time.
0 commit comments