https://github.com/santoshshinde2012/aws-cdk-python-psycopg2
Getting Started Guide: How to Use psycopg2 and SQLAlchemy with AWS CDK (Python) and Test with SAM CLI
https://github.com/santoshshinde2012/aws-cdk-python-psycopg2
aws-cdk aws-lambda postgresql psycopg2 psycopg2-binary python sqlalchemy
Last synced: 4 months ago
JSON representation
Getting Started Guide: How to Use psycopg2 and SQLAlchemy with AWS CDK (Python) and Test with SAM CLI
- Host: GitHub
- URL: https://github.com/santoshshinde2012/aws-cdk-python-psycopg2
- Owner: santoshshinde2012
- Created: 2025-01-06T14:31:34.000Z (6 months ago)
- Default Branch: main
- Last Pushed: 2025-01-06T16:13:06.000Z (6 months ago)
- Last Synced: 2025-02-22T01:16:25.181Z (4 months ago)
- Topics: aws-cdk, aws-lambda, postgresql, psycopg2, psycopg2-binary, python, sqlalchemy
- Language: Python
- Homepage: https://medium.com/gitconnected/design-a-serverless-data-pipeline-daily-data-collection-transformation-and-storage-with-aws-b0910179e4e1
- Size: 9.77 KB
- Stars: 0
- Watchers: 1
- Forks: 0
- Open Issues: 0
-
Metadata Files:
- Readme: README.md
Awesome Lists containing this project
README
# Welcome to your CDK Python project!
The `cdk.json` file tells the CDK Toolkit how to execute your app.
This project is set up like a standard Python project. The initialization
process also creates a virtualenv within this project, stored under the `.venv`
directory. To create the virtualenv it assumes that there is a `python3`
(or `python` for Windows) executable in your path with access to the `venv`
package. If for any reason the automatic creation of the virtualenv fails,
you can create the virtualenv manually.To manually create a virtualenv on MacOS and Linux:
```
$ python3 -m venv .venv
```After the init process completes and the virtualenv is created, you can use the following
step to activate your virtualenv.```
$ source .venv/bin/activate
```If you are a Windows platform, you would activate the virtualenv like this:
```
% .venv\Scripts\activate.bat
```Once the virtualenv is activated, you can install the required dependencies.
```
$ pip install -r requirements.txt
```If we need a local PostgreSQL database, then use the below command to start PostgreSQL locally.
`docker compose up -d`
Some Python modules cannot be located by the lambda function. We need to create a zip of those modules and use them as a layer.
For that use below Docker command that is used to install Python dependencies in a way that is compatible with AWS Lambda.
- `docker run -v "$PWD":/var/task "amazon/aws-sam-cli-build-image-python3.9" /bin/sh -c "pip install -r lambda/requirements.txt -t python/lib/python3.9/site-packages/; exit"`
Then we need to create zip
- `zip -r layers/pythonlib_layer.zip python`
At this point you can now synthesize the CloudFormation template for this code.
```
$ cdk synth
```To add additional dependencies, for example other CDK libraries, just add
them to your `setup.py` file and rerun the `pip install -r requirements.txt`
command.## Testing
- `cdk synth > template.yaml`
- `sam build`
- `sam local invoke MyLambdaFunction --no-event -t ./cdk.out/AwsCdkPythonPsycopg2Stack.template.json`
- Read : `sam local invoke MyLambdaFunction --event events/read.json -t ./cdk.out/AwsCdkPythonPsycopg2Stack.template.json`
- Write : `sam local invoke MyLambdaFunction --event events/write.json -t ./cdk.out/AwsCdkPythonPsycopg2Stack.template.json`### Payload
- Write
```
{
"action": "write",
"data": {
"name": "Sample Record",
"description": "This is a test description."
}
}
```- Read
```
{
"action": "read"
}
```### Result
- Write
```
(base) ➜ cdk-sam-demo git:(main) ✗ sam local invoke MyLambdaFunction --event events/write.json -t ./cdk.out/CdkSamDemoStack.template.json
Invoking app.lambda_handler (python3.9)
Decompressing
/Users/santosh/Documents/workspace/aws/cdk-sam-demo/cdk.out/asset.b9e5b43dd3a267
962ccec789725e1117a07177602f17375f57b5d4d009e20ff8.zip
PyhonLibLayer9012B95C is a local Layer in the template
Local image is up-to-date
Building image.....................
Using local image: samcli/lambda-python:3.9-x86_64-df98eaa0c4be380691b9d0fb2.Mounting
/Users/santosh/Documents/workspace/aws/cdk-sam-demo/cdk.out/asset.5154647dfbc9e4
d979237033784da0522eab6dd6532eef010dd6829545c8cb85 as /var/task:ro,delegated,
inside runtime container
START RequestId: 73cfbe98-e830-44f0-b72e-efb08227af7d Version: $LATEST
END RequestId: e45b19ca-7ae7-4239-876f-22484bb3062c
REPORT RequestId: e45b19ca-7ae7-4239-876f-22484bb3062c Init Duration: 0.46 ms Duration: 1501.97 ms Billed Duration: 1502 ms Memory Size: 256 MB Max Memory Used: 256 MB
{"statusCode": 200, "body": "{\"message\": \"Record created\", \"record_id\": 1}"}
```- Read
```
(base) ➜ cdk-sam-demo git:(main) ✗ sam local invoke MyLambdaFunction --event events/read.json -t ./cdk.out/CdkSamDemoStack.template.json
Invoking app.lambda_handler (python3.9)
Decompressing
/Users/santosh/Documents/workspace/aws/cdk-sam-demo/cdk.out/asset.b9e5b43dd3a267
962ccec789725e1117a07177602f17375f57b5d4d009e20ff8.zip
PyhonLibLayer9012B95C is a local Layer in the template
Local image is up-to-date
Building image.....................
Using local image: samcli/lambda-python:3.9-x86_64-df98eaa0c4be380691b9d0fb2.Mounting
/Users/santosh/Documents/workspace/aws/cdk-sam-demo/cdk.out/asset.5154647dfbc9e4
d979237033784da0522eab6dd6532eef010dd6829545c8cb85 as /var/task:ro,delegated,
inside runtime container
START RequestId: 7584b657-d6ea-4720-a0ca-5b659efe58a1 Version: $LATEST
END RequestId: 307c58ab-fade-40ab-b28a-085fe2f6ad2c
REPORT RequestId: 307c58ab-fade-40ab-b28a-085fe2f6ad2c Init Duration: 0.47 ms Duration: 1200.22 ms Billed Duration: 1201 ms Memory Size: 256 MB Max Memory Used: 256 MB
{"statusCode": 200, "body": "{\"records\": [{\"id\": 1, \"name\": \"Test Record\", \"description\": \"This is a test description.\"}]}"}
```## Useful commands
- `cdk ls` list all stacks in the app
- `cdk synth` emits the synthesized CloudFormation template
- `cdk deploy` deploy this stack to your default AWS account/region
- `cdk diff` compare deployed stack with current state
- `cdk docs` open CDK documentationEnjoy!