如何从 Java 的 AWS 开发工具包克隆 Elastic Beanstalk 环境?

How can I clone an Elastic Beanstalk environment from the AWS SDK for Java?

我需要从 AWS SDK 为 Java 克隆 Elastic Beanstalk 环境。

我找到了 this 解释如何创建环境的答案,但我找不到任何说明如何克隆环境的示例或文档。

我找到了 CreateEnvironmentRequestclone 方法,但根据 documentation 它克隆了 CreateEnvironmentRequest 对象,而不是环境。

已经为此打开了一个 issue,目前无法从 sdk 进行克隆操作。如果您有兴趣,您可能想重新打开工单并提供您的理由。

另一种可能性是从您的 Java 调用 eb cli 到 运行 您环境的克隆。

好吧,您不能使用 Java SDK for AWS 完全克隆一个环境,我的方法是每次都简单地创建一个新环境,您可以这样做:

  1. 将您的部署文件(war,随便压缩)上传到 S3

  2. 为您的部署创建一个链接到之前上传文件的版本

    private CreateApplicationVersionRequest createApplicationVersion() {
        return new CreateApplicationVersionRequest()
                .withApplicationName("The app name")
                .withAutoCreateApplication(true)
                .withSourceBundle(new S3Location("bucket_name", deployedArtifactId))
                .withVersionLabel("a number for the version");
    }
    
  3. 你去寻找你的堆栈的最新版本

    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;
            }
        }    
    }
    
  4. 配置环境属性、系统属性和所有内容。

    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;
    }
    
  5. 创建环境,一切就绪。

    public void deployCreatingEnvironment() {
        getLatestStackSolutionVersion();
        beanstalkClient.createApplicationVersion(createApplicationVersion());
        beanstalkClient.createEnvironment(setupNewEnvironment());
    }
    

瞧!每次都像克隆一样,希望对你有用。