Kyl*_*cot 9 amazon-web-services aws-cloudformation
我正在尝试AWS::ApiGateway::RestApi使用CloudFormation 创建资源但在运行时
aws cloudformation deploy --template-file lorem.json --stack-name lorem
这最终失败了,在查看CloudFormation控制台时,我发现错误是Invalid REST API identifier specified.
这是我的lorem.json档案:
{
"AWSTemplateFormatVersion": "2010-09-09",
"Description": "lorem.io Stack",
"Resources": {
"API": {
"Type" : "AWS::ApiGateway::RestApi",
"Properties" : {
"FailOnWarnings": true,
"BodyS3Location": {
"Bucket": "cloudformation.lorem.io",
"Key": "open-api.json"
}
}
}
}
}
Run Code Online (Sandbox Code Playgroud)
这里我指定BodyS3LocationS3对象中包含以下内容的点:
{
"swagger": "2.0",
"info": {
"title": "Lorem.IO API",
"version": "1.0.0"
},
"definitions": {
"Generator": {
"type": "object",
"properties": {
"title": {
"type": "string"
}
}
}
},
"produces": [
"application/json"
],
"paths": {
"/generators": {
"get": {
"responses": {
"200": {
"schema": {
"type": "array",
"items": {
"$ref": "#/definitions/Generator"
}
}
}
}
}
}
}
}
Run Code Online (Sandbox Code Playgroud)
因为我根据文档提供此文件,所以我不应该提供RestApi的名称,所以我不认为这是问题所在.关于如何调试它不满意的任何想法?
我已经删除了很多我的配置,以便我现在指定的唯一属性是name,我仍然得到相同的错误(Invalid REST API identifier specified):
{
"AWSTemplateFormatVersion": "2010-09-09",
"Description": "lorem.io Stack",
"Resources": {
"API": {
"Type" : "AWS::ApiGateway::RestApi",
"Properties" : {
"FailOnWarnings": true,
"Name": "Hello World"
}
}
}
}
Run Code Online (Sandbox Code Playgroud)
根据文档 Name是唯一必需的属性 - 这是一个错误/ CloudFormation或我错过了什么?
原始模板和您提供的“ Update 1”最小示例在我的本地测试中都成功创建,并且我看不到任何明显的问题。
我注意到上面的事件日志屏幕截图UPDATE_FAILED不是而是说的CREATE_FAILED,并且认为问题出在试图“更新”现有资源的某个地方。
RestAPI在CloudFormation堆栈最初创建之后,是否有可能手动修改/删除了原始资源?如果是这样,请注意这违反了“ 通过AWS CloudFormation管理所有堆栈资源 ”的最佳实践,并且可能是错误的来源:
不要对AWS CloudFormation之外的堆栈资源进行更改。这样做可能会导致堆栈模板与堆栈资源的当前状态不匹配,如果您更新或删除堆栈,则会导致错误。
为了恢复,您可以更改资源的逻辑名称(例如,从API到API2),然后再次更新堆栈。这将导致与旧RestAPI资源分开创建新资源。
小智 5
我花了很长时间尝试使用您提供的lorem.json和BodyS3Location内容进行复制,但无法重现该错误。这里是否还缺少一些模板内容或背景信息?
我认为错误可能出在您的 Swagger 模板上,而不是 CloudFormation 上。通过故意向 Swagger 模板(而不是)添加无效方法,然后创建堆栈,我能够在AWS 控制台中重现该错误。堆栈已成功创建,但尝试在控制台中查看 API 时显示错误。foobarget
我什至查看了这篇文章的历史,并尝试使用原始的Swagger 模板进行复制,但堆栈无法创建。这让我相信您的堆栈有一些历史记录,并且 API 资源最初可能是使用“指定的 REST API 标识符无效”创建的,如错误所示。
| 归档时间: |
|
| 查看次数: |
5829 次 |
| 最近记录: |