ฉันได้สร้าง API Gateway สำหรับ websockets ด้วย CDK
เพื่อให้จำ URL ได้ง่ายขึ้น ฉันต้องการให้ ALIAS แก่ sadjl342r.execute-api.amazonaws ใน Route53
บางอย่างเช่น "my-ws-api.mydomain.tld"
นี่คือวิธีที่ฉันสร้างเกตเวย์ API
const websocketEventsLambda: IFunction = this.createWebsocketsLambda(props.stage);
this.apiGatewayWebSockets = CfnApi ใหม่ (สิ่งนี้, apiGatewayId, {
ชื่อ: apiGatewayId
ประเภทโปรโตคอล: "เว็บซ็อกเก็ต",
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:lambda:path/2015-03-31/functions/arn:aws:lambda" +
":<REGION>:<ACCOUNT_ID>:function:" + websocketEventsLambda.functionName +
"/ คำขอ",
passthroughBehavior: "WHEN_NO_MATCH",
payloadFormatVersion: "1.0",
}
);
const connectRoute = CfnRoute ใหม่ (
นี้,
"apigateway-websockets-เชื่อมต่อเส้นทาง-" + props.stage
{
apiId: this.apiGatewayWebSockets.ref
เส้นทางคีย์: "$connect",
authorizationType: "ไม่มี",
เป้าหมาย: "การรวมระบบ/" + connectIntegration.ref
}
);
การปรับใช้ const = CfnDeployment ใหม่ (
นี้,
`apigatewayv2-websockets-deployment-` + props.stage,
{
apiId: this.apiGatewayWebSockets.ref
}
);
ใหม่ CfnStage(นี่ `apigateway-stage-${props.stage}`, {
apiId: this.apiGatewayWebSockets.ref
autoDeploy: จริง
DeploymentId: การปรับใช้.ref
ชื่อเวที: props.stage
});
การปรับใช้.addDependsOn (connectRoute);
การปรับใช้.addDependsOn (disconnectRoute);
deployment.addDependsOn(subscribeRoute);
การปรับใช้.addDependsOn (defaultRoute);
this.webSocketsApiURL =
การปรับใช้ apiId +
".execute-api" +
this.region +
".amazonaws.com/" + props.stage;
ตอนนี้ฉันพยายามสร้าง ARecord ภายในขอบเขตเดียวกัน (ฉันใช้คำตอบนี้เป็นจุดเริ่มต้น: https://stackoverflow.com/a/56599567/15013406)
const domainName: string = "ws-api-" + props.stage + "." + โดเมน;
ใหม่ route53.ARecord (นี่ "AliasRecord", {
ชื่อระเบียน: ชื่อโดเมน,
เป้าหมาย: route53.RecordTarget.fromAlias({
ผูก () {
กลับ {
ชื่อ DNS: webSocketsApiURL
hostedZoneId: idontknowwhattoenterhere
};
}
}),
โซน: hostedZone
});
ฉันไม่รู้ว่าต้องป้อนอะไรสำหรับ hostedZoneId ในข้อมูลโค้ดสุดท้าย โปรดทราบว่าคำตอบนี้ระบุว่าต้องเป็นโซนอื่นที่ไม่ใช่โซนของโดเมนของฉันเองที่ควรชี้ไปที่ API Gateway
ดู https://stackoverflow.com/a/56599567/15013406:
หมายเหตุ: hostedZoneId สำหรับบันทึกนามแฝงของคุณไม่เหมือนกับรหัสโซนที่โฮสต์ของโซนของคุณเอง
)