Skip to content

Instantly share code, notes, and snippets.

@tyrauber
Created April 13, 2023 15:44
Show Gist options
  • Save tyrauber/24a9349670c0010c5401e8a72ba2f80a to your computer and use it in GitHub Desktop.
Save tyrauber/24a9349670c0010c5401e8a72ba2f80a to your computer and use it in GitHub Desktop.
SST Shared Bucket and Cloudfront Distribution across Stack
import { Api, Bucket, NextjsSite, Function, StackContext } from "sst/constructs";
import * as cloudfront from "aws-cdk-lib/aws-cloudfront";
import * as cloudfrontOrigins from "aws-cdk-lib/aws-cloudfront-origins";
export default function Default({ stack }: StackContext) {
const bucket = new Bucket(stack, "Bucket", {
cors: true,
cdk: {
bucket: {
bucketName: "appname-"+stack.stage,
},
},
});
const distribution = new cloudfront.Distribution(stack, "Distribution", {
defaultBehavior: {
origin: new cloudfrontOrigins.S3Origin(bucket.cdk.bucket),
},
});
const api = new Api(stack, "Api", {
authorizers: {
lambda: {
type: "lambda",
responseTypes: ["simple"],
function: new Function(stack, "Authorizer", {
handler: "packages/functions/src/authorizer.main",
}),
},
},
defaults: {
authorizer: "lambda",
environment: { BUCKET: bucket.bucketName },
permissions: [bucket],
},
routes: {
"GET /private": "packages/functions/src/private.main",
"GET /public": {
function: "packages/functions/src/public.main",
authorizer: "none",
},
"GET /tiles/{proxy+}":{
function: "packages/functions/src/tiles.main",
authorizer: "none",
}
},
});
api.attachPermissions([bucket]);
const site = new NextjsSite(stack, "Site", {
path: "apps/nextjs",
bind: [bucket],
});
site.attachPermissions([bucket]);
stack.addOutputs({
BUCKET: bucket.cdk.bucket.bucketName,
BUCKET_ARN: bucket.cdk.bucket.bucketArn,
CDN_NAME: distribution.domainName,
CDN_URL: distribution.url,
WEB_URL: site.url,
API_URL: api.url,
});
}
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment