簡體   English   中英

AWS Cloud Formation模板失敗,指定了無效的映射表達式參數

[英]AWS Cloud Formation template fails with Invalid mapping expression parameter specified

我正在為一個具有/user/{uid}/cart類的路徑的端點開發AWS雲形成模板。 我需要創建一個與HTTP主機的集成。 我一直在嘗試將{uid}映射到集成請求URL路徑參數中,如下所示:

            "x-amazon-apigateway-integration": {
              "uri": "http://${stageVariables.httpHost}/user/{uid}/cart",
              "contentHandling": "CONVERT_TO_TEXT",
              "timeoutInMillis": 29000,
              "connectionType": "INTERNET",
              "httpMethod": "PUT",
              "passthroughBehavior": "WHEN_NO_MATCH",
              "type": "HTTP_PROXY",
              "requestParameters": {
                "integration.request.path.uid" : "method.request.path.uid"
              }...

我一直收到此錯誤,並且不確定自己在做什么錯。

Errors found during import: Unable to put integration on 'PUT' for resource at path '/user/{uid}/cart': Invalid mapping expression specified: Validation Result: warnings : [], errors : [Invalid mapping expression parameter specified: method.request.path.uid]

這是完整的模板

{
    "Parameters": {
      "AccessControlAllowOrigin": {
        "Type": "String",
        "Default": "*"
      }
    },
    "Resources": {
      "ConfigApi": {
        "Type": "AWS::ApiGateway::RestApi",
        "Properties": {
          "Body": {
            "swagger": "2.0",
            "tags": [
              {
                "name": "users",
                "description": "secure user calls"
              }
            ],
            "schemes": [
              "https"
            ],
            "paths": {
              "/user/{uid}/cart": {
                "parameters": [
                  {
                    "name": "uid",
                    "in": "path",
                    "description": "user id",
                    "required": true,
                    "type": "string",
                    "format": "uuid"
                  }
                ],
                "put": {
                  "tags": [
                    "users",
                    "cart"
                  ],
                  "summary": "When called, this endpoint completes the user cart and puts their cart into their library",
                  "operationId": "completeusercart",
                  "description": "Completes the user cart\n",
                  "produces": [
                    "application/json"
                  ],
                  "responses": {
                    "200": {
                      "description": "the user identifier",
                      "headers": {
                        "Access-Control-Allow-Origin": {
                          "type": "string"
                        },
                        "Access-Control-Allow-Headers": {
                          "type": "string"
                        }
                      },
                      "schema": {
                        "type": "string"
                      }
                    }
                  },
                  "x-amazon-apigateway-integration": {
                    "uri": "http://${stageVariables.httpHost}/user/{uid}/cart",
                    "contentHandling": "CONVERT_TO_TEXT",
                    "timeoutInMillis": 29000,
                    "connectionType": "INTERNET",
                    "httpMethod": "PUT",
                    "passthroughBehavior": "WHEN_NO_MATCH",
                    "type": "HTTP_PROXY",
                    "requestParameters": {
                      "integration.request.path.uid" : "method.request.path.uid"
                    },
                    "responses": {
                      "default": {
                        "responseModels": {
                          "application/json": "Empty"
                        },
                        "responseParameters": {
                          "method.response.header.Access-Control-Allow-Origin": {
                            "Fn::Sub": "'${AccessControlAllowOrigin}'"
                          },
                          "method.response.header.Access-Control-Allow-Headers": "'Content-Type,X-Amz-Date,Authorization,X-Api-Key,X-Amz-Security-Token'"
                        },
                        "statusCode": "200"
                      }
                    }
                  }
                },
                "options": {
                  "consumes": [
                    "application/json"
                  ],
                  "produces": [
                    "application/json"
                  ],
                  "responses": {
                    "200": {
                      "description": "200 response",
                      "schema": {
                        "$ref": "#/definitions/Empty"
                      },
                      "headers": {
                        "Access-Control-Allow-Origin": {
                          "type": "string"
                        },
                        "Access-Control-Allow-Methods": {
                          "type": "string"
                        },
                        "Access-Control-Allow-Headers": {
                          "type": "string"
                        }
                      }
                    }
                  },
                  "x-amazon-apigateway-integration": {
                    "httpMethod": "OPTIONS",
                    "passthroughBehavior": "WHEN_NO_MATCH",
                    "requestTemplates": {
                      "application/json": "{\"statusCode\": 200}"
                    },
                    "type": "MOCK",
                    "timeoutInMillis": 29000,
                    "responses": {
                      "2\\d{2}": {
                        "responseParameters": {
                          "method.response.header.Access-Control-Allow-Origin": {
                            "Fn::Sub": "'${AccessControlAllowOrigin}'"
                          },
                          "method.response.header.Access-Control-Allow-Methods": "'PUT,OPTIONS'",
                          "method.response.header.Access-Control-Allow-Headers": "'Content-Type,X-Amz-Date,Authorization,X-Api-Key,X-Amz-Security-Token'"
                        },
                        "statusCode": "200"
                      },
                      "4\\d{2}": {
                        "statusCode": "403"
                      },
                      "5\\d{2}": {
                        "statusCode": "403"
                      }
                    }
                  }
                }
              }
            },
            "definitions": {
              "Empty": {
                "type": "object",
                "title": "Empty Schema"
              }
            }
          }
        }
      },
      "ConfigApiStage": {
        "Type": "AWS::ApiGateway::Stage",
        "Properties": {
          "DeploymentId": {
            "Ref": "ApiDeployment"
          },
          "MethodSettings": [
            {
              "DataTraceEnabled": true,
              "HttpMethod": "*",
              "LoggingLevel": "INFO",
              "ResourcePath": "/*"
            }
          ],
          "RestApiId": {
            "Ref": "ConfigApi"
          },
          "Variables": {
            "httpHost": "0.0.0.0"
          },

          "StageName": "LATEST"
        }
      },
      "ApiDeployment": {
        "Type": "AWS::ApiGateway::Deployment",
        "Properties": {
          "RestApiId": {
            "Ref": "ConfigApi"
          },
          "StageName": "DummyStage"
        }
      }
    }
}

謝謝你的幫助!

問題是parameters的位置。 這些需要在PUT而不是path

    "paths": {
        "/user/{uid}/cart": {
            "put": {
              "tags": [
                "users",
                "cart"
              ],
              "parameters": [
              {
                "name": "uid",
                "in": "path",
                "description": "user id",
                "required": true,
                "type": "string",
                "format": "uuid"
              }
            ],...

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM