كيفية إدارة بيانات البنية التحتية بفضل مخرجات Terraform

مقدمة

تسريع البيانات يمكن استخدامه لاستخراج معلومات عن موارد البنية التحتية من حالة المشروع. ومن خلال استخدام ميزات لغة تكوين هاشيكورب (HCL)، تستخدم تسريع البيانات، يمكن استعمال هذه المعلومات للبحث وتحويلها إلى 结构 بيانات أكثر تعقيدًا مثل قوائم وخرائط. تساعد الخروجات في توفير المعلومات للبرمجيات الخارجية التي يمكن عملها على موارد البنية التحتية المنشئة.

في هذا الدرس التعليمي، سوف تتعلم حول نمط تسريع البيانات وقيمته بإنشاء بنية بسيطة تتم توزيع الDroplets. سوف تتحلل الخروجات بالبرمجيات بتحويلها إلى JSON.

المتقدمات

ملاحظة: تم اختبار هذا التورية بتعريف Terraform 1.0.2 بوجه خاص.

تعريف الخارجات

في هذه المرحلة ستدعم جهاز قمري وتحديدًا ستتوفر على الخارجات عن طريق تعريف خارجة ستظهر عنوان الIP للقمري.

من مجلد terraform-outputs الذي أنشأته كشرط واجب، قم بإنشاء وفتح ملف droplets.tf للتعديل:

  1. nano droplets.tf

أضف المورد التالي للقمري وتعريف الخارجة:

terraform-outputs/droplets.tf
resource "digitalocean_droplet" "web" {
  image  = "ubuntu-20-04-x64"
  name   = "test-droplet"
  region = "fra1"
  size   = "s-1vcpu-1gb"
}

output "droplet_ip_address" {
  value = digitalocean_droplet.web.ipv4_address
}

أولاً يتم اعلان مورد Droplet يطلق عليه web، والذي يسمى في السحابة test-droplet في المنطقة fra1، ويشتغل بال Ubuntu 20.04.

ومن ثم تُدeclare خارجة تدعى droplet_ip_address، وفي Terraform يُستخدم الخارجات للتصدير وعرض القيم ومعلومات الموارد الداخلية والمحاسبة. هنا تضع المادة value ، التي تقبل البيانات التي تُستخدم في الخارجة، في عنوان العنصر التالي:

أخيرًا يتم حفظ الملف وإغلاقه، ومن ثم تنفيذ المشروع بواسطة الأمر التالي:

  1. terraform apply -var "do_token=${DO_PAT}"

أدخل yes للتطبيق عندما يتم طرح السؤال. سيكون نهاية الخارجة مماثلة لهذه الأمور:

Output
... digitalocean_droplet.web: Creating... ... digitalocean_droplet.web: Creation complete after 32s [id=207631771] Apply complete! Resources: 1 added, 0 changed, 0 destroyed. Outputs: droplet_ip_address = ip_address

سيكون عنوان البريد الإلكتروني المبرز يخص دولة الDroplet الجديدة المنتجة. تطبيق المشروع ينفذ موارد السحابة ويعرض الخارجات في النهاية عندما تكون جميع خصائص الموارد متاحة. بدون droplet_ip_address الخارجة، ستظهر Terraform بدون معلومات أكثر عن الDroplet، بإستثناء أنه يتم تنفيذه.

يمكن أيضًا عرض الخارجات بواسطة أمر output:

  1. terraform output

سيتم عرض قائمة بجميع outputs في المشروع:

Output
droplet_ip_address = ip_address

يمكنك أيضًا سؤال خارجة معينة بتعيينها مادة تعني value فقط:

  1. terraform output output_name

لـ droplet_ip_address سيكون الخارج يختلف عن العنوان البريدي الإلكتروني فقط:

Output
ip_address

باستثناء تحديد المادة الإلزامية value، توفر للخارجات بعض المادات الخيارية الأخرى:

  • الوصف: يدمج مساعدة قصيرة تتفقد ما يظهر في المخرج.
  • يعتمد_على: ما يلي ما يسمى معامل متاح في كل مورد والذي يسمح لك بتحديد بواقعية تقريبًا بمفهوم التخطيط.
  • حساس: يتقبل قيمة بوليوكية، وهي تمنع من عرض المحتوى الخاص بالمخرج بعد تنفيذه إذا كان محددًا بـ true.

المامور الحساس مفيد عندما تكون معلومات التنفيذ لتعريف الTerraform متاحة عامًا ولكن يتوجب إبعاد المحتويات الخاصة. سوف تضيفه الآن إلى تعريف موردك الخاص بالDroplet.

افتح droplets.tf للتحرير وأضف السطر المبرز:

terraform-outputs/droplets.tf
resource "digitalocean_droplet" "web" {
  image  = "ubuntu-20-04-x64"
  name   = "test-droplet"
  region = "fra1"
  size   = "s-1vcpu-1gb"
}

output "droplet_ip_address" {
  value      = digitalocean_droplet.web.ipv4_address
  sensitive = true
}

حفظ وغلق الملف عندما يتم الانتهاء. تنفيذ المشروع مجددًا بتنفيذ:

  1. terraform apply -var "do_token=${DO_PAT}"

إدخل yes عند التقا prompt. سوف تلاحظ أن المخرج مرشح:

Output
... Apply complete! Resources: 0 added, 0 changed, 0 destroyed. Outputs: droplet_ip_address = <sensitive>

حتى وإن كان معلومًا أنه حساس، سيكون المخرج ومحتوياته متاحة مرة أخرى عن طريق قنوات أخرى، مثل مشاهدة حالة Terraform أو سؤال المخرجات مباشرة.

في الخطوة القادمة، سوف تخلق بنية مختلفة للDroplet والمخرج، لذا قم بتدمير الموارد المتوفرة بتنفيذ:

  1. terraform destroy -var "do_token=${DO_PAT}"

المخرج في النهاية سيكون:

Output
... Destroy complete! Resources: 1 destroyed.

قمت بإعداد وتنفيذ مورد الDroplet وأنشأت مخرجًا يظهر عنوان IPه. سوف تتعلم الآن عن استخدام المخرجات لعرض بنيات أكثر تعقيدًا مثل قوائم وخرائط.

إختبار المنتجات المعملية

في هذا القسم، ستستعمل كلمة المفاتيح count لإنشاء مُعدلًا من جهازات الميكروفون من نظرية واحدة وإرسال أدوات الIP بصيغة مختلفة.

استخدام المادة for

يجب عدم إدخال الخطوات المبيدة أدناه إلى ملف المعدل الثلاثي. افتح للمعدل لتعديله:

  1. nano droplets.tf

أدخله بالتالي:

terraform-outputs/droplets.tf
resource "digitalocean_droplet" "web" {
  count  = 3
  image  = "ubuntu-20-04-x64"
  name   = "test-droplet-${count.index}"
  region = "fra1"
  size   = "s-1vcpu-1gb"
}

لم يتم إدخال خطوات إرسال أدوات أدناه بدقة. إذا كانت الإدخالات سيبدلت بالإدخال من خالل count لإنشاء مُعدلًا من جهازات الميكروفون وإضافة مفتاح المعدل الحالي إلى إسم الميكروفون لكنه سيستمنه للاستخدام في المستقبل. حذف الخطوات المبيدة من أدوات الإرسال أدناه. عند ماء إدخالك إلى ملف المعدل وحفظه وغلقه.

إعمل بالكود بالتفاعل:

  1. terraform apply -var "do_token=${DO_PAT}"

Terraform سيقرر إنشاء ثلاث جهازات من نظرية واحدة بالإسم test-droplet-0, test-droplet-1, و test-droplet-2. إرسال yes إذا كانت الإجابة على إنشاء المستقبلات. سيرسل إختبار الإنشاء في نهاية المستقبلات في نهاية الإنشاء.

Output
... Apply complete! Resources: 3 added, 0 changed, 0 destroyed.

هذا يعني أن جهاز الميكروفون الثلاثي مباشراً مباشراً وأن كل معلومة عنهم مباشراً في حالة الإنشاء وذلك بحفظ جهاز المعدل في الحالة المبيدة.

أسهل طريقة للوصول إلى خصائصهم الموردية هي عبر استخدام الخاتمات، ولكن إنشاءها لكل دوبليت لا يمكن التكاليف به. والحل هو استخدام الدورة for لمسافرة خلال قائمة الدوبليات وجمع خصائصهم، أو الاختيار البديل للاستخدام تعابير التعبير (والتي سوف تتعلم عنها في خطوة لاحقة هذه).

سوف تقرأ أولاً تعريف لخارج سيساعد في إخراج أي عناوين التواصل التي تتم إخراجها من مجموعة البيانات. افتح droplets.tf للتحرير:

  1. nano droplets.tf

أضف تلك السطور التالية:

terraform-outputs/droplets.tf
resource "digitalocean_droplet" "web" {
  count  = 3
  image  = "ubuntu-20-04-x64"
  name   = "test-droplet-${count.index}"
  region = "fra1"
  size   = "s-1vcpu-1gb"
}

output "droplet_ip_addresses" {
  value = {
    for droplet in digitalocean_droplet.web:
    droplet.name => droplet.ipv4_address
  }
}

قيمة خارج droplet_ip_addresses تم بناءها باستخدام دورة for. لأنها محاصرة بين أقواس، ستكون النوع الناجم عنها خارج نوع خريطة. تتم مسافرة خلال قائمة الدوبليات ولكل مجموعة، ولكل منها تتم تزويدها بأسمها وعنوانها التي تتم إضافتها إلى الخريطة الناجمة.

حفظ وغلق الملف ثم تطبيق المشروع مجدداً:

  1. terraform apply -var "do_token=${DO_PAT}"

أدخل yes عندما يتم السؤال وسوف تحصل على محتويات الخارج في النهاية:

Output
Apply complete! Resources: 0 added, 0 changed, 0 destroyed. Outputs: droplet_ip_addresses = { "test-droplet-0" = "ip_address" "test-droplet-1" = "ip_address" "test-droplet-2" = "ip_address" }

تفاصيل droplet_ip_addresses تبين العنوانات التي لثلاثة الدوبليات المنشأة.

باستخدام أمر output Terraform يمكنك أن تحصل على المحتويات من الخارج كJSON باستخدام ما يليه في إشارة أو ما يليه في الأحداثية:

  1. terraform output -json droplet_ip_addresses

سيكون النتيجة مماثلة للتالية:

Output
{"test-droplet-0":"ip_address","test-droplet-1":"ip_address","test-droplet-2":"ip_address"}

تعبير التعبير التي يتم استخدامها بشكل و

استخدام التعبيرات المتناثرة

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

digitalocean_droplet.web[*].ipv4_address

الرمز [*] يتم تدفقه خلال القائمة التي تحيط به على جهة ولكل من العناصر منها، يأخذ محتويات خصائصه المحددة على اليسار. إذا كان المرجع على اليسار ليس قائمة بمفهوم ذاته ، سيتم تحويله إلى قائمة حيث سيكون الفقرة الوحيدة التي ستكون فيها المرجع.

يمكنك فتح droplets.tf للتحرير وتعديل الأخطاء التالية لتنفيذ هذا:

terraform-outputs/droplets.tf
resource "digitalocean_droplet" "web" {
  count  = 3
  image  = "ubuntu-20-04-x64"
  name   = "test-droplet-${count.index}"
  region = "fra1"
  size   = "s-1vcpu-1gb"
}

output "droplet_ip_addresses" {
  value = digitalocean_droplet.web[*].ipv4_address
}

بعد حفظ الملف، تطبيق المشروع على الحساب عن طريق الأوامر التالية:

  1. terraform apply -var "do_token=${DO_PAT}"

سوف تحصل على من الخروج قائمة والتي تحتوي فقط على أي عناصر تعني أي أدوار التسخين:

Output
... Apply complete! Resources: 0 added, 0 changed, 0 destroyed. Outputs: droplet_ip_addresses = [ "ip_address", "ip_address", "ip_address", ]

