Bagikan melalui


Mulai Cepat: Menyambungkan aplikasi Go ke Azure Cosmos DB untuk MongoDB

BERLAKU UNTUK: MongoDB

Azure Cosmos DB adalah layanan database multi-model yang memungkinkan Anda membuat dan kueri dokumen, tabel, nilai-kunci, dan database grafik dengan kemampuan distribusi global dan skala horizontal dengan cepat. Dalam mulai cepat ini, Anda membuat dan mengelola akun Azure Cosmos DB dengan menggunakan Azure Cloud Shell, mengkloning aplikasi sampel yang ada dari GitHub, dan mengonfigurasinya untuk berfungsi dengan Azure Cosmos DB.

Aplikasi contoh adalah alat manajemen todo berbasis baris perintah yang ditulis di Go. API Azure Cosmos DB untuk MongoDB kompatibel dengan protokol sambungan MongoDB, sehingga memungkinkan setiap driver klien MongoDB untuk terhubung. Aplikasi ini menggunakan driver Go untuk MongoDB dengan cara yang transparan terhadap aplikasi bahwa data disimpan dalam database Azure Cosmos DB.

Prasyarat

  • Akun Azure dengan langganan aktif. Buat akun gratis. Atau coba Azure Cosmos DB secara gratis tanpa langganan Azure. Anda juga dapat menggunakan Azure Cosmos DB Emulator dengan string koneksi .mongodb://localhost:C2y6yDjf5/R+ob0N8A7Cgv30VRDJIWEHLM+4QDU5DE2nQ9nDuVTqobD4b8mGGyPMbIZnqyMsEcaGQy67XIw/Jw==@localhost:10255/admin?ssl=true.
  • Go terinstal di komputer Anda, dan pengetahuan kerja tentang Go.
  • Git.

Buat klon sampel aplikasi

Jalankan perintah berikut untuk mengkloning repositori sampel.

  1. Buka prompt perintah, buat folder baru bernama git-samples, lalu tutup prompt perintah tersebut.

    mkdir "C:\git-samples"
    
  2. Buka jendela terminal git, seperti git bash, dan gunakan perintah cd untuk mengubah ke folder baru untuk memasang aplikasi sampel.

    cd "C:\git-samples"
    
  3. Jalankan perintah berikut untuk mengkloning repositori sampel. Perintah ini membuat salinan aplikasi sampel di komputer Anda.

    git clone https://github.com/Azure-Samples/cosmosdb-go-mongodb-quickstart
    

Mengulas kode

Langkah ini bersifat opsional. Jika Anda tertarik untuk mempelajari cara kerja aplikasi, Anda dapat meninjau cuplikan berikut. Jika tidak, Anda dapat melewati ke depan untuk Menjalankan aplikasi. Tata letak aplikasi adalah sebagai berikut:

.
├── go.mod
├── go.sum
└── todo.go

Cuplikan berikut semuanya diambil dari file todo.go.

Menghubungkan aplikasi Go ke Azure Cosmos DB

clientOptions merangkum string koneksi untuk Azure Cosmos DB, yang diteruskan menggunakan variabel lingkungan (detail di bagian mendatang). Sambungan diinisialisasi menggunakan mongo.NewClient yang diteruskan dengan instans clientOptions. Ping fungsi dipanggil untuk mengonfirmasi keberhasilan konektivitas (ini adalah strategi yang gagal cepat).

    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)
    }

Catatan

Menggunakan konfigurasi SetDirect(true) itu penting, tanpanya Anda akan mendapatkan kesalahan konektivitas berikut: unable to connect connection(cdb-ms-prod-<azure-region>-cm1.documents.azure.com:10255[-4]) connection is closed

Buat item todo

Untuk membuat todo, kami dapat menghandel ke mongo.Collection dan memanggil fungsi InsertOne.

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)
    }

Kami meneruskan Todo struct yang berisi deskripsi dan status (yang awalnya diatur ke pending):

type Todo struct {
    ID          primitive.ObjectID `bson:"_id,omitempty"`
    Description string             `bson:"description"`
    Status      string             `bson:"status"`
}

Cantumkan todo item

Kami dapat mencantumkan TODO berdasarkan kriteria. bson.D dibuat untuk merangkum kriteria filter:

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 digunakan untuk mencari dokumen berdasarkan filter dan hasilnya dikonversi menjadi potongan 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)
    }

Terakhir, informasi dirender dalam format tabular:

    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()

Memperbarui item todo

todo dapat diperbarui berdasarkan _id-nya. Filter bson.D dibuat berdasarkan _id dan filter lain dibuat untuk informasi yang diperbarui, yang merupakan status baru (completed atau pending) dalam kasus ini. Akhirnya, UpdateOne fungsi dipanggil dengan filter dan dokumen yang diperbarui:

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)
    }

