Udostępnij za pośrednictwem


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.

Klonowanie przykładowej aplikacji

Uruchom następujące polecenia w celu sklonowania przykładowego repozytorium.

  1. Otwórz wiersz polecenia, utwórz nowy folder o nazwie git-samples, a następnie zamknij wiersz polecenia.

    mkdir "C:\git-samples"
    
  2. 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"
    
  3. 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

clientOptionsHermetyzuje 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>

  1. <COSMOSDB_ACCOUNT_NAME>: nazwa utworzonego konta usługi Azure Cosmos DB
  2. <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 todos

./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).

Eksplorator danych z nowo utworzonym dokumentem

todo Usuń element przy użyciu jego identyfikatora:

./todo --delete 5e9fd6b1bcd2fa6bd267d4c4,completed

Wyświetl listę s, todoaby 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:

  1. Na pasku wyszukiwania w witrynie Azure Portal wyszukaj i wybierz pozycję Grupy zasobów.

  2. Z listy wybierz grupę zasobów utworzoną na potrzeby tego przewodnika Szybki start.

    Wybierz grupę zasobów do usunięcia

  3. Na stronie Przegląd grupy zasobów wybierz pozycję Usuń grupę zasobów.

    Usuwanie grupy zasobów

  4. 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 todos. 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.