在AWS Step Function中调用DescribeDBInstances报错问题咨询
问题原因
- AWS Step Functions 原生的专属RDS服务集成和RDS原生API的参数列表并非完全对齐,你遇到的报错就是因为当前使用的Step Functions RDS集成不支持顶层直接传入
DBInstanceIdentifier参数。 - 额外补充:即便部分版本的集成支持该参数,
DBInstanceIdentifier字段要求传入的是RDS实例的纯名称,而非完整ARN,你当前传入ARN就算字段合法也会后续返回实例不存在的错误。
解决方法
无需调用Lambda也有两种可行方案:
方案1:改用通用AWS SDK集成调用RDS
Step Functions支持通用的AWS SDK服务集成,这类集成的参数规范和官方SDK/原生API完全对齐,不会出现字段不支持的问题。
- 先把你的任务资源ARN修改为通用SDK集成格式:
arn:aws:states:::aws-sdk:rds:describeDBInstances - 可以通过Step Functions内置的
States.StringSplit函数从ARN中提取实例名,避免传ARN出错,参数示例如下:
{ "DBInstanceIdentifier.$": "States.ArrayGetItem(States.StringSplit($.GetResources.ResourceTagMappingList[0].ResourceARN, ':'), 6)" }
方案2:使用Filters参数筛选实例
如果不想切换集成方式,可以用Step Functions RDS集成原生支持的Filters参数来匹配指定实例,参数示例如下:
{ "Filters": [ { "Name": "db-instance-id", "Values.$": "States.Array(States.ArrayGetItem(States.StringSplit($.GetResources.ResourceTagMappingList[0].ResourceARN, ':'), 6))" } ] }
如果以上两种方案都不符合你的业务场景,再考虑使用Lambda封装RDS调用的方案即可。
内容的提问来源于stack exchange,提问作者lmu
相关产品推荐
相关产品推荐

