如何通过java sdk在ec2实例中第二次添加用户数据

how to add user-data for the second time in an ec2 instance through java sdk

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

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 机器。

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

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

See this 关于用户数据和 运行 仅在首次启动时。

Important

By default, user data scripts and cloud-init directives run only during the first boot cycle when an instance is launched. However, you can configure your user data scripts and cloud-init directives to run every time the instance is restarted from a stopped state. For more information, see How can I execute user data after the initial launch of my EC2 instance? in the AWS Knowledge Center

为了能够在启动 ec2 实例时重新运行 用户数据脚本,请参阅来自 AWS 的 this kb article

虽然我一直在寻找修改属性请求的方法,但我找到了一种在每次停止和重新启动实例时使用用户数据脚本的好方法,方法是创建一个包含所有脚本的 ec2 实例的 ami他们的 rc.local 文件。您不能直接对 rc.local 进行更改,您需要先成为 root 用户,然后才能访问它,并且此文件在所有用户数据脚本和 cloud-init 脚本执行后运行。