我们必须开发一个将部署在AWS EC2上的应用程序。作为我们每晚构建的一部分,我们希望在本地对我们的代码进行单元测试,然后部署到AWS实例并通过Internet运行功能测试。
在一个理想的世界中,我们只需编写一个构建脚本,以使用AWS SDK选择合适的AMI,启动实例,使用SSH登录,设置环境,FTP我们的程序和宾果!但是我们支持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:在本地安装我们的程序并使用ec2-import-instance工具将整个VM导入AWS,如here所述。
3:上下跳跃,要求限制较少的网络环境。
我们对(1)感到不安,因为调试安装的任何问题都非常困难。 (2)每次部署时涉及整个VM的传输和转换,(3)看起来不太有希望!
有谁知道最好的方法吗?
:d
答案 0 :(得分:1)
为什么不构建自己的自定义AMI,在启动时自动下载并执行远程安装脚本?您可以编写一个花哨的init.d脚本,也可以从/etc/rc.local调用一个简单的shell脚本(假设类似Redhat的disto)。这与RightScale的工作方式非常相似。