Mengelompokkan Resource AWS menggunakan Resource Group

AWS Resource Group sangat bermanfaat untuk menampilkan berbagai resource AWS yang dikelompokkan. Misalkan dikelompokkan per Departemen atau per Proyek.

Mengelompokkan Resource AWS menggunakan Resource Group

AWS Resource Group adalah alat untuk mengelompokkan berbagai resource di AWS. Resource Group ini bermanfaat jika Anda ingin melihat tampilan tabel yang berisikan daftar resource yang dibagi dalam kelompok-kelompok sesuai kriteria. Misalkan pola umumnya adalah Anda ingin melihat daftar AWS resource per departemen kerja, atau per proyek.

Ada dua tipe kelompok di Resource Group, yaitu:

  1. menggunakan filter Tag, untuk menampilkan resource yang memiliki Tag tertentu
  2. menggunakan filter CloudFormation-stack, untuk menampilan resource yang dibuat oleh CloudFormation-stackt tertentu

Pada tutorial ini, kita membahas tipe yang pertama saja, yaitu menggunakan filter Tag.

Menambahkan Tag ke Resource

Langkah pertama untuk pengelompokkan resource dapat dilakukan dengan cara menambahkan Tag ke resource AWS. Tag di adalah atribut yang bisa kita tambahkan ke resource AWS, yang sifatnya adalah Key-Value. Tag ini bermanfaat untuk menyimpan meta-data, catatan atau penanda yang bisa kita review di masa depan. Berbagai resource AWS bisa Anda tambahkan Tag.

Pada Gambar 1 adalah contoh Tag untuk EC2 Instance.

Gambar 1 - Contoh Tag untuk EC2 Instance
Gambar 1 - Contoh Tag untuk EC2 Instance

Pada Gambar 2 adalah contoh Tag untuk S3 Bucket.

Gambar 2 - Contoh Tag untuk Amazon S3 Bucket
Gambar 2 - Contoh Tag untuk Amazon S3 Bucket

Membuat AWS Resource Group

Langkah kedua adalah membuat Resource Group. Dalam tulisan kali ini, saya menyediakan empat cara untuk membuat Resource Group yaitu dengan menggunakan:

  1. AWS Console untuk Anda yang lebih memilih cara visual
  2. AWS CLI untuk Anda yang menyukai scripting
  3. AWS CloudFormation untuk Anda yang perlu contekan template
  4. Terraform untuk Anda yang mengelola resource di beberapa cloud provider
  5. AWS SDK untuk Python (boto3) sebagai contoh dengan cara programmatic

Membuat AWS Resource Group menggunakan AWS Console

Silahkan masuk ke AWS Console. Di menu atas kiri, Anda dapat melihat menu AWS Resource Group. Silahkan pilih menu "Create a group", seperti dapat dilihat pada Gambar 3.

Gambar 3 - Menu Resource Groups di AWS Console
Gambar 3 - Menu Resource Groups di AWS Console

Seperti pada Gambar 4, silahkan pilih "Tag based".

Gambar 4 - Pilih Tag based
Gambar 4 - Pilih Tag based

Lalu seperti pada Gambar 5 yaitu "Grouping criteria", Anda bisa masukkan nilah "Departemen" ke isian "Tag key". Lalu bisa masukkan nama departemen tertentu ke isian "Optional tag value".

Gambar 5 - Grouping criteria
Gambar 5 - Grouping criteria

Pada bagian "Group details" seperti Gambar 6, silahkan isikan nama dan deskripsi. Isian nama hanya bisa diisi dengan huruf dan angka, tidak bisa diisi dengan huruf spasi. Contoh isian nama yang valid adalah "departemen-engineering-resource-group". Terakhir silahkan tekan tombol "Create group".

Gambar 6 - Isi Group name dan description
Gambar 6 - Isi Group name dan description

Anda akan melihat tampilan resource group yang baru dibuat seperti pada Gambar 7.

Gambar 7 - Contoh AWS Resource Group

Membuat AWS Resource Group menggunakan AWS CLI

Silahkan salin JSON berikut. Lalu simpan sebagai sebuah file misalkan dengan nama query.json. Jangan lupa untuk menyesuaikan nama departemen.

