Nota:
El acceso a esta página requiere autorización. Puede intentar iniciar sesión o cambiar directorios.
El acceso a esta página requiere autorización. Puede intentar cambiar los directorios.
En este tutorial, usará el emulador de Azure Cosmos DB Linux como base de datos de desarrollo local, creará una aplicación typeScript y, a continuación, migrará a Azure Cosmos DB intercambiando las credenciales.
En este tutorial, usted hará lo siguiente:
- Inicio del emulador de Azure Cosmos DB en un contenedor de Docker
- Creación de una aplicación TypeScript
- Conexión de la aplicación al emulador local
- Creación de una cuenta de Azure Cosmos DB
- Implementación de la aplicación en Azure Cosmos DB
Prerrequisitos
- Node.js 22 o posterior
- Docker Desktop
- CLI de Azure
- Una suscripción Azure. Si no tiene una suscripción de Azure, cree una cuenta free antes de comenzar.
Inicio del emulador
Use la imagen de contenedor de Docker para el emulador de Azure Cosmos DB basado en Linux para crear una base de datos de desarrollo local.
Extraiga la imagen del contenedor del emulador.
docker pull mcr.microsoft.com/cosmosdb/linux/azure-cosmos-emulator:vnext-previewInicie el contenedor del emulador.
docker run --detach --publish 8081:8081 --publish 1234:1234 --name cosmos-db mcr.microsoft.com/cosmosdb/linux/azure-cosmos-emulator:vnext-previewCompruebe que el contenedor se está ejecutando.
docker ps --filter "name=cosmos-db"Importante
El punto de conexión de puerta de enlace del emulador está disponible en
https://localhost:8081y el explorador de datos está disponible enhttp://localhost:1234. El emulador usa una clave de autenticación conocida:AccountEndpoint=http://localhost:8081/;AccountKey=C2y6yDjf5/R+ob0N8A7Cgv30VRDJIWEHLM+4QDU5DE2nQ9nDuVTqobD4b8mGGyPMbIZnqyMsEcaGQy67XIw/Jw==;Configuración Importancia Punto final https://localhost:8081Clave C2y6yDjf5/R+ob0N8A7Cgv30VRDJIWEHLM+4QDU5DE2nQ9nDuVTqobD4b8mGGyPMbIZnqyMsEcaGQy67XIw/Jw==
Creación de la aplicación
Cree una aplicación Next.js y conéctela al emulador local.
Cree una aplicación Next.js en una carpeta vacía. Acepte cualquier configuración predeterminada.
npx create-next-app .Instale la biblioteca cliente de Node.js para Azure Cosmos DB.
npm install --save @azure/cosmosCree un nuevo archivo denominado
app/data.tsxcon el código siguiente. Este archivo contiene las acciones del servidor que interactúan con la base de datos."use server"; import { CosmosClient } from "@azure/cosmos"; import { revalidatePath } from "next/cache"; const connectionString = "<cosmos-db-connection-string>"; const client = new CosmosClient(connectionString); const { database } = await client.databases.createIfNotExists({ id: "work-management" }); const { container } = await database.containers.createIfNotExists({ id: "tasks", partitionKey: "/id" }); export type Todo = { id: string; title: string; completed: boolean; }; export async function getTodos(): Promise<Todo[]> { const { resources } = await container.items .query("SELECT * FROM c ORDER BY c._ts DESC") .fetchAll(); return resources.map((doc) => ({ id: doc.id, title: doc.title, completed: doc.completed, })); } export async function addTodo(formData: FormData) { const title = formData.get("title") as string; if (!title?.trim()) return; await container.items.create({ title: title.trim(), completed: false, }); revalidatePath("/"); } export async function toggleTodo(formData: FormData) { const id = formData.get("id") as string; const { resource: doc } = await container.item(id, id).read(); if (doc) { await container.item(id, id).replace({ ...doc, completed: !doc.completed, }); } revalidatePath("/"); } export async function deleteTodo(formData: FormData) { const id = formData.get("id") as string; await container.item(id, id).delete(); revalidatePath("/"); }Importante
Reemplace el marcador de posición cadena de conexión por las credenciales especificadas anteriormente en este tutorial al iniciar el contenedor.
Elimine el archivo existente
app/page.tsxy reemplácelo por el código siguiente.import { getTodos, addTodo, toggleTodo, deleteTodo } from "./data"; export default async function Home() { const todos = await getTodos(); return ( <div className="min-h-screen bg-black text-zinc-50 font-sans"> <main className="max-w-lg mx-auto py-16 px-8"> <h1 className="text-2xl font-semibold tracking-tight mb-8">Todo App</h1> <form action={addTodo} className="flex gap-2 mb-8"> <input name="title" placeholder="Add a todo..." required className="flex-1 rounded-md border border-zinc-700 bg-zinc-900 px-3 py-2 text-sm text-zinc-100 placeholder:text-zinc-500 focus:outline-none focus:ring-2 focus:ring-zinc-600" /> <button type="submit" className="rounded-md bg-zinc-100 px-4 py-2 text-sm font-medium text-zinc-900 hover:bg-zinc-300 transition-colors"> Add </button> </form> <ul className="space-y-2"> {todos.map((todo) => ( <li key={todo.id} className="flex items-center gap-3 rounded-md border border-zinc-800 bg-zinc-900 px-3 py-2"> <form action={toggleTodo}> <input type="hidden" name="id" value={todo.id} /> <button type="submit" className="text-lg leading-none">{todo.completed ? "✅" : "⬜"}</button> </form> <span className={`flex-1 text-sm ${todo.completed ? "line-through text-zinc-500" : "text-zinc-100"}`}>{todo.title}</span> <form action={deleteTodo}> <input type="hidden" name="id" value={todo.id} /> <button type="submit" className="text-sm text-red-400 hover:text-red-300 transition-colors">✕</button> </form> </li> ))} </ul> {todos.length === 0 && <p className="text-center text-sm text-zinc-500 mt-4">No todos yet.</p>} </main> </div> ); }Ejecutar la aplicación localmente.
npm run devAbra
http://localhost:3000en el explorador para comprobar que la aplicación se está ejecutando y conectada al emulador.Sugerencia
Puede revisar los datos que crea esta aplicación en el Data Explorer emulador de Azure Cosmos DB en
http://localhost:1234. También puede usar la extensión Azure Cosmos DB para Visual Studio Code La base de datos se denominawork-managementy el contenedor se denominatasks.Detenga la aplicación.
Creación de una cuenta de Azure Cosmos DB
Cree una cuenta de Azure Cosmos DB para hospedar los datos de la aplicación en la nube.
Cree variables para el nombre de la cuenta y el nombre del grupo de recursos de destino.
RESOURCE_GROUP_NAME="<resource-group-name>" ACCOUNT_NAME="<account-name>"Importante
Reemplace
<resource-group-name>y<account-name>con sus propios valores. El nombre de la cuenta debe ser único globalmente.Cree una cuenta de Azure Cosmos DB.
az cosmosdb create \ --resource-group $RESOURCE_GROUP_NAME \ --name $ACCOUNT_NAMEObtenga la cadena de conexión de la cuenta.
az cosmosdb keys list \ --resource-group $RESOURCE_GROUP_NAME \ --name $ACCOUNT_NAME \ --type connection-strings \ --query "connectionStrings[0].connectionString" \ --output tsvAnote el valor de la cadena de conexión. Lo usa en el siguiente paso.
Conexión de la aplicación a Azure Cosmos DB
Actualice la aplicación para conectarse a Azure Cosmos DB en lugar del emulador local.
En
app/data.tsx, reemplaza la cadena de conexión del emulador por la cadena de conexión de Azure Cosmos DB.const connectionString = "<azure-cosmos-db-connection-string>";Importante
Reemplace
<azure-cosmos-db-connection-string>por la cadena de conexión que registró en el paso anterior.Vuelva a iniciar la aplicación.
npm run devAbra
http://localhost:3000en el explorador. La aplicación ahora lee y escribe datos en la cuenta de Azure Cosmos DB.
Limpieza de recursos
Cuando ya no necesite los recursos creados en este tutorial, elimínelos para evitar incurrir en cargos.
Elimine la cuenta de Azure Cosmos DB.
az cosmosdb delete \ --resource-group $RESOURCE_GROUP_NAME \ --name $ACCOUNT_NAME \ --yesDetener y quitar el contenedor del emulador.
docker stop cosmos-db docker rm cosmos-db