使用AWS Java的SDK,如何终止当前实例的CloudFormation堆栈?

罗伊·加维雷尔(Roee Gavirel)

使用在线分解我想出了以下代码来终止当前的EC2实例:

public class Ec2Utility {

    static private final String LOCAL_META_DATA_ENDPOINT = "http://169.254.169.254/latest/meta-data/";
    static private final String LOCAL_INSTANCE_ID_SERVICE = "instance-id";

    static public void terminateMe() throws Exception {
        TerminateInstancesRequest terminateRequest = new TerminateInstancesRequest().withInstanceIds(getInstanceId());
        AmazonEC2 ec2 = new AmazonEC2Client();
        ec2.terminateInstances(terminateRequest);
    }

    static public String getInstanceId() throws Exception {
        //SimpleRestClient, is an internal wrapper on http client.
        SimpleRestClient client = new SimpleRestClient(LOCAL_META_DATA_ENDPOINT);
        HttpResponse response = client.makeRequest(METHOD.GET, LOCAL_INSTANCE_ID_SERVICE);
        return IOUtils.toString(response.getEntity().getContent(), "UTF-8");
    }
}

我的问题是我的EC2实例位于CloudFormationStack下的AutoScalingGroup下,这是由于我的组织部署标准,尽管此功能只有这一个EC2。

因此,我想从JavaSDK终止整个CloudFormationStack,请记住,我没有CloudFormation堆栈名称,因为我没有EC2实例ID,所以我必须使用API调用。
如果可以的话我该怎么做?

罗伊·加维雷尔(Roee Gavirel)

最后,我使用我编写的以下util函数集实现了所需的行为:

/**
 * Delete the CloudFormationStack with the given name.
 * 
 * @param stackName
 * @throws Exception
 */
static public void deleteCloudFormationStack(String stackName) throws Exception {
    AmazonCloudFormationClient client = new AmazonCloudFormationClient();
    DeleteStackRequest deleteStackRequest = new DeleteStackRequest().withStackName("");
    client.deleteStack(deleteStackRequest);
}

static public String getCloudFormationStackName() throws Exception {
    AmazonEC2 ec2 = new AmazonEC2Client();
    String instanceId = getInstanceId();
    List<Tag> tags = getEc2Tags(ec2, instanceId);
    for (Tag t : tags) {
        if (t.getKey().equalsIgnoreCase(TAG_KEY_STACK_NAME)) {
            return t.getValue();
        }
    }
    throw new Exception("Couldn't find stack name for instanceId:" + instanceId);
}

static private List<Tag> getEc2Tags(AmazonEC2 ec2, String instanceId) throws Exception {
    DescribeInstancesRequest describeInstancesRequest = new DescribeInstancesRequest().withInstanceIds(instanceId);
    DescribeInstancesResult describeInstances = ec2.describeInstances(describeInstancesRequest);
    List<Reservation> reservations = describeInstances.getReservations();
    if (reservations.isEmpty()) {
        throw new Exception("DescribeInstances didn't returned reservation for instanceId:" + instanceId);
    }
    List<Instance> instances = reservations.get(0).getInstances();
    if (instances.isEmpty()) {
        throw new Exception("DescribeInstances didn't returned instance for instanceId:" + instanceId);
    }
    return instances.get(0).getTags();
}

// XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX
// Example of usage from the code:
deleteCloudFormationStack(getCloudFormationStackName());
// XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX

本文收集自互联网,转载请注明来源。

如有侵权,请联系 [email protected] 删除。

编辑于
0

我来说两句

0 条评论
登录 后参与评论

相关文章

如何配置持续集成的AWS拉姆达使用AWS的服务AWS-codebuild,codedeploy,cloudformation的java

AWS配置使用AWS Java SDK获得

使用AWS Java SDK获取CloudWatch指标?

使用AWS SDK for Java API时SSLHandshakeException

使用AWS Java SDK的AWS计费信息

如何使用AWS Java SDK禁用请求级日志记录?

如何在AWS Java SDK中使用IAM角色

使用SAM转换从AWS CLI更新Cloudformation堆栈

AWS使用Java获取实例名称

如何使用Java 9终止当前进程

在AWS上使用CloudFormation启动AWS Marketplace实例

如何使用AWS Cloudformation中的create-change-set创建新堆栈

使用AWS :: CloudFormation :: Init的好处

如何使用PowerShell获取cloudformation堆栈的EC2实例IpAddress?

如何修复漂移的AWS CloudFormation堆栈?

如何使用Java SDK生成AWS引导证书?

AWS Java SDK Cloudformation无法按名称或ID描述堆栈

如何提供实例身份文档以使用AWS Javascript SDK将容器实例注册到AWS ECS集群?

如何从AWS SDK Java中检索实例user_data

如何检查未使用的AWS Running实例

如何在嵌套堆栈中的AWS CloudFormation模板中使用映射

使用Vagrant管理AWS实例

如何在c#中使用aws sdk检索aws-ec2 Windows实例密码

使用Ansible Tower将Cloudformation堆栈部署到AWS

如何使用AWS IOT Java SDK为事物创建规则?

使用AWS CloudFormation创建DBSubnetGroup

使用 AWS cloudformation 的 Docker 容器

使用 Java2 aws sdk 时如何配置 Region?

AWS CloudFormation 无法使用 CodeDeploy 蓝/绿部署创建堆栈