Я создал шлюз API для веб-сокетов с CDK.
Для облегчения запоминания URL-адреса я хочу дать sadjl342r.execute-api.amazonaws псевдоним в Route53.
Что-то вроде «my-ws-api.mydomain.tld»
Вот как я создал шлюз API
const websocketEventsLambda: IFunction = this.createWebsocketsLambda(props.stage);
this.apiGatewayWebSockets = новый CfnApi(это, apiGatewayId, {
имя: apiGatewayId,
тип протокола: "WEBSOCKET",
routeSelectionExpression: "$request.body.topic",
apiKeySelectionExpression: "$request.header.x-api-key"
});
const connectIntegration = новый CfnIntegration(
это,
"websockets-connect-lambda-integration-" + props.stage,
{
APIId: this.apiGatewayWebSockets.ref,
тип подключения: "ИНТЕРНЕТ",
тип интеграции: "AWS_PROXY",
Метод интеграции: "POST",
интеграцияUri:
"arn:aws:apigateway:eu-central-1:лямбда:путь/2015-03-31/функции/arn:aws:лямбда" +
":<REGION>:<ACCOUNT_ID>:function:" + websocketEventsLambda.functionName +
"/вызовы",
passthroughBehavior: "WHEN_NO_MATCH",
полезная нагрузкаFormatVersion: "1.0",
}
);
const connectRoute = новый CfnRoute(
это,
"apigateway-websockets-connect-route-" + props.stage,
{
APIId: this.apiGatewayWebSockets.ref,
маршрутКлюч: "$connect",
авторизацияТип: "НЕТ",
цель: "интеграции/" + connectIntegration.ref
}
);
константное развертывание = новое CfnDeployment(
это,
`apigatewayv2-websockets-deployment-` + props.stage,
{
APIId: this.apiGatewayWebSockets.ref
}
);
новый CfnStage(this, `apigateway-stage-${props.stage}`, {
APIId: this.apiGatewayWebSockets.ref,
авторазвертывание: правда,
идентификатор развертывания: развертывание.ref,
stageName: реквизит.стадия
});
развертывание.addDependsOn(connectRoute);
развертывание.addDependsOn(disconnectRoute);
развертывание.addDependsOn(subscribeRoute);
развертывание.addDependsOn(defaultRoute);
this.webSocketsApiURL =
развертывание.apiid +
".execute-api." +
этот.регион +
".amazonaws.com/" + props.stage;
Теперь я пытаюсь создать ARecord в той же области (я использовал этот ответ в качестве отправной точки: https://stackoverflow.com/a/56599567/15013406)
const domainName: string = "ws-api-" + props.stage + "." + ДОМЕН;
новый route53.ARecord (это, "AliasRecord", {
имя_записи: имя_домена,
цель: route53.RecordTarget.fromAlias({
связывать() {
возвращаться {
dnsName: webSocketsApiURL,
hostedZoneId: не знаю, что входить сюда
};
}
}),
зона: hostedZone
});
Я не знаю, что ввести для hostedZoneId в последнем фрагменте кода. Обратите внимание, что в этом ответе говорится, что это должна быть какая-то другая зона, отличная от зоны моего собственного домена, которая должна указывать на шлюз API.
Видеть https://stackoverflow.com/a/56599567/15013406:
Примечание: hostedZoneId для вашей записи псевдонима не совпадает с идентификатором размещенной зоны вашей собственной зоны.
)