簡體   English   中英

JClouds:如何將新卷附加到AWS EC2實例

[英]JClouds: How to attach a new volume to an AWS EC2 instance

我正在嘗試使用JClouds將新卷附加到我的實例。 但是我找不到辦法。

    final String POLL_PERIOD_TWENTY_SECONDS = String.valueOf(SECONDS.toMillis(20));

    Properties overrides = new Properties();
    overrides.setProperty(ComputeServiceProperties.POLL_INITIAL_PERIOD, POLL_PERIOD_TWENTY_SECONDS);
    overrides.setProperty(ComputeServiceProperties.POLL_MAX_PERIOD, POLL_PERIOD_TWENTY_SECONDS);

    Iterable<Module> modules = ImmutableSet.<Module> of(new SshjSshClientModule(), new SLF4JLoggingModule());
    //Iterable<Module> modules = ImmutableSet.<Module> of(new SshjSshClientModule());

    ComputeServiceContext context = ContextBuilder.newBuilder("aws-ec2")
            .credentials("valid user", "valid password")
            .modules(modules)
            .overrides(overrides)
            .buildView(ComputeServiceContext.class);
    ComputeService computeService = context.getComputeService();

    // Ubuntu AMI
    Template template = computeService.templateBuilder()
            .locationId("us-east-1")
            .imageId("us-east-1/ami-7c807d14")
            .hardwareId("t1.micro")
            .build();

    // This line creates the volume but does not attach it
    template.getOptions().as(EC2TemplateOptions.class).mapNewVolumeToDeviceName("/dev/sdm", 100, true);

    Set<? extends NodeMetadata> nodes = computeService.createNodesInGroup("m456", 1, template);

    for (NodeMetadata nodeMetadata : nodes) {
        String publicAddress = nodeMetadata.getPublicAddresses().iterator().next();
        //String privateAddress = nodeMetadata.getPrivateAddresses().iterator().next();
        String username = nodeMetadata.getCredentials().getUser();
        String password = nodeMetadata.getCredentials().getPassword();
        // [...]
        System.out.println(String.format("ssh %s@%s  %s", username, publicAddress, password));
        System.out.println(nodeMetadata.getCredentials().getPrivateKey());
    }

如何創建將卷附加到目錄“ / var”的目錄? 如何創建具有更多硬盤空間的實例?

您可以為此在jclouds中使用ElasticBlockStoreApi 您已經創建了實例,因此創建並附加如下卷:

// Get node
NodeMetadata node = Iterables.getOnlyElement(nodes);

// Get AWS EC2 API
EC2Api ec2Api = computeServiceContext.unwrapApi(EC2Api.class);

// Create 100 GiB Volume
Volume volume = ec2Api.getElasticBlockStoreApi().get()
        .createVolumeInAvailabilityZone(zoneId, 100);

// Attach to instance
Attachment attachment = ec2Api.getElasticBlockStoreApi().get()
        .attachVolumeInRegion(region, volume.getId(), node.getId(), "/dev/sdx");

現在,您已附加了EBS卷,並且VM已為其創建了塊設備,您只需要運行正確的命令將其安裝在/var目錄中即可,這取決於您的特定操作系統。 您可以運行如下腳本:

// Run script on instance
computeService.runScriptOnNode(node.getId(),
        Statements.exec("mount /dev/sdx /var"));

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM