AWS 扩展构造库
本单元中更高层次的构件的API是实验性的并正在积极开发中. 在今后任何版本中,它们都须作非背向相容的修改或去除。 这些是 不适用 语义版本 模型和断开的更改 在发行笔记中宣布. 这意味着虽然你可能使用它们,但可能需要更新 当更新到此软件包的更新版本时,您的源代码.
AWS 扩展控制台提供了一个基于 Git 的工作流程,用于部署和托管 Fullstack 服务器无网络应用程序. 一个fullstack服务器无端应用包括用GraphQL或REST API等云资源所构建的后端,文件和数据存储,以及用React,Angular,Vue等单页应用框架所构建的前端.
设置包含分支、自定义规则和域名的应用程序
设置 Amplify Console 应用程序,定义 App数字 :
import * as codebuild from 'aws-cdk-lib/aws-codebuild';
const amplifyApp = new amplify.App(this, 'MyApp', {
sourceCodeProvider: new amplify.GitHubSourceCodeProvider({
owner: '<user>',
repository: '<repo>',
oauthToken: SecretValue.secretsManager('my-github-token'),
}),
buildSpec: codebuild.BuildSpec.fromObjectToYaml({
// Alternatively add a `amplify.yml` to the repo
version: '1.0',
frontend: {
phases: {
preBuild: {
commands: [
'yarn',
],
},
build: {
commands: [
'yarn build',
],
},
},
artifacts: {
baseDirectory: 'public',
files:
- '**/*',
},
},
}),
});
连接您的 App 到 GitLab,请使用 GitLabSourceCodeProvider数字 :
const amplifyApp = new amplify.App(this, 'MyApp', {
sourceCodeProvider: new amplify.GitLabSourceCodeProvider({
owner: '<user>',
repository: '<repo>',
oauthToken: SecretValue.secretsManager('my-gitlab-token'),
}),
});
连接您的 App 代码承诺,使用 CodeCommitSourceCodeProvider数字 :
import * as codecommit from 'aws-cdk-lib/aws-codecommit';
const repository = new codecommit.Repository(this, 'Repo', {
repositoryName: 'my-repo',
});
const amplifyApp = new amplify.App(this, 'App', {
sourceCodeProvider: new amplify.CodeCommitSourceCodeProvider({ repository }),
});
机构间委员会的作用 App 将自动获得许可
以拉出代码承诺存储器.
添加分支 :
declare const amplifyApp: amplify.App;
const main = amplifyApp.addBranch('main'); // `id` will be used as repo branch name
const dev = amplifyApp.addBranch('dev', {
performanceMode: true, // optional, enables performance mode
});
dev.addEnvironment('STAGE', 'dev');
默认启用自动构建和拉动请求预览 .
添加重定向的自定义规则 :
import { CustomRule } from '@aws-cdk/aws-amplify-alpha';
declare const amplifyApp: amplify.App;
amplifyApp.addCustomRule(new CustomRule({
source: '/docs/specific-filename.html',
target: '/documents/different-filename.html',
status: amplify.RedirectStatus.TEMPORARY_REDIRECT,
}));
当使用单个页面应用程序( SPA) 时, 请使用
CustomRule.SINGLE_PAGE_APPLICATION_REDIRECT 设立200
改写所有文件 index.html 除外:
文件扩展名:cs, gif, ico, jpg, js, png, txt, svg, woff,
ttf,地图,json,网络侠客.
declare const mySinglePageApp: amplify.App;
mySinglePageApp.addCustomRule(amplify.CustomRule.SINGLE_PAGE_APPLICATION_REDIRECT);
向分支添加一个域并映射子域:
declare const amplifyApp: amplify.App;
declare const main: amplify.Branch;
declare const dev: amplify.Branch;
const domain = amplifyApp.addDomain('example.com', {
enableAutoSubdomain: true, // in case subdomains should be auto registered for branches
autoSubdomainCreationPatterns: ['*', 'pr*'], // regex for branches that should auto register subdomains
});
domain.mapRoot(main); // map main branch to domain root
domain.mapSubDomain(main, 'www');
domain.mapSubDomain(dev); // sub domain prefix defaults to branch name
要为您的自定义域指定自定义证书,请使用 customCertificate 属性 :
declare const customCertificate: acm.Certificate;
declare const amplifyApp: amplify.App;
const domain = amplifyApp.addDomain('example.com', {
customCertificate, // set your custom certificate
});
限制进入
密码通过指定 : basicAuth 道具 (英语).
使用 BasicAuth.fromCredentials 当引用现有机密时:
const amplifyApp = new amplify.App(this, 'MyApp', {
sourceCodeProvider: new amplify.GitHubSourceCodeProvider({
owner: '<user>',
repository: '<repo>',
oauthToken: SecretValue.secretsManager('my-github-token'),
}),
basicAuth: amplify.BasicAuth.fromCredentials('username', SecretValue.secretsManager('my-github-token')),
});
使用 BasicAuth.fromGeneratedPassword 在密件管理器中生成密码 :
const amplifyApp = new amplify.App(this, 'MyApp', {
sourceCodeProvider: new amplify.GitHubSourceCodeProvider({
owner: '<user>',
repository: '<repo>',
oauthToken: SecretValue.secretsManager('my-github-token'),
}),
basicAuth: amplify.BasicAuth.fromGeneratedPassword('username'),
});
可以在特定的分支中添加基本的认证 :
declare const amplifyApp: amplify.App;
amplifyApp.addBranch('feature/next', {
basicAuth: amplify.BasicAuth.fromGeneratedPassword('username'),
});
自动创建和删除分支
使用 autoBranchCreation 财务报告和审定财务报表 autoBranchDeletion 控制创建/删除的道具
分支:
const amplifyApp = new amplify.App(this, 'MyApp', {
sourceCodeProvider: new amplify.GitHubSourceCodeProvider({
owner: '<user>',
repository: '<repo>',
oauthToken: SecretValue.secretsManager('my-github-token'),
}),
autoBranchCreation: { // Automatically connect branches that match a pattern set
patterns: ['feature/*', 'test/*'],
},
autoBranchDeletion: true, // Automatically disconnect a branch when you delete a branch from your repository
});
添加自定义响应头
使用 customResponseHeaders 为 Amplify 应用程序配置自定义响应头的道具 :
const amplifyApp = new amplify.App(this, 'App', {
sourceCodeProvider: new amplify.GitHubSourceCodeProvider({
owner: '<user>',
repository: '<repo>',
oauthToken: SecretValue.secretsManager('my-github-token'),
}),
customResponseHeaders: [
{
pattern: '*.json',
headers: {
'custom-header-name-1': 'custom-header-value-1',
'custom-header-name-2': 'custom-header-value-2',
},
},
{
pattern: '/path/*',
headers: {
'custom-header-name-1': 'custom-header-value-2',
},
},
],
});
如果应用程序使用单列结构,则定义从构建光谱中应用的自定义响应头应应用的应用程序 appRoot 属性 :
import * as codebuild from 'aws-cdk-lib/aws-codebuild';
const amplifyApp = new amplify.App(this, 'App', {
sourceCodeProvider: new amplify.GitHubSourceCodeProvider({
owner: '<user>',
repository: '<repo>',
oauthToken: SecretValue.secretsManager('my-github-token'),
}),
buildSpec: codebuild.BuildSpec.fromObjectToYaml({
version: '1.0',
applications: [
{
appRoot: 'frontend',
frontend: {
phases: {
preBuild: {
commands: ['npm install'],
},
build: {
commands: ['npm run build'],
},
},
},
},
{
appRoot: 'backend',
backend: {
phases: {
preBuild: {
commands: ['npm install'],
},
build: {
commands: ['npm run build'],
},
},
},
},
],
}),
customResponseHeaders: [
{
appRoot: 'frontend',
pattern: '*.json',
headers: {
'custom-header-name-1': 'custom-header-value-1',
'custom-header-name-2': 'custom-header-value-2',
},
},
{
appRoot: 'backend',
pattern: '/path/*',
headers: {
'custom-header-name-1': 'custom-header-value-2',
},
},
],
});
托管应用程序时配置服务器侧渲染
设置 platform 拓宽字段 App 构造可以用来控制应用程序是否除了静态外,还会只托管静态资产或服务器侧提供的资产. 默认情况下,该值设定为 WEB 但是,服务器侧面渲染可以通过设置到 WEB_COMPUTE 内容如下:
const amplifyApp = new amplify.App(this, 'MyApp', {
platform: amplify.Platform.WEB_COMPUTE,
});
计算角色
此集成, 可使您为 Amplify SSR 计算服务指定一个 IAM 角色, 以便您的服务器端的应用程序能够根据角色权限安全访问特定的 AWS 资源 .
例如,您可以允许您的应用程序的SSR计算功能安全地访问其他AWS服务或资源,例如亚马逊-贝德罗克或亚马逊-S3桶,基于指定IAM角色中定义的权限.
更多信息见 添加一个 SSR 计算角色以允许访问 AWS 资源。 。 。 .
默认情况下,当 platform 实值 Platform.WEB_COMPUTE 或者说 Platform.WEB_DYNAMIC。 。 。 .
如果你想给APP指定一个IAM角色,请设定 compute 作用:
declare const computeRole: iam.Role;
const amplifyApp = new amplify.App(this, 'MyApp', {
platform: amplify.Platform.WEB_COMPUTE,
computeRole,
});
也可以通过设置来推翻特定分支的计算作用 computeRole 内 Branch数字 :
declare const computeRole: iam.Role;
declare const amplifyApp: amplify.App
const branch = amplifyApp.addBranch("dev", { computeRole });
缓存配置
放大使用 Amazon CloudFront 来管理您主机应用程序的缓存配置 。 每个应用程序都应用了缓存配置来优化最佳性能.
设置 cacheConfigType 拓宽字段 App 构造可用于控制缓存配置. 默认情况下,该值设定为 AMPLIFY_MANAGED。如果想要将所有饼干从缓存密钥中排除,请设定 AMPLIFY_MANAGED_NO_COOKIES。 。 。 .
更多信息见 管理应用程序的缓存配置。 。 。 .
const amplifyApp = new amplify.App(this, 'MyApp', {
cacheConfigType: amplify.CacheConfigType.AMPLIFY_MANAGED_NO_COOKIES,
});
构建计算类型
您可以通过设置 buildComputeType 属性.
更多信息见 配置扩展应用程序的构建实例。 。 。 .
const amplifyApp = new amplify.App(this, 'MyApp', {
buildComputeType: amplify.BuildComputeType.LARGE_16GB,
});
部署资产
sourceCodeProvider 是可选的; 当未指定时, 可使用 Amplify 应用程序 .zip 软件包。 这个 asset 属性可用于将 S3 资产部署到 Amplify 作为 CDK 的一部分:
import * as assets from 'aws-cdk-lib/aws-s3-assets';
declare const asset: assets.Asset;
declare const amplifyApp: amplify.App;
const branch = amplifyApp.addBranch("dev", { asset: asset });
扩大部署的扭曲保护
部署 skew 保护可以提供给 Amplify 应用程序,以消除网络应用程序中客户端和服务器之间的版本 skew 问题. 当您对一个 Amplify 应用程序应用 skew 保护时, 您可以确保您的客户端总是与服务器侧资产的正确版本交互, 不管部署何时发生 .
更多信息见 扩大部署的扭曲保护。 。 。 .
为了实现Skew保护,设置 skewProtection 属性改为 true数字 :
declare const amplifyApp: amplify.App;
const branch = amplifyApp.addBranch("dev", { skewProtection: true });