Решено
Следующий 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 был изменен на всякий случай.