我们必须开发一个将部署在 AWS EC2 上的应用程序。作为我们夜间构建的一部分,我们希望在本地对我们的代码进行单元测试,然后部署到 AWS 实例并通过 Internet 运行功能测试。
在理想情况下,我们只需编写一个构建脚本,使用 AWS 开发工具包选择合适的 AMI,启动实例,使用 SSH 登录,设置环境,通过 FTP 传输我们的程序,然后 Bingo!但是,我们在 HTTP 代理后面。由于我们不能使用 SSH 或 FTP,我们想到了三个基本选项。
1:尝试将 userData 添加到我们的 RunInstanceRequest 中,这将导致实例在启动时设置我们的环境、下载并运行我们的程序(可能来自 AWS S3 存储桶)。在 Java 中,这将类似于:
RunInstancesRequest runInstancesRequest = new RunInstancesRequest()
.withInstanceType(myType)
.withImageId(id)
.withMinCount(min)
.withMaxCount(max)
.withSecurityGroupIds(mySecurityGroup)
.withKeyName(someKey)
.withUserData(myScript); //add our installation script
RunInstancesResult runInstances = ec2.runInstances(runInstancesRequest);
2:在本地 VM 上安装我们的程序,并使用此处所述的 ec2-import-instance 工具将整个 VM 导入 AWS 。
3:上下跳跃,要求限制较少的网络环境。
我们对(1)感到不安,因为调试安装的任何问题都非常困难。(2) 每次部署时都会涉及到整个 VM 的传输和转换,并且 (3) 看起来不太乐观!
有谁知道做到这一点的最佳方法?
:D