백엔드 서비스는 다음 WebSocket 연결 HTTP 요청을 사용하여 연결된 클라이언트에 콜백 메시지를 보내거나 연결 정보를 얻거나 클라이언트 연결을 끊을 수 있습니다.
중요
이러한 요청은 IAM 권한 부여를 사용하므로 서명 버전 4(SigV4)로 서명해야 합니다. 이를 수행하기 위해 API Gateway 관리 API를 사용할 수 있습니다. 자세한 내용은 ApiGatewayManagementApi
다음 명령에서
를 실제 API ID, 즉 API Gateway 콘솔에 표시되거나 AWS CLI create-api 명령에서 반환하는 ID로 바꿔야 합니다. 이 명령을 사용하기 전에 연결을 설정해야 합니다.{api-id}
클라이언트에게 콜백 메시지를 전송하려면 다음을 사용합니다.
POST https://
{api-id}
.execute-api.us-east-1
.amazonaws.com/{stage}
/@connections/{connection_id}
Postman
을 사용하거나 다음 예와 같이 awscurl
를 호출하여 이 요청을 테스트할 수 있습니다.
awscurl --service execute-api -X POST -d "hello world" https://
{prefix}
.execute-api.us-east-1
.amazonaws.com/{stage}
/@connections/{connection_id}
다음 예제와 같이 명령을 URL 인코딩해야 합니다.
awscurl --service execute-api -X POST -d "hello world" https://
aabbccddee
.execute-api.us-east-1
.amazonaws.com/prod
/%40connections/R0oXAdfD0kwCH6w%3D
클라이언트의 가장 최신 연결 상태를 얻으려면 다음을 사용합니다.
GET https://
{api-id}
.execute-api.us-east-1
.amazonaws.com/{stage}
/@connections/{connection_id}
클라이언트의 연결을 해제하려면 다음을 사용합니다.
DELETE https://
{api-id
}.execute-api.us-east-1
.amazonaws.com/{stage}
/@connections/{connection_id
}
통합에 $context
변수를 사용하여 동적으로 콜백 URL을 구성할 수 있습니다. 예를 들어 Lambda 프록시 통합과 Node.js
Lambda 함수를 사용하는 경우 다음과 같이 URL을 구성하고 연결된 클라이언트에 메시지를 보낼 수 있습니다.
import {
ApiGatewayManagementApiClient,
PostToConnectionCommand,
} from "@aws-sdk/client-apigatewaymanagementapi";
export const handler = async (event) => {
const domain = event.requestContext.domainName;
const stage = event.requestContext.stage;
const connectionId = event.requestContext.connectionId;
const callbackUrl = `https://${domain}/${stage}`;
const client = new ApiGatewayManagementApiClient({ endpoint: callbackUrl });
const requestParams = {
ConnectionId: connectionId,
Data: "Hello!",
};
const command = new PostToConnectionCommand(requestParams);
try {
await client.send(command);
} catch (error) {
console.log(error);
}
return {
statusCode: 200,
};
};
WebSocket API에 사용자 지정 도메인 이름을 사용하는 경우 함수 코드에서 stage
변수를 제거합니다.
콜백 메시지를 보낼 때는 Lambda 함수에 API Gateway Management API를 직접 호출할 권한이 있어야 합니다. 연결이 설정되기 전 또는 클라이언트 연결이 끊긴 후에 메시지를 게시하면 GoneException
을 포함하는 오류가 발생할 수 있습니다.