للحصول على الخروج بالJSON، قم بتشغيل الأوامر التالية:

  1. terraform output -json droplet_ip_addresses

سيكون الخروج قائمة واحدة فقط:

Output
["ip_address","ip_address","ip_address"]

لقد استخدمت الخروجات مع التعبيرات المتناثرة والدورات اللامنتظرية لتصدير أي أدوار التسخين المتوفرة. ولقد حصلت على محتويات خروج المحتويات بالJSON، وسوف تستخدم jq —أداة لتصفية الJSON الديناميكية وفقاً للتعبيرات المعطية— لتحليلها.

تحليل منابع الخروج باستخدام jq

في هذه الخطوة سوف ت Instalar y aprender los conceptos básicos de jq, una herramienta para manipular documentos JSON. Usará este tool para parsear las salidas de su proyecto Terraform.

Si estás en Ubuntu, ejecuta el siguiente comando para instalar jq:

  1. sudo snap install jq

En macOS, puedes usar Homebrew para instalarlo:

  1. brew install jq

jq aplica la expresión de procesamiento proporcionada sobre la entrada dada, la cual puede ser canalizada. La tarea más fácil en jq es imprimir bonito la entrada:

  1. terraform output -json droplet_ip_addresses | jq '.'

Pasando el operador de identidad (.) significa que el documento JSON parseado completamente de la entrada debe ser salida sin modificaciones:

Output
[ "first_ip_address", "second_ip_address", "third_ip_address" ]

Puedes pedir solo la segunda dirección IP usando la notación de corchetes de arreglo, contando desde cero:

  1. terraform output -json droplet_ip_addresses | jq '.[1]'

La salida será:

Output
"second_ip_address"

Para hacer que el resultado del procesamiento sea un arreglo, envuelve la expresión en corchetes:

  1. terraform output -json droplet_ip_addresses | jq '[.[1]]'

Obtendrás un arreglo JSON impreso bonito:

Output
[ "second_ip_address" ]

Puedes recuperar partes de los arreglos en lugar de elementos individuales especificando un rango de índices dentro de los corchetes:

  1. terraform output -json droplet_ip_addresses | jq '.[0:2]'

La salida será:

Output
[ "first_ip_address", "second_ip_address" ]

المدى 0:2 يجب أن ترسل كلمات المرور الخاصة بحسابك عبر نماذج GoDaddy لإدخالها في قبلك. لكنها ليست مفتوحة بعد، لذا لا تستطيع إدخالها حتى تبديل الحساب إلى حساب مفتوح.

لكنك يمكنك حذف مواد الإنشاء باستخدام:

  1. terraform destroy -var "do_token=${DO_PAT}"

في هذا المرحلة، 你已经学习了Terraform输出,使用它们来显示部署资源的详细信息并导出数据结构以供以后外部处理。你已经安装了jq并且使用它来解析和操作Terraform项目的输出,该输出部署了三个Droplets。

ماذا بعد

كنت تعلم عن خدمات Terraform الخاصة بإنشاء خدمات معلومات من خالل المواد المبيعة، واستخدامها لإظهار خصوصيات وملفات ومصفوفات من خالل المواد المبيعة. كما أنت بدعم jq للاستخدام لتفاعل بالمعلومات والمصفوفات المبيعة بعد الإنشاء.

لمزيد معلومات عن خدمات jq، قُم بالزمن المطلوب بالمزيد من المستندات الإلكترونية المعلوماتية عن .

هذا الدرس من سeries كيف تماماً تماماً تماماً تماماً تماماً تماماً تماماً تماماً تماماً تماماً تماماً تماماً تماماً تماماً تماماً تماماً تماماً تماماً تماماً تماماً تماماً تماماً تماماً تماماً تماماً تماماً تماماً تماماً تماماً تماماً تماماً تماماً تماماً تماماً تماماً تماماً تماماً تماماً تماماً تماماً تماماً تماماً تماماً تماماً تماماً تماماً تماماً تماماً تماماً تماماً تماماً تمام

Source:
https://www.digitalocean.com/community/tutorials/how-to-manage-infrastructure-data-with-terraform-outputs