代码之家  ›  专栏  ›  技术社区  ›  Damien-Amen

使用EC2 Java API创建新EC2实例时出现与标记创建相关的错误

  •  0
  • Damien-Amen  · 技术社区  · 7 年前

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

    线程“main”中出现异常 通用域名格式。amazonaws。服务。ec2.model。AmazonEC2Exception:标记规范 资源类型必须有一个值(服务:AmazonEC2;状态代码:400; 错误代码:InvalidParameterValue;请求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;
    }
    
    2 回复  |  直到 7 年前
        1
  •  0
  •   Damien-Amen    7 年前

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

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

    哪里 buildTags(tagMap) 返回“List”

        2
  •  0
  •   SamBeroz    6 年前

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

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

    一旦我做到了这一点,我就能够用我指定应用的标记创建一个实例。