aws -cdk - частный API-шлюз с использованием SpecRestApi (openAPI 3) - PullRequest
0 голосов
/ 14 июля 2020

Решено

Следующий PR устраняет проблему:

https://github.com/aws/aws-cdk/pull/9068 Устраняет эту проблему. Теперь вы можете установить свой endpointType следующим образом:

const api = new apigateway.SpecRestApi(this, 'ExampleRestApi', {
  apiDefinition: apigateway.ApiDefinition.fromInline(replacedSwagger),
  endpointTypes: [apigateway.EndpointType.PRIVATE],
});

Примечание. Для частных конечных точек вам все равно потребуется указать политику x-amazon-apigateway-policy в вашем файле openApi.

Исходный вопрос

Я пытаюсь использовать aws -cdk для настройки частного шлюза API с помощью SpecRestApi. (openApi 3).

По умолчанию создается конечная точка с конфигурацией EDGE.

В документации указано, что я должен использовать x-amazon-apigateway-endpoint-configuration внутри раздела серверов, но при его использовании он, кажется, игнорируется API-шлюзом.

В коде части API не так уж много магии c.

    const api = new SpecRestApi(this, 'ExampleRestApi', {
      apiDefinition: ApiDefinition.fromInline(replacedSwagger),
      restApiName: `myTest`,
      deploy: false
    });

Пример чванства можно найти здесь:

{
    "openapi": "3.0.1",
    "info": {
        "title": "ismael-test",
        "description": "ismael-test Rest API",
        "version": "1.0.1"
    },
    "servers" : [
        "x-amazon-apigateway-endpoint-configuration": {
            "vpcEndpointIds": [
                "vpce-00111a1111a1aa011"
            ]
        }
    ],
    "paths": {
        "/example": {
            "get": {
                "responses": {
                    "200": {
                        "description": "200 response",
                        "content": {
                            "application/json": {
                                "schema": {
                                    "$ref": "#/components/schemas/SampleResponse"
                                }
                            }
                        }
                    }
                },
                "x-amazon-apigateway-integration": {
                    "uri": "arn:aws:apigateway:${AWS::Region}:lambda:path/2015-03-31/functions/arn:aws:lambda:${AWS::Region}:${AWS::AccountId}::function:ismael-test-st-imr:st-imr/invocations",
                    "responses": {
                        "default": {
                            "statusCode": "200"
                        }
                    },
                    "passthroughBehavior": "when_no_match",
                    "httpMethod": "POST",
                    "contentHandling": "CONVERT_TO_TEXT",
                    "type": "aws_proxy"
                }
            }
        }
    },
    "components": {
        "schemas": {
            "SampleResponse": {
                "title": "Sample Response",
                "type": "object",
                "properties": {
                    "message": {
                        "type": "string"
                    }
                }
            },
            "500Response": {
                "$ref": "#/components/schemas/Error"
            },
            "Error": {
                "type": "object",
                "properties": {
                    "errorCode": {
                        "type": "string"
                    },
                    "message": {
                        "type": "string"
                    }
                }
            }
        }
    },
    "x-amazon-apigateway-policy": {
        "Version": "2012-10-17",
        "Statement": [
            {
                "Effect": "Allow",
                "Principal": "*",
                "Action": [
                    "execute-api:Invoke",
                    "execute-api:GET"
                ],
                "Resource": "arn:aws:execute-api:${AWS::Region}:${AWS::AccountId}:*",
                "Condition": {
                    "StringEquals": {
                      "aws:sourceVpce": "vpce-00111a1111a1aa011"
                    }
                }
            }
        ]
    }
}

При использовании раздела server / x-amazon-apigateway-endpoint-configuration развертывание завершается ошибкой со следующим сообщением:

AmazonApiGateway; Status Code: 400; Error Code: BadRequestException;
Request ID: 12600381-6232-4213-894d-264b7501828b) ```

Заранее спасибо!

Обратите внимание, что идентификатор vpce был изменен на всякий случай.

...