如何通过 CLI 将 zip 文件上传和部署到 AWS elastic beanstalk?

Posted

技术标签:

【中文标题】如何通过 CLI 将 zip 文件上传和部署到 AWS elastic beanstalk?【英文标题】:How to upload and deploy zip file to AWS elastic beanstalk via CLI? 【发布时间】:2020-05-25 02:29:52 【问题描述】:

我不想使用控制台。没有手动过程。我需要一个命令行版本,可以在我的持续部署脚本中编写代码。

作为构建过程的一部分,我可以输出一个 ZIP 文件(无论是在我的本地机器上还是在 CI 过程中,例如:通过 bitbucket 管道或 AWS codedeploy VM 实例)。

我想要一个类似的命令:

aws eb deploy my-app ./server.zip

也就是说,首先上传我选择的 zip 文件,然后部署它(不必是一个命令)。

官方eb deploy好像不支持这个,我也没有找到其他方法来做这个。

任何想法将不胜感激:)

【问题讨论】:

很好奇为什么你不想通过 EB cli 作为eb deploy 的一部分来管理整个生命周期:) .. 你能详细说明你的要求吗? (据我所知,应用版本只能通过控制台手动上传) 我有一个自定义工件生成过程,将多个子模块中的多个 JAR 捆绑到一个 eb deploy 不支持的 JAR 中 好的,将依赖的 jars 作为代码存储库的一部分在这里不起作用?这是在您运行eb deploy 之前进入 CI/CD 脚本的内容。您可能需要检查 .ebignore 文件以确保 CLI 不会忽略其他 jar。在部署过程的后期,您可以使用 Beanstalk 提供的生命周期挂钩,如 commands:container_commands:(取决于基于 docker/non-docker 的环境)在应用程序启动之前执行自定义魔术 【参考方案1】:

我也在寻找这个答案。我找到了一些 AWS 文档,可让您使用 Elastic Beanstalk CLI 配置上传 zip。

https://docs.aws.amazon.com/elasticbeanstalk/latest/dg/eb-cli3-configuration.html#eb-cli3-artifact

部署工件而不是项目文件夹

您可以通过将以下行添加到项目文件夹中的.elasticbeanstalk/config.yml 来告诉 EB CLI 部署您在单独构建过程中生成的 ZIP 文件或 WAR 文件。

deploy:
 artifact: path/to/buildartifact.zip

如果您在 Git 存储库中配置 EB CLI,但没有 > 将工件提交到源,请使用 --staged 选项部署最新版本。

~/eb$ eb deploy --staged

我测试过,它确实对我有用!

【讨论】:

【参考方案2】:

我认为eb CLI 不支持上传 ZIP 和更新环境,但您可以使用 AWS CLI 命令的组合。

    将 ZIP 上传到 S3 创建应用程序版本 更新环境

例子,

aws s3 cp deploy.zip s3://mybucket/deploy.zip
aws elasticbeanstalk create-application-version --application-name my-app --version-label 12345 --source-bundle S3Bucket="mybucket",S3Key="deploy.zip"
aws elasticbeanstalk update-environment --application-name my-app --environment-name MyApp-env --version-label 12345

【讨论】:

这对我有用。以前用 EB-CLI 来定义存档文件。 很好,但是没有公共 s3 存储桶怎么办?带有源 IP 的公共存储桶是个问题。 @bjm88 S3 存储桶不需要公开。只需确保设置了正确的访问/权限即可。例如,执行cp 命令的 IAM 用户/角色必须拥有mybucket 资源的s3:PutObject 权限。

以上是关于如何通过 CLI 将 zip 文件上传和部署到 AWS elastic beanstalk?的主要内容,如果未能解决你的问题,请参考以下文章

IBM MFP 如何使用 mfpdev-cli 上传(部署).adapter?

如何将zip文件上传到ruby中的github版本

如何使用 VBA 通过 HTTP 发布上传 zip 文件?

Travis 部署 zip 而不是 jar

有没有办法将更改推送到 AWS Beanstalk,而不是在每次部署时上传整个 zip 文件?

尝试通过节点 js 将 zip 文件上传到 azure 存储