sst / ion

SST v3
https://sst.dev
MIT License
1.45k stars 189 forks source link

Deploy of Nextjs app creates CloudFront Distribution, subsequent sst dev deletes it #748

Closed dmeehan1968 closed 1 month ago

dmeehan1968 commented 1 month ago

Getting a cycle of creating of the CloudFront Distribution when sst deploying and then it gets deleted by a subsequent sst dev next dev. This seems to also turnover all of the related resources, such as the S3 bucket and logs.

Relevant log lines are:

The churn isn't helpful because I would have expected the distribution resources to be retained as they shouldn't conflict with the resources needed for dev, but the duration of these updates, even if necessary for the underlying CF resource creation/deletion, severely impacts DX.

IMPORTANT: Because the CF distribution gets recreated, the <random> component of the the automatically generated domain name changes each time, which would affect things like Auth where the provider uses a hardcoded callback URL.

This is a fresh Nextjs app with a single page. I have been encountering this problem in my other in progress app, but it seemed to stabilise after I added a custom domain for the distribution, so this problem might only be for auto-generated domains, e.g. <random>.cloudfront.net.

Initial Deploy phase ``` /Users/dmeehan/.nvm/versions/node/v20.15.1/bin/npm run deploy > dashboard@0.1.0 deploy > sst deploy SST ❍ ion 0.1.4 ready! ➜ App: EasyL8 Stage: dmeehan ~ Deploying | Log Running "npx --yes open-next@3.0.2 build" script | Log Next.js version : 14.2.5 | Log OpenNext v3.0.2 | Log ┌─────────────────────────────────┐ | Log │ OpenNext — Building Next.js app │ | Log └─────────────────────────────────┘ | Log > dashboard@0.1.0 build | Log > next build | Log ▲ Next.js 14.2.5 | Log Creating an optimized production build ... | Log ✓ Compiled successfully | Log Linting and checking validity of types ... | Log Collecting page data ... | Log Generating static pages (0/5) ... | Log Generating static pages (1/5) | Log Generating static pages (2/5) | Log Generating static pages (3/5) | Log ✓ Generating static pages (5/5) | Log Finalizing page optimization ... | Log Collecting build traces ... | Log Route (app) Size First Load JS | Log ┌ ○ /_not-found 871 B 87.9 kB | Log └ ○ /dashboard/applications 141 B 87.2 kB | Log + First Load JS shared by all 87 kB | Log ├ chunks/23-b75664ace61c0abb.js 31.5 kB | Log ├ chunks/fd9d1056-2821b0f0cabcd8bd.js 53.6 kB | Log └ other shared chunks (total) 1.86 kB | Log ○ (Static) prerendered as static content | Log ┌──────────────────────────────┐ | Log │ OpenNext — Generating bundle │ | Log └──────────────────────────────┘ | Log Bundling middleware function... | Log Bundling static assets... | Log Bundling cache assets... | Log Building server function: default... | Log Bundling revalidation function... | Log Bundling image optimization function... | Log Bundling warmer function... | Log OpenNext build complete. | Created Dashboard sst:aws:Nextjs → DashboardRevalidationEvents sst:aws:Queue | Created Dashboard sst:aws:Nextjs → DashboardRevalidationSeeder sst:aws:Function | Created Dashboard sst:aws:Nextjs → DashboardAssets sst:aws:Bucket | Created Dashboard sst:aws:Nextjs → DashboardAssetsId random:index:RandomId | Created Dashboard sst:aws:Nextjs → DashboardRevalidationSeederLogGroup aws:cloudwatch:LogGroup | Created Dashboard sst:aws:Nextjs → DashboardRevalidationSeederCode aws:s3:BucketObjectv2 | Created Dashboard sst:aws:Nextjs → DashboardOriginAccessIdentity sst:aws:OriginAccessIdentity (1.2s) | Created Dashboard sst:aws:Nextjs → DashboardAssetsBucket aws:s3:BucketV2 (3.2s) | Created Dashboard sst:aws:Nextjs → DashboardAssetsPublicAccessBlock aws:s3:BucketPublicAccessBlock | Created Dashboard sst:aws:Nextjs → DashboardAssetsCors aws:s3:BucketCorsConfigurationV2 | Created Dashboard sst:aws:Nextjs → DashboardAssetsPolicy aws:s3:BucketPolicy (4.9s) | Created Dashboard sst:aws:Nextjs → DashboardRevalidationTable aws:dynamodb:Table (24.5s) | Created Dashboard sst:aws:Nextjs → DashboardRevalidationEventsQueue aws:sqs:Queue (26.5s) | Created Dashboard sst:aws:Nextjs → DashboardRevalidationSeederRole aws:iam:Role (2.3s) | Created Dashboard sst:aws:Nextjs → DashboardDefault sst:aws:Function | Created Dashboard sst:aws:Nextjs → DashboardRevalidationEventsSubscriberBaouue sst:aws:QueueLambdaSubscriber | Created Dashboard sst:aws:Nextjs → DashboardImageOptimizer sst:aws:Function | Created Dashboard sst:aws:Nextjs → DashboardRevalidationEventsSubscriberBaouueFunction sst:aws:Function | Created Dashboard sst:aws:Nextjs → DashboardDefaultLogGroup aws:cloudwatch:LogGroup | Created Dashboard sst:aws:Nextjs → DashboardServerCachePolicy aws:cloudfront:CachePolicy (1.2s) | Created Dashboard sst:aws:Nextjs → DashboardRevalidationEventsSubscriberBaouueFunctionLogGroup aws:cloudwatch:LogGroup | Created Dashboard sst:aws:Nextjs → DashboardImageOptimizerLogGroup aws:cloudwatch:LogGroup (1.2s) | Created Dashboard sst:aws:Nextjs → DashboardRevalidationEventsSubscriberBaouueFunctionCode aws:s3:BucketObjectv2 (2.6s) | Created Dashboard sst:aws:Nextjs → DashboardImageOptimizerRole aws:iam:Role (3.6s) | Created Dashboard sst:aws:Nextjs → DashboardDefaultRole aws:iam:Role (4.0s) | Created Dashboard sst:aws:Nextjs → DashboardRevalidationEventsSubscriberBaouueFunctionRole aws:iam:Role (4.1s) | Created Dashboard sst:aws:Nextjs → DashboardCloudfrontFunctionServerCfFunction aws:cloudfront:Function (7.9s) | Created Dashboard sst:aws:Nextjs → DashboardAssetFiles sst:aws:BucketFiles (8.2s) | Created Dashboard sst:aws:Nextjs → DashboardCdn sst:aws:CDN | Created Dashboard sst:aws:Nextjs → DashboardRevalidationSeederFunction aws:lambda:Function (15.3s) | Created Dashboard sst:aws:Nextjs → DashboardRevalidationEventsSubscriberBaouueFunctionFunction aws:lambda:Function (11.9s) | Created Dashboard sst:aws:Nextjs → DashboardDefaultFunction aws:lambda:Function (12.3s) | Created Dashboard sst:aws:Nextjs → DashboardImageOptimizerFunction aws:lambda:Function (12.7s) | Created Dashboard sst:aws:Nextjs → DashboardRevalidationSeederCodeUpdater sst:aws:FunctionCodeUpdater (2.4s) | Created Dashboard sst:aws:Nextjs → DashboardDefaultUrl aws:lambda:FunctionUrl (1.9s) | Created Dashboard sst:aws:Nextjs → DashboardImageOptimizerUrl aws:lambda:FunctionUrl (1.9s) | Created Dashboard sst:aws:Nextjs → DashboardRevalidationEventsSubscriberBaouueFunctionCodeUpdater sst:aws:FunctionCodeUpdater (2.7s) | Created Dashboard sst:aws:Nextjs → DashboardRevalidationSeed aws:lambda:Invocation (2.2s) | Created Dashboard sst:aws:Nextjs → DashboardCdnDistribution aws:cloudfront:Distribution (6.1s) | Created Dashboard sst:aws:Nextjs → DashboardInvalidationPolicy aws:iam:Policy (1.3s) | Created Dashboard sst:aws:Nextjs → DashboardInvalidation sst:aws:DistributionInvalidation (1.3s) | Created Dashboard sst:aws:Nextjs → DashboardRevalidationEventsSubscriberBaouueEventSourceMapping aws:lambda:EventSourceMapping (18.4s) | Created Dashboard sst:aws:Nextjs → DashboardImageOptimizerCode aws:s3:BucketObjectv2 (36.5s) | Created Dashboard sst:aws:Nextjs → DashboardImageOptimizerCodeUpdater sst:aws:FunctionCodeUpdater (2.6s) | Created Dashboard sst:aws:Nextjs → DashboardDefaultCode aws:s3:BucketObjectv2 (42.5s) | Created Dashboard sst:aws:Nextjs → DashboardDefaultCodeUpdater sst:aws:FunctionCodeUpdater (2.0s) | Created Dashboard sst:aws:Nextjs → DashboardInvalidationPolicyAttachment70e6 aws:iam:RolePolicyAttachment | Created Dashboard sst:aws:Nextjs → DashboardCdnWaiter sst:aws:DistributionDeploymentWaiter (236.6s) | Deleted DashboardDevServer sst:aws:Function → DashboardDevServerCodeUpdater sst:aws:FunctionCodeUpdater | Deleted DashboardDevServer sst:aws:Function → DashboardDevServerFunction aws:lambda:Function | Deleted DashboardDevServer sst:aws:Function → DashboardDevServerCode aws:s3:BucketObjectv2 | Deleted DashboardDevServer sst:aws:Function → DashboardDevServerLogGroup aws:cloudwatch:LogGroup | Deleted DashboardDevServer sst:aws:Function → DashboardDevServerRole aws:iam:Role (1.6s) | Deleted Dashboard sst:aws:Nextjs → DashboardDevServer sst:aws:Function ✓ Complete Dashboard: https://eeg54u.cloudfront.net Process finished with exit code 0 ```
Dev phase ``` /Users/dmeehan/.nvm/versions/node/v20.15.1/bin/npm run dev > dashboard@0.1.0 dev > sst dev next dev SST ❍ ion 0.1.4 ready! ➜ App: EasyL8 Stage: dmeehan Console: https://console.sst.dev/local/EasyL8/dmeehan ~ Deploying | Created Dashboard sst:aws:Nextjs → DashboardDevServer sst:aws:Function | Created Dashboard sst:aws:Nextjs → DashboardDevServerLogGroup aws:cloudwatch:LogGroup | Created Dashboard sst:aws:Nextjs → DashboardDevServerCode aws:s3:BucketObjectv2 | Created Dashboard sst:aws:Nextjs → DashboardDevServerRole aws:iam:Role (1.8s) | Created Dashboard sst:aws:Nextjs → DashboardDevServerFunction aws:lambda:Function (14.3s) | Created Dashboard sst:aws:Nextjs → DashboardDevServerCodeUpdater sst:aws:FunctionCodeUpdater (2.1s) | Deleted Dashboard sst:aws:Nextjs → DashboardInvalidationPolicyAttachment70e6 aws:iam:RolePolicyAttachment | Deleted DashboardCdn sst:aws:CDN → DashboardCdnWaiter sst:aws:DistributionDeploymentWaiter | Deleted Dashboard sst:aws:Nextjs → DashboardInvalidation sst:aws:DistributionInvalidation | Deleted Dashboard sst:aws:Nextjs → DashboardInvalidationPolicy aws:iam:Policy | Deleted DashboardCdn sst:aws:CDN → DashboardCdnDistribution aws:cloudfront:Distribution (345.7s) | Deleted DashboardImageOptimizer sst:aws:Function → DashboardImageOptimizerCodeUpdater sst:aws:FunctionCodeUpdater | Deleted DashboardImageOptimizer sst:aws:Function → DashboardImageOptimizerUrl aws:lambda:FunctionUrl | Deleted DashboardRevalidationEventsSubscriberBaouue sst:aws:QueueLambdaSubscriber → DashboardRevalidationEventsSubscriberBaouueEventSourceMapping aws:lambda:EventSourceMapping (14.3s) | Deleted Dashboard sst:aws:Nextjs → DashboardCdn sst:aws:CDN | Deleted DashboardRevalidationEventsSubscriberBaouueFunction sst:aws:Function → DashboardRevalidationEventsSubscriberBaouueFunctionCodeUpdater sst:aws:FunctionCodeUpdater | Deleted Dashboard sst:aws:Nextjs → DashboardRevalidationSeed aws:lambda:Invocation | Deleted DashboardImageOptimizer sst:aws:Function → DashboardImageOptimizerFunction aws:lambda:Function | Deleted DashboardAssets sst:aws:Bucket → DashboardAssetsPolicy aws:s3:BucketPolicy | Deleted DashboardRevalidationSeeder sst:aws:Function → DashboardRevalidationSeederCodeUpdater sst:aws:FunctionCodeUpdater | Deleted DashboardDefault sst:aws:Function → DashboardDefaultCodeUpdater sst:aws:FunctionCodeUpdater | Deleted Dashboard sst:aws:Nextjs → DashboardAssetFiles sst:aws:BucketFiles | Deleted DashboardDefault sst:aws:Function → DashboardDefaultUrl aws:lambda:FunctionUrl | Deleted DashboardRevalidationEventsSubscriberBaouueFunction sst:aws:Function → DashboardRevalidationEventsSubscriberBaouueFunctionFunction aws:lambda:Function | Deleted DashboardAssets sst:aws:Bucket → DashboardAssetsPublicAccessBlock aws:s3:BucketPublicAccessBlock | Deleted DashboardAssets sst:aws:Bucket → DashboardAssetsCors aws:s3:BucketCorsConfigurationV2 | Deleted DashboardImageOptimizer sst:aws:Function → DashboardImageOptimizerRole aws:iam:Role (1.7s) | Deleted DashboardRevalidationEventsSubscriberBaouueFunction sst:aws:Function → DashboardRevalidationEventsSubscriberBaouueFunctionCode aws:s3:BucketObjectv2 | Deleted DashboardDefault sst:aws:Function → DashboardDefaultFunction aws:lambda:Function | Deleted DashboardRevalidationSeeder sst:aws:Function → DashboardRevalidationSeederFunction aws:lambda:Function | Deleted DashboardRevalidationEventsSubscriberBaouueFunction sst:aws:Function → DashboardRevalidationEventsSubscriberBaouueFunctionLogGroup aws:cloudwatch:LogGroup | Deleted DashboardRevalidationEventsSubscriberBaouueFunction sst:aws:Function → DashboardRevalidationEventsSubscriberBaouueFunctionRole aws:iam:Role (1.1s) | Deleted DashboardAssets sst:aws:Bucket → DashboardAssetsBucket aws:s3:BucketV2 (1.3s) | Deleted DashboardRevalidationEventsSubscriberBaouue sst:aws:QueueLambdaSubscriber → DashboardRevalidationEventsSubscriberBaouueFunction sst:aws:Function | Deleted DashboardAssets sst:aws:Bucket → DashboardAssetsId random:index:RandomId | Deleted DashboardRevalidationSeeder sst:aws:Function → DashboardRevalidationSeederCode aws:s3:BucketObjectv2 | Deleted DashboardDefault sst:aws:Function → DashboardDefaultCode aws:s3:BucketObjectv2 | Deleted DashboardImageOptimizer sst:aws:Function → DashboardImageOptimizerCode aws:s3:BucketObjectv2 | Deleted DashboardRevalidationSeeder sst:aws:Function → DashboardRevalidationSeederLogGroup aws:cloudwatch:LogGroup | Deleted DashboardImageOptimizer sst:aws:Function → DashboardImageOptimizerLogGroup aws:cloudwatch:LogGroup | Deleted DashboardDefault sst:aws:Function → DashboardDefaultLogGroup aws:cloudwatch:LogGroup | Deleted DashboardDefault sst:aws:Function → DashboardDefaultRole aws:iam:Role (1.3s) | Deleted DashboardRevalidationSeeder sst:aws:Function → DashboardRevalidationSeederRole aws:iam:Role (1.4s) | Deleted DashboardRevalidationEvents sst:aws:Queue → DashboardRevalidationEventsQueue aws:sqs:Queue (3.2s) | Deleted Dashboard sst:aws:Nextjs → DashboardDefault sst:aws:Function | Deleted Dashboard sst:aws:Nextjs → DashboardImageOptimizer sst:aws:Function | Deleted Dashboard sst:aws:Nextjs → DashboardRevalidationEventsSubscriberBaouue sst:aws:QueueLambdaSubscriber | Deleted Dashboard sst:aws:Nextjs → DashboardRevalidationSeeder sst:aws:Function | Deleted Dashboard sst:aws:Nextjs → DashboardRevalidationEvents sst:aws:Queue | Deleted Dashboard sst:aws:Nextjs → DashboardAssets sst:aws:Bucket | Deleted Dashboard sst:aws:Nextjs → DashboardServerCachePolicy aws:cloudfront:CachePolicy | Deleted Dashboard sst:aws:Nextjs → DashboardOriginAccessIdentity sst:aws:OriginAccessIdentity (1.1s) | Deleted Dashboard sst:aws:Nextjs → DashboardCloudfrontFunctionServerCfFunction aws:cloudfront:Function (2.9s) | Deleted Dashboard sst:aws:Nextjs → DashboardRevalidationTable aws:dynamodb:Table (3.9s) ✓ Complete ▲ Next.js 14.2.5 - Local: http://localhost:3000 ✓ Starting... ✓ Ready in 1641ms ```
Subsequent Deploy phase ``` /Users/dmeehan/.nvm/versions/node/v20.15.1/bin/npm run deploy > dashboard@0.1.0 deploy > sst deploy SST ❍ ion 0.1.4 ready! ➜ App: EasyL8 Stage: dmeehan ~ Deploying | Log Running "npx --yes open-next@3.0.2 build" script | Log Next.js version : 14.2.5 | Log OpenNext v3.0.2 | Log ┌─────────────────────────────────┐ | Log │ OpenNext — Building Next.js app │ | Log └─────────────────────────────────┘ | Log > dashboard@0.1.0 build | Log > next build | Log ▲ Next.js 14.2.5 | Log Creating an optimized production build ... | Log ✓ Compiled successfully | Log Linting and checking validity of types ... | Log Collecting page data ... | Log Generating static pages (0/5) ... | Log Generating static pages (1/5) | Log Generating static pages (2/5) | Log Generating static pages (3/5) | Log ✓ Generating static pages (5/5) | Log Finalizing page optimization ... | Log Collecting build traces ... | Log Route (app) Size First Load JS | Log ┌ ○ /_not-found 871 B 87.9 kB | Log └ ○ /dashboard/applications 141 B 87.2 kB | Log + First Load JS shared by all 87 kB | Log ├ chunks/23-b75664ace61c0abb.js 31.5 kB | Log ├ chunks/fd9d1056-2821b0f0cabcd8bd.js 53.6 kB | Log └ other shared chunks (total) 1.86 kB | Log ○ (Static) prerendered as static content | Log ┌──────────────────────────────┐ | Log │ OpenNext — Generating bundle │ | Log └──────────────────────────────┘ | Log Bundling middleware function... | Log Bundling static assets... | Log Bundling cache assets... | Log Building server function: default... | Log Bundling revalidation function... | Log Bundling image optimization function... | Log Bundling warmer function... | Log OpenNext build complete. | Created Dashboard sst:aws:Nextjs → DashboardRevalidationSeeder sst:aws:Function | Created Dashboard sst:aws:Nextjs → DashboardRevalidationEvents sst:aws:Queue | Created Dashboard sst:aws:Nextjs → DashboardAssets sst:aws:Bucket | Created Dashboard sst:aws:Nextjs → DashboardAssetsId random:index:RandomId | Created Dashboard sst:aws:Nextjs → DashboardRevalidationSeederLogGroup aws:cloudwatch:LogGroup | Created Dashboard sst:aws:Nextjs → DashboardRevalidationSeederCode aws:s3:BucketObjectv2 | Created Dashboard sst:aws:Nextjs → DashboardOriginAccessIdentity sst:aws:OriginAccessIdentity (2.3s) | Created Dashboard sst:aws:Nextjs → DashboardAssetsBucket aws:s3:BucketV2 (2.8s) | Created Dashboard sst:aws:Nextjs → DashboardAssetsPublicAccessBlock aws:s3:BucketPublicAccessBlock | Created Dashboard sst:aws:Nextjs → DashboardAssetsCors aws:s3:BucketCorsConfigurationV2 | Created Dashboard sst:aws:Nextjs → DashboardAssetsPolicy aws:s3:BucketPolicy (9.0s) | Created Dashboard sst:aws:Nextjs → DashboardRevalidationTable aws:dynamodb:Table (24.6s) | Created Dashboard sst:aws:Nextjs → DashboardRevalidationEventsQueue aws:sqs:Queue (26.2s) | Created Dashboard sst:aws:Nextjs → DashboardRevalidationSeederRole aws:iam:Role (1.9s) | Created Dashboard sst:aws:Nextjs → DashboardDefault sst:aws:Function | Created Dashboard sst:aws:Nextjs → DashboardImageOptimizer sst:aws:Function | Created Dashboard sst:aws:Nextjs → DashboardRevalidationEventsSubscriberBaouue sst:aws:QueueLambdaSubscriber | Created Dashboard sst:aws:Nextjs → DashboardRevalidationEventsSubscriberBaouueFunction sst:aws:Function | Created Dashboard sst:aws:Nextjs → DashboardServerCachePolicy aws:cloudfront:CachePolicy (1.4s) | Created Dashboard sst:aws:Nextjs → DashboardRevalidationEventsSubscriberBaouueFunctionLogGroup aws:cloudwatch:LogGroup (2.8s) | Created Dashboard sst:aws:Nextjs → DashboardImageOptimizerLogGroup aws:cloudwatch:LogGroup (2.9s) | Created Dashboard sst:aws:Nextjs → DashboardRevalidationEventsSubscriberBaouueFunctionCode aws:s3:BucketObjectv2 (2.8s) | Created Dashboard sst:aws:Nextjs → DashboardDefaultLogGroup aws:cloudwatch:LogGroup (4.4s) | Created Dashboard sst:aws:Nextjs → DashboardAssetFiles sst:aws:BucketFiles (5.0s) | Created Dashboard sst:aws:Nextjs → DashboardCdn sst:aws:CDN | Created Dashboard sst:aws:Nextjs → DashboardImageOptimizerRole aws:iam:Role (5.0s) | Created Dashboard sst:aws:Nextjs → DashboardDefaultRole aws:iam:Role (5.1s) | Created Dashboard sst:aws:Nextjs → DashboardRevalidationEventsSubscriberBaouueFunctionRole aws:iam:Role (5.2s) | Created Dashboard sst:aws:Nextjs → DashboardCloudfrontFunctionServerCfFunction aws:cloudfront:Function (5.5s) | Created Dashboard sst:aws:Nextjs → DashboardRevalidationSeederFunction aws:lambda:Function (14.5s) | Created Dashboard sst:aws:Nextjs → DashboardImageOptimizerFunction aws:lambda:Function (11.1s) | Created Dashboard sst:aws:Nextjs → DashboardDefaultFunction aws:lambda:Function (11.2s) | Created Dashboard sst:aws:Nextjs → DashboardRevalidationEventsSubscriberBaouueFunctionFunction aws:lambda:Function (11.2s) | Created Dashboard sst:aws:Nextjs → DashboardRevalidationSeederCodeUpdater sst:aws:FunctionCodeUpdater (2.8s) | Created Dashboard sst:aws:Nextjs → DashboardImageOptimizerUrl aws:lambda:FunctionUrl (1.7s) | Created Dashboard sst:aws:Nextjs → DashboardDefaultUrl aws:lambda:FunctionUrl (1.7s) | Created Dashboard sst:aws:Nextjs → DashboardRevalidationSeed aws:lambda:Invocation (2.0s) | Created Dashboard sst:aws:Nextjs → DashboardRevalidationEventsSubscriberBaouueFunctionCodeUpdater sst:aws:FunctionCodeUpdater (2.7s) | Created Dashboard sst:aws:Nextjs → DashboardCdnDistribution aws:cloudfront:Distribution (7.5s) | Created Dashboard sst:aws:Nextjs → DashboardInvalidation sst:aws:DistributionInvalidation (2.4s) | Created Dashboard sst:aws:Nextjs → DashboardInvalidationPolicy aws:iam:Policy (2.9s) | Created Dashboard sst:aws:Nextjs → DashboardRevalidationEventsSubscriberBaouueEventSourceMapping aws:lambda:EventSourceMapping (19.4s) | Created Dashboard sst:aws:Nextjs → DashboardDefaultCode aws:s3:BucketObjectv2 (38.7s) | Created Dashboard sst:aws:Nextjs → DashboardDefaultCodeUpdater sst:aws:FunctionCodeUpdater (3.3s) | Created Dashboard sst:aws:Nextjs → DashboardInvalidationPolicyAttachment70e6 aws:iam:RolePolicyAttachment | Created Dashboard sst:aws:Nextjs → DashboardImageOptimizerCode aws:s3:BucketObjectv2 (44.5s) | Created Dashboard sst:aws:Nextjs → DashboardImageOptimizerCodeUpdater sst:aws:FunctionCodeUpdater (2.0s) | Created Dashboard sst:aws:Nextjs → DashboardCdnWaiter sst:aws:DistributionDeploymentWaiter (275.9s) | Deleted DashboardDevServer sst:aws:Function → DashboardDevServerCodeUpdater sst:aws:FunctionCodeUpdater | Deleted DashboardDevServer sst:aws:Function → DashboardDevServerFunction aws:lambda:Function | Deleted DashboardDevServer sst:aws:Function → DashboardDevServerCode aws:s3:BucketObjectv2 | Deleted DashboardDevServer sst:aws:Function → DashboardDevServerLogGroup aws:cloudwatch:LogGroup | Deleted DashboardDevServer sst:aws:Function → DashboardDevServerRole aws:iam:Role (1.7s) | Deleted Dashboard sst:aws:Nextjs → DashboardDevServer sst:aws:Function ✓ Complete Dashboard: https://h1s3nq.cloudfront.net Process finished with exit code 0 ```
sst.config.ts ``` /// export default $config({ app(input) { return { name: "", removal: input?.stage === "production" ? "retain" : "remove", home: "aws", }; }, async run() { const entitiesArn = 'arn:aws:dynamodb:eu-west-1::table/' const { tableName } = entitiesArn.match(/table\/(?.*)$/)?.groups ?? {} new sst.aws.Nextjs("Dashboard", { permissions: [ { actions: ['dynamodb:DescribeEndpoints'], resources: ['*'] }, { actions: [ 'dynamodb:GetItem', 'dynamodb:PutItem', 'dynamodb:DeleteItem', 'dynamodb:Query', ], resources: [entitiesArn] }, ], environment: { ENTITIES_TABLE_NAME: tableName, } }); }, }); ```
jayair commented 1 month ago

Oh are you using sst dev and sst deploy on the same stage?

AlexanderArvidsson commented 1 month ago

@jayair That's what I was doing, but I realized it should be on separate stages. I think a doc update around this might be helpful, since I didn't understand that the first time around and got confused similar to @dmeehan1968.

jayair commented 1 month ago

Yeah we updated all our quick starts with this.

Screenshot 2024-07-26 at 7 25 10 PM

I also added this workflow doc: https://ion.sst.dev/docs/workflow/

dmeehan1968 commented 1 month ago

Oh are you using sst dev and sst deploy on the same stage?

Yes, but that's not been a problem up till somewhere around 0.1 release.

Now that's clear I can avoid that.