Perpaduan Chef, Knife, AWS CLI, Digital Ocean, dan Google Compute Engine

6-alasan-wanita-tertarik-pada-pria-jago-masak
Idenya, saya ingin memanajemen beberapa provider layanan awan dalam satu tools. Kebetulan kantor menggunakan beberapa, diantaranya aws, digital ocean, gce.

 

Saya terbiasa menggunakan ChefDK dan knife sebagai alat masak. Mari kita pasang-pasang tools pendamping.

  1. ChefDK (Chef, Ruby, Knife)
  2. AWS CLI
     $ pip install awscli
    
  3. Google Cloud SDK
  4. Gem (knife-ec2, knife-digital_ocean, knife-google)
    $ chef gem install knife-ec2 knife-digital_ocean knife-google
    
  5. Atur knife.rb untuk masing-masing provider
    $ vim ~/.chef/knife.rb
    

    Atur kira kira seperti ini

    knife[:aws_credential_file] = File.join(ENV['HOME'], "/.aws/credentials")
    knife[:aws_config_file] = File.join(ENV['HOME'], "/.aws/config")
    knife[:aws_profile] = "default"
    knife[:digital_ocean_access_token]  = "xxxxxxxxxxxxxxxxxx"
    knife[:gce_project] = 'my-project-name'
    knife[:gce_zone]    = 'asia-east1-a'
    
  6. Knife siap digunakan
    $ knife ec2 server list
    $ knife digital_ocean droplet list
    $ knife google server list
    

Dah kira-kira begitu.
Sumber gambar dari sini.

Estu~

Advertisements

Chef; Bootstrap Node Menggunakan Vagrant

Chef Software Inc. company logo

Mari lanjut. Setelah Workstation dan Chef-Server sudah diatur. Mari kita coba.

  1. Siapkan vagrant sebagai node yang akan kita atur
    $ cd ~/chef-repo
    $ vim Vagrantfile
    Isinya kira-kira begini, sesuaikan saja.
    Vagrant.configure(2) do |config|
    config.vm.box = “ubuntu/trusty64″

    config.vm.define :node1 do |node1|
    node1.vm.host_name=”node1”
    node1.vm.network “public_network”, ip: “10.0.0.40”
    end
    end

  2. Jalankan vagrant
    $ vagrant up
  3. Upload cookbook yang sudah kita buat pada panduan sebelumnya termasuk dependesinya
    $ knife cookbook site download apt
    $ tar zxvf apt-3.0.0.tar.gz
    $ rm -rf apt-3.0.0.tar.gz && mv apt cookbooks/.
    $ knife cookbook upload apt
    $ knife cookbook upload nginx
  4. Lakukan list cookbook yg sudah diunggah
    $ knife cookbook list
  5. Lakukan test ssh ke mesin vagrant
    $ ssh vagrant@10.0.0.40
    Jika ditanya password, masukkan ‘vagrant’
  6. Jalankan knife bootstrap
    $ knife bootstrap 10.0.0.40 –ssh-user vagrant –ssh-password ‘vagrant’ –sudo –use-sudo-password –node-name node1 –run-list ‘recipe[nginx]’
  7. Lakukan testing dengan bantuan curl
    $ curl 10.0.0.40

Jreng-jreng, kelar!!

Bacaan:
https://learn.chef.io/manage-a-node/rhel/bootstrap-your-node/

Estu~ *yang lagi balik utik2 cookbook lagi..

Chef; Mengatur Chef-Server

Chef Software Inc. company logo*diterjemahkan dari halaman https://learn.chef.io/manage-a-node/ubuntu/set-up-your-chef-server/ dengan penyesuaian seperlunya.

0. Tentukan Mesin Chef Server.

