Skip to content

Commit 3122136

Browse files
11 - Securing our Deployment with AWS System Manager Parameter Store
1 parent 7371fe2 commit 3122136

File tree

4 files changed

+43
-60
lines changed

4 files changed

+43
-60
lines changed

package-lock.json

Lines changed: 12 additions & 56 deletions
Some generated files are not rendered by default. Learn more about customizing how changed files appear on GitHub.

package.json

Lines changed: 1 addition & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -9,6 +9,7 @@
99
},
1010
"dependencies": {
1111
"@neondatabase/serverless": "^0.7.2",
12+
"aws-sdk": "^2.1543.0",
1213
"drizzle-orm": "^0.29.3",
1314
"express": "^4.18.2",
1415
"serverless-http": "^3.1.1"

serverless.yml

Lines changed: 13 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -8,6 +8,18 @@ provider:
88
environment:
99
DEBUG: ${env:DEBUG, 0}
1010
DATABASE_URL: ${env:DATABASE_URL, "fallback value"}
11+
iam:
12+
role:
13+
name: serverless-my-ssm-role
14+
statements:
15+
- Effect: 'Allow'
16+
Resource: '*'
17+
Action:
18+
- "ssm:GetParameter"
19+
- "ssm:GetParameters"
20+
- "ssm:GetParametersByPath"
21+
- "ssm:GetParameterHistory"
22+
- "ssm:DescribeParameters"
1123

1224
functions:
1325
api:
@@ -21,6 +33,7 @@ custom:
2133
- AWS_ACCESS_KEY_ID
2234
- AWS_SECRET_ACCESS_KEY
2335
- AWS_SESSION_TOKEN
36+
- DATABASE_URL
2437

2538
plugins:
2639
- serverless-offline

src/index.js

Lines changed: 17 additions & 4 deletions
Original file line numberDiff line numberDiff line change
@@ -1,27 +1,40 @@
11
const serverless = require("serverless-http");
22
const express = require("express");
3-
const { neon, neonConfig} = require('@neondatabase/serverless'); //commonjs
3+
const AWS = require("aws-sdk")
4+
const { neon, neonConfig } = require('@neondatabase/serverless'); //commonjs
45

6+
const AWS_REGION='us-east-2'
7+
const STAGE = process.env.STAGE || 'prod'
58

69
const app = express();
10+
const ssm = new AWS.SSM({region: AWS_REGION})
11+
12+
const DATABASE_URL_SSM_PARAM=`/serverless-nodejs-api/${STAGE}/database-url`
713

814

915
async function dbClient(){
1016
// for http connections
1117
// non-poooling
18+
const paramStoreData = await ssm.getParameter({
19+
Name: DATABASE_URL_SSM_PARAM,
20+
WithDecryption: true
21+
}).promise()
22+
// console.log(paramStoreData.Parameter.Value)
23+
// const dbUrl = ??
1224
neonConfig.fetchConnectionCache = true
13-
const sql = neon(process.env.DATABASE_URL);
25+
const sql = neon(paramStoreData.Parameter.Value);
1426
return sql
1527
}
1628

1729

1830
app.get("/", async (req, res, next) => {
1931
console.log(process.env.DEBUG )
2032
const sql = await dbClient()
21-
const [results] = await sql`select now();`
33+
const [dbNowResult] = await sql`select now();`
34+
const delta = (Date.now() - dbNowResult.now.getTime()) / 1000
2235
return res.status(200).json({
2336
message: "Hello from root!",
24-
results: results.now,
37+
delta: delta,
2538
});
2639
});
2740

0 commit comments

Comments
 (0)