2

私は最新バージョンの AWS Java SDK (1.10.67) を使用しており、CloudFormation サービスを使用して探索し、Java API を使用してスタックを作成しています。AWS コンソールを使用してスタックを正常に作成しましたが、API を使用すると問題が発生します。

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

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

特に上記の呼び出しでは、以前に作成されたスタックを取得する必要があるため、テンプレートのバージョンを調べている理由について混乱しています。私が使用しているテンプレートには「2010-09-09」の最新のテンプレート バージョンがあるため、そのバージョン番号がどこから取得されているのかわかりません。

以下は、私が使用したさまざまなコードの断片です。

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

私はさまざまなことを試すのに5時間以上費やしたので、どんな助けや洞察も大歓迎です.


解決策:
Bean で Spring を使用する:

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


Java の使用:

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

1 に答える 1