Astro AWS Amplify is an Astro adapter for deploying server-side Astro sites on AWS Amplify Hosting.
- an Astro site -
v4.x
or higher (may also work onv3.x
sites)
# Using NPM
npm install astro-aws-amplify
# Using Yarn
yarn add astro-aws-amplify
# Using PNPM
pnpm add astro-aws-amplify
In your Astro config, add the adapter:
// astro.config.mjs
import { defineConfig } from 'astro/config';
+ import awsAmplify from 'astro-aws-amplify';
export default defineConfig({
+ output: 'server', // output: 'hybrid'
+ adapter: awsAmplify()
})
Server and hybrid modes are supported. For static sites, remove the adapter and follow these instructions.
AWS Amplify Hosting uses Node.js v16 by default which isn't supported.
You can use the newer Amazon Linux:2023
by adding an environment variable of:
_CUSTOM_IMAGE=amplify:al2023
You can use the following build specifications as-is or customize it to your liking. Moving the node_modules
folder is required for npm
and Yarn
deployments.
version: 1
frontend:
phases:
preBuild:
commands:
- npm ci
build:
commands:
- env >> .env
- npm run build
- mv node_modules ./.amplify-hosting/compute/default
- mv .env ./.amplify-hosting/compute/default/.env
artifacts:
baseDirectory: .amplify-hosting
files:
- '**/*'
cache:
paths:
- node_modules/**/*
version: 1
frontend:
phases:
preBuild:
commands:
- npm i -g pnpm
- pnpm config set store-dir .pnpm-store
- pnpm i
build:
commands:
- env >> .env
- pnpm run build
- mv .env ./.amplify-hosting/compute/default/.env
artifacts:
baseDirectory: .amplify-hosting
files:
- '**/*'
cache:
paths:
- .pnpm-store/**/*
version: 1
frontend:
phases:
preBuild:
commands:
- yarn install
build:
commands:
- env >> .env
- yarn run build
- mv node_modules ./.amplify-hosting/compute/default
- mv .env ./.amplify-hosting/compute/default/.env
artifacts:
baseDirectory: .amplify-hosting
files:
- '**/*'
cache:
paths:
- node_modules/**/*
- server and hybrid mode
- image optimization with
<Image>
and<Picture />
- base paths
- middleware
- Amplify Image optimization
- build previews (
npm run preview
) - ???
Static or prerendered pages (that are defined with export const prerender = true
or default for hybrid) will need a rewrite rule.
For example, if you have a static /about
page, create a rewrite of:
/about/ /about/index.html 200 (Rewrite)
If you don't use trailing slashes, you will need to also add:
/about /about/index.html 200 (Rewrite)
For static dynamic routes, like a route of /blog/[slug].astro
, create a rewrite of:
/blog/<slug>/ /blog/<slug>/index.html 200 (Rewrite)
/base/about/ /base/about/index.html 200 (Rewrite)
Custom 404 pages (like 404.astro
) need to be server-side rendered (not prerendered) to work. This is a limitation with Amplify.
Due to limitations with Amplify routing, to serve public
files without extensions, place them in a folder called assets
(/public/assets/
) and reference them with /assets/filename
:
somefile
Any other static files with extensions will work as usual.
MIT
Uses code from the @astrojs/node adapter to establish a Node.js server required for AWS Amplify SSR environments.