分配标签和 public 例如通过亚马逊

assign tag and public for instance via amazonica

我正在使用 amazonica 创建一个 ami,然后在它准备就绪时从 ami 启动一个实例。

我在使用 amazonica 时遇到的问题是,除了自述文件中的内容外,它几乎没有任何文档(我能找到)。准备好的东西很少,涵盖的东西也很少。

我目前可以成功查看 运行 个实例,获取最新/所需的实例,从中创建一个 AMI,等待它准备就绪,然后启动该实例。

只是,(run-instance)方法接受了我不知道的参数。查看 java api doc 我已经通过一些试验和错误找到了大部分参数,但我仍然需要设置更多的东西。

在哪里可以找到要传递给该函数的参数?

目前,我有:

(run-instances :image-id ami-id
             :min-count 1
             :max-count 1
             :instance-type "t2.small"
             :key-name "api-key-pair"
             :sercurity-groups ["sg-1a2b3c4d"]
             ;:vpc-id "vpc-a1b2c3d4"
             :subnet-id "subnet-a1b2c3d4"
             :monitoring true
             :ebs-optimized false
             :tag [{:value instance-name 
                    :key "Name"}])

这设置了大部分内容。但我不知道如何设置:

但是没用。实例有默认组,或者,我得到一个奇怪的错误,如

...AmazonServiceException: The specified instance type can only be used in a VPC. A subnet ID or network interface ID is required to carry out the request

....s.AmazonServiceException: The security group '{:group-id "sg-1a2b3c4d", :group-name "SG_STRICT"}' does not exist

我已经浏览了整个文档页面几次,找不到任何其他合理的选项/关键字来传递。

我也想用自动分配-public-ip 选项启动实例。

不幸的是,来源并没有透露太多关于 amazonica 的信息,正如文档所说,它大量使用反射并且测试不是很详尽。

请问如何设置安全组和标签?

对于组,自述文件中的示例使用名称 :groups 而不是安全组,我认为您不需要同时指定 ID 和名称,只需名称就足够了。我不这样做是因为在实践中我总是创建一个 ASG 和启动配置,然后将其放入 LB。 amazonica 的示例如下所示:

:groups [{:group-name "cx", :group-id "sg-38f45150"}],

specifying it in a launch configuration 看起来像这样:

:security-groups ["Email-prod" "marker.production"]

使用 amazonica 的最佳资源是 AWS rest API 文档,您在创建实例时找不到参数,因为它在 it's own call 中。首先开始创建实例,然后从该响应中获取实例 ID 后再次调用以标记实例。

(ec2/create-tags  
     {:resources ["i-cb2AAA3a"]  
      :tags [{:key "hello" 
             :value "world"}]}) 

阅读这些文档的一些技巧:

  • 非驼峰命名为非驼峰命名
  • 具有迭代数字的参数,例如: &Tag.1.Key=webserver &Tag.1.Value= &Tag.2.Key=stack &Tag.2.Value=Production 可以写成数组
  • (截至今天)AWS 网络界面中存在一个错误,除非您单击 "edit tags" 按钮,否则您将无法看到您的新标签,因此看起来您的呼叫可能无法正常工作,除非您仔细检查。 AWS 有许多 此类错误。通过 Web 界面信任 API。