jenkins AWS RDS显示异常的原因-状态代码:400;错误代码:无效的参数值

v1l68za4  于 2022-11-21  发布在  Jenkins
关注(0)|答案(2)|浏览(333)

代码-

private static String getDBInstanceTag(AmazonRDS amazonRDS, String dbInstanceIdentifier, String region, String tagKey) {

        log.info("Trying to fetch dbInstanceIdentifier - " + dbInstanceIdentifier + " in db instance region - " + region);
        String arn = String.format("arn:aws:rds:" + region + ":%s:db:%s",
                SyncJobConstants.AWSProperties.AWS_ACCOUNT_NUMBER,
                dbInstanceIdentifier);
        ListTagsForResourceResult tagsList = amazonRDS.listTagsForResource(
                new ListTagsForResourceRequest().withResourceName(arn));

        for(Tag tag : tagsList.getTagList()) {
            if(tagKey.equalsIgnoreCase(tag.getKey())) {
                return tag.getValue();
            }
        }

        throw new InternalProcessingException(tagKey + " is not present in given dbInstance - " + tagsList);
    }

    public static String getDBInstanceTag(String dbInstanceIdentifier, String tagKey) throws IOException {

        AWSCredentials credentials = new PropertiesCredentials(
                RedshiftUtil.class.getClassLoader().getResourceAsStream("AWSCredentials.properties"));
        AmazonRDS amazonRDS = new AmazonRDSClient(credentials);

        DBInstance dbInstance = new DBInstance();
        dbInstance.setDBInstanceIdentifier(dbInstanceIdentifier);

        for(String region : SyncJobConstants.AWSProperties.RDS_REGIONS) {
            try {
                return getDBInstanceTag(amazonRDS, dbInstanceIdentifier, region, tagKey);
            } catch (DBInstanceNotFoundException e) {
                log.info("dbInstanceIdentifier - " + dbInstanceIdentifier + " is not present in db instance region - " + region);
            } catch (AmazonServiceException e) {
                if ( "AccessDenied".equals(e.getErrorCode()) ) {
                    log.info("dbInstanceIdentifier - " + dbInstanceIdentifier + " is not present in db instance region - " + region);
                } else {
                    throw new InternalProcessingException("Not able to fetch dbInstance details from RDS. DBInstanceId - " + dbInstanceIdentifier, e);
                }
            }
        }

        throw new InvalidRequestException("RDS endpoint details is not correct.");
    }

即使存在数据库示例,它也会为某些调用引发错误。错误详细信息-

Caused by: com.amazonaws.AmazonServiceException: The specified resource name does not match an RDS resource in this region. (Service: AmazonRDS; Status Code: 400; Error Code: InvalidParameterValue; Request ID: b0e01d56-36ca-11e6-8441-1968d9061f57)
    at com.amazonaws.http.AmazonHttpClient.handleErrorResponse(AmazonHttpClient.java:1182)
    at com.amazonaws.http.AmazonHttpClient.executeOneRequest(AmazonHttpClient.java:770)
    at com.amazonaws.http.AmazonHttpClient.executeHelper(AmazonHttpClient.java:489)
    at com.amazonaws.http.AmazonHttpClient.execute(AmazonHttpClient.java:310)
    at com.amazonaws.services.rds.AmazonRDSClient.invoke(AmazonRDSClient.java:5197)
    at com.amazonaws.services.rds.AmazonRDSClient.listTagsForResource(AmazonRDSClient.java:1997)

你能告诉我我错过了什么吗?

错误含义-

http://docs.aws.amazon.com/AWSEC2/latest/APIReference/errors-overview.html

更新2

public static final List RDS_REGIONS = Arrays.asList("us-east-1",
                "us-west-1",
                "us-west-2",
                "eu-west-1",
                "eu-central-1",
                "ap-northeast-1",
                "ap-northeast-2",
                "ap-southeast-1",
                "ap-southeast-2",
                "sa-east-1");
wlp8pajw

wlp8pajw1#

似乎是区域相关问题-您的RDS示例是否位于区域US-EAST-1中?(这是Amazon SDK的默认区域)
登录Amazon Web控制台并确认区域。设置正确的区域并重试。
参考:AWS Region Selection

syqv5f0l

syqv5f0l2#

虽然这是一个老问题,我分享一个想法,可能会帮助别人。
由于用户似乎正在使用Java AWS SDK client,因此他可以在

AmazonRDS amazonRDS = new AmazonRDSClient(credentials);
DescribeDBInstancesResult describeDBInstancesResult = amazonRDS.describeDBInstances();

那么您可以调试并查看describeDBInstancesResult,以确保DB实际上在当前示例化的amazonRDS客户机的范围内。
如果不存在,则可能是他没有将正确的区域传递到客户端。

相关问题