AWS SDK AmazonCloudFormationClient 模板版本问题
AWS SDK AmazonCloudFormationClient template version issue
我正在使用最新版本的 AWS Java SDK (1.10.67),并且正在探索使用 CloudFormation 服务并使用 Java API 创建堆栈。我已经使用 AWS 控制台成功创建了堆栈,但在使用 API 时遇到了问题 运行。
无论我使用 AmazonCloudFormationClient 调用什么方法,它都会抛出相同的错误("operation" 名称根据我调用的方法而改变)。我还注意到,如果我没有定义 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 个多小时尝试不同的事情。
解法:
将 Spring 与 bean 一起使用:
<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));
我终于找到了解决办法。 AWS抛出的错误信息与问题完全无关。
对于以后 运行 解决这个问题的人来说,问题出在我对 AmazonCloudFormationClient 的配置中。我忘记了设置区域。一旦我这样做了,问题就消失了。
我正在使用最新版本的 AWS Java SDK (1.10.67),并且正在探索使用 CloudFormation 服务并使用 Java API 创建堆栈。我已经使用 AWS 控制台成功创建了堆栈,但在使用 API 时遇到了问题 运行。
无论我使用 AmazonCloudFormationClient 调用什么方法,它都会抛出相同的错误("operation" 名称根据我调用的方法而改变)。我还注意到,如果我没有定义 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 个多小时尝试不同的事情。
解法:
将 Spring 与 bean 一起使用:
<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));
我终于找到了解决办法。 AWS抛出的错误信息与问题完全无关。
对于以后 运行 解决这个问题的人来说,问题出在我对 AmazonCloudFormationClient 的配置中。我忘记了设置区域。一旦我这样做了,问题就消失了。