Am creat un gateway API pentru websocket-uri cu CDK.
Pentru a reține mai ușor adresa URL, vreau să dau lui sadjl342r.execute-api.amazonaws un ALIAS în Route53
Ceva de genul „my-ws-api.mydomain.tld”
Acesta este modul în care am creat gateway-ul API
const websocketEventsLambda: IFunction = this.createWebsocketsLambda(props.stage);
this.apiGatewayWebSockets = new CfnApi(this, apiGatewayId, {
nume: apiGatewayId,
protocolType: „WEBSOCKET”,
routeSelectionExpression: „$request.body.topic”,
apiKeySelectionExpression: „$request.header.x-api-key”
});
const connectIntegration = CfnIntegration nou (
acest,
"websockets-connect-lambda-integration-" + props.stage,
{
apiId: this.apiGatewayWebSockets.ref,
ConnectType: „INTERNET”,
integrationType: „AWS_PROXY”,
integrationMethod: „POST”,
integrationUri:
„arn:aws:apigateway:eu-central-1:lambda:path/2015-03-31/functions/arn:aws:lambda” +
":<REGION>:<ACCOUNT_ID>:function:" + websocketEventsLambda.functionName +
„/invocații”,
passthroughBehavior: „WHEN_NO_MATCH”,
payloadFormatVersion: „1.0”,
}
);
const connectRoute = nou CfnRoute(
acest,
„apigateway-websockets-connect-route-” + props.stage,
{
apiId: this.apiGatewayWebSockets.ref,
routeKey: „$connect”,
autorizațieType: „NONE”,
target: "integrations/" + connectIntegration.ref
}
);
implementare const = CfnDeployment nou (
acest,
`apigatewayv2-websockets-deployment-` + props.stage,
{
apiId: this.apiGatewayWebSockets.ref
}
);
nou CfnStage(acest, `apigateway-stage-${props.stage}`, {
apiId: this.apiGatewayWebSockets.ref,
AutoDeploy: adevărat,
deploymentId: deployment.ref,
stageName: props.stage
});
deployment.addDependsOn(connectRoute);
deployment.addDependsOn(disconnectRoute);
deployment.addDependsOn(subscribeRoute);
deployment.addDependsOn(defaultRoute);
this.webSocketsApiURL =
implementare.apiId +
„.execute-api”. +
aceasta.regiune +
„.amazonaws.com/” + props.stage;
Acum încerc să creez un ARRecord în același domeniu (am folosit acest răspuns ca punct de plecare: https://stackoverflow.com/a/56599567/15013406)
const domainName: șir = "ws-api-" + props.stage + "." + DOMENIU;
rută nouă53.ARecord(aceasta, „AliasRecord”, {
recordName: domainName,
țintă: route53.RecordTarget.fromAlias({
bind() {
întoarcere {
dnsName: webSocketsApiURL,
hostedZoneId: nu știu ce să intru aici
};
}
}),
zona: hostedZone
});
Nu știu ce să introduc pentru hostedZoneId în ultimul fragment de cod. Rețineți că acest răspuns spune că aceasta trebuie să fie o altă zonă decât zona propriului meu domeniu care ar trebui să indice către API Gateway
Vedea https://stackoverflow.com/a/56599567/15013406:
Notă: hostedZoneId pentru înregistrarea aliasului dvs. nu este același cu ID-ul zonei găzduite al propriei zone.
)