0

我们必须开发一个将部署在 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

4

1 回答 1

1

为什么不构建自己的自定义 AMI,在启动时自动下载并执行远程安装脚本?您可以编写一个花哨的 init.d 脚本,也可以从 /etc/rc.local 调用一个简单的 shell 脚本(假设是类似 Redhat 的 disto)。这与 RightScale 的处理方式非常相似。

于 2012-07-20T05:12:50.790 回答