{
    "Type": "TAG_FILTERS_1_0",
    "Query": "{\"ResourceTypeFilters\": [ \"AWS::AllSupported\" ], \"TagFilters\":[{\"Key\":\"Departemen\", \"Values\":[\"Penjualan\"]}]}"
}

Lanjutkan dengan menjalankan perintah berikut di komputer Anda yang sudah terpasang AWS CLI:

aws resource-groups create-group \
    --name Departemen-Penjualan-ResourceGroup \
    --resource-query file://query.json

Membuat AWS Resource Group menggunakan AWS CloudFormation

Anda dapat menggunakan contoh CloudFormation template berikut dalam format YAML. Parameter "NamaDepartemen" hanya boleh diisi dengan huruf dan angka TAPI tidak boleh mengandung karakter spasi. Silahkan dicoba menggunakan AWS CloudFormation.

AWSTemplateFormatVersion: 2010-09-09
Description: Template untuk membuat Resource Group
Parameters:
  NamaDepartemen:
    Type: String
    Description: Nama Departemen
Resources:
  ResourceGroupPerDepartemen:
    Type: AWS::ResourceGroups::Group
    Properties: 
      Description: !Sub 'Berbagai resource yang dimiliki oleh Departemen ${NamaDepartemen}'
      Name: !Sub 'Departemen-${NamaDepartemen}-ResourceGroup'
      ResourceQuery: 
        Type: TAG_FILTERS_1_0
        Query:
          ResourceTypeFilters:
            - AWS::AllSupported
          TagFilters:
            - Key: Departemen
              Values:
                - !Ref NamaDepartemen

Membuat AWS Resource Group menggunakan Terraform

Pastikan di komputer Anda sudah terpasang Terraform CLI. Lalu siapkan sebuah folder untuk proyek Terraform Anda, misalkan /home/andy/coba-resourcep-group/.

Simpanlah template di bawah ini sebagai sebuah file misalkan resource_group.tf dan jangan lupa lakukan penyesuaian terhadap nama departemen juga AWS Region.

provider "aws" {
  profile = "default"
  region = "ap-southeast-1"
}
resource "aws_resourcegroups_group" "departemen_rg" {
  name = "Departemen-Kurir-ResourceGroup"

  resource_query {
    type = "TAG_FILTERS_1_0"
    query = <<JSON
{
  "ResourceTypeFilters": [
    "AWS::AllSupported"
  ],
  "TagFilters": [
    {
      "Key": "Departemen",
      "Values": ["Kurir"]
    }
  ]
}
JSON
  }
}

Lalu inisialisasi folder tersebut menggunakan perintah:

terraform init

Lakukan validasi apakah template yang sudah Anda sesuaikan sudah valid dengan perintah:

terraform validate

Jika sudah valid, lanjutkan dengan membuat resource group di AWS dengan perintah:

terraform apply

Terraform akan menampilkan plan yang akan dilakukan seperti berikut:

... output dipotong ...

Do you want to perform these actions?
  Terraform will perform the actions described above.
  Only 'yes' will be accepted to approve.

  Enter a value:

Silahkan ketikkan yes lalu tekan tombol enter. Jika berhasil, Anda akan melihat output seperti berikut:

aws_resourcegroups_group.departemen_rg: Creating...
aws_resourcegroups_group.departemen_rg: Creation complete after 7s [id=Departemen-Kurir-ResourceGroup]

Apply complete! Resources: 1 added, 0 changed, 0 destroyed.

Membuat AWS Resource Group menggunakan AWS SDK untuk Python (boto3)

Berikut ini adalah contoh membuat AWS Resource Group menggunakan AWS SDK untuk Python (boto3). Anda juga dapat menggunakan bahasa pemrograman lainnya yang SDK-nya disediakan oleh AWS seperti Java, PHP, Go, Node.js. Salin code di bawah ini ke dalam file misalkan resource_group.py.

import boto3

client = boto3.client('resource-groups')

client.create_group(
    Name='Departemen-ManajemenRisiko-ResourceGroup',
    Description='Kelompok resource untuk Departemen Manajemen Risiko',
    ResourceQuery={
        'Type': 'TAG_FILTERS_1_0',
        'Query': '{ "ResourceTypeFilters": [ "AWS::AllSupported" ], "TagFilters": [ {"Key":"Departemen", "Values":["ManajemenRisiko"]} ] }'
    }
)

Lalu jalankan code Python tersebut, misalkan:

python resource_group.py