【问题标题】:How can I clone an Elastic Beanstalk environment from the AWS SDK for Java?如何从适用于 Java 的 AWS 开发工具包克隆 Elastic Beanstalk 环境?
【发布时间】:2017-02-15 19:44:44
【问题描述】:
我需要从 AWS SDK for Java 克隆一个 Elastic Beanstalk 环境。
我找到了 this 答案,解释了如何创建环境,但我找不到任何示例或说明如何克隆环境的文档。
我为CreateEnvironmentRequest 找到了clone 方法,但根据documentation,它克隆了CreateEnvironmentRequest 对象,而不是环境。
【问题讨论】:
标签:
java
amazon-elastic-beanstalk
aws-sdk
【解决方案1】:
嗯,你不能用 Java SDK for AWS 完全克隆一个环境,我的方法是每次都简单地创建一个新环境,你可以这样做:
将您的部署文件(war、zip 等)上传到 S3
-
为您的部署创建一个链接到之前上传的文件的版本
private CreateApplicationVersionRequest createApplicationVersion() {
return new CreateApplicationVersionRequest()
.withApplicationName("The app name")
.withAutoCreateApplication(true)
.withSourceBundle(new S3Location("bucket_name", deployedArtifactId))
.withVersionLabel("a number for the version");
}
-
你去寻找你的堆栈的最新版本
private void getLatestStackSolutionVersion() {
ListAvailableSolutionStacksResult response = beanstalkClient.listAvailableSolutionStacks();
for (int i = 0; i < response.getSolutionStacks().size(); i++) {
if (response.getSolutionStacks().get(i).contains("Java 8") {
stackName = response.getSolutionStacks().get(i);
break;
}
}
}
-
配置您的环境、系统属性和一切的属性。
private Collection<ConfigurationOptionSetting> setEnvironmentProperties() {
Collection<ConfigurationOptionSetting> configurationOptionSettings = new HashSet<>();
configurationOptionSettings.add(new ConfigurationOptionSetting("aws:autoscaling:launchconfiguration", "InstanceType", "t2.medium"));
configurationOptionSettings.add(new ConfigurationOptionSetting("aws:ec2:vpc", "VPCId","thevpcid");
configurationOptionSettings.add(new ConfigurationOptionSetting("aws:ec2:vpc", "Subnets", "thesubnets");
configurationOptionSettings.add(new ConfigurationOptionSetting("aws:ec2:vpc", "ELBSubnets", "theelbsubnets");
configurationOptionSettings.add(new ConfigurationOptionSetting("aws:elasticbeanstalk:application:environment", "ANOTHER_PROPERTY", "a value"));
return configurationOptionSettings;
}
-
一切就绪,创建环境。
public void deployCreatingEnvironment() {
getLatestStackSolutionVersion();
beanstalkClient.createApplicationVersion(createApplicationVersion());
beanstalkClient.createEnvironment(setupNewEnvironment());
}
瞧!这就像每次都在克隆,希望这对你有用。
【解决方案2】:
已经为此打开了一个issue,因为目前无法从 sdk 进行克隆操作。如果您有兴趣,您可能需要重新开票并提供您的理由。
另一种可能性是从 Java 调用 eb cli 来运行环境的克隆。