إنشاء تخزين كائن Vultr باستخدام عميل Vultr Go

المقدمة

يشرح هذا الدليل كيفية إنشاء تخزين كائن Vultr في تطبيق Go باستخدام عميل Vultr Go . تخزين كائن Vultr متوافق مع S3 API.

المتطلبات الأساسية

  • جهاز كمبيوتر يعمل بنظام التشغيل Windows أو Linux أو macOS مع تثبيت Go 1.12+.
  • معرفة البرمجة الأساسية.
  • اختياري: يدعم IDE Go (على سبيل المثال ، Visual Studio Code أو emacs أو Atom).

إنشاء تخزين كائن باستخدام Vultr Go Client

على العميل Vultr الذهاب يستخدم للتفاعل مع API Vultr . تسمح لك Vultr API بالتحكم في الموارد المرتبطة بحسابك ، بما في ذلك تخزين كائن Vultr. تتوفر معلومات مفصلة عن عميل Vultr Go في هذه المقالة .

قم بإنشاء مجلد المشروع

قم بإنشاء المجلد في الدليل الحالي.

$ mkdir vultr_demo

أدخل المجلد الجديد.

$ cd vultr_demo

تهيئة الوحدة النمطية

$ go mod init vultr_demo

قم بتنزيل المكتبة

$ go get github.com/vultr/govultr

قم بتعيين متغير بيئة مفتاح API

قم بتعيين متغير البيئة VULTR_API_KEY لمفتاح API الخاص بك. تم العثور على مفتاح API الخاص بك هنا: https://my.vultr.com/settings/#settingsapi

تحذير: حماية مفتاح API الخاص بك مثل حماية كلمة المرور الخاصة بك. يمكن لمفتاح واجهة برمجة التطبيقات الوصول إلى حسابك بالكامل ، بما في ذلك الفوترة والخوادم ووحدة التخزين.

على سبيل المثال ، على Ubuntu Linux ، أضف هذا السطر إلى ~/.profile.

export VULTR_API_KEY=YOUR_API_KEY_HERE

إنشاء برنامج Go

قم بلصق كل جزء من أجزاء التعليمات البرمجية التالية في ملف جديد يسمى main.go. الملف الكامل متاح أيضًا للتنزيل .

قم بإعداد الحزمة واستيراد المكتبات المطلوبة.

package main

import (
    "context"
    "log"
    "os"
    "time"

    "github.com/vultr/govultr"
)

ابدأ main()الوظيفة.

func main() {

اقرأ متغير بيئة مفتاح API.

var (
    // Get our Vultr API Key from an environment variable.
    VultrAPIKey = os.Getenv("VULTR_API_KEY")
)

إنشاء عميل Vultr.

// Create a Vultr client with our API Key.
vultr := govultr.NewClient(nil, VultrAPIKey)

حدد موقعًا لإنشاء تخزين الكائنات. استرجع مواقع العنقود ، وتأكد من توفر أحدها ، واختر عنقودًا ، واعرضه.

// Find the clusters we can create our Object Storage in.
clusters, err := vultr.ObjectStorage.ListCluster(ctx)
if err != nil {
    log.Fatalf("Error listing clusters: %s", err)
}

// Verify there's at least one cluster.
if len(clusters) < 1 {
    log.Fatal("Could not find any clusters to create our Object Storage")
}

// Choose the first cluster, and print it.
cluster := clusters[0]
log.Printf("Chosen cluster: %+v", cluster)

إنشاء تخزين الكائن في الكتلة المحددة.

// Create our Object Storage in the first cluster listed with our custom label.
label := "my-object-storage"
storageID, err := vultr.ObjectStorage.Create(ctx, cluster.ObjectStoreClusterID, label)
if err != nil {
    log.Fatalf("Error creating storage: %s", err)
}

log.Printf("Created our Object Storage with the ID: %d", storageID.ID)

انتظر حتى يصبح تخزين الكائن نشطًا.

var storage govultr.ObjectStorage

// Query the API every five seconds to until our server is ready.
for {
    // List all of the Object Storage containers with our label and include the S3 credentials.
    list, err := vultr.ObjectStorage.List(ctx, &govultr.ObjectListOptions{
        Label:     label,
        IncludeS3: true,
    })
    if err != nil {
        log.Fatalf("Error listing storage with label \"%s\": %s", label, err)
    }

    // Make sure we found one (and only one) Object Storage container.
    if len(list) != 1 {
        log.Fatalf("%d object storage containers exist with the label \"%s\"; we need 1", len(list), label)
    }

    storage = list[0]

    // If the server is active, break out of this loop.
    if storage.Status == "active" {
        break
    }

    // Wait for five seconds before querying the API again.
    log.Printf("The Object Storage's status is currently \"%s\", waiting for another five seconds to check if it's \"active\".", storage.Status)
    time.Sleep(time.Second * 5)
}

عرض اسم نقطة النهاية وبيانات اعتماد الاتصال.

// Print the information of our new Object Storage.
log.Print("Successfully created and listed our Object Storage!")
log.Printf("Object Storage: %+v", storage)

// We also have S3 credentials here now, so we could open an S3 compatible client.
log.Printf("S3 credentials: %s - %s - %s", storage.S3Hostname, storage.S3AccessKey, storage.S3SecretKey)

إنهاء الوظيفة الرئيسية.

// end main()
}

حفظ وتشغيل main.goالملف المكتمل .

go run main.go

إخراج المثال

2020/03/03 13:05:48 Chosen cluster: {ObjectStoreClusterID:2 RegionID:1 Location:New Jersey Hostname:ewr1.vultrobjects.com Deploy:yes}
2020/03/03 13:05:48 Created our Object Storage with the ID: xxxxxxxx
2020/03/03 13:05:49 The Object Storage's status is currently pending, waiting for another five seconds to check if it's active.
2020/03/03 13:06:06 Object Storage: {ID:34214512 DateCreated:2020-03-03 13:05:47 ObjectStoreClusterID:2 RegionID:1 Location:New Jersey Label:my-object-storage Status:active S3Keys:{S3Hostname:ewr1.vultrobjects.com S3AccessKey:[REDACTED ACCESS KEY] S3SecretKey:[REDACTED SECRET KEY]}}
2020/03/03 13:06:06 S3 credentials: ewr1.vultrobjects.com - [REDACTED ACCESS KEY] - [REDACTED SECRET KEY]

في هذا المثال ، يكون اسم نقطة النهاية هو ewr1.vultrobjects.com ، ويتم تنقيح المفاتيح. قم بالوصول إلى تخزين الكائن الجديد الخاص بك مع أي عميل متوافق مع S3 باستخدام اسم نقطة النهاية ومفتاح الوصول والمفتاح السري الذي يظهره برنامج Go.



نظرة ثاقبة على 26 أسلوبًا لتحليل البيانات الضخمة: الجزء الأول

نظرة ثاقبة على 26 أسلوبًا لتحليل البيانات الضخمة: الجزء الأول

نظرة ثاقبة على 26 أسلوبًا لتحليل البيانات الضخمة: الجزء الأول

6 أشياء شديدة الجنون حول نينتندو سويتش

6 أشياء شديدة الجنون حول نينتندو سويتش

يعرف الكثير منكم أن Switch سيصدر في مارس 2017 وميزاته الجديدة. بالنسبة لأولئك الذين لا يعرفون ، قمنا بإعداد قائمة بالميزات التي تجعل "التبديل" "أداة لا غنى عنها".

وعود التكنولوجيا التي لم يتم الوفاء بها بعد

وعود التكنولوجيا التي لم يتم الوفاء بها بعد

هل تنتظر عمالقة التكنولوجيا للوفاء بوعودهم؟ تحقق من ما تبقى دون تسليم.

وظائف طبقات معمارية مرجعية للبيانات الضخمة

وظائف طبقات معمارية مرجعية للبيانات الضخمة

اقرأ المدونة لمعرفة الطبقات المختلفة في بنية البيانات الضخمة ووظائفها بأبسط طريقة.

كيف يمكن للذكاء الاصطناعي نقل أتمتة العمليات إلى المستوى التالي؟

كيف يمكن للذكاء الاصطناعي نقل أتمتة العمليات إلى المستوى التالي؟

اقرأ هذا لمعرفة مدى انتشار الذكاء الاصطناعي بين الشركات الصغيرة وكيف أنه يزيد من احتمالات نموها ومنح منافسيها القدرة على التفوق.

CAPTCHA: ما هي المدة التي يمكن أن تظل تقنية قابلة للتطبيق للتميز بين الإنسان والذكاء الاصطناعي؟

CAPTCHA: ما هي المدة التي يمكن أن تظل تقنية قابلة للتطبيق للتميز بين الإنسان والذكاء الاصطناعي؟

لقد أصبح حل CAPTCHA صعبًا جدًا على المستخدمين في السنوات القليلة الماضية. هل ستكون قادرة على أن تظل فعالة في اكتشاف البريد العشوائي والروبوتات في المستقبل القريب؟

التفرد التكنولوجي: مستقبل بعيد للحضارة الإنسانية؟

التفرد التكنولوجي: مستقبل بعيد للحضارة الإنسانية؟

مع تطور العلم بمعدل سريع ، واستلام الكثير من جهودنا ، تزداد أيضًا مخاطر تعريض أنفسنا إلى تفرد غير قابل للتفسير. اقرأ ، ماذا يمكن أن يعني التفرد بالنسبة لنا.

التطبيب عن بعد والرعاية الصحية عن بعد: المستقبل هنا

التطبيب عن بعد والرعاية الصحية عن بعد: المستقبل هنا

ما هو التطبيب عن بعد والرعاية الصحية عن بعد وأثره على الأجيال القادمة؟ هل هو مكان جيد أم لا في حالة الوباء؟ اقرأ المدونة لتجد طريقة عرض!

هل تساءلت يومًا كيف يربح المتسللون الأموال؟

هل تساءلت يومًا كيف يربح المتسللون الأموال؟

ربما سمعت أن المتسللين يكسبون الكثير من المال ، لكن هل تساءلت يومًا كيف يجنون هذا النوع من المال؟ دعنا نناقش.

يتسبب التحديث الإضافي لنظام macOS Catalina 10.15.4 في حدوث مشكلات أكثر من حلها

يتسبب التحديث الإضافي لنظام macOS Catalina 10.15.4 في حدوث مشكلات أكثر من حلها

أصدرت Apple مؤخرًا macOS Catalina 10.15.4 تحديثًا تكميليًا لإصلاح المشكلات ولكن يبدو أن التحديث يتسبب في المزيد من المشكلات التي تؤدي إلى إنشاء أجهزة macOS. قراءة هذه المادة لمعرفة المزيد