【问题标题】:Error related to Tag creation while creating a new EC2 Instance using EC2 Java API使用 EC2 Java API 创建新 EC2 实例时与标签创建相关的错误
【发布时间】:2017-11-25 22:47:12
【问题描述】:

我正在尝试使用AWS JAVA API 创建一个新的EC2 instance。但是我收到以下异常消息

线程“main”中的异常 com.amazonaws.services.ec2.model.AmazonEC2Exception:标签规范 资源类型必须有一个值(服务:AmazonEC2;状态代码:400; 错误代码:无效参数值;请求 ID:XXXXXX)

public static void main(String[] args) {
    Ec2Utilities utils = new Ec2Utilities();
    Map<String, String> tagMap = new HashMap<String, String>();
    tagMap.put("name", "newinstance");
    tagMap.put("category", "cat1");
    utils.createInstanceFromAmi("t2.micro", "ami-sdfsds", 1, "sg-sdfsd", "nammme", tagMap);
}

public void createInstanceFromAmi(String instanceType, String amiId, int count, String securityGroup,
        String keyName, Map<String, String> tagMap) {
    AmazonEC2 ec2Client = Auth.getCredentails();
    TagSpecification tagSpecs = new TagSpecification();
    tagSpecs.setTags(buildTags(tagMap));
    RunInstancesRequest runInstancesRequest = new RunInstancesRequest().withTagSpecifications(tagSpecs)
                                                                       .withInstanceType(instanceType)
                                                                       .withImageId(amiId)
                                                                       .withMinCount(count)
                                                                       .withMaxCount(2)
                                                                       .withSecurityGroupIds(securityGroup)
                                                                       .withKeyName(keyName);

    RunInstancesResult runInstances = ec2Client.runInstances(runInstancesRequest);

}

private List<Tag> buildTags(Map<String, String> tagMap) {
    List<Tag> tagList = new ArrayList<Tag>();
    tagMap.forEach((k, v) -> {
        tagList.add(new Tag(k, v));
    });
    System.out.println(tagList);
    return tagList;
}

【问题讨论】:

    标签: amazon-web-services amazon-ec2


    【解决方案1】:

    我自己修好了。我添加了这个

        List<TagSpecification> tagSpecifications = new ArrayList<>();
        tagSpecifications.add(new TagSpecification().withTags(buildTags(tagMap))
    

    buildTags(tagMap) 返回一个“列表”

    【讨论】:

      【解决方案2】:

      我遇到了同样的问题,发现要为 RunInstanceRequest 创建一个有效的 TagSpecification 对象,我还需要设置资源类型。

          TagSpecification resourceTags = new TagSpecification();
          resourceTags.setResourceType(ResourceType.Instance);
      

      一旦我这样做了,我就可以创建一个带有我指定应用的标签的实例。

      【讨论】:

        猜你喜欢
        • 2011-11-30
        • 2011-06-27
        • 1970-01-01
        • 2015-07-02
        • 2011-12-25
        • 1970-01-01
        • 2014-05-29
        • 2021-08-19
        • 2021-04-16
        相关资源
        最近更新 更多