问题描述
我在使用 EC2 连接器和用于 DescribeInstances 的过滤器时遇到问题。具体来说,我试图找到所有设置了“classId”标签的实例。
我还尝试找到所有具有带有特定字符串的 classId 标记的实例,例如“123”。
以下是这两种情况下 describeInstance 的 XML。
标签键------
<ec2:describe-instances doc:name="Describe instances" doc:id="ca64b7d4-99bb-4045-bbb4-16c0c27b1df5" config-ref="Amazon_EC2_Configuration">
<ec2:filters>
<ec2:filter name="tag-key" values="#[['classId']]">
</ec2:filter>
</ec2:filters>
</ec2:describe-instances>
tag:classId:----
<ec2:describe-instances doc:name="Describe instances" doc:id="ca64b7d4-99bb-4045-bbb4-16c0c27b1df5" config-ref="Amazon_EC2_Configuration">
<ec2:filters>
<ec2:filter name="tag:classId">
<ec2:values >
<ec2:value value="#['123']" />
</ec2:values>
</ec2:filter>
</ec2:filters>
</ec2:describe-instances>
每次我收到如下错误(对于 tag:classId):
ERROR 2021-03-29 08:32:49,693 [[MuleRuntime].uber.04: [ec2-play].ec2-playFlow.BLOCKING @1092a5bc] [processor: ; event: df5e2df0-908a-11eb-94b5-38f9d38da5c3] org.mule.runtime.core.internal.exception.OnErrorPropagateHandler:
********************************************************************************
Message : The filter 'null' is invalid (Service: AmazonEC2; Status Code: 400; Error Code: InvalidParameterValue; Request ID: 33e3bbfb-99ea-4382-932f-647662810c92; Proxy: null)
Element : ec2-playFlow/processors/0 @ ec2-play:ec2-play.xml:33 (Describe instances)
Element DSL : <ec2:describe-instances doc:name="Describe instances" doc:id="ca64b7d4-99bb-4045-bbb4-16c0c27b1df5" config-ref="Amazon_EC2_Configuration">
<ec2:filters>
<ec2:filter name="tag:classId">
<ec2:values>
<ec2:value value="#['123']"></ec2:value>
</ec2:values>
</ec2:filter>
</ec2:filters>
</ec2:describe-instances>
Error type : EC2:INVALID_ParaMETER_VALUE
FlowStack : at ec2-playFlow(ec2-playFlow/processors/0 @ ec2-play:ec2-play.xml:33 (Describe instances))
(set debug level logging or '-Dmule.verbose.exceptions=true' for everything)
********************************************************************************
注意:代码在没有过滤器的情况下工作,返回所有实例。但是,这不是我想要或需要的。我可以做的过滤越多,响应速度就越快。
有人有过滤器选项的示例吗?你能告诉我我做错了什么吗?
谢谢!
解决方法
这肯定是一个错误。我尝试了同样的方法,但它对我也不起作用。我启用了调试日志记录,发现连接器没有将 filter.1.Name=tag:classId
作为请求中的查询参数发送。这是我找到的调试日志。 (注意查询字符串中没有filter.1.Name=tag:classId)
DEBUG 2021-04-02 21:55:17,198 [[MuleRuntime].uber.03: [test-aws-connector].test-aws-connectorFlow.BLOCKING @2dff3afe] [processor: ; event: 91a34891-93d0-11eb-af49-606dc73d31d1] org.apache.http.wire: http-outgoing-0 >> "Action=DescribeInstances&Version=2016-11-15&Filter.1.Value.1=123"
但是,我尝试使用 Expression or Bean Reference
选项并将表达式直接设置为 [{name: 'tag:classId',values:['123']}]
,如下所示:
并且它工作正常。这是更改后的相同调试日志
DEBUG 2021-04-02 21:59:17,198 [[MuleRuntime].uber.03: [test-aws-connector].test-aws-connectorFlow.BLOCKING @2dff3afe] [processor: ; event: 91a34891-93d0-11eb-af49-606dc73d31d1] org.apache.http.wire: http-outgoing-0 >> "Action=DescribeInstances&Version=2016-11-15&Filter.1.Name=tag%3AclassId&Filter.1.Value.1=123"
另外,我想指出非常奇怪的行为,如果您尝试在表达式中跨多行格式化 [{name: 'tag:classId',values: ['123']}]
,这将不起作用,并且会在部署过程中出错。