亚马逊AWS官方博客

Amplify 控制台 — 托管全堆栈式无服务器 Web 应用程序

AWS Amplify 控制台是一种全堆栈式 Web 应用程序托管服务,让您可以从首选的源代码存储库实施持续部署。Amplify 控制台于2018 年 11 月在 AWS re:Invent 大会上推出。从那时以来,我们团队持续倾听客户的反馈并快速迭代,发布了多项新功能,下面我们简要回顾一下。

实时缓存失效
Amplify 控制台允许通过内容分发网络 (CDN) 来托管采用无服务器后端的单页 Web 应用程序或静态网站。CDN 是一种分布式的服务器网络,它在位于世界各地的边缘站点缓存文件,从而能够以极低的延迟分发您的 Web 文件资产。

以前,更新 CDN 上的内容需要手动使缓存失效,然后等待 15-20 分钟才能使更改在全球生效。为了频繁进行更新,开发人员找到了多种变通手段,例如在资产标头上设置较低的生存时间 (TTL),这样可以提高更新速度,但对性能却有不利影响。现在,您不再需要在更快部署和更高性能之间左右为难。每次向您的存储库提交代码时,Amplify 控制台都会构建更改并部署到 CDN,并且您可以在浏览器中立即看到。

“部署到 Amplify 控制台”按钮

部署到 Amplify 控制台

在 GitHub 上发布您的项目源代码时,您可以在 Readme 文档中提供一个“部署到 Amplify 控制台”按钮,从而方便其他开发人员构建和部署您的应用程序。单击该按钮将打开 Amplify 控制台,并显示一个部署代码的三步流程。

您可以使用这些示例项目来测试此功能,当然也可以查看文档。向您自己的代码存储库添加按钮十分简单,只需将下面的行添加到 Readme 文档即可(请注意替换 GitHub URL 中的用户名和存储库名称):

[![amplifybutton](https://oneclick.amplifyapp.com/button.svg)](https://console.aws.amazon.com/amplify/home#/deploy?repo=https://github.com/username/repository)

手动部署
全面实施版本控制是一个不错的想法,包括只有您一个开发者的简单网站。但如果您不想将源代码存储库作为部署的源,也可以通过 Amplify 控制台部署 zip 压缩文件、笔记本电脑上的本地文件夹、Amazon S3 存储桶或任何 HTTPS URL(例如 Dropbox 上的共享存储库)。

在创建新的 Amplify 控制台项目时,选择不使用 Git 提供者部署选项。
然后选择您的源文件(您的笔记本电脑、Amazon S3 或 HTTPS URI)

AWS CloudFormation 集成
开发人员喜爱自动化。代码或基础设施的部署没有不同:您必须确保基础设施的部署自动化、可重复。AWS CloudFormation 允许您通过 YAML 或 JSON 描述在云中自动化创建基础设施。Amplify 控制台为 AWS CloudFormation 增加了三种新的资源类型:

  • AWS::Amplify::App
  • AWS::Amplify::Branch
  • AWS::Amplify::Domain

利用这些资源类型,您可以分别创建新的 Amplify 控制台应用程序,定义 Git 分支以及要使用的 DNS 域名。

AWS CloudFormation 会连接到您的源代码存储库以向其添加 Webhook。您需要提供您的 Github 个人访问令牌以允许执行此操作。本博文提供了所有详细信息。请注意不要将凭证(或 OAuth 令牌)硬编码到 Cloudformation 模板,而应使用参数

部署多个 Git 分支
我们认为您的 CI/CD 工具必须要适应团队的工作流,而不是相反。Amplify 控制台支持分支模式的部署,让您可以自动部署与特定模式匹配的分支,无需任何额外的配置。模式匹配基于正则表达式。

当您要测试新功能时,一般会在 Git 中创建一个新的分支。Amplify 控制台和 Amplify CLI 现在会检测分支,并且将预置一个独立的后端并为您的无服务器应用程序托管基础设施。

要启用分支检测功能,请单击通用 > 编辑,然后打开自动检测分支

自定义 HTTP 标头
您可以通过自定义 Amplify 控制台来发送自定义的 HTTP 应答标头。应答标头可以用于调试、安全或信息参考目的。要添加自定义标头,您需要选择应用程序设置 > 编译设置,然后编辑 buildspec。例如,要强制执行 TLS 传输并预防 XSS 攻击,您可以添加如下标头:

customHeaders:
        - pattern: '**/*'
          headers:
                - key: 'Strict-Transport-Security'
                        value: 'max-age=31536000; includeSubDomains'
                - key: 'X-Frame-Options'
                        value: 'X-Frame-Options: SAMEORIGIN'
                - key: 'X-XSS-Protection'
                        value: 'X-XSS-Protection: 1; mode=block'
                - key: 'X-Content-Type-Options'
                        value: 'X-Content-Type-Options: nosniff'
                - key: 'Content-Security-Policy'
                        value: "default-src 'self'"

更多详细信息请参阅文档

自定义编译容器
最后(但绝对最不重要),我们对编译环境也进行了一些更改。Amplify 控制台在后台使用了 AWS CodeBuild。默认的编译容器镜像现在基于 Amazon Linux 2 并且预装了无服务器应用程序模型 (SAM) CLI。如果您因任何原因需要使用自己的编译容器,可以相应配置 Amplify 控制台。选择应用程序设置 > 编译设置

然后编辑编译镜像设置

容器镜像有几个要求:它必须有 cURLgitOpenSSH 和(如果您要构建 NodeJS 项目) node 以及 npm。与往常一样,详细信息请参阅文档

每个新功能都来源于大家的反馈,因此请继续通过提交来告诉我们您关心的方面,下半年及以后预计会有更多的变化。

— seb