Mulesoft EC2 *describeInstances* 和 *filter* 选项

问题描述

我在使用 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']}],如下所示:

anypoint studio screenshot

并且它工作正常。这是更改后的相同调试日志

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']}],这将不起作用,并且会在部署过程中出错。