Notlarım…

OCI Automation Tools:

  • APIs REST endpoints
  • SDKs (Java, Python, Ruby, Go, CLI)
  • Terraform Infrastructure as code
  • Ansible Deployment Playbooks

 

OCI Command Line Interface (CLI):

CLI, OCI kaynaklarınızı yönetmek için önemli bir araçtır. Konsolda bulunan işlevlerin çoğunu sağlar ve bazen genişletilmiş özellikler sunar. PowerShell veya Bash komut dosyalarıyla birleştirildiğinde, güç otomasyon özellikleri sağlayabilir.

  • Built with the Python SDK
  • Compatible with Python 2.7.5+ or 3.5+
  • Works on Mac, Windows, and Linux
  • Direct OCI API interactions

Infrastructure as Code – Terraform:

Terraform is an open-source tool for managing Infrastructure as Code.  You can think of it as a platform interpreter that reads declarative text and converts it into API calls.

  • Uses Providers to interpret declarations for more than 70 platforms.
  • Manages resource lifecycle including dependencies, ensuring resources are created and deleted in the proper sequence.
  • Can be used to export an existing environment that was created manually.
  • Often coupled with a configuration management tool like Chef or Puppet

* OCI Provider, birçok örnekte dokümante edilmiştir.

* Registry’de Terraform için bir dizi OCI Modülleri bulunur.

Ansible:

  • Simple 
  • Human readable automation 
  • No special coding skills needed 
  • Tasks are executed in Order 
  • Powerful 
  • App and infrastructure deployment 
  • Configuration Management 
  • Agentless 
  • Uses OpenSSH and WinRM 
  • No agents to exploit or update

Ansible nasıl çalışır?

  • Ad-hock komutlarını çalıştırır
  • Remote SSH ile komut çalıştırmak için Playbooks isimli küçük modüller kullanır
  • Authentication için SSH keypairs (Kerberos is supported) kullanır 
  • Envanter yönetimi bir text dosyasında yapılır. Ek kaynaklardan okunacak plugin’leri içerir

Getting Started with CLI

OCI CLI tool’u, tek bir komutla birçok işlem yapmaya imkan verir. Komut girildikten sonra hizmet, işlem ve diğer anahtarlar belirtilir.

CLI’yi kullanmadan önce, IAM credential’larına uygun erişimi sağlamalısınız. Sağlanan kimlik bilgileri profillere ayrılacak ve ~/.oci/config dizininde saklanacaktır.

Kimlik bilgileri manuel olarak veya setup komutu kullanılarak girilebilir:

CLI Profiles:

Profiller, config dosyanızda birden çok credentail’a izin verir. Tanımlandıktan sonra, çalışma zamanında uygun profile başvurabilirsiniz.

oci_cli_rc kısayollar ve komut kısaltmaları oluşturur.

Her bir OCI profile’ı için  default compartment set edebiliriz

–output [json | table] – output’un formatını değiştirir

–query – JMESPath query’si girmemize imkan verir

–generate-full-command-json-input –  JSON dosyasını oluşturur

–from-json – JSON dosyasında tanımlanan parametreleri kullanır.

Using the –query option with qualifiers:

Saving Canned Queries (hazır query’leri kaydetmek):

JSON template ile bir compute instance’ı başlatma:

Aşağıdaki BASH script örneğinde yeni bir instance başlatıyoruz. SSH requestine yanıt vermesini bekliyoruz. Ardından örnek bir websitesini test edebiliriz.

Büyük miktardaki datanın Object Storage’a veya Object Storage’dan taşınmasına bakalım…

CLI kullanarak bunu basitleştirebilir, otomatikleştirebiliriz.

Data backup’ları, loglar ve arşivler için çok iyi olur.

Daha hızlı aktarım için otomatik olarak multi-part downloads (GET) kullanın. Bununla birlikte, chunk size’ını ve paralelliğini kontrol edebilirsiniz:

Otomatik olarak multi-part upload (PUT) kullanın. Parametreleri kontrol edebilir veya devre dışı bırakabilirsiniz:

Using Terraform and Resource Manage

Terraform Configuration Files:

  • Configuration tek bir dosyada olabilir veya birden fazla dosyaya bölünebilir. 
  • Terraform, .tf veya .tf.json uzantılı tüm dosyaları birleştirir. 
  • Sub-folder’lar dahil değildir. 
  • Dosyalar alfabetik sırayla birleştirilir; resource definition sırası önemli değil. 
  • Farklı bir uzantıya sahip dosyalar ignore edilir (örn. .jpg)

 Tüm terraform dosyalarınızı/klasörlerinizi/modüllerinizi barındırmak için top-level bir directory oluşturun.

Desteklenen configuration file uzantıları -> .tf (Humans) ve .tf.json (Machines)

**** The OCI provider enables Terraform to create, manage, and destroy resources within your OCI tenancy.

The OCI provider also supports OCI Resource Principals.

Terraform’u bir IAM Dynamic Group’un üyesi olan bir compute instance’da çalıştırıyorsak, Terraform’a resource principal’a başvurmasını bildirebiliriz.

Bir provider configure edildikten sonra bunun kaynaklarını kullanmaya başlayabiliriz. OCI provider’ı ile instance, block ve object storage, network ..vs. oluşturmaya başlayabiliriz. Aşağıdaki örnek bir instance’ı başlatır:

Terraform actions: Plan, Apply, Destroy

terraform plan, configuration’ı çalıştırdığımızda ne olacağını gösterir

Birkaç senaryoyu test ediyorsak, plan output’unu çalıştırma sırasında kaydedilebilir ve kullanılabiliriz.

Plan, belirli işlemlerin nedenlerini gösterecektir (compute image  OCID’si değiştirilirse yeniden oluşturma gibi)

terraform apply, configuration file’daki tanımları çalıştırır.

  • Dependencie’lerine göre resource’ları create / modify / delete yapar.
  • Mümkün olduğunda değişiklikleri paralel hale getirir.
  • Güncellemelere izin verildiğinde mevcut kaynakları günceller.
  • Güncellemeye izin verilmediğinde mevcut kaynakları siler ve yeniden oluşturur 

Terraform destroy, curent state file tarafından bilinen çalışan altyapıyı yok eder.

  • Terraform tarafından yönetilmeyen altyapıya dokunmaz
  • Terraform destroy, input olarak açık bir “yes” gerektirecek izin isteyecektir.
  • Terraform destroy komutu, herhangi bir seçenek olmadan, her şeyi yok eder!
  • Yalnızca belirli bir kaynağı yok etmek istiyorsanız, -target flag’ini kullanabilirsiniz.
  • Uygulama başarısız olduğunda Terraform rollback veya forward yapmaz 
  • Uygulama başarısız olduğunda, terraform kolayca çıkacaktır. Bu noktaya kadar oluşturulan tüm kaynaklar var olmaya devam edecektir. Durum dosyası buna göre güncellenecektir. 
  • Destroy fail olduğunda (yok etme başarısızlığı olduğunda), terraform resource’ları silmeyi durduracaktır. O ana kadar silinen tüm resource’lar kaybolur ve kurtarılamaz.
  • Yeni bir resource stack oluşturma işlemi başarısız olduğunda, genellikle en iyisi ileriye doğru gider. Configuration’daki hatayı düzeltip tekrar uygumak gerekir.
  • Terraform idempotenttir; Halihazırda oluşturulan (state file’da izlenen) resource’lar etkilenmeyecektir.
  • Tüm iyi source kodları gibi, hard-coding değerlerinden kaçınmaya çalışmalısınız 
  • Terraform, environment variables, defined variables (file) ve run-time variable’larını destekler
  • Değişkenler string, list, boolean ve map olabilir.
  • Default değerleri olmayan değişkenlerin atanmış bir değere sahip olması gerekir.
  • -target flag’ini hem terraform planında hem de terraform apply komutlarında kullanabilirsiniz. 
  • -target flag’i ile birden çok kaynağı belirtirseniz daha fazlasını hedeflemenize olanak tanır.

terraform taint komutu, Terraform tarafından yönetilen bir resource’u elle işaretler, bir sonraki apply’da destroy (imha) edilmesini ve yeniden oluşturulmasını zorlar.

Terraform ayrıca Chef, puppet, Ansible, shells scripts, remote-exec  gibi tedarikçilere de entegre olabilir. 

İki kullanıcı Terraform tarafından kontrol edilen bir dizi kaynağı güncellemeye çalışırsa, sorun yaratabilir. Bu sorun 2 opsiyonla çözülebilir:

Option 1: Remote Backend for state file management:

  • Built-in feature; writes the state data to a remote data store (Object Storage Bucket)
  • Sample configuration defining remote backend with Object Storage 

Option 2: Oracle Resource Manager:

  • Managed Service (Terraform as a Service) 
  • Resource collections defined as Stacks. 
  • Only one action at a time per stack; Terraform state file stored / managed by OCI 
  • Utilizes zip file collection of all Terraform configuration 
  • Permissions controlled by IAM; no user credentials assigned to Provider

Resource Manager Execution

Bölüm-4: Using Ansible to manage configuration and infrastructure on OCI

Installing Ansible:

Ansible’ı çalıştırmayı seçtiğiniz yere Control Machine denir

Current requirements:

  • Linux distro (RHEL, Debian, Centos, OS X, etc) 
  • Python 2.6 / 2.7 or Python 3.5 or higher 
  • Windows is not currently supported

Başlamadan önce, Ansible tarafından yönetilecek sunucuları düzenlemek için bir hosts dosyası oluşturmanız gerekir. Dosya default olarak /etc/ansible/hosts dizininde bulunur.

Ad-hoc commands:

Ansible ile, inventory file’da tanımlandığı şekilde bir veya daha fazla host’unuza remote komut çalıştırmak kolaydır. 

  • Kontrol Makinesi’nde uygun SSH keyleri bulunmalıdır (ssh-agent kullanılabilir)
  • Host key checking default olarak enable’dır. Her sunucu için know_hosts dosyasında bir girişiniz olmalı veya host key checking disable olmalıdır.
  • Edit /etc/ansible/ansible.cfg

 [defaults]

 host_key_checking = false 

  • Set an environment variable for the duration of the session export ANSIBLE_HOST_KEY_CHECKING=false

Single host’da ad-hoc komutu gerçekleştirmek için hostname veya IP kullanın

Inventory file’daki tüm host’larda komutu gerçekleştirmek için:   $ ansible all -m ping

Ansible Playbooks:

  • Configuration, deployment ve orchestration el kitabı.
  • YAML’de yazıldı
  • İnsan tarafından okunabilir olacak şekilde tasarlanmıştır
  • Configuration bildirebilir ve bir dizi seri task’ı orchestrate edebilir
  • installing packages, you can create files, run tasks, etc

Ansible dinamik expressions ve değişkenlere erişim sağlamak için Jinja2 şablonunu kullanır. Bu, komut çalıştırma yoluyla statik dosyaları yazmak için tercih edilen yöntemdir.

OCI Ansible Modules:

OCI Ansible Modülleri, Ansible aracılığıyla Oracle Cloud Altyapısı’nda (OCI) create and provision resources için kolay bir yol sağlar. Bu modüller, Compute,  Load Balancing, Database ve diğer OCI servisleri gibi servislerin ve resource’larının sağlanmasını ve configüre edilmesini otomatikleştirmenize yardımcı olan Ansible playbook’ları yazmanıza olanak tanır.

Services supported:

  • Block Volume 
  • Compute 
  • IAM 
  • Load Balancing 
  • Networking 
  • Object Storage 
  • Database

 OCI Ansible modulleri Github repository’den download edilebilir.

https://docs.cloud.oracle.com/en-us/iaas/Content/Identity/Concepts/commonpolicies.htm

https://blogs.oracle.com/oraclemagazine/better-file-storage-in-oracle-cloud