如何从 Java 的 AWS 开发工具包克隆 Elastic Beanstalk 环境?
How can I clone an Elastic Beanstalk environment from the AWS SDK for Java?
我需要从 AWS SDK 为 Java 克隆 Elastic Beanstalk 环境。
我找到了 this 解释如何创建环境的答案,但我找不到任何说明如何克隆环境的示例或文档。
我找到了 CreateEnvironmentRequest
的 clone
方法,但根据 documentation 它克隆了 CreateEnvironmentRequest
对象,而不是环境。
已经为此打开了一个 issue,目前无法从 sdk 进行克隆操作。如果您有兴趣,您可能想重新打开工单并提供您的理由。
另一种可能性是从您的 Java 调用 eb
cli 到 运行 您环境的克隆。
好吧,您不能使用 Java SDK for AWS 完全克隆一个环境,我的方法是每次都简单地创建一个新环境,您可以这样做:
将您的部署文件(war,随便压缩)上传到 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());
}
瞧!每次都像克隆一样,希望对你有用。
我需要从 AWS SDK 为 Java 克隆 Elastic Beanstalk 环境。
我找到了 this 解释如何创建环境的答案,但我找不到任何说明如何克隆环境的示例或文档。
我找到了 CreateEnvironmentRequest
的 clone
方法,但根据 documentation 它克隆了 CreateEnvironmentRequest
对象,而不是环境。
已经为此打开了一个 issue,目前无法从 sdk 进行克隆操作。如果您有兴趣,您可能想重新打开工单并提供您的理由。
另一种可能性是从您的 Java 调用 eb
cli 到 运行 您环境的克隆。
好吧,您不能使用 Java SDK for AWS 完全克隆一个环境,我的方法是每次都简单地创建一个新环境,您可以这样做:
将您的部署文件(war,随便压缩)上传到 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()); }
瞧!每次都像克隆一样,希望对你有用。