2

AWS Java SDKの最新バージョン(1.10.67)を使用しており、CloudFormationサービスを使用してJava APIを使用してスタックを作成しています。 AWSコンソールを使用してスタックを作成しましたが、APIを使用する際に問題が発生しています。AWS SDK AmazonCloudFormationClientテンプレートバージョンの問題

AmazonCloudFormationClientを使用してどのメソッドを呼び出しても、同じエラーがスローされます(「操作」の名前はどのメソッドを呼び出すかによって変わります)。 templateURLまたはtemplateBodyを定義しないと同じエラーが発生することに気づいたので、テンプレートファイルを解析できないのかどうか疑問に思います。しかし、AWSコンソールはテンプレートをうまく読み込みます。

com.amazonaws.AmazonServiceException:バージョン2010-05-15の動作DescribeStackResourcesが見つかりませんでした(サービス:AmazonCloudFormation;ステータスコード:400;エラーコード:InvalidAction、IDを要求します:*****)

上記の呼び出しでは、特に以前に作成されたスタックを取得するだけなので、テンプレートバージョンを調べている理由が混乱しています。私が使用しているテンプレートには最新のテンプレートバージョン「2010-09-09」がありますので、バージョン番号がどこにあるのか分かりません。私は違うことをしようとして5時間以上を費やしているよう

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()); 
} 

すべてのヘルプや洞察力をいただければ幸いです。

は、ここで私が使用しているコードの異なる部分の抜粋です。


ソリューション:
春を使用した豆:Javaの使用

<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> 


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

資格情報を読み込むために何を使用していますか?デフォルトの資格情報ローダーですか? (資格ファイルへのパスを持つクラスパスエントリ?)そうであれば、正しい資格情報をロードしていて、誤って別の環境(UAT、テストなど)を指しているのではないことは確かですか? – Andonaeus

+0

私のプロジェクトはSpringを使用しているので、クライアントオブジェクトを作成するためにBeanを定義しました。これは、accessKeyとsecretKeyを含むプロパティファイルを使用して定義されたAWSCredentialsオブジェクトを渡すことによってそれを構築します。私の問題は、地域を指すようにエンドポイントを設定するのを忘れたことでした。私はその地域を設定する2つの方法でオリジナルの投稿を編集しました。 – Bryce

答えて

1

私は最終的に解決策を見つけることができました。 AWSによってスローされたエラーメッセージは、この問題にはまったく関連していません。

今後この問題に遭遇する人々のために、AmazonCloudFormationClientの設定に問題がありました。私はを忘れて、を設定しました。私がそれをした後、問題は消えました。