Menghapus todo

todo dihapus berdasarkan _id dan dienkapsulasi dalam bentuk bson.D instans. DeleteOne dipanggil untuk menghapus dokumen.

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)
    }
}

Membangun aplikasi

Ubah ke direktori tempat Anda mengkloning aplikasi dan membangunnya (menggunakan go build).

cd monogdb-go-quickstart
go build -o todo

Untuk mengonfirmasi bahwa aplikasi telah dibangun dengan benar.

./todo --help

Menyiapkan Azure Cosmos DB

Masuk ke Azure

Jika Anda memilih untuk menginstal dan menggunakan CLI secara lokal, topik ini mengharuskan Anda menjalankan Azure CLI versi 2.0 atau yang lebih baru. Jalankan az --version untuk menemukan versinya. Jika Anda perlu memasang atau meningkatkan, lihat [Menginstal CLI Azure].

Jika Anda menggunakan Azure CLI yang diinstal, masuk ke langganan Azure Anda dengan perintah az login dan ikuti petunjuk di layar. Anda dapat melewati langkah ini jika Anda menggunakan Azure Cloud Shell.

az login 

Menambahkan modul Azure Cosmos DB

Jika Anda menggunakan Azure CLI yang diinstal, periksa untuk melihat apakah cosmosdb komponen sudah diinstal dengan menjalankan az perintah. Jika cosmosdb ada dalam daftar perintah dasar, lanjutkan ke perintah berikutnya. Anda dapat melewati langkah ini jika Anda menggunakan Azure Cloud Shell.

Jika cosmosdb tidak ada dalam daftar perintah dasar, instal ulang Azure CLI.

Buat grup sumber daya

Buat grup sumber daya dengan buat grup az. Grup sumber daya Azure adalah kontainer logis tempat sumber daya Azure seperti aplikasi web, database, dan akun penyimpanan disebarkan dan dikelola.

Contoh berikut membuat grup sumber daya di wilayah Eropa Barat. Pilih nama unik untuk grup sumber daya.

Jika Anda menggunakan Azure Cloud Shell, pilih Coba, ikuti perintah pada layar untuk masuk, lalu salin perintah ke prompt perintah.

az group create --name myResourceGroup --location "West Europe"

Membuat akun Azure Cosmos DB

Buat akun Azure Cosmos DB dengan perintah az cosmosdb create .

Dalam perintah berikut, ganti nama akun Azure Cosmos DB unik Anda sendiri tempat Anda melihat <cosmosdb-name> tempat penampung. Nama unik ini akan digunakan sebagai bagian dari titik akhir Azure Cosmos DB Anda (https://<cosmosdb-name>.documents.azure.com/), sehingga namanya harus unik di semua akun Azure Cosmos DB di Azure.

az cosmosdb create --name <cosmosdb-name> --resource-group myResourceGroup --kind MongoDB

Parameter --kind MongoDB ini memungkinkan koneksi klien MongoDB.

Saat akun Azure Cosmos DB dibuat, Azure CLI menampilkan informasi yang mirip dengan contoh berikut.

Catatan

Contoh ini menggunakan JSON sebagai format output Azure CLI, yang merupakan default. Untuk menggunakan format output lain, lihat Format output untuk perintah Azure CLI.

{
  "databaseAccountOfferType": "Standard",
  "documentEndpoint": "https://<cosmosdb-name>.documents.azure.com:443/",
  "id": "/subscriptions/00000000-0000-0000-0000-000000000000/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"
    }
  ]
} 

Mengambil kunci database

Untuk menyambungkan ke database Azure Cosmos DB, Anda memerlukan kunci database. Gunakan perintah az cosmosdb keys list untuk mengambil kunci utama.

az cosmosdb keys list --name <cosmosdb-name> --resource-group myResourceGroup --query "primaryMasterKey"

Azure CLI menghasilkan informasi yang mirip dengan contoh berikut.

"RUayjYjixJDWG5xTqIiXjC..."

Mengonfigurasi aplikasi

Ekspor string koneksi, database MongoDB, dan kumpulan nama sebagai variabel lingkungan.

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>@"

Catatan

Opsi ssl=true ini penting karena persyaratan Azure Cosmos DB. Untuk informasi selengkapnya, lihat Persyaratan string koneksi.

Untuk variabel lingkungan MONGODB_CONNECTION_STRING, ganti tempat penampung untuk <COSMOSDB_ACCOUNT_NAME> dan <COSMOSDB_PASSWORD>

  1. <COSMOSDB_ACCOUNT_NAME>: Nama akun Azure Cosmos DB yang Anda buat
  2. <COSMOSDB_PASSWORD>: Kunci database yang diekstrak pada langkah sebelumnya
