构建后自动将静态网站文件部署到S3

Lak*_*kar 5 automation amazon-s3 amazon-web-services reactjs

我有一个部署在S3上并可公开访问的反应应用程序(SPA).在每次构建之后,我必须手动将index.html和其他静态资产上传到S3.有没有办法自动化这个过程?

我对CD进行了详尽的搜索(连续部署)到S3,这是一个关于相同问题SO问题.

我汇总了我详尽研究的所有信息.我写了下面的答案,其中包含了实现这一目标的各种方法.

Lak*_*kar 7

有许多方法可以实现S3部署的自动化.以下是我收集的内容:

1. AWS SNS和Lambda:

如果您想在github push上触发任何AWS服务,此过程非常有用.这里是以下过程:

  1. github push触发向SNS发送消息.
  2. 调用订阅SNS主题的Lambda.
  3. 在Lambda中,我克隆了github存储库.
  4. 使用AWS的S3 SDK将build或dist目录上传到S3存储桶.以下是上述过程的高级架构:

使用SNS和Lambda的自动化

这种方法的缺点是克隆大型回购需要时间,Lambdas每秒计费.因此,对于大型回购,这可能会变得昂贵.

特拉维斯:

Travis以其CI(持续集成)库而闻名.一个.travis.yml是整合过程是必不可少的.

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

缺点是,我找不到一种方法将目录与repo隔离并单独上传该特定目录.

3. AWS cli:

这是将文件上传到S3的最便宜和最好的方法.我用这种方法.我从这篇中文帖子中得到了这些信息.

通常在反应的应用程序的构建脚本是由触发NPM或纱线写成脚本的package.json.以下是将文件上载到S3的命令:

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

我在package.json中添加了此脚本作为构建脚本的一部分.这非常方便,因此自动化将文件上载到S3的手动过程.

这个答案是基于我的观点.如果有任何不正确或如果我错过了什么,请随时发表评论,我会将其添加到答案中.

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