2017-03-29 101 views
1

我有一个部署在S3上并可公开访问的反应应用程序(SPA)。在每次构建之后,我必须手动将上述index.html和其他静态资产上传到S3。有什么方法可以使这个过程自动化吗?生成后自动将静态网站文件部署到S3

我做了一个关于CD(连续部署)到S3的详尽搜索,这里是大约相同的SO question

我正在汇总来自我详尽研究的所有信息。我写了下面的答案,其中包含各种方法来实现这一点。

回答

3

有很多方法可以自动执行S3部署。下面是我收集的东西:

1 AWS SNS和Lambda:

这个过程是非常有用的,如果要触发GitHub上push.So任何AWS服务,在此过程是:

  1. github push会触发一条消息给SNS。
  2. 调用了订阅SNS主题的Lambda。
  3. 在Lambda内部,我克隆了github存储库。
  4. 使用AWS的S3 SDK将构建或dist目录上传到您的S3存储桶。这里是上述方法的高层体系结构:

Automation using SNS & Lambda

这种方法的缺点是克隆大回购需要时间和lambda表达式每秒计费。所以,这对于大型回购可能会变得昂贵。

2.特拉维斯:

特拉维斯以其CI(持续集成)库。 A .travis.yml对整合过程至关重要。

如果您想在构建之后进行一些测试,然后成功,请将文件上传到S3。那么这种方法将是最好的方法。 Travis对开源项目免费。

不利的一面是,我找不到一种方法将目录与回购站隔离并单独上传该特定目录。

3 AWS CLI:

这是将文件上传到S3最便宜最好的方式。我用这种方法。我从这个medium post得到了这个信息。

通常在反应Apps中构建脚本NPM或纱线写为的package.json脚本触发。下面是文件上传到S3命令:

aws s3 sync build/ s3://<bucket-name>

我添加了这个脚本中的package.json构建脚本的一部分。这非常方便,因此可以自动将文件上传到S3的手动过程。

此答案是基于我的观点。如果有任何不正确的或如果我错过了某些东西,请随时发表评论,我会将其添加到答案中。

+1

同意AWS CLI方法。 Lambda在最多300秒后超时...因此,对于涉及较大资产的网站来说,这也不是最佳选择。 –