export MONGODB_DATABASE=todo-db
export MONGODB_COLLECTION=todos

Anda dapat memilih nilai pilihan Anda untuk MONGODB_DATABASE dan MONGODB_COLLECTION atau membiarkannya saja.

Jalankan aplikasi

Untuk membuat todo

./todo --create "Create an Azure Cosmos DB database account"

Jika berhasil, Anda akan melihat output dengan MongoDB _id dari dokumen yang baru dibuat:

added todo ObjectID("5e9fd6befd2f076d1f03bd8a")

Membuat todo lainnya

./todo --create "Get the MongoDB connection string using the Azure CLI"

Cantumkan semua todo

./todo --list all

Anda akan melihat yang baru saja Anda tambahkan dalam format tabular seperti:

+----------------------------+--------------------------------+-----------+
|             ID             |          DESCRIPTION           |  STATUS   |
+----------------------------+--------------------------------+-----------+
| "5e9fd6b1bcd2fa6bd267d4c4" | Create an Azure Cosmos DB      | pending   |
|                            | database account               |           |
| "5e9fd6befd2f076d1f03bd8a" | Get the MongoDB connection     | pending   |
|                            | string using the Azure CLI     |           |
+----------------------------+--------------------------------+-----------+

Untuk memperbarui status todo (misalnya mengubahnya menjadi completed status), gunakan todo ID:

./todo --update 5e9fd6b1bcd2fa6bd267d4c4,completed

Cantumkan hanya todo yang telah selesai

./todo --list completed

Anda akan melihat yang baru saja Anda perbarui:

+----------------------------+--------------------------------+-----------+
|             ID             |          DESCRIPTION           |  STATUS   |
+----------------------------+--------------------------------+-----------+
| "5e9fd6b1bcd2fa6bd267d4c4" | Create an Azure Cosmos DB      | completed |
|                            | database account               |           |
+----------------------------+--------------------------------+-----------+

Menampilkan data di Data Explorer

Data yang disimpan di Azure Cosmos DB tersedia untuk dilihat dan dikueri di portal Microsoft Azure.

Untuk menampilkan, mengkueri, dan bekerja dengan data pengguna yang dibuat di langkah sebelumnya, masuk ke portal Microsoft Azure di browser web Anda.

Di kotak Pencarian teratas, masukkan Azure Cosmos DB. Saat bilah akun Azure Cosmos DB Anda terbuka, pilih akun Azure Cosmos DB Anda. Di navigasi kiri, pilih Data Explorer. Perluas kumpulan Anda di panel Kumpulan, lalu Anda bisa menampilkan dokumen dalam kumpulan, kueri data, dan bahkan membuat dan menjalankan prosedur, pemicu, dan UDF yang disimpan.

Data Explorer menampilkan dokumen yang baru dibuat

todo Menghapus menggunakan ID-nya:

./todo --delete 5e9fd6b1bcd2fa6bd267d4c4,completed

Cantumkan todountuk mengonfirmasi:

./todo --list all

Yang todo baru saja Anda hapus seharusnya tidak ada:

+----------------------------+--------------------------------+-----------+
|             ID             |          DESCRIPTION           |  STATUS   |
+----------------------------+--------------------------------+-----------+
| "5e9fd6befd2f076d1f03bd8a" | Get the MongoDB connection     | pending   |
|                            | string using the Azure CLI     |           |
+----------------------------+--------------------------------+-----------+

Membersihkan sumber daya

Setelah selesai dengan aplikasi dan akun Azure Cosmos DB, Anda dapat menghapus sumber daya Azure yang dibuat sehingga tidak dikenakan lebih banyak biaya. Untuk menghapus sumber daya:

  1. Di portal Azure, cari dan pilih Grup sumber daya.

  2. Dari daftar, pilih grup sumber daya yang Anda buat untuk panduan mulai cepat ini.

                  Pilih grup sumber daya yang akan dihapus

  3. Di panel Gambaran umum grup sumber daya, pilih Hapus grup sumber daya.

                  Hapus grup sumber daya

  4. Di jendela berikutnya, masukkan nama grup sumber daya yang akan dihapus, lalu pilih Hapus.

Langkah berikutnya

Dalam mulai cepat ini, Anda mempelajari cara membuat akun Azure Cosmos DB for MongoDB menggunakan Azure Cloud Shell, dan membuat dan menjalankan aplikasi baris perintah Go untuk mengelola todo. Kini Anda dapat mengimpor data tambahan ke akun Azure Cosmos DB.

Mencoba melakukan perencanaan kapasitas untuk migrasi ke Azure Cosmos DB? Anda dapat menggunakan informasi tentang kluster database Anda yang ada saat ini untuk membuat perencanaan kapasitas.