Skip to content

Commit 3ca8918

Browse files
committed
@aws-sdk/client-sns / aws-sdk/clients/sns@aws-lite/sns
`@aws-sdk/client-sqs` / `aws-sdk/clients/sqs` → `@aws-lite/sqs` Cache port gets Fix SSM calls in AWS
1 parent 59dbfd9 commit 3ca8918

File tree

4 files changed

+46
-47
lines changed

4 files changed

+46
-47
lines changed

package.json

Lines changed: 2 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -27,6 +27,8 @@
2727
"dependencies": {
2828
"@aws-lite/client": "^0.8.1",
2929
"@aws-lite/dynamodb": "^0.2.1",
30+
"@aws-lite/sns": "^0.0.0",
31+
"@aws-lite/sqs": "^0.0.0",
3032
"@aws-lite/ssm": "^0.1.0",
3133
"cookie": "^0.5.0",
3234
"cookie-signature": "^1.2.1",
@@ -43,8 +45,6 @@
4345
"@architect/sandbox": "^5.8.2",
4446
"@aws-sdk/client-apigatewaymanagementapi": "^3.319.0",
4547
"@aws-sdk/client-dynamodb": "^3.319.0",
46-
"@aws-sdk/client-sns": "^3.319.0",
47-
"@aws-sdk/client-sqs": "^3.319.0",
4848
"@aws-sdk/lib-dynamodb": "^3.319.0",
4949
"@smithy/node-http-handler": "^2.1.7",
5050
"@types/aws-lambda": "^8.10.119",

src/discovery/index.js

Lines changed: 4 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -18,7 +18,8 @@ module.exports = function lookup (callback) {
1818
app = 'arc-app'
1919
}
2020

21-
let config = {}
21+
let plugins = [ '@aws-lite/ssm' ]
22+
let config = { plugins }
2223
if (local) {
2324
let port = 2222
2425
if (ARC_SANDBOX) {
@@ -34,15 +35,15 @@ module.exports = function lookup (callback) {
3435
port,
3536
protocol: 'http',
3637
region: AWS_REGION || 'us-west-2',
37-
plugins: [ '@aws-lite/ssm' ],
38+
plugins,
3839
}
3940
}
4041

4142
getAwsClient(config, (err, client) => {
4243
if (err) callback(err)
4344
else {
4445
let Path = `/${stack || toLogicalID(`${app}-${env}`)}`
45-
client.ssm.GetParametersByPath({ Path, paginate: true })
46+
client.ssm.GetParametersByPath({ Path, Recursive: true, paginate: true })
4647
.then(result => {
4748
let services = result.Parameters.reduce((a, b) => {
4849
let hierarchy = b.Name.split('/')

src/events/publish.js

Lines changed: 34 additions & 42 deletions
Original file line numberDiff line numberDiff line change
@@ -1,7 +1,7 @@
11
let http = require('http')
2-
let { getPorts, isNode18, useAWS } = require('../lib')
2+
let { getAwsClient, getPorts, useAWS } = require('../lib')
33
let ledger = { events: {}, queues: {} }
4-
let sns, snsClient, sqs, sqsClient, port
4+
let client, port
55

66
/**
77
* Invoke
@@ -10,7 +10,6 @@ let sns, snsClient, sqs, sqsClient, port
1010
*/
1111
module.exports = function publishFactory (arc, type) {
1212
let factory = type === 'events' ? eventFactory : queueFactory
13-
let publishAWS = factory(arc)
1413
return function publish (params, callback) {
1514
if (!params.name) {
1615
throw ReferenceError('missing params.name')
@@ -44,9 +43,24 @@ module.exports = function publishFactory (arc, type) {
4443
}
4544
})
4645
}
47-
else {
46+
else if (client) {
47+
let publishAWS = factory(arc)
4848
publishAWS(params, callback)
4949
}
50+
else {
51+
let { AWS_REGION } = process.env
52+
getAwsClient({
53+
region: AWS_REGION || 'us-west-2',
54+
plugins: [ '@aws-lite/sns', '@aws-lite/sqs' ],
55+
}, (err, _client) => {
56+
if (err) callback(err)
57+
else {
58+
client = _client
59+
let publishAWS = factory(arc)
60+
publishAWS(params, callback)
61+
}
62+
})
63+
}
5064

5165
return promise
5266
}
@@ -75,25 +89,14 @@ function _publishSandbox (type, params, callback) {
7589

7690
function eventFactory (arc) {
7791
return function live ({ name, payload }, callback) {
78-
if (!snsClient) {
79-
if (isNode18) {
80-
let { SNS } = require('@aws-sdk/client-sns')
81-
sns = new SNS
82-
}
83-
else {
84-
let SNS = require('aws-sdk/clients/sns')
85-
sns = new SNS
86-
}
87-
}
88-
snsClient = (params, callback) => {
89-
return sns.publish(params, callback)
90-
}
9192

9293
function publish (arn, payload, callback) {
93-
snsClient({
94+
client.sns.Publish({
9495
TopicArn: arn,
9596
Message: JSON.stringify(payload)
96-
}, callback)
97+
})
98+
.then(result => callback(null, result))
99+
.catch(callback)
97100
}
98101

99102
function cacheLedgerAndPublish (serviceMap) {
@@ -115,42 +118,31 @@ function eventFactory (arc) {
115118

116119
function queueFactory (arc) {
117120
return function live ({ name, payload, delaySeconds, groupID }, callback) {
118-
if (!sqsClient) {
119-
if (isNode18) {
120-
let { SQS } = require('@aws-sdk/client-sqs')
121-
sqs = new SQS
122-
}
123-
else {
124-
let SQS = require('aws-sdk/clients/sqs')
125-
sqs = new SQS
126-
}
127-
}
128-
sqsClient = (params, callback) => {
129-
return sqs.sendMessage(params, callback)
130-
}
131121

132-
function publish (arn, payload, callback) {
122+
function publish (url, payload, callback) {
133123
let params = {
134-
QueueUrl: arn,
124+
QueueUrl: url,
135125
DelaySeconds: delaySeconds || 0,
136126
MessageBody: JSON.stringify(payload)
137127
}
138-
if (arn.endsWith('.fifo')) {
128+
if (url.endsWith('.fifo')) {
139129
params.MessageGroupId = groupID || name
140130
}
141-
sqsClient(params, callback)
131+
client.sqs.SendMessage(params)
132+
.then(result => callback(null, result))
133+
.catch(callback)
142134
}
143135

144136
function cacheLedgerAndPublish (serviceMap) {
145137
ledger.queues = serviceMap.queues
146-
arn = ledger.queues[name]
147-
if (!arn) callback(ReferenceError(`${name} queue not found`))
148-
else publish(arn, payload, callback)
138+
url = ledger.queues[name]
139+
if (!url) callback(ReferenceError(`${name} queue not found`))
140+
else publish(url, payload, callback)
149141
}
150142

151-
let arn = ledger.queues[name]
152-
if (arn) {
153-
publish(arn, payload, callback)
143+
let url = ledger.queues[name]
144+
if (url) {
145+
publish(url, payload, callback)
154146
}
155147
else {
156148
arc.services().then(cacheLedgerAndPublish).catch(callback)

src/lib/_get-ports.js

Lines changed: 6 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -1,12 +1,17 @@
1+
let cache
12
module.exports = function getPorts (callback) {
23
let { ARC_SANDBOX } = process.env
34
let notFound = ReferenceError('Sandbox internal port not found')
5+
if (cache) {
6+
return callback(null, cache)
7+
}
48
// Sandbox env var is the happy path for Lambda runs
59
if (ARC_SANDBOX) {
610
let { ports } = JSON.parse(ARC_SANDBOX)
711
if (!ports) {
812
return callback(notFound)
913
}
14+
cache = ports
1015
callback(null, ports)
1116
}
1217
// Fall back to an internal SSM query in case Functions is running as a bare module
@@ -21,6 +26,7 @@ module.exports = function getPorts (callback) {
2126
return callback(notFound)
2227
}
2328
let ports = JSON.parse(services.ARC_SANDBOX.ports)
29+
cache = ports
2430
callback(null, ports)
2531
}
2632
})

0 commit comments

Comments
 (0)