Grails Amazon Web Services Плагин route53 Ошибка при использовании Route53 ChangeResourceRecordSets - PullRequest
1 голос
/ 17 мая 2019

Я пытаюсь создать новый набор записей route53, используя Grails с плагином aws services для route53.

В настоящее время я использую Grails 2.4.5 и плагин AmazonWebService для Grails 2.4.5

Я пытаюсь создать новый набор записей route53 на route53 с помощью этого плагина.

На моем BuildConfig.groovy я использовал этот плагин для веб-сервисов aws.

compile ":aws-sdk:1.10.44"

Мне нужна ваша помощь, ребята, в отношении route53, чтобы изменить наборы записей ресурсов.

Это мой код.

import com.amazonaws.services.route53.AmazonRoute53Client
import com.amazonaws.services.route53.model.AliasTarget
import com.amazonaws.services.route53.model.Change
import com.amazonaws.services.route53.model.ChangeAction
import com.amazonaws.services.route53.model.ChangeBatch
import com.amazonaws.services.route53.model.ChangeResourceRecordSetsRequest
import com.amazonaws.services.route53.model.ChangeResourceRecordSetsResult
import com.amazonaws.services.route53.model.RRType
import com.amazonaws.services.route53.model.ResourceRecord
import com.amazonaws.services.route53.model.ResourceRecordSet
import grails.plugin.awssdk.AmazonWebService
import grails.transaction.Transactional

@Transactional
class AwsRoute53Service {

    AmazonWebService amazonWebService

    ChangeResourceRecordSetsResult changeRecordSet() {
        AmazonRoute53Client route53Client = amazonWebService.route53

        AliasTarget target = new AliasTarget('hostedZoneIDHere', 'app.sample.com.')

        target.setEvaluateTargetHealth(true)

        List<ResourceRecord> resourceRecords = new ArrayList<>()

        resourceRecords.add(new ResourceRecord('dNSNameHere'))

        ResourceRecordSet recordSet = new ResourceRecordSet('app.sample.com.', RRType.A)

        recordSet.setAliasTarget(target)
        recordSet.setResourceRecords(resourceRecords)
        recordSet.setTrafficPolicyInstanceId('simple')

        List<Change> changes = new ArrayList<>()

        changes.add(new Change(ChangeAction.CREATE, recordSet))

        ChangeBatch changeBatch = new ChangeBatch(changes)

        ChangeResourceRecordSetsRequest request = new ChangeResourceRecordSetsRequest('hostedZoneIDHere', changeBatch)

        return route53Client.changeResourceRecordSets(request)
    }
}

Я получил сообщение об ошибке ниже, когда попытался изменить наборы записей ресурса route53.

Invalid request: Expected exactly one of [AliasTarget, all of [TTL, and ResourceRecords], or TrafficPolicyInstanceId], but found more than one in Change with [Action=CREATE, Name=app.sample.com., Type=A, SetIdentifier=null] (Service: AmazonRoute53; Status Code: 400; Error Code: InvalidInput; Request ID: 2ca80154-78a7-11e9-b5e7-f7bc7c79e5e6). Stacktrace follows:
Message: Invalid request: Expected exactly one of [AliasTarget, all of [TTL, and ResourceRecords], or TrafficPolicyInstanceId], but found more than one in Change with [Action=CREATE, Name=app.sample.com., Type=A, SetIdentifier=null] (Service: AmazonRoute53; Status Code: 400; Error Code: InvalidInput; Request ID: 2ca80154-78a7-11e9-b5e7-f7bc7c79e5e6)

Подскажите, в чем проблема с настройкой?

Я был бы рад, если бы вы могли помочь мне с моей проблемой прямо сейчас. Мне очень нужна ваша помощь, ребята.

1 Ответ

0 голосов
/ 21 мая 2019

Ниже приведен точный ответ на мою проблему

import com.amazonaws.services.route53.AmazonRoute53Client
import com.amazonaws.services.route53.model.AliasTarget
import com.amazonaws.services.route53.model.Change
import com.amazonaws.services.route53.model.ChangeAction
import com.amazonaws.services.route53.model.ChangeBatch
import com.amazonaws.services.route53.model.ChangeResourceRecordSetsRequest
import com.amazonaws.services.route53.model.ChangeResourceRecordSetsResult
import com.amazonaws.services.route53.model.RRType
import com.amazonaws.services.route53.model.ResourceRecord
import com.amazonaws.services.route53.model.ResourceRecordSet
import grails.plugin.awssdk.AmazonWebService
import grails.transaction.Transactional

@Transactional
class AwsRoute53Service {

    private static final String DOMAIN_NAME_SERVER = "${System.env.DOMAIN_NAME_SERVER}"
    private static final String HOSTED_ZONE_ID = "${System.env.HOSTED_ZONE_ID}"

    AmazonWebService amazonWebService

    ChangeResourceRecordSetsResult changeRecordSet() {
        AmazonRoute53Client route53Client = amazonWebService.route53

        GetHostedZoneResult hostedZoneResult = route53Client.getHostedZone(new GetHostedZoneRequest(HOSTED_ZONE_ID))
        HostedZone hostedZone = hostedZoneResult.getHostedZone()

        ResourceRecordSet resourceRecordSet = new ResourceRecordSet()
            .withName('dNSName')
            .withType(RRType.CNAME)
            .withTTL(60)
            .withResourceRecords([
                new ResourceRecord().withValue(DOMAIN_NAME_SERVER)
            ])

        ChangeResourceRecordSetsRequest request = new ChangeResourceRecordSetsRequest()
            .withHostedZoneId(hostedZone.id)
            .withChangeBatch(
                new ChangeBatch()
                    .withChanges([
                        new Change()
                            .withAction(ChangeAction.CREATE)
                            .withResourceRecordSet(resourceRecordSet)
                    ])
            )

        return route53Client.changeResourceRecordSets(request)
    }
}
...