Szybki start: łączenie aplikacji języka Go z usługą Azure Cosmos DB dla bazy danych MongoDB
DOTYCZY: MongoDB
Azure Cosmos DB to wielomodelowa usługa bazy danych, która umożliwia szybkie tworzenie dokumentów, tabel, klucz-wartość i grafowych baz danych oraz wykonywanie zapytań o nie przy użyciu funkcji globalnej dystrybucji i skalowania w poziomie. W tym przewodniku Szybki start utworzysz konto usługi Azure Cosmos DB i zarządzasz nim przy użyciu usługi Azure Cloud Shell, sklonujesz istniejącą przykładową aplikację z usługi GitHub i skonfigurujesz ją do pracy z usługą Azure Cosmos DB.
Przykładowa aplikacja to narzędzie do zarządzania oparte na todo
wierszu polecenia napisane w języku Go. Interfejs API usługi Azure Cosmos DB dla bazy danych MongoDB jest zgodny z protokołem przewodowym Bazy danych MongoDB, dzięki czemu każdy sterownik klienta bazy danych MongoDB może nawiązać z nim połączenie. Ta aplikacja używa sterownika Języka Go dla bazy danych MongoDB w sposób niewidoczny dla aplikacji, która jest przechowywana w bazie danych usługi Azure Cosmos DB.
Wymagania wstępne
- Konto platformy Azure z aktywną subskrypcją. Utwórz je bezpłatnie. Możesz też bezpłatnie wypróbować usługę Azure Cosmos DB bez subskrypcji platformy Azure. Możesz również użyć emulatora usługi Azure Cosmos DB z parametry połączenia
.mongodb://localhost:C2y6yDjf5/R+ob0N8A7Cgv30VRDJIWEHLM+4QDU5DE2nQ9nDuVTqobD4b8mGGyPMbIZnqyMsEcaGQy67XIw/Jw==@localhost:10255/admin?ssl=true
. - Zainstaluj go na komputerze i działającą wiedzę na temat języka Go.
- Git.
Użyj środowiska powłoki Bash w usłudze Azure Cloud Shell. Aby uzyskać więcej informacji, zobacz Szybki start dotyczący powłoki Bash w usłudze Azure Cloud Shell.
Jeśli wolisz uruchamiać polecenia referencyjne interfejsu wiersza polecenia lokalnie, zainstaluj interfejs wiersza polecenia platformy Azure. Jeśli korzystasz z systemu Windows lub macOS, rozważ uruchomienie interfejsu wiersza polecenia platformy Azure w kontenerze Docker. Aby uzyskać więcej informacji, zobacz Jak uruchomić interfejs wiersza polecenia platformy Azure w kontenerze platformy Docker.
Jeśli korzystasz z instalacji lokalnej, zaloguj się do interfejsu wiersza polecenia platformy Azure za pomocą polecenia az login. Aby ukończyć proces uwierzytelniania, wykonaj kroki wyświetlane w terminalu. Aby uzyskać inne opcje logowania, zobacz Logowanie się przy użyciu interfejsu wiersza polecenia platformy Azure.
Po wyświetleniu monitu zainstaluj rozszerzenie interfejsu wiersza polecenia platformy Azure podczas pierwszego użycia. Aby uzyskać więcej informacji na temat rozszerzeń, zobacz Korzystanie z rozszerzeń w interfejsie wiersza polecenia platformy Azure.
Uruchom polecenie az version, aby znaleźć zainstalowane wersje i biblioteki zależne. Aby uaktualnić do najnowszej wersji, uruchom polecenie az upgrade.
Klonowanie przykładowej aplikacji
Uruchom następujące polecenia w celu sklonowania przykładowego repozytorium.
Otwórz wiersz polecenia, utwórz nowy folder o nazwie
git-samples
, a następnie zamknij wiersz polecenia.mkdir "C:\git-samples"
Otwórz okno terminala usługi Git, np. git bash, i użyj polecenia
cd
, aby przejść do nowego folderu instalacji aplikacji przykładowej.cd "C:\git-samples"
Uruchom następujące polecenie w celu sklonowania przykładowego repozytorium. To polecenie tworzy kopię aplikacji przykładowej na komputerze.
git clone https://github.com/Azure-Samples/cosmosdb-go-mongodb-quickstart
Przeglądanie kodu
To krok jest opcjonalny. Jeśli chcesz dowiedzieć się, jak działa aplikacja, możesz przejrzeć następujące fragmenty kodu. W przeciwnym razie możesz przejść do sekcji Uruchamianie aplikacji. Układ aplikacji jest następujący:
.
├── go.mod
├── go.sum
└── todo.go
Wszystkie poniższe fragmenty kodu pochodzą z pliku todo.go
.
Łączenie aplikacji języka Go z usługą Cosmos Azure DB
clientOptions
Hermetyzuje parametry połączenia dla usługi Azure Cosmos DB, która jest przekazywana przy użyciu zmiennej środowiskowej (szczegóły w nadchodzącej sekcji). Połączenie jest inicjowane przy użyciu mongo.NewClient
polecenia , do którego clientOptions
jest przekazywane wystąpienie. Ping
funkcja jest wywoływana w celu potwierdzenia pomyślnej łączności (jest to strategia szybka w przypadku awarii).
ctx, cancel := context.WithTimeout(context.Background(), time.Second*10)
defer cancel()
clientOptions := options.Client().ApplyURI(mongoDBConnectionString).SetDirect(true)
c, err := mongo.Connect(ctx, clientOptions)
if err != nil {
log.Fatalf("unable to initialize connection %v", err)
}
err = c.Ping(ctx, nil)
if err != nil {
log.Fatalf("unable to connect %v", err)
}
Uwaga
SetDirect(true)
Korzystanie z konfiguracji jest ważne, bez którego wystąpi następujący błąd łączności:unable to connect connection(cdb-ms-prod-<azure-region>-cm1.documents.azure.com:10255[-4]) connection is closed
Tworzenie todo
elementu
Aby utworzyć element todo
, uzyskujemy dojście do elementu mongo.Collection
i wywołujemy InsertOne
funkcję .
func create(desc string) {
c := connect()
ctx := context.Background()
defer c.Disconnect(ctx)
todoCollection := c.Database(database).Collection(collection)
r, err := todoCollection.InsertOne(ctx, Todo{Description: desc, Status: statusPending})
if err != nil {
log.Fatalf("failed to add todo %v", err)
}
Przekazujemy strukturę zawierającą Todo
opis i stan (który jest początkowo ustawiony na pending
):
type Todo struct {
ID primitive.ObjectID `bson:"_id,omitempty"`
Description string `bson:"description"`
Status string `bson:"status"`
}
Elementy listy todo
Możemy wyświetlić listę obiektów TODO na podstawie kryteriów. Element jest bson.D
tworzony w celu hermetyzacji kryteriów filtrowania:
func list(status string) {
.....
var filter interface{}
switch status {
case listAllCriteria:
filter = bson.D{}
case statusCompleted:
filter = bson.D{{statusAttribute, statusCompleted}}
case statusPending:
filter = bson.D{{statusAttribute, statusPending}}
default:
log.Fatal("invalid criteria for listing todo(s)")
}
Find
służy do wyszukiwania dokumentów na podstawie filtru, a wynik jest konwertowany na fragment Todo
todoCollection := c.Database(database).Collection(collection)
rs, err := todoCollection.Find(ctx, filter)
if err != nil {
log.Fatalf("failed to list todo(s) %v", err)
}
var todos []Todo
err = rs.All(ctx, &todos)
if err != nil {
log.Fatalf("failed to list todo(s) %v", err)
}
Na koniec informacje są renderowane w formacie tabelarycznym:
todoTable := [][]string{}
for _, todo := range todos {
s, _ := todo.ID.MarshalJSON()
todoTable = append(todoTable, []string{string(s), todo.Description, todo.Status})
}
table := tablewriter.NewWriter(os.Stdout)
table.SetHeader([]string{"ID", "Description", "Status"})
for _, v := range todoTable {
table.Append(v)
}
table.Render()
todo
Aktualizowanie elementu
Element todo
można zaktualizować na podstawie elementu _id
. Filtr bson.D
jest tworzony na _id
podstawie elementu , a drugi jest tworzony dla zaktualizowanych informacji, czyli nowego stanu (completed
lub pending
) w tym przypadku. UpdateOne
Na koniec funkcja jest wywoływana z filtrem i zaktualizowanym dokumentem:
func update(todoid, newStatus string) {
....
todoCollection := c.Database(database).Collection(collection)
oid, err := primitive.ObjectIDFromHex(todoid)
if err != nil {
log.Fatalf("failed to update todo %v", err)
}
filter := bson.D{{"_id", oid}}
update := bson.D{{"$set", bson.D{{statusAttribute, newStatus}}}}
_, err = todoCollection.UpdateOne(ctx, filter, update)
if err != nil {
log.Fatalf("failed to update todo %v", err)
}
Usuwanie elementu todo
Element A todo
jest usuwany na podstawie elementu _id
i jest hermetyzowany w postaci bson.D
wystąpienia. DeleteOne
jest wywoływana w celu usunięcia dokumentu.
func delete(todoid string) {
....
todoCollection := c.Database(database).Collection(collection)
oid, err := primitive.ObjectIDFromHex(todoid)
if err != nil {
log.Fatalf("invalid todo ID %v", err)
}
filter := bson.D{{"_id", oid}}
_, err = todoCollection.DeleteOne(ctx, filter)
if err != nil {
log.Fatalf("failed to delete todo %v", err)
}
}
Kompilowanie aplikacji
Przejdź do katalogu, w którym sklonujesz aplikację i skompiluj ją (przy użyciu polecenia go build
).
cd monogdb-go-quickstart
go build -o todo
Aby potwierdzić, że aplikacja została prawidłowo skompilowana.
./todo --help
Konfigurowanie usługi Azure Cosmos DB
Logowanie się do platformy Azure
Jeśli zdecydujesz się zainstalować interfejs wiersza polecenia i korzystać z niego lokalnie, ten temat będzie wymagał interfejsu wiersza polecenia platformy Azure w wersji 2.0 lub nowszej. Uruchom polecenie az --version
, aby dowiedzieć się, jaka wersja jest używana. Jeśli musisz zainstalować lub uaktualnić, zobacz [Instalowanie interfejsu wiersza polecenia platformy Azure].
Jeśli używasz zainstalowanego interfejsu wiersza polecenia platformy Azure, zaloguj się do subskrypcji platformy Azure za pomocą polecenia az login i postępuj zgodnie z instrukcjami wyświetlanymi na ekranie. Ten krok możesz pominąć, jeśli używasz powłoki Azure Cloud Shell.
az login
Dodawanie modułu Azure Cosmos DB
Jeśli używasz zainstalowanego interfejsu wiersza polecenia platformy Azure, sprawdź, czy cosmosdb
składnik jest już zainstalowany, uruchamiając az
polecenie . Jeśli cosmosdb
znajduje się na liście podstawowych poleceń, przejdź do następnego polecenia. Ten krok możesz pominąć, jeśli używasz powłoki Azure Cloud Shell.
Jeśli cosmosdb
nie ma na liście podstawowych poleceń, zainstaluj ponownie interfejs wiersza polecenia platformy Azure.
Tworzenie grupy zasobów
Utwórz grupę zasobów za pomocą polecenia az group create. Grupa zasobów platformy Azure to logiczny kontener, w którym są wdrażane i zarządzane zasoby platformy Azure, takie jak aplikacje internetowe, bazy danych i konta magazynu.
Poniższy przykład obejmuje tworzenie grupy zasobów w regionie Europa Zachodnia. Wybierz unikatową nazwę grupy zasobów.
Jeśli używasz usługi Azure Cloud Shell, wybierz pozycję Wypróbuj, postępuj zgodnie z monitami wyświetlanymi na ekranie, aby się zalogować, a następnie skopiuj polecenie do wiersza polecenia.
az group create --name myResourceGroup --location "West Europe"
Tworzenie konta usługi Azure Cosmos DB
Utwórz konto usługi Azure Cosmos DB za pomocą polecenia az cosmosdb create.
W poniższym poleceniu w miejsce symbolu zastępczego <cosmosdb-name>
wstaw swoją unikatową nazwę konta usługi Azure Cosmos DB. Ta nazwa będzie służyć jako część Twojego punktu końcowego usługi Azure Cosmos DB (https://<cosmosdb-name>.documents.azure.com/
), tak więc musi być unikatowa we wszystkich kontach usługi Azure Cosmos DB na platformie Azure.
az cosmosdb create --name <cosmosdb-name> --resource-group myResourceGroup --kind MongoDB
Parametr --kind MongoDB
umożliwia tworzenie połączeń klienckich MongoDB.
Po utworzeniu konta usługi Azure Cosmos DB w interfejsie wiersza polecenia platformy Azure zostaną wyświetlone informacje podobne do następujących.
Uwaga
W tym przykładzie format JSON jest używany jako format wyjściowy interfejsu wiersza polecenia platformy Azure. Jest to ustawienie domyślne. Aby użyć innego formatu wyjściowego, zobacz Formaty danych wyjściowych dla poleceń interfejsu wiersza polecenia platformy Azure.
{
"databaseAccountOfferType": "Standard",
"documentEndpoint": "https://<cosmosdb-name>.documents.azure.com:443/",
"id": "/subscriptions/aaaa0a0a-bb1b-cc2c-dd3d-eeeeee4e4e4e/resourceGroups/myResourceGroup/providers/Microsoft.Document
DB/databaseAccounts/<cosmosdb-name>",
"kind": "MongoDB",
"location": "West Europe",
"name": "<cosmosdb-name>",
"readLocations": [
{
"documentEndpoint": "https://<cosmosdb-name>-westeurope.documents.azure.com:443/",
"failoverPriority": 0,
"id": "<cosmosdb-name>-westeurope",
"locationName": "West Europe",
"provisioningState": "Succeeded"
}
],
"resourceGroup": "myResourceGroup",
"type": "Microsoft.DocumentDB/databaseAccounts",
"writeLocations": [
{
"documentEndpoint": "https://<cosmosdb-name>-westeurope.documents.azure.com:443/",
"failoverPriority": 0,
"id": "<cosmosdb-name>-westeurope",
"locationName": "West Europe",
"provisioningState": "Succeeded"
}
]
}
Pobieranie klucza bazy danych
Aby połączyć się z bazą danych usługi Azure Cosmos DB, niezbędny jest klucz bazy danych. Użyj polecenia az cosmosdb keys list, aby pobrać klucz podstawowy.
az cosmosdb keys list --name <cosmosdb-name> --resource-group myResourceGroup --query "primaryMasterKey"
W interfejsie wiersza polecenia platformy Azure zostaną wyświetlone informacje podobne do następującego przykładu.
"RUayjYjixJDWG5xTqIiXjC..."
Konfigurowanie aplikacji
Wyeksportuj nazwy parametry połączenia, bazy danych MongoDB i kolekcji jako zmienne środowiskowe.
export MONGODB_CONNECTION_STRING="mongodb://<COSMOSDB_ACCOUNT_NAME>:<COSMOSDB_PASSWORD>@<COSMOSDB_ACCOUNT_NAME>.documents.azure.com:10255/?ssl=true&replicaSet=globaldb&maxIdleTimeMS=120000&appName=@<COSMOSDB_ACCOUNT_NAME>@"
Uwaga
Opcja ssl=true
jest ważna ze względu na wymagania usługi Azure Cosmos DB. Aby uzyskać więcej informacji, zobacz Wymagania dotyczące parametrów połączenia.
W przypadku zmiennej środowiskowej zastąp MONGODB_CONNECTION_STRING
symbole zastępcze i <COSMOSDB_ACCOUNT_NAME>
<COSMOSDB_PASSWORD>
<COSMOSDB_ACCOUNT_NAME>
: nazwa utworzonego konta usługi Azure Cosmos DB<COSMOSDB_PASSWORD>
: klucz bazy danych wyodrębniony w poprzednim kroku
export MONGODB_DATABASE=todo-db
export MONGODB_COLLECTION=todos
Możesz wybrać preferowane wartości MONGODB_DATABASE
i MONGODB_COLLECTION
pozostawić je tak, jak to jest.
Uruchamianie aplikacji
Aby utworzyć todo
./todo --create "Create an Azure Cosmos DB database account"
W przypadku powodzenia powinny zostać wyświetlone dane wyjściowe z bazą danych MongoDB _id
nowo utworzonego dokumentu:
added todo ObjectID("5e9fd6befd2f076d1f03bd8a")
Utwórz inną todo
./todo --create "Get the MongoDB connection string using the Azure CLI"
Wyświetl listę wszystkich elementów todo
./todo --list all
Powinny zostać wyświetlone właśnie dodane w formacie tabelarycznym:
+----------------------------+--------------------------------+-----------+
| ID | DESCRIPTION | STATUS |
+----------------------------+--------------------------------+-----------+
| "5e9fd6b1bcd2fa6bd267d4c4" | Create an Azure Cosmos DB | pending |
| | database account | |
| "5e9fd6befd2f076d1f03bd8a" | Get the MongoDB connection | pending |
| | string using the Azure CLI | |
+----------------------------+--------------------------------+-----------+
Aby zaktualizować stan elementu todo
(np. zmienić go na completed
stan), użyj identyfikatora todo
:
./todo --update 5e9fd6b1bcd2fa6bd267d4c4,completed
Wyświetl tylko ukończone todo
s
./todo --list completed
Powinien zostać wyświetlony właśnie zaktualizowany:
+----------------------------+--------------------------------+-----------+
| ID | DESCRIPTION | STATUS |
+----------------------------+--------------------------------+-----------+
| "5e9fd6b1bcd2fa6bd267d4c4" | Create an Azure Cosmos DB | completed |
| | database account | |
+----------------------------+--------------------------------+-----------+
Wyświetlanie danych w Eksploratorze danych
Dane przechowywane w usłudze Azure Cosmos DB są dostępne do wyświetlania i wykonywania zapytań w witrynie Azure Portal.
Aby wyświetlać dane użytkownika utworzone w poprzednim kroku, a także pracować z nimi i wykonywać na nich zapytania, zaloguj się do witryny Azure Portal w przeglądarce sieci Web.
W górnym polu Wyszukiwania wprowadź wartość Azure Cosmos DB. Po otwarciu bloku konta usługi Azure Cosmos DB wybierz konto usługi Azure Cosmos DB. W obszarze nawigacji po lewej stronie wybierz pozycję Eksplorator danych. Rozwiń kolekcję w okienku Kolekcje. Następnie możesz wyświetlić dokumenty w kolekcji, wysłać zapytanie dotyczące danych, a nawet tworzyć i uruchamiać procedury składowane, wyzwalacze i funkcje definiowane przez użytkownika (UDF).
todo
Usuń element przy użyciu jego identyfikatora:
./todo --delete 5e9fd6b1bcd2fa6bd267d4c4,completed
Wyświetl listę s, todo
aby potwierdzić:
./todo --list all
Usunięty todo
element nie powinien być obecny:
+----------------------------+--------------------------------+-----------+
| ID | DESCRIPTION | STATUS |
+----------------------------+--------------------------------+-----------+
| "5e9fd6befd2f076d1f03bd8a" | Get the MongoDB connection | pending |
| | string using the Azure CLI | |
+----------------------------+--------------------------------+-----------+
Czyszczenie zasobów
Po zakończeniu pracy z aplikacją i kontem usługi Azure Cosmos DB możesz usunąć utworzone zasoby platformy Azure, aby nie ponosić dodatkowych opłat. Aby usunąć zasoby:
Na pasku wyszukiwania w witrynie Azure Portal wyszukaj i wybierz pozycję Grupy zasobów.
Z listy wybierz grupę zasobów utworzoną na potrzeby tego przewodnika Szybki start.
Na stronie Przegląd grupy zasobów wybierz pozycję Usuń grupę zasobów.
W następnym oknie wprowadź nazwę grupy zasobów do usunięcia, a następnie wybierz pozycję Usuń.
Następne kroki
W tym przewodniku Szybki start przedstawiono sposób tworzenia konta usługi Azure Cosmos DB dla bazy danych MongoDB przy użyciu usługi Azure Cloud Shell oraz tworzenia i uruchamiania aplikacji wiersza polecenia języka Go w celu zarządzania usługami todo
s. Teraz możesz zaimportować dodatkowe dane do swojego konta usługi Azure Cosmos DB.
Próbujesz zaplanować pojemność migracji do usługi Azure Cosmos DB? Informacje o istniejącym klastrze bazy danych można użyć do planowania pojemności.
- Jeśli wiesz, ile rdzeni wirtualnych i serwerów znajduje się w istniejącym klastrze bazy danych, przeczytaj o szacowaniu jednostek żądań przy użyciu rdzeni wirtualnych lub procesorów wirtualnych
- Jeśli znasz typowe stawki żądań dla bieżącego obciążenia bazy danych, przeczytaj o szacowaniu jednostek żądań przy użyciu planisty pojemności usługi Azure Cosmos DB