首页 > 解决方案 > 如何通过java sdk在ec2实例中第二次添加用户数据

问题描述

我试图在停止实例后第二次添加用户数据,并且在重新启动时我想再次传递一些用户数据,因为我正在使用

public InstanceStatusResponse startEc2Instance(AmazonEC2 ec2Client, String instanceId) {

    BlockDeviceMapping blockDeviceMappings = new BlockDeviceMapping();

    blockDeviceMappings.setDeviceName(storageProperties.getDeviceName());
    System.out.println("vatsal");
    ModifyInstanceAttributeRequest modifyInstanceAttributeRequest = new ModifyInstanceAttributeRequest()
            .withUserData(userdata())


    ModifyInstanceAttributeRequest request = new ModifyInstanceAttributeRequest();
    request.setUserData(userdata());

    System.out.println(modifyInstanceAttributeRequest.withUserData(userdata()));
    System.out.println(modifyInstanceAttributeRequest.getUserData());

    StartInstancesRequest startInstancesRequest = new StartInstancesRequest().withInstanceIds(instanceId);
    ec2Client.startInstances(startInstancesRequest);
    //System.out.println();
    System.out.println("Starting the ec2 instance");


    return instanceStatusResponse(ec2Client, instanceId);

}

我正在传递一些用户数据,我也根据需要使用 base64 编码,但我无法将值发送到该 ec2 机器。

标签: javaamazon-ec2aws-sdkaws-java-sdk

解决方案


您发布的代码不是很清楚。您已经创建modifyInstanceAttributeRequest并且request,但是您似乎没有使用它们。

然而,通常的 ec2 实例不会在重新启动时运行用户数据脚本。用户数据脚本仅在实例首次启动时运行。

请参阅有关用户数据的内容并仅在首次启动时运行。

重要的

默认情况下,用户数据脚本和 cloud-init 指令仅在启动实例的第一个引导周期内运行。但是,您可以将用户数据脚本和 cloud-init 指令配置为在每次实例从停止状态重新启动时运行。有关更多信息,请参阅如何在我的 EC2 实例初始启动后执行用户数据?在 AWS 知识中心

为了能够在 ec2 实例启动时重新运行用户数据脚本,请参阅AWS 的这篇 kb 文章


推荐阅读