Skip to content
This repository was archived by the owner on Jan 28, 2025. It is now read-only.

Commit 8d73c44

Browse files
committed
fix: only delete the sqs queue if it already exists in the state
1 parent fcfa05c commit 8d73c44

File tree

3 files changed

+56
-36
lines changed

3 files changed

+56
-36
lines changed

packages/serverless-components/aws-sqs/__tests__/deploy.test.js

Lines changed: 25 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -11,7 +11,13 @@ const {
1111
} = require("aws-sdk");
1212

1313
describe("sqs component", () => {
14-
const tmpStateFolder = () => fse.mkdtempSync(path.join(os.tmpdir(), "test-"));
14+
const tmpStateFolder = (initialState) => {
15+
const dir = fse.mkdtempSync(path.join(os.tmpdir(), "test-"));
16+
if (initialState) {
17+
fse.writeJSONSync(path.join(dir, "TestLambda.json"), initialState);
18+
}
19+
return dir;
20+
};
1521
mockGetCallerIdentityPromise.mockResolvedValue({ Account: "123" });
1622
mockGetQueueAttributesPromise.mockResolvedValue({ Attributes: {} });
1723
mockCreateQueuePromise.mockResolvedValue({ QueueArn: "arn" });
@@ -23,8 +29,9 @@ describe("sqs component", () => {
2329
});
2430

2531
it("creates a new queue", async () => {
32+
const dir = tmpStateFolder();
2633
const component = new AwsSqsQueue("TestLambda", {
27-
stateRoot: tmpStateFolder()
34+
stateRoot: dir
2835
});
2936
await component.init();
3037
await component.default();
@@ -37,14 +44,29 @@ describe("sqs component", () => {
3744
Attributes: { not: "empty" }
3845
});
3946
const component = new AwsSqsQueue("TestLambda", {
40-
stateRoot: tmpStateFolder()
47+
stateRoot: tmpStateFolder({
48+
url: "myQueueUrl"
49+
})
4150
});
4251
await component.init();
4352
await component.default();
4453
expect(mockCreateQueuePromise).toBeCalledTimes(1);
4554
expect(mockDeleteQueuePromise).toBeCalledTimes(1);
4655
});
4756

57+
it("creates a queue but does not try to delete an existing queue if none exist already", async () => {
58+
mockGetQueueAttributesPromise.mockResolvedValueOnce({
59+
Attributes: { not: "empty" }
60+
});
61+
const component = new AwsSqsQueue("TestLambda", {
62+
stateRoot: tmpStateFolder()
63+
});
64+
await component.init();
65+
await component.default();
66+
expect(mockCreateQueuePromise).toBeCalledTimes(1);
67+
expect(mockDeleteQueuePromise).toBeCalledTimes(0);
68+
});
69+
4870
it("does not create a lambda mapping when a mapping is found", async () => {
4971
mockListEventSourceMappingsPromise.mockResolvedValueOnce({
5072
EventSourceMappings: [1]

packages/serverless-components/aws-sqs/serverless.js

Lines changed: 5 additions & 4 deletions
Original file line numberDiff line numberDiff line change
@@ -64,10 +64,11 @@ class AwsSqsQueue extends Component {
6464
this.context.status(`Updating`);
6565
await setAttributes(sqs, queueUrl, config);
6666
} else {
67-
this.context.debug(`The QueueUrl has changed`);
68-
this.context.debug(`Deleting previous queue`);
69-
70-
await deleteQueue({ sqs, queueUrl: this.state.url });
67+
if (this.state.url) {
68+
this.context.debug(`The QueueUrl has changed`);
69+
this.context.debug(`Deleting previous queue`);
70+
await deleteQueue({ sqs, queueUrl: this.state.url });
71+
}
7172

7273
this.context.debug(`Creating new queue`);
7374

yarn.lock

Lines changed: 26 additions & 29 deletions
Original file line numberDiff line numberDiff line change
@@ -3677,34 +3677,16 @@
36773677
"@sinonjs/commons" "^1.7.0"
36783678

36793679
"@sls-next/core@link:packages/libs/core":
3680-
version "1.0.0-alpha.12"
3681-
dependencies:
3682-
"@hapi/accept" "^5.0.1"
3683-
cookie "^0.4.1"
3684-
jsonwebtoken "^8.5.1"
3685-
path-to-regexp "^6.1.0"
3686-
regex-parser "^2.2.10"
3680+
version "0.0.0"
3681+
uid ""
36873682

36883683
"@sls-next/lambda-at-edge@link:./packages/libs/lambda-at-edge":
3689-
version "1.9.0-alpha.7"
3690-
dependencies:
3691-
"@aws-sdk/client-s3" "3.14.0"
3692-
"@aws-sdk/client-sqs" "3.14.0"
3693-
"@hapi/accept" "5.0.1"
3694-
"@sls-next/core" "link:packages/libs/core"
3695-
"@vercel/nft" "^0.12.0"
3696-
execa "^4.0.2"
3697-
fresh "^0.5.2"
3698-
fs-extra "^9.0.1"
3699-
get-stream "^6.0.0"
3700-
is-animated "^2.0.1"
3701-
klaw "^3.0.0"
3702-
node-fetch "^2.6.1"
3703-
path-to-regexp "^6.1.0"
3704-
send "^0.17.1"
3684+
version "0.0.0"
3685+
uid ""
37053686

37063687
"@sls-next/next-aws-cloudfront@link:./packages/compat-layers/lambda-at-edge-compat":
3707-
version "1.6.2-alpha.0"
3688+
version "0.0.0"
3689+
uid ""
37083690

37093691
"@szmarczak/http-timer@^1.1.2":
37103692
version "1.1.2"
@@ -4124,10 +4106,10 @@
41244106
"@typescript-eslint/types" "4.24.0"
41254107
eslint-visitor-keys "^2.0.0"
41264108

4127-
"@vercel/nft@^0.12.0":
4128-
version "0.12.0"
4129-
resolved "https://registry.npmjs.org/@vercel/nft/-/nft-0.12.0.tgz#d88e6ab66848eb4d8862f70ccd148f29305fc4bd"
4130-
integrity sha512-4k87lSFscEOrILuiG5w1UUswDTLmn7snWGhBO1LUaZZShLeul/gMl4QzryIN7ljAExsYrkaaE07LPPf2bmMTvg==
4109+
"@vercel/nft@^0.12.2":
4110+
version "0.12.2"
4111+
resolved "https://registry.npmjs.org/@vercel/nft/-/nft-0.12.2.tgz#67ea9f231d24639b3783e3e69bef173659972d3b"
4112+
integrity sha512-H8n44GboVnJaVVX4+WfuOTAaNLDnUIYH4KpMZcXll7KMNIcg0JTd0IFRsIBe/uvuXisqm6nEANp8Tr3/1dlRQw==
41314113
dependencies:
41324114
"@mapbox/node-pre-gyp" "^1.0.5"
41334115
acorn "^8.1.0"
@@ -7387,7 +7369,7 @@ execa@^1.0.0:
73877369
signal-exit "^3.0.0"
73887370
strip-eof "^1.0.0"
73897371

7390-
execa@^4.0.0, execa@^4.0.2, execa@^4.1.0:
7372+
execa@^4.0.0, execa@^4.1.0:
73917373
version "4.1.0"
73927374
resolved "https://registry.npmjs.org/execa/-/execa-4.1.0.tgz#4e5491ad1572f2f17a77d388c6c857135b22847a"
73937375
integrity sha512-j5W0//W7f8UxAn8hXVnwG8tLwdiUy4FJLcSupCg6maBYZDpyBvTApK7KyuI4bKj8KOh1r2YH+6ucuYtJv1bTZA==
@@ -7417,6 +7399,21 @@ execa@^5.0.0:
74177399
signal-exit "^3.0.3"
74187400
strip-final-newline "^2.0.0"
74197401

7402+
execa@^5.0.1:
7403+
version "5.0.1"
7404+
resolved "https://registry.npmjs.org/execa/-/execa-5.0.1.tgz#aee63b871c9b2cb56bc9addcd3c70a785c6bf0d1"
7405+
integrity sha512-4hFTjFbFzQa3aCLobpbPJR/U+VoL1wdV5ozOWjeet0AWDeYr9UFGM1eUFWHX+VtOWFq4p0xXUXfW1YxUaP4fpw==
7406+
dependencies:
7407+
cross-spawn "^7.0.3"
7408+
get-stream "^6.0.0"
7409+
human-signals "^2.1.0"
7410+
is-stream "^2.0.0"
7411+
merge-stream "^2.0.0"
7412+
npm-run-path "^4.0.1"
7413+
onetime "^5.1.2"
7414+
signal-exit "^3.0.3"
7415+
strip-final-newline "^2.0.0"
7416+
74207417
exit@^0.1.2:
74217418
version "0.1.2"
74227419
resolved "https://registry.npmjs.org/exit/-/exit-0.1.2.tgz#0632638f8d877cc82107d30a0fff1a17cba1cd0c"

0 commit comments

Comments
 (0)