معرفی
مایکروسافت اخیراً افزایش سرمایه گذاری در ادغام Terraform با Azure را (اوت 2017) اعلام کرده است. این ادامه دستیابی مایکروسافت به عرصه ابر آگنوستیک/چند ابری است، جایی که آنها هر کاری که لازم است برای کمک به توسعه دهندگان برای موفقیت در ابر انجام می دهند. قبلاً اینطور بود که Azure فقط برای توسعه دهندگان Micosoft بود - خوب دیگر. خدمه در ردموند و هر دفتر در سراسر جهان واقعاً فرصت منبع باز و «آژور برای همه» را تحت فشار قرار می دهند. باز بودن فقط در دراز مدت می تواند برای همه خوب باشد. میتوانید جزئیات بیشتر درباره Terraform Meets Azure را در صفحه رسمی MS Terraform بخوانید .
به هر حال، به کار در دست بازگردید - پیشرفت این سری مبتنی بر DevOps/Infrastructure. در اولین مقاله از این مجموعه ، " Terraform " را معرفی کردم و مقدمه ای در مورد چیستی و نحوه استفاده از آن ارائه کردم. در مقاله دوم نحوه استفاده از متغیرها ، درون یابی و تعداد منابع برای ایجاد کپی های متعدد از منابع برای صرفه جویی در تکرار پیکربندی/کد بحث شد. این مقاله فرض میکند که شما دو مورد دیگر را خواندهاید، و دستورالعملهایی را برای راهاندازی یا «تامین» ماشینهای مجازی راه دور با تنظیمات خاص شما پس از استقرار آنها ارائه میدهد.
زمینه
هنگامی که یک نمونه از یک ماشین مجازی را در Azure، AWS یا هر جای دیگر ایجاد میکنید، نمیتوانید مطمئن باشید که آیا کاملاً بهروز و وصلهشده است یا خیر. کاملاً به نیازهای شما اختصاص دارد و راه حلی را که می خواهید زیرساختی برای آن ایجاد کنید پشتیبانی می کند، این مقاله برخی از گزینه های مختلف برای تهیه ماشین آلات با استفاده از Terraform در Azure را به شما نشان می دهد.
تامین کنندگان
وقتی ماشینهای مجازی ایجاد میکنیم، باید چیزهایی را روی آنها اجرا کنیم - این ممکن است برای راهاندازی، بهروزرسانی، سختسازی امنیت، و غیره باشد. «تامینکنندهها» ساختاری هستند که ما برای اعلام آنچه میخواهیم در برابر یک منبع خاص ارائه کنیم، استفاده میکنیم. این ممکن است آپلود فایل ها، نصب نرم افزار یا اجرای برخی از اسکریپت های سفارشی باشد.
قرار دادن کد
از مقالات قبلی این مجموعه به یاد خواهید آورد که ما بلوک های ساختمانی اساسی را که زیرساخت ما را در فایل های پیکربندی '.TF' تعریف می کنند، گرد هم آورده ایم. بلوکهای بولدینگ بخشهای مختلف زیرساخت ما را نشان میدهند، بهعنوان مثال شبکههای مجازی، آدرسهای IP عمومی، کارتهای شبکه مجازی، دیسکها و غیره. تأمینکنندگان عموماً در داخل بلوک منبعی قرار میگیرند که هدف آنهاست. بنابراین در این مورد، ما میخواهیم یک بلوک تأمینکننده در داخل بلوک ایجاد ماشین مجازی v ایجاد کنیم .
- # outer virtual machine resource definition
- resource "azurerm_virtual_machine" "workerNode" {
- name = "workerNode"
- location = "North Europe"
- resource_group_name = "${azurerm_resource_group.Alias_RG.name}"
- network_interface_ids = [network_interface_ids = ???]
- vm_size = "Standard_A0"
- ... etc
- # inner definition of a provisioner
- provisioner XXX TYPE XXX {
- XXX specific settings XXX
- }
رویدادهای چرخه حیات
Terraform تعدادی الگوی خاص را ارائه میدهد که میتوانیم در هنگام تهیه از آنها استفاده کنیم که در زمانهای خاصی در طول چرخه حیات تدارکات راهاندازی میشوند - اینها شامل ایجاد، نابود کردن و ارائهدهندههای خرابی میشود. بهطور پیشفرض، پیکربندی طوری تنظیم شده است که یک رویداد ایجاد را فرض کند، با این حال، میتوانید ارائهدهنده را پرچمگذاری کنید که فقط زمانی اتفاق بیفتد که منبع متصل به آن در حال نابودی باشد. در اینجا سه مثال نشان می دهد که پیش فرض، پیش فرض با ایجاد (همان) و تخریب را نشان می دهد. به کلمه کلیدی "when" توجه کنید که باید در آن قرار داده شود تا به Terraform بگوید که چه زمانی تدارکات را در این بلوک انجام دهد.
- provisioner XXX TYPE XXX {
- XXX specific settings XXX
- }
- provisioner XXX TYPE XXX {
- when = "create"}
- provisioner XXX TYPE XXX {
- when = "destroy"}
اکنون، یک مشکل - در زمان نگارش این مقاله (اوت 2017)، به نظر می رسد که در این تنظیمات خاص کمی بی ثباتی وجود دارد - بنابراین اگر برای شما ضعیف است، یک بلیط در github بالا بیاورید!
بنابراین - ما می دانیم که ساختار اصلی چگونه است، اما چگونه می توانیم در واقع چیزهایی را برای سرور راه دور خود فراهم کنیم؟ ... برای انجام این کار میتوانیم از یکی از سه نوع بلوک کد تأمین استفاده کنیم (که مکان نگهدارنده «XXX نوع XXX» است که من در بالا دارم!).
تهیه فایل
آپلود فایل ها با استفاده از تنظیمات FILE انجام می شود . ما می توانیم از FILE برای آپلود فایل های تکی و محتوای کل پوشه ها استفاده کنیم. Terraform بسته به آنچه که به عنوان «منبع» به آن میدهید، یک فایل یا پوشه است یا نه، و سپس آن فایل یا پوشه را تا محل «مقصد» سیستم از راه دور کپی میکند. تنها چیزی که باید مراقب آن باشید این است که در مکانی که وجود دارد آپلود کنید و در آن مجوز نوشتن داشته باشید.
- # Copies all files and folders in apps/app1 to D:/IIS/webapp1
- provisioner "file" {
- source "apps/app1/"
- destination = "D:/IIS/webapp1"
- }
- # Copies a single file "MyTextFile.txt" to the d:\data folder on remote machine
- provisioner "file" {
- source "c:\data\MyTextFile.txt"
- destination = "d:\data\files\MyTextFile.txt"
- }
همچنین میتوانید Terraform را برای ایجاد یک فایل دریافت کنید، و سپس محتوای آن فایل را از آن عبور دهید - برای مثال اگر محتوای فایل پویا ایجاد میکنید، مفید است. ترفند اینجاست که ما از ویژگی «منبع» استفاده نمیکنیم، بلکه از ویژگی «محتوا» استفاده میکنیم.
- # Copies the string in "content"into c:\data\someNotes.txt
- provisioner "file" {
- content "my notes: ${var.Notes}"
- destination = "d:\data\someNotes.txt"
- }