2

Ich verwende die neueste Version des AWS Java SDK (1.10.67) und erkunde den CloudFormation Service und erstelle die Stacks mit der Java API. Ich habe erfolgreich Stapel mithilfe der AWS-Konsole erstellt, es treten jedoch Probleme bei der Verwendung der API auf.AWS SDK AmazonCloudFormationClient Vorlage Version Problem

Egal, welche Methode ich mit dem AmazonCloudFormationClient aufruft, es löst den gleichen Fehler aus (der Name des "Vorgangs" ändert sich je nachdem, welche Methode ich anrufe). Ich habe auch bemerkt, dass ich den gleichen Fehler bekomme, wenn ich keine templateURL oder templateBody definiere, also frage ich mich, ob es meine Template-Datei nicht parsen kann. Aber die AWS-Konsole liest die Vorlage gut ein. (:; Statuscode AmazonCloudFormation: 400; Fehlercode: InvalidAction; Anforderungs-ID: ***** Service)

:

com.amazonaws.AmazonServiceException konnte nicht Betrieb DescribeStackResources für Version 2010-05-15 finden

Auf den oben genannten Aufruf, insbesondere, ich bin verwirrt, warum es sogar Blick auf die Vorlage-Version, weil es nur die zuvor erstellten Stapel greifen sollte. Die Vorlage, die ich verwende, hat die neueste Template-Version von "2010-09-09", daher verstehe ich nicht, wo diese Versionsnummer herkommt.

Hier sind Auszüge, die verschiedenen Teile des Codes ich verwendet habe:

GetTemplateSummaryRequest templateSummaryRequest = new GetTemplateSummaryRequest() 
    .withTemplateURL("https://s3.amazonaws.com/{bucket}/EC2_POC_CloudFormation.template"); 
GetTemplateSummaryResult templateSummary = cfClient.getTemplateSummary(templateSummaryRequest); 

CreateStackRequest stack = new CreateStackRequest() 
    .withStackName(stackName) 
    //.withTemplateURL("https://s3.amazonaws.com/{bucket}/EC2_POC_CloudFormation.template") 
    .withTemplateBody(cloudFormationTemplateString) 
    .withParameters(stackParams); 
cfClient.createStack(stack); 

DescribeStackResourcesRequest stackResourceRequest = new DescribeStackResourcesRequest() 
    .withStackName(existingStackName); 
for (StackResource resource : cfClient.describeStackResources(stackResourceRequest).getStackResources()) { 
    LOGGER.info(resource.getStackName()+" - "+resource.getResourceType()+", "+resource.getResourceStatus()); 
} 

Jede Hilfe oder Einsicht würde viel wie ich über 5 Stunden verschiedene Dinge versucht verbracht haben geschätzt.


Lösung:
mit Spring mit Bohnen:

<bean id="awsproperties" class="com.amazonaws.auth.PropertiesCredentials"> 
    <constructor-arg type="java.io.File" value="classpath:AwsCredentials.properties"/> 
</bean> 

<bean id="cfBean" class="com.amazonaws.services.cloudformation.AmazonCloudFormationClient"> 
    <constructor-arg ref="awsproperties" type="com.amazonaws.auth.AWSCredentials"/> 
    <property name="endpoint" value="cloudformation.us-east-1.amazonaws.com"/>  
</bean> 


mit Java:

AmazonCloudFormation cfClient = new AmazonCloudFormationClient(awsCredentials); 
cfClient.setRegion(Region.getRegion(Regions.US_EAST_1)); 
+0

Was verwenden Sie zum Laden Ihrer Anmeldeinformationen? Standard-Anmeldedatenladeprogramm? (Klassenpfadeintrag mit Pfad zur Anmeldeinformationsdatei?) Wenn ja, sind Sie sicher, dass Sie die richtigen Anmeldeinformationen laden und nicht versehentlich auf eine andere Umgebung (UAT, Test usw.) zeigen? – Andonaeus

+0

Mein Projekt verwendet Spring, daher habe ich eine Bean definiert, um mein Clientobjekt zu erstellen. Es erstellt es, indem es ein AWSCredentials-Objekt übergibt, das mithilfe einer Eigenschaftendatei definiert wird, die den accessKey und den secretKey enthält. Mein Problem war, dass ich vergessen habe, den Endpunkt so einzustellen, dass er auf die Region zeigt. Ich habe meinen ursprünglichen Post mit zwei Möglichkeiten bearbeitet, um die Region festzulegen. – Bryce

Antwort

1

war ich endlich in der Lage, die Lösung zu finden. Die von AWS ausgegebene Fehlermeldung ist für das Problem überhaupt nicht relevant.

Für Leute, die in Zukunft auf dieses Problem stoßen, war das Problem in meiner Konfiguration für den AmazonCloudFormationClient. Ich hatte vergessen, die Region einzustellen. Sobald ich das getan habe, ist das Problem verschwunden.