Dalam pengenalaman chef sebelumnya, telah digambarkan bahwa dalam praktiknya kita membutuhkan chef server. Untuk mendapatkan chef server ada dua opsi:

  1. Buat mesin yang didedikasikan sebagai chef server, caranya bisa mengikuti panduan ini,
  2. Mengunakan chef server ujicoba gratis bawaan dari chef dengan mendaftar di https://manage.chef.io/signup/

Untuk pengenalan awal saya menyarankan menggunakan opsi kedua. Yuk daftar-daftar….

Setelah mendaftar, kita akan menerima email untuk konfirmasi akun. Klik link dalam email tersebut untuk memverifikasi akun dan password. Setelah itu, arahkan ke https://manage.chef.io/ dan masuk. Kemudian ikuti langkah-langkah untuk membuat sebuah organisasi.

  1. Klik Create New Organization. Masukkan nama lengkap dan nama pendek untuk organisasi, semisal nama projek.
  2. Klik Create Organization.

1. Atur Komunikasi Chef Server dengan Workstation.

Knife adalah alat baris perintah yang menyediakan antarmuka antara workstation dan server Chef. Knife memungkinkan untuk mengunggah cookbook ke server Chef dan mengelola node server.

Knife membutuhkan dua file untuk berkomunikasi dengan server Chef, kunci RSA pribadi (RSA private key) dan file konfigurasi. Setiap permintaan ke server Chef dikonfirmasi melalui proses pencocokan kunci RSA. Chef Server menyimpan kunci publik; dan kita menyimpan kunci private.

