CloudFormationを使用してAWS::ApiGateway::RestApi
リソースを作成しようとしていますが、実行中
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"
}
}
}
}
}
ここでは、以下を含むS3オブジェクトを指すBodyS3Location
を指定しています。
{
"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"
}
}
}
}
}
}
}
}
documentation に従ってこのファイルを提供しているので、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"
}
}
}
}
documentationName
が唯一の必須属性によると-これはCloudFormationのバグですか、それとも何かが足りませんか?
元のテンプレートと提供した「Update1」の最小限の例の両方がローカルテストで正常に作成されましたが、どちらにも明らかな問題は見られません。
上記のイベントログのスクリーンショットにUPDATE_FAILED
の代わりに CREATE_FAILED
、そして問題は既存のリソースを「更新」しようとする試みのどこかにあると思います。
CloudFormationスタックの最初の作成後に、元のRestAPI
リソースが手動で変更/削除された可能性はありますか?その場合、これは「 AWS CloudFormationを介してすべてのスタックリソースを管理する 」のベストプラクティスに違反し、エラーの原因となる可能性があることに注意してください。
AWSCloudFormationの外部のスタックリソースに変更を加えないでください。これを行うと、スタックのテンプレートとスタックリソースの現在の状態の間に不一致が生じ、スタックを更新または削除した場合にエラーが発生する可能性があります。
回復するには、リソースの論理名を変更できます(たとえば、API
からAPI2
)そしてスタックを再度更新します。これにより、新しいRestAPI
リソースが古いリソースとは別に作成されます。
ご提供いただいたlorem.json
およびBodyS3Location
のコンテンツを使用して複製を試みましたが、エラーを再現できませんでした。ここに不足しているテンプレートコンテンツや背景情報が他にありますか?
エラーはCloudFormationではなくSwaggerテンプレートにあると思います。 AWSコンソールでエラーを再現することができました。Swaggerテンプレートに無効なメソッドを意図的に追加し(foobar
ではなくget
)、スタックを作成しました。スタックは正常に作成されましたが、コンソールでAPIを表示しようとするとエラーが表示されました。
この投稿の履歴を見て、originalSwaggerテンプレートを使用して複製しようとしましたが、スタックは作成されませんでした。これにより、スタックに何らかの履歴があると思われます。おそらく、エラーが示すように、APIリソースは最初に「無効なREST API識別子が指定されました」で作成されました。