|
|
|
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, |
|
}); |
|
} |