File konfigurasi biasanya bernama knife.rb. Ini berisi informasi seperti URL Chef server, lokasi dan nama kunci private, serta lokasi default cookbook. Kedua file ini biasanya terletak di direktori bernama .chef. Setiap kali knife dijalankan, knife akan mengecek folder .chef direktori kerja saat ini. Jika direktori .chef tidak ditemukan, knife akan mencari di lokasi induk atau home direktori. Proses ini mirip dengan bagaimana Git bekerja.

  • Buat direktori ~/chef-repo/.chef sebagai berikut
    $ mkdir ~/chef-repo/.chef
  • Buat konfigurasi knife yang diunduh dari web manage.chef.io
    1. Lakukan Sign In ke https://manage.chef.io/.
    2.Pilih organsasi dari tab Administration.
    3. Pilih Generate Knife Config dari menu sebelah kiri dan simpan file tersebut.
    manage_generate_knife_config-633ea565
    4. Salin file unduhan tadi ke direktory .chef

    $ mv ~/Unduhan/knife.rb ~/chef-repo/.chef/.
  • Generate kunci RSA private dari chef-server
    1. Lakukan Sign In ke https://manage.chef.io/.
    2. Dari tab Administration, pilih Users dari menu sebelah kiri. Pilih username kita, dan pilih Reset key dari menu sebelah kiri, dan pilih Reset key dari jendela ditampilkan.
    manage_reset_key-ee79ad1a
    3. Jendela selanjutnya akan menampilakan kunci private kita. Pada bagian bawah jendela klik tombol Download untuk mengunduh file tersebut.
    manage_download_key-aede5162
    4. Salin kunci RSA private ke folder .chef

    $ mv ~/Unduhan/username.pem ~/chef-repo/.chef/.
  • Lakukan verifikasi kunci
    $ ls ~/learn-chef/.chef

    knife.rb your_name.pem

    $ knife ssl check

    Connecting to host api.chef.io:443
    Successfully verified certificates from `api.chef.io’

Kelar, selamat mencoba. Selanjutnya adalah mengunggah cookbook dan melakukan bootstrap node.

Estu~ yg lagi mantengin log kitchen.

Chef; Mengenal Supermarket; Repository Cookbook ala Chef

logo-supermarket

supermarket.chef.io | https://github.com/chef/supermarket

Kalau GNU/Linux punya repository/lumbung, Android punya Google Play, maka Chef punya Supermarket berisi resep-resep yang diunggah oleh komunitas dan bisa kita gunakan kembali(reuse). Kita bisa mencari resep yang kita inginkan dengan mengetikkan kata kunci di kolom pencarian. Nah bagaimana cara menggunakannya dengan mode konsole? Yuk simak langkah berikut:

Sebagai contoh penggunaan, kita butuh resep apt, yup tinggal unduh dari supermarket dengan tool knife.

$ knife cookbook site download apt

maka knife akan mengunduh resep apt dalam format tar.gz. Tinggal lakukan ekstrasi dan pindahkan ke direktori cookbooks.

$ tar zxvf apt-3.0.0.tar.gz
$ rm -rf apt-3.0.0.tar.gz && mv apt cookbooks/.

Kira-kira begitulah sambil baca panduan sebelumnya.

Estu yang lagi masak kue~

Chef; Membuat Cookbook Sederhana dan Ujicoba Cookbook dengan Test-Kitchen

Chef Software Inc. company logo

Melanjutkan tulisan sebelumnya.
Prasyarat tool dan kawan-kawannya yang digunakan:

  1. ChefDK dan Ruby
  2. Text Editor
  3. Vagrant
  4. Internet kenceng
  5. Test-Kitchen

Kali ini rencananya mau bikin cookbook nginx untuk lingkungan deb (debian, ubuntu, etc). Mari dimulai membuat cookbook dan ujicoba di lokal:

  1. Buat lingkungan kerja
    $ mkdir -p ~/chef-repo/cookbook && cd ~/chef-repo
  2. Generate cookbook kosong dengan perintah chef
    $ chef generate cookbook cookbooks/nginx
  3. Edit resep, tambahkan perintah untuk memasang paket nginx dan dependensinya
    $ vim cookbooks/nginx/recipes/default.rb
    #
    # Cookbook Name:: nginx
    # Recipe:: default
    #
    # Copyright (c) 2016 The Authors, All Rights Reserved.
    
    include_recipe "apt"
    
    # memasang nginx
    package 'nginx' do
      action :install
    end
    
    service 'nginx' do
      action [:enable, :start]
    end
    
    # mengubah conten index.html dgn isi lain
    template "/usr/share/nginx/html/index.html" do
    	source "nginx.erb"
    	mode "0644"
    end
    $ vim cookbooks/nginx/metadata.rb
    
    name 'nginx'
    maintainer 'The Authors'
    maintainer_email 'you@example.com'
    license 'all_rights'
    description 'Installs/Configures nginx'
    long_description 'Installs/Configures nginx'
    version '0.1.0'
    
    depends 'apt'
  4. Generate template halaman index.html
    $ chef generate template cookbooks/nginx nginx
    $ vim cookbooks/nginx/templates/default/nginx.erb
    nginx.erb
  5. Mari kita uji resepnya lewat kitchen
    $ cd cookbooks/nginx
    $ vim .kitchen.yml
    ---
    driver:
      name: vagrant
    
    provisioner:
      name: chef_zero
    
    platforms:
      - name: ubuntu/trusty64
    
    suites:
      - name: default
        run_list:
          - recipe[nginx::default]
        attributes:
    $ kitchen create
    $ kitchen converge
  6. Tambahkan unit testing dengan bantuan serverspec
    $ vim cookbooks/nginx/test/integration/default/serverspec/default_spec.rb
    require 'spec_helper'
    
    # Serverspec examples can be found at
    # http://serverspec.org/resource_types.html
    
    nginx_port = 80
    
    describe 'nginx' do
    
      describe package('nginx') do
      	it { should be_installed}
      end
    
      describe service('nginx') do
      	it { should be_running}
      end
    
      describe service('nginx') do
      	it { should be_enabled}
      end
    
      describe port(nginx_port) do
        it { should be_listening}
      end
    end
    
  7. Lakukan testing-kitchen
    $ kitchen verify
  8. Proses ini akan memakan waktu lama, tergantung internet. Jika tanpa error maka cookbook sudah benar. Selamat!
    Login ke mesin dan lakukan curl

    $ kitchen login
    $ curl localhost
  9. Hancurkan instansce kitchen setiap selesai testing.
    $ kitchen destroy

Sekian, tulisan selanjutnya akan membahas knife bootstrap.

*kode sumber cookbook ini dapat dilihat di akun github saya.

Bacaan:

[0] https://learn.chef.io/learn-the-basics/rhel/configure-a-package-and-service/
[1] https://learn.chef.io/local-development/ubuntu/get-started-with-test-kitchen/
[2] https://www.digitalocean.com/community/tutorials/how-to-create-simple-chef-cookbooks-to-manage-infrastructure-on-ubuntu

Estu, yang lagi sibuk di dapur

Chef; Konfigurasi Workstation; Memasang Chef Development Kit (ChefDK)

Chef Software Inc. company logo

Tulisan sebelumnya sudah membahas konsep awal Chef. Tulisan kali ini kita akan membahas konfigurasi workstation dengan memasang ChefDK. Berikut langkah-langkahnya:

  1. Install git dan lakukan konfigurasi.
  2. Unduh chefdk dari https://downloads.chef.io/chef-dk/
  3. Pasang chefdk (saya menggunakan ubuntu)
    $ sudo dpkg -i chefdk*.deb
  4. Konfigurasi chef
    $ chef verify
  5. Konfigurasi ruby. Instalasi chefdk sudah menyertakan ruby (2.1.x). Saya memilih menggunakan ruby versi ini.
    $ which ruby (ruby dari sistem)
    Tambahkan konfigurasi agar sistem menggunakan versi ruby dari chefdk
    $ echo ‘eval “$(chef shell-init bash)”‘ >> ~/.zshrc
    $ source ~/.zshrc
    $ which ruby

Sekian.

Bacaan:

[0] https://docs.chef.io/install_dk.html

Estu, yang lagi nunggu kue mateng

Chef; Sebuah Pengenalan

Chef Software Inc. company logo
Chef Software Inc. – Logo

Chef adalah salah satu tools yang digunakan untuk otomatisasi oleh DevOps. Dalam penggunaannya, Chef ditulis dengan bahasa ruby. Terus, bagaimanakah gambaran chef bekerja?

workstation-server-node

Istilah-istilah umum:

  • Cookbook; Buku Resep, adalah sekumpulan perintah untuk memasang dan mengkonfigurasi sistem. Misal nginx cookbook, adalah resep untuk memasang nginx, dan lain-lain.
  • Workstation; Komputer yang kita gunakan untuk bekerja, bisa laptop maupun desktop dengan sistem operasi Linux/Mac OS/Windows.
  • Chef Server; adalah pusat lumbung yang menyimpan kumpulan cookbook (buku resep) dan informasi setiap node. Semisal chef server menyimpan data fqdn node dan sistem operasi yang terpasang.
  • Node; adalah komputer (server) yang dikelola oleh Chef Server. Setiap node telah terpasang chef-client. Node lah tempat kita menerapkan cookbook. Node bisa berbentuk fisik maupun mesin virtual.

Begitulah kira-kira.. Langkah selanjutnya adalah memasang Chef Development Kit (ChefDK) sebelum memulai menulis resep; ditulisan selanjutnya.

Bagi yang masih penasaran tentang Chef dan DevOps gabung aja di DevOps Meetup #1 Jogja, 4 Juni 2016.

Dan dibawan ini daftar isi tulisan saya tentang Chef:

  1. Chef; Konfigurasi Workstation; Memasang Chef Development Kit (ChefDK)
  2. Chef; Membuat Cookbook Sederhana dan Ujicoba Cookbook dengan Test-Kitchen
  3. Chef; Mengenal Supermarket; Repository Cookbook ala Chef
  4. Chef; Mengatur Chef-Server
  5. Chef; Bootstrap Node Menggunakan Vagrant

Estu, yang lagi masak-masak.