이 빠른 시작에서는 TypeScript 언어로 작성된 Node.js 애플리케이션에서 Azure Managed Redis 캐시를 사용하고 Microsoft Entra ID를 사용하여 Redis 연결을 인증하는 방법을 알아봅니다.
필수 조건
Azure 구독 - 체험 구독 만들기
Node.js LTS 설치
TypeScript 설치
이 빠른 시작에서 사용되는 패키지를 프로젝트에 추가합니다.
npm install redis @redis/entraid @redis/clientAzure CLI를 사용하여 개발 환경에 대해 Azure에 인증:
az login
이 문서의 빠른 시작 샘플 코드는 GitHub에서 사용할 수 있습니다.
Azure Managed Redis 인스턴스 만들기
먼저 Azure Portal에서 Azure Managed Redis 캐시를 만듭니다.
캐시를 만들 때 Microsoft Entra ID 인증은 기본적으로 사용하도록 설정되므로 처음부터 안전하게 보호됩니다. 이 빠른 시작의 경우 캐시는 퍼블릭 엔드포인트를 사용합니다. 프로덕션 환경에서는 프라이빗 엔드포인트 및 기타 네트워크 컨트롤을 사용하는 것이 좋습니다.
- 포털을 사용하여 캐시를 만들려면 다음 절차 중 하나를 수행합니다.
-
필요에 따라 Azure CLI, PowerShell 또는 원하는 도구를 사용하여 캐시를 만들 수 있습니다.
Redis 캐시에 연결하는 코드
TypeScript 코드 샘플 파일 index.ts의 첫 번째 부분에서 캐시에 대한 연결을 구성합니다.
import { DefaultAzureCredential } from '@azure/identity';
import { EntraIdCredentialsProviderFactory, REDIS_SCOPE_DEFAULT } from '@redis/entraid';
import { createCluster, RedisClusterType, RedisModules, RedisFunctions, RedisScripts } from '@redis/client';
import * as net from 'node:net';
const redisEndpoint = process.env.REDIS_ENDPOINT!;
if (!redisEndpoint) {
console.error('REDIS_ENDPOINT is not set. It should look like: `cache-name.region-name.redis.azure.net:<PORT>`. Find the endpoint in the Azure portal.');
process.exit(1);
}
const [redisHostName, _] = redisEndpoint.split(":");
let client;
function createRedisClient(): RedisClusterType<RedisModules, RedisFunctions, RedisScripts> {
const credential = new DefaultAzureCredential();
const provider = EntraIdCredentialsProviderFactory.createForDefaultAzureCredential({
credential,
scopes: REDIS_SCOPE_DEFAULT,
options: {},
tokenManagerConfig: {
expirationRefreshRatio: 0.8
}
});
const client = createCluster<RedisModules, RedisFunctions, RedisScripts>({
rootNodes: [{ url: `rediss://${redisEndpoint}` }],
defaults: {
credentialsProvider: provider,
socket: {
connectTimeout: 15000,
tls: true,
// This quickstart code uses a fail fast `reconnectStrategy` which
// is suitable only in sample code. The purpose is to quickly
// demonstrate the functionality without getting stuck in
// reconnection loops if your endpoint or authentication is not
// correctly configured. In production code, a more robust
// `reconnectStrategy` should be implemented.
reconnectStrategy: () => new Error('Failure to connect')
}
},
nodeAddressMap(incomingAddress) {
const [hostNameOrIP, port] = incomingAddress.split(":");
const address =
net.isIP(hostNameOrIP) !== 0
? redisHostName
: hostNameOrIP;
return {
host: address,
port: Number(port),
};
}
});
client.on('error', (err) => console.error('Redis cluster error:', err));
return client;
}
createRedisClient() 함수를 사용하여 Redis 캐시에 대한 node-redis 클라이언트 연결을 만드십시오.
client = createRedisClient();
await client.connect();
연결을 테스트하는 코드
다음 섹션에서는 Redis PING 명령을 사용하여 연결을 테스트합니다. Redis 서버는 .를 반환합니다 PONG.
const pingResult = await client.ping();
console.log('Ping result:', pingResult);
코드가 키를 설정하고 키를 가져옵니다.
이 섹션에서는 명령을 사용하여 SETGET 가장 간단한 방법으로 Redis 캐시에서 데이터 쓰기 및 읽기를 시작합니다.
const setResult = await client.set("Message", "Hello! The cache is working from Node.js!");
console.log('Set result:', setResult);
const getResult = await client.get("Message");
console.log('Get result:', getResult);
코드 실행
Node.js 애플리케이션을 빌드하고 실행합니다.
tsc
node index.js
결과는 다음과 같습니다.
Ping result: PONG
Set result: OK
Get result: Hello! The cache is working from Node.js!
여기서는 이 코드 샘플을 전체적으로 볼 수 있습니다.
import { DefaultAzureCredential } from '@azure/identity';
import { EntraIdCredentialsProviderFactory, REDIS_SCOPE_DEFAULT } from '@redis/entraid';
import { createCluster, RedisClusterType, RedisModules, RedisFunctions, RedisScripts } from '@redis/client';
import * as net from 'node:net';
const redisEndpoint = process.env.REDIS_ENDPOINT!;
if (!redisEndpoint) {
console.error('REDIS_ENDPOINT is not set. It should look like: `cache-name.region-name.redis.azure.net:<PORT>`. Find the endpoint in the Azure portal.');
process.exit(1);
}
const [redisHostName, _] = redisEndpoint.split(":");
let client;
function createRedisClient(): RedisClusterType<RedisModules, RedisFunctions, RedisScripts> {
const credential = new DefaultAzureCredential();
const provider = EntraIdCredentialsProviderFactory.createForDefaultAzureCredential({
credential,
scopes: REDIS_SCOPE_DEFAULT,
options: {},
tokenManagerConfig: {
expirationRefreshRatio: 0.8
}
});
const client = createCluster<RedisModules, RedisFunctions, RedisScripts>({
rootNodes: [{ url: `rediss://${redisEndpoint}` }],
defaults: {
credentialsProvider: provider,
socket: {
connectTimeout: 15000,
tls: true,
// This quickstart code uses a fail fast `reconnectStrategy` which
// is suitable only in sample code. The purpose is to quickly
// demonstrate the functionality without getting stuck in
// reconnection loops if your endpoint or authentication is not
// correctly configured. In production code, a more robust
// `reconnectStrategy` should be implemented.
reconnectStrategy: () => new Error('Failure to connect')
}
},
nodeAddressMap(incomingAddress) {
const [hostNameOrIP, port] = incomingAddress.split(":");
const address =
net.isIP(hostNameOrIP) !== 0
? redisHostName
: hostNameOrIP;
return {
host: address,
port: Number(port),
};
}
});
client.on('error', (err) => console.error('Redis cluster error:', err));
return client;
}
try {
client = createRedisClient();
await client.connect();
const pingResult = await client.ping();
console.log('Ping result:', pingResult);
const setResult = await client.set("Message", "Hello! The cache is working from Node.js!");
console.log('Set result:', setResult);
const getResult = await client.get("Message");
console.log('Get result:', getResult);
} catch (err) {
console.error('Error:', err);
} finally {
if (client) {
try {
await client.quit();
} catch (quitErr) {
console.error('Error occurred while quitting Redis client:', quitErr);
}
}
}
자원을 정리하세요
이 문서에서 만든 리소스를 계속 사용하려면 리소스 그룹을 유지합니다.
그렇지 않고 리소스 사용을 완료하는 경우 요금이 부과되지 않도록 하려면 만든 Azure 리소스 그룹을 삭제하면 됩니다.
중요합니다
리소스 그룹을 삭제하면 다시 되돌릴 수 없습니다. 리소스 그룹을 삭제하는 경우 그 안의 모든 리소스가 영구적으로 삭제됩니다. 잘못된 리소스 그룹 또는 리소스를 자동으로 삭제하지 않도록 해야 합니다. 유지하려는 리소스가 포함된 기존 리소스 그룹 내에서 리소스를 만든 경우 리소스 그룹을 삭제하는 대신 각 리소스를 개별적으로 삭제할 수 있습니다.
리소스 그룹을 삭제하려면
Azure Portal에 로그인한 다음, 리소스 그룹을 선택합니다.
삭제하려는 리소스 그룹을 선택합니다.
리소스 그룹이 많은 경우 필드 필터링... 상자를 사용하여 이 문서에 대해 만든 리소스 그룹의 이름을 입력합니다. 결과 목록에서 리소스 그룹을 선택합니다.
리소스 그룹 삭제를 선택합니다.
리소스 그룹 삭제를 확인하는 메시지가 표시됩니다. 리소스 그룹의 이름을 입력하여 확인한 다음, 삭제를 선택합니다.
잠시 후, 리소스 그룹 및 모든 해당 리소스가 삭제됩니다.