我正在尝试通过 PHP 按标签检索 EC2 实例。我可以用标签创建服务器,我可以用标签数据检索服务器,但如果我想做的是通过这些标签之一检索,我就很难找到示例。
这个有效:
if ($server_group != '')
$filter[] = array('Name' => 'tag-value','Value' => $server_group);
$response = $ec2->describe_instances(array('Filter' => $filter));
但是,问题是它会找到任何具有我分配给变量 $server_group 的值的标签,无论它是否是正确的标签。我当然可以简单地注意我如何分配标签值,但这不是防弹的。
文档中解释了替代语法:
示例:要仅列出已分配标签 Purpose=X 的资源,请指定:
Filter.1.Name=tag:Purpose
Filter.1.Value.1=X
但是,他们没有给出示例。我以为会是:
$filter[] = array('Filter.1.Name','Value' => 'tag:Group');
$filter[] = array('Name' => 'Filter.1.Value.1','Value' => $server_group);
但是,这似乎不起作用 - 我没有得到任何回复。
有人做过吗?有他们可以分享的工作示例吗?我可能没有在 Google 中问正确的问题 - 有很多关于如何创建标签的示例,但没有如何通过它们检索标签。
最佳答案
我们最近需要编写一个脚本来轻松关闭我们 QA 环境中的所有 EC2 实例。我们使用环境标签来表示 DEV、PRD 或 QA 环境。以下代码片段演示了我们如何通过 API 进行过滤:
<?php
$aws = \Aws\Common\Aws::factory(array(
'key' => $key,
'secret' => $secret,
'region' => $region
));
$ec2 = $aws->get('ec2');
$args = array(
'Filters' => array(
array('Name' => 'tag:Environment',
'Values' => array('QA')
)
)
);
$results = $ec2->describeInstances($args);
$reservations = $results['Reservations'];
foreach ($reservations as $reservation) {
$instances = $reservation['Instances'];
foreach ($instances as $instance) {
$instanceName = '';
foreach ($instance['Tags'] as $tag) {
if ($tag['Key'] == 'Name') {
$instanceName = $tag['Value'];
}
}
if ($instance['State']['Name'] == \Aws\Ec2\Enum\InstanceStateName::RUNNING){
$shutdownInstances['InstanceIds'][] = $instance['InstanceId'];
}
}
}
$results = $ec2->stopInstances($shutdownInstances);
$hipURL = "http://api.hipchat.com/v1/rooms/message?auth_token=$token&room_id=$roomId&from=$from&message=QA%20has%20been%20told%20to%20shutdown.";
$result = file_get_contents($hipURL);
我们在 cron 作业中使用它来确保 QA 每晚关闭,因为没有人在一夜之间使用它,并且它可以为我们节省几美元而不让它运行。
要重写查找所有值为 X 的 Purpose Tags 的过滤器:
'Filters' => array(
array('Name' => 'tag:Purpose',
'Values' => array('X')
)
)
关于PHP 和 AWS - 按标签检索 EC2 实例,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/13922630/
我试图使用yard记录一些Ruby代码,尽管我所做的正是所描述的here或here#@param[Integer]thenumberoftrials(>=0)#@param[Float]successprobabilityineachtrialdefinitialize(n,p)#initialize...end虽然我仍然得到这个奇怪的错误@paramtaghasunknownparametername:the@paramtaghasunknownparametername:success然后生成的html看起来很奇怪。我称yard为:$yarddoc-mmarkdown我做错了什么?
我正在查看instance_variable_set的文档并看到给出的示例代码是这样做的:obj.instance_variable_set(:@instnc_var,"valuefortheinstancevariable")然后允许您在类的任何实例方法中以@instnc_var的形式访问该变量。我想知道为什么在@instnc_var之前需要一个冒号:。冒号有什么作用? 最佳答案 我的第一直觉是告诉你不要使用instance_variable_set除非你真的知道你用它做什么。它本质上是一种元编程工具或绕过实例变量可见性的黑客攻击
在我的应用程序中,我需要能够找到所有数字子字符串,然后扫描每个子字符串,找到第一个匹配范围(例如5到15之间)的子字符串,并将该实例替换为另一个字符串“X”。我的测试字符串s="1foo100bar10gee1"我的初始模式是1个或多个数字的任何字符串,例如,re=Regexp.new(/\d+/)matches=s.scan(re)给出["1","100","10","1"]如果我想用“X”替换第N个匹配项,并且只替换第N个匹配项,我该怎么做?例如,如果我想替换第三个匹配项“10”(匹配项[2]),我不能只说s[matches[2]]="X"因为它做了两次替换“1fooX0barXg
我正在编写一个小脚本来定位aws存储桶中的特定文件,并创建一个临时验证的url以发送给同事。(理想情况下,这将创建类似于在控制台上右键单击存储桶中的文件并复制链接地址的结果)。我研究过回形针,它似乎不符合这个标准,但我可能只是不知道它的全部功能。我尝试了以下方法:defauthenticated_url(file_name,bucket)AWS::S3::S3Object.url_for(file_name,bucket,:secure=>true,:expires=>20*60)end产生这种类型的结果:...-1.amazonaws.com/file_path/file.zip.A
我发现ActiveRecord::Base.transaction在复杂方法中非常有效。我想知道是否可以在如下事务中从AWSS3上传/删除文件:S3Object.transactiondo#writeintofiles#raiseanexceptionend引发异常后,每个操作都应在S3上回滚。S3Object这可能吗?? 最佳答案 虽然S3API具有批量删除功能,但它不支持事务,因为每个删除操作都可以独立于其他操作成功/失败。该API不提供任何批量上传功能(通过PUT或POST),因此每个上传操作都是通过一个独立的API调用完成的
我有一个正在构建的应用程序,我需要一个模型来创建另一个模型的实例。我希望每辆车都有4个轮胎。汽车模型classCar轮胎模型classTire但是,在make_tires内部有一个错误,如果我为Tire尝试它,则没有用于创建或新建的activerecord方法。当我检查轮胎时,它没有这些方法。我该如何补救?错误是这样的:未定义的方法'create'forActiveRecord::AttributeMethods::Serialization::Tire::Module我测试了两个环境:测试和开发,它们都因相同的错误而失败。 最佳答案
我正在处理旧代码的一部分。beforedoallow_any_instance_of(SportRateManager).toreceive(:create).and_return(true)endRubocop错误如下:Avoidstubbingusing'allow_any_instance_of'我读到了RuboCop::RSpec:AnyInstance我试着像下面那样改变它。由此beforedoallow_any_instance_of(SportRateManager).toreceive(:create).and_return(true)end对此:let(:sport_
我收到格式为的回复#我需要将其转换为哈希值(针对活跃商家)。目前我正在遍历变量并执行此操作:response.instance_variables.eachdo|r|my_hash.merge!(r.to_s.delete("@").intern=>response.instance_eval(r.to_s.delete("@")))end这有效,它将生成{:first="charlie",:last=>"kelly"},但它似乎有点hacky和不稳定。有更好的方法吗?编辑:我刚刚意识到我可以使用instance_variable_get作为该等式的第二部分,但这仍然是主要问题。
我有一个div,它根据表单是否正确提交而改变。我想知道是否可以检查类的特定元素?开始元素看起来像这样。如果输入不正确,添加错误类。 最佳答案 试试这个:browser.div(:id=>"myerrortest").class_name更多信息:http://watir.github.com/watir-webdriver/doc/Watir/HTMLElement.html#class_name-instance_method另一种选择是只查看具有您期望的类的div是否存在browser.div((:id=>"myerrortes
我正在写一篇关于在Ruby中几乎一切都是对象的博客文章,我试图通过以下示例来展示这一点:classCoolBeansattr_accessor:beansdefinitialize@bean=[]enddefcount_beans@beans.countendend所以从类中我们可以看出它有4个方法(当然,除非我错了):它可以在创建新实例时初始化一个默认的空bean数组它可以计算它有多少个bean它可以读取它有多少个bean(通过attr_accessor)它可以向空数组写入(或添加)更多bean(也通过attr_accessor)但是,当我询问类本身它有哪些实例方法时,我没有看到默认