Nyobain Pulumi(Typescript) di AWS

Hi gengz, kali ini kita akan coba coba Pulumi (Infrastructure as a Code) di AWS. Buat yang mau ngecheck – ngecheck, 3 web ini bisa dikunjungi untuk source material:

  1. https://www.pulumi.com
  2. https://www.pulumi.com/registry/
  3. https://pulumi.awsworkshop.io

Saya sudah persiapkan github untuk nyoba berikut ini linknya

https://github.com/ludesdeveloper/example-pulumi-aws

Requirement

  1. AWS CLI
  2. Configure AWS CLI
  3. Pulumi installed
  4. Pulumi logged in

Infrastructure Design

Gambaran terkait infrastruktur yang akan dibangun:

  1. Membuat VPC
  2. Membuat Route yang memiliki Internet Gateway
  3. Mengasosiasikan Route dengan Subnet
  4. Attach Subnet ke EC2
  5. Memberikan Static Ip Private dan juga Public Ip untuk EC2

Di dalam EC2 saya juga sudah menambahkan “userdata” sehingga saat provisioning dia akan melakukan instalasi docker dan melakukan pull terhadap nginx, sehingga kita bisa test curl saat infrastructure sudah jadi.

Yuk kita coba aja, clone dulu nyok gengz

git clone https://github.com/ludesdeveloper/example-pulumi-aws.git

Mari kita masuk ke directorynya ya

cd example-pulumi-aws

Kebetulan saya memakai typescript untuk artikel kali ini, kita install dulu ya dependencies nya

npm install

Kita akan melakukan generate keypair dulu ya, berikut commandnya

ssh-keygen -f keypair

Mari kita buat dulu config region di pulumi nya, kebetulan saya pakai region baru AWS, yaitu Jakarta

pulumi config set aws:region ap-southeast-3

Mari kita jalankan puluminya

pulumi up

Ketik “yes” untuk melanjutkan proses pembuatan infrastruktur (anda dapat menggunakan “pulumi up –yes” untuk langsung membuat tanpa harus mengetik yes)

Tunggu sejenak ya gengz, kita nunggu EC2 statusnya sampe ok dulu, ngopi aja bentar

Setelah selesai, kita bisa mencoba curl dengan command berikut

curl $(pulumi stack output outputInstancePublicIp)

Joss markojoss gwandoss, infra sudah up, docker sudah nyala, dan nginx kita juga sudah nyala.

Bedah File

index.ts

Ini adalah main file konfigurasi jika kita menggunakan typescript di pulumi. Semua detail konfigurasi yang kita miliki, bisa kita tulis di file ini.

import * as pulumi from "@pulumi/pulumi";
import * as aws from "@pulumi/aws";
import * as fs from "fs";

Importing module, sama seperti kita melakukan import terhadap library. 2 modul diatas adalah untuk pulumi, dan 1 module fs saya gunakan untuk melakukan read terhadap file.

const vpc = new aws.ec2.Vpc("vpc", {
    cidrBlock: "172.16.0.0/16",
    tags: {
        Name: "tf-example",
    },
});

Ini adalah salah satu contoh cara membuat infra, yang dalam baris code tersebut adalah vpc. Ada input yang kita bisa berikan, kebetulan dalam baris code diatas, kita memberikan input cidrBlock dan juga tags.

const instance = new aws.ec2.Instance("instance", {
    ami: ubuntu.then(ubuntu => ubuntu.id),
    instanceType: "t3.medium",
    keyName: deployer.keyName,
    securityGroups: [securityGroup.id],
    subnetId: subnet.id,
    privateIp: "172.16.10.30",
    associatePublicIpAddress: true,
    userData: fs.readFileSync('./install-docker.sh', 'utf8'),
}, { deleteBeforeReplace: true });

Code diatas adalah baris saat kita membuat instance EC2 kita. Mari kita pecah sedikit ya barisnya menjadi seperti dibawah

ami: ubuntu.then(ubuntu => ubuntu.id),

Di baris ini saya membuat sebuah promise untuk mendapatkan id dari ami yang akan saya gunakan, ini relevan dengan code getAmi dibawah ini

const ubuntu = aws.ec2.getAmi({
    mostRecent: true,
    filters: [
        {
            name: "name",
            values: ["ubuntu/images/hvm-ssd/ubuntu-focal-20.04-amd64-server-*"],
        },
        {
            name: "virtualization-type",
            values: ["hvm"],
        },
    ],
    owners: ["099720109477"],
});

Mari kita check code yang lain ya

    userData: fs.readFileSync('./install-docker.sh', 'utf8'),

Di baris ini temen temen bisa lihat saya menggunakan library fs untuk bisa membaca file .sh, yang berisi command command yang dibutuhkan untuk melakukan instalasi docker dan juga pull image nginx

const deployer = new aws.ec2.KeyPair("deployer", {
    publicKey: fs.readFileSync('./keypair.pub', 'utf8'),
});

Code diatas juga menggunakan lib fs untuk bisa membaca keypair yang sudah kita generate

Penutup

Saya berharapa artikel kali ini bermanfaat buat kalian semua ya, Infrastructure as a Code saat ini menjadi kebutuhan yang cukup krusial untuk Cloud Development / Automation, dan semakin banyak pilihan yang kita bisa pakai terkadang bikin pusing, terkadang bikin happy juga karena bisa nyoba sesuatu yang baru, hehehe.

Tinggalkan Balasan

Isikan data di bawah atau klik salah satu ikon untuk log in:

Logo WordPress.com

You are commenting using your WordPress.com account. Logout /  Ubah )

Gambar Twitter

You are commenting using your Twitter account. Logout /  Ubah )

Foto Facebook

You are commenting using your Facebook account. Logout /  Ubah )

Connecting to %s

Situs yang Didukung WordPress.com.

Atas ↑

%d blogger menyukai ini: