APIM(Azure API Management)을 Microsoft Fabric의 API for GraphQL과 통합하면 ID 관리, 속도 제한 및 캐싱과 같은 강력한 확장성 및 보안 기능을 제공하여 API의 기능을 크게 향상시킬 수 있습니다. 이러한 기능을 설정하고 구성하는 과정을 안내합니다.
Azure API Management에 패브릭 GraphQL API 추가
이 섹션에서는 Fabric 및 APIM 인스턴스에 GraphQL API가 이미 실행되고 있다고 가정합니다. 그렇지 않은 경우 Fabric에서 GraphQL API를 만드는 방법에 대한 지침을 따르거나 API for GraphQL 포털에서 샘플 SQL 데이터베이스로 시작을 클릭하여 새 API에서 시작할 수 있습니다.
GraphQL 항목으로 이동하고 리본에서 엔드포인트 복사 단추를 클릭하여 패브릭 포털에서 API 엔드포인트를 검색하기 시작합니다. GraphQL 스키마를 로컬 디바이스의 파일에 저장해야 합니다. 이는 스키마 내보내기 버튼을 클릭하여 파일로 저장하여 수행할 수 있습니다.
이제 Azure Portal에서 API Management 인스턴스로 이동하고 API>+ API 추가를 선택합니다.
GraphQL 아이콘을 선택하고 GraphQL 스키마에서 APIM 만들기 화면에서 표시 이름, 이름 및 GraphQL API 엔드포인트와 같은 필수 필드를 입력합니다. 스키마 업로드를 선택하고 이전에 다운로드한 스키마 파일을 사용합니다.
Fabric에서 APIM 및 API for GraphQL에서 관리 ID 사용
다음으로, 관리 ID를 사용하여 이 API에 대한 인증을 처리하는 인증에 대한 정책을 구성해야 합니다. Azure Portal에서 또는 사용할 수 있는 도구를 사용하여 관리 ID를 만들 수 있습니다.
이제 인증에 사용할 수 있는 관리 ID 자격 증명이 있으므로 Fabric의 GraphQL 항목에 권한을 부여해야 합니다. 간단히 하기 위해 관리 ID(이 예제에서는 apim-id)를 GraphQL API와 해당 데이터 원본이 모두 있는 작업 영역의 멤버로 추가합니다.
API 자체 및 API에 연결된 데이터 원본(예: LakeHouse 또는 SQL 데이터베이스)과 같은 패브릭 항목에 직접 액세스를 사용하도록 설정하려는 경우 각 항목에 대한 관리 ID에 대한 적절한 권한을 부여해야 합니다. 특히 SSO(Single Sign-On) 인증을 사용하여 API에 연결된 경우를 예로 들 수 있습니다. 사용 권한 요약에서 자세한 정보를 찾을 수 있습니다.
작업 영역, Fabric GraphQL API 및/또는 연결된 데이터 원본에 대한 자격 증명 권한을 부여한 후에는 해당 자격 증명을 활용하여 인증을 수행하도록 APIM에 표시해야 합니다. APIM 콘솔로 돌아가 서 보안>관리 ID 로 이동하여 Fabric GraphQL API에 액세스하는 데 사용하는 것과 동일한 사용자 할당 관리 ID를 추가합니다.
다음으로 이전에 만든 GraphQL API의 "API 정책" 탭으로 이동한 다음 아래 <inbound><base/>
항목을 추가하여 인바운드 처리 정책을 편집합니다.
<authentication-managed-identity
resource="https://analysis.windows.net/powerbi/api"
client-id="MANAGED IDENTITY CLIENT ID GOES HERE"
output-token-variable-name="token-variable"
ignore-error="false" />
<set-header name="Authorization" exists-action="override">
<value>@("Bearer " + (string)context.Variables["token-variable"])</value>
</set-header>
위의 코드 조각에서 클라이언트 ID를 관리 식별자의 클라이언트 ID로 바꿔야 합니다. 정책을 저장하여 계속합니다.
이제 API로 돌아가 서 테스트 탭으로 이동하여 GraphQL을 통해 패브릭 데이터에 대한 쿼리 및/또는 변형을 실행할 수 있는지 확인합니다.
APIM과 Fabric GraphQL 간의 성공적인 연결 테스트
캐싱 (데이터 임시 저장)
API Management의 API 및 작업은 응답 캐싱을 사용하여 구성할 수 있습니다. 응답 캐싱은 API 호출자의 대기 시간과 API 공급자의 백 엔드 부하를 크게 줄일 수 있습니다. APIM은 기본 제공 캐싱을 지원하거나 사용자 고유의 Redis 인스턴스를 사용하도록 선택할 수 있습니다. 두 경우 모두 캐싱 정책을 정의해야 합니다. 여기서는 대부분의 시나리오에서 작동하는 간단한 캐싱 구성으로 이전 정책을 수정했습니다.
<policies>
<inbound>
<base />
<authentication-managed-identity
resource="https://analysis.windows.net/powerbi/api"
client-id="MANAGED IDENTITY CLIENT ID GOES HERE"
output-token-variable-name="token-variable"
ignore-error="false" />
<set-header name="Authorization" exists-action="override">
<value>@("Bearer " + (string)context.Variables["token-variable"])</value>
</set-header>
<cache-lookup-value
key="@(context.Request.Body.As<String>(preserveContent: true))"
variable-name="cachedResponse"
default-value="not_exists" />
</inbound>
<!-- Control if and how the requests are forwarded to services -->
<backend>
<choose>
<when condition="@(context.Variables.GetValueOrDefault<string>("cachedResponse") == "not_exists")">
<forward-request />
</when>
</choose>
</backend>
<!-- Customize the responses -->
<outbound>
<base />
<choose>
<when condition="@(context.Variables.GetValueOrDefault<string>("cachedResponse") != "not_exists")">
<set-body>@(context.Variables.GetValueOrDefault<string>("cachedResponse"))</set-body>
</when>
<when condition="@((context.Response.StatusCode == 200) && (context.Variables.GetValueOrDefault<string>("cachedResponse") == "not_exists"))">
<cache-store-value key="@(context.Request.Body.As<String>(preserveContent: true))" value="@(context.Response.Body.As<string>(preserveContent: true))" duration="60" />
</when>
</choose>
</outbound>
<!-- Handle exceptions and customize error responses -->
<on-error>
<base />
</on-error>
</policies>
APIM 포털에서 GraphQL API 쿼리 또는 변형을 추적하여 요청이 캐시되는지 확인할 수 있습니다.
고급 캐싱 시나리오는 캐싱에 대한 APIM 설명서를 참조하세요.
속도 제한
클라이언트가 특정 기간에 수행할 수 있는 API 호출 수를 제한할 수 있습니다. 다음은 지정된 사용자에 대해 60초마다 2개 이하의 호출을 적용하는 아래에 <inbound><base/>
추가할 수 있는 샘플 속도 제한 정책 항목입니다.
<rate-limit-by-key
calls="2"
renewal-period="60"
counter-key="@(context.Request.Headers.GetValueOrDefault("Authorization"))"
increment-condition="@(context.Response.StatusCode == 200)"
remaining-calls-variable-name="remainingCallsPerUser" />
1분 안에 2개 이상의 API 호출을 보낸 후 오류 메시지가 표시됩니다.
{
"statusCode": 429,
"message": "Rate limit is exceeded. Try again in 58 seconds."
}
APIM에서 속도 제한 정책을 구성하는 방법에 대한 자세한 내용은 설명서를 참조하세요.
GraphQL용 Microsoft Fabric API를 Azure API Management와 통합하면 패브릭의 풍부한 데이터 기능과 APIM의 엔터프라이즈급 게이트웨이 기능이라는 두 가지 세계 최고의 기능이 결합됩니다. 관리 ID를 구성하여 Fabric에 대한 보안 인증을 사용하도록 설정합니다. 사용자 지정 캐싱 및 속도 제한 정책을 사용하면 GraphQL API의 고유한 특성에 맞게 조정된 성능, 비용 및 사용자 환경을 세밀하게 제어할 수 있습니다.
이 설정은 패브릭 데이터를 보호하는 더 많은 옵션을 제공 할뿐만 아니라 팀 및 테넌트 전체에서 프로덕션 워크로드를 지원하는 데 필요한 확장성 및 가시성을 제공합니다.