Tuesday, November 14, 2017

Kumpulan Perintah Harian AWS-CLI

AWS-CLI
Bagi sys admin / sys operation  atau orang yang tiap hari perlu ngadepin infrastruktur cloud platform seperti Amazon Web Services (AWS), mau tidak mau kudu mantau resource yang ada minimali sekali setiap hari. Apalagi yang menggunakan layanan spot fleet request pada EC2. Yang namanya backup mutlak diperhatikan tiap harinya (menurut saya sih). Karena spot fleet request secara gampangnya adalah sewa infrastruktur (dalam hal ini server) dengan sistem lelang.

Kalo harga lelang melebihi harga yang kita tawarkan (baca : Bid), maka kita punya waktu 2 menit untuk menyelamatkan data atau informasi berharga dari server yang bakalan di ambil alih sama customer amazon yang menggunakan sistem on-demand.

Nah, Kalo tiap hari kudu masuk dashboard buat mantau resource yang ada, kadang cukup makan waktu kalo koneksi kurang memadahi. Apalagi web AWS terbilang web yang menurut saya cukup berat . Untuk masuk ke dashboard AWS, setidaknya kita perlu mendownload resource web sekitar 1,5 MB. (Klik pada gambar untuk memperbesar gambar)
AWS Dashoard
Belum lagi untuk EC2 dashboard. Resource yang perlu di download sekitar 4,25MB.
EC2 Dashboard
Apalagi anda yang pake Multi-factor Authentication untuk masuk ke dashboard. Makin panjang lagi kan kalo koneksi internetnya lelet. :D

Solusi yang biasanya saya pakai untuk memantau resource AWS agar lebih cepat adalah dengan menggunakan AWS Command Line Interface (AWS-CLI) yang dieksekusi dari server yang terinstall AWS-CLI. Karena login ke dalam server tidak perlu koneksi secepat saat kita masuk ke dashboard AWS. Berikut adalah dokumentasi perintah AWS-CLI yang biasa/sering saya gunakan untuk memantau resource yang ada :

Amazon Machine Image (AMI)
Daftar AMI yang dibuat oleh tenant tertentu
AWS_ACCOUNT_NUMBER=id_account_aws 
aws ec2 describe-images --owners $AWS_ACCOUNT_NUMBER --query 'Images[*].[Name,CreationDate]' --output table
Untuk mensorting berdasarkan tanggal dibuatnya AMI secara descending :
aws ec2 describe-images --owners $AWS_ACCOUNT_NUMBER --query "reverse(sort_by(Images,&CreationDate)[*].[Name,CreationDate])" --output table

Simple Storage Service (S3)
Menghapus bucket beserta isinya
aws s3 rb s3://nama-bucket –-force
Menyalin folder dan isinya ke s3 bucket
aws s3 cp MyFolder s3://nama-bucket --recursive
Sinkronisasi isi sebuah folder ke folder lain (abaikan source region jika kedua bucket berada di region yang sama
aws s3 sync s3://bucket1/folder1/ s3://bucket1/folder2 --source-region us-west-1 --region us-west-2
 Daftar Bucket pada layanan S3 bucket dengan  tenant tertentu
aws s3api list-buckets --query "Buckets[*].[Name,CreationDate]" --output table 
Untuk mensorting berdasarkan tanggal dibuatnya Bucket secara descending :
aws s3api list-buckets --query "reverse(sort_by(Buckets,&CreationDate)[*].[Name,CreationDate])" --output table

Menghitung usage bucket, dan jumlah object pada bucket
BUCKET_NAME=nama_bucket
aws s3api list-objects --bucket $BUCKET_NAME --query "[sum(Contents[].Size), length(Contents[])]" --output table
Menghitung besar file/folder pada bucket dan jumlah object di dalamnya
BUCKET_NAME=nama_bucket
NAMA_FOLDER=nama_folder
aws s3api list-objects --bucket $BUCKET_NAME --prefix "$NAMA_FOLDER" --query "[sum(Contents[].Size), length(Con
Mendapatkan lokasi region bucket
aws s3api get-bucket-location --bucket [nama_bucket]

Elastic Compute Cloud (EC2)
Menampilkan daftar metadata yang bisa kita dapatkan dari dalam instance yang sedang kita remote
curl http://169.254.169.254/latest/meta-data/ 
dari url diatas, kita tinggal menambahkan metadata yang kita inginkan
curl http://169.254.169.254/latest/meta-data/[metadata]
misal kita ingin mendapatkan id instance yang sedang kita remote, maka menjadi
curl http://169.254.169.254/latest/meta-data/instance-id
atau mendapatkan public ip address, maka menjadi
curl http://169.254.169.254/latest/meta-data/public-ipv4

Menampilkan metadata instance meliputi id instance, id AMI, tipe instance, status instance, nama instance, ip private 1, ip private 2 dan EIP/public ip instance.

aws ec2 describe-instances --query 'Reservations[*].Instances[*].[InstanceId,ImageId,InstanceType,State.Name,Tags[?Key==`Name`].Value|[0],PrivateIpAddress,NetworkInterfaces[*].PrivateIpAddress|[1],PublicIpAddress,Placement.AvailabilityZone]' --output table

Menambah IP private / IP public tertentu kedalam security group untuk SEMUA protokol:
IP=[IP_YG_DITAMBAHKAN]
SUBNET=[SUBNET_JARINGAN]
GROUP_NAME=[NAMA_SECURITY_GROUP]
SECURITY_GROUP_ID=[ID_SECURITY_GROUP]
PROTOCOL=[TCP_UDP_ICMP]
aws ec2 authorize-security-group-ingress --group-name $GROUP_NAME --protocol all --cidr $IP/$SUBNET

Cek event pada instance, contoh : jika instance akan di terminate/retired oleh aws
aws ec2 describe-instance-status --instance-ids [id_instance]

Fitur Baru
Sekarang kita dapat menambah deskripsi pada security group rule, info resminya bisa dilihat disini.

Untuk menambah deskripsi, kita perlu menambahkan parameter berbentuk JSON. berikut adalah contoh parameter JSON yang bisa kita gunakan :
aws ec2 authorize-security-group-ingress --group-id $SECURITY_GROUP_ID --ip-permissions '[{"IpProtocol": "$PROTOCOL", "FromPort": 0, "ToPort": 65535, "IpRanges": [{"CidrIp": "$PUB_IP/$SUBNET", "Description": "deskripsi disini"}]}]'

contoh selengkapnya bisa dilihat langsung dari dokumentasi AWS CLI bagian authorize security group

Namun, ada kekurangan dari dokumentasi pada yang saya sebutkan diatas. Saya tidak menemukan dokumentasi tentang bagaimana menambahkan semua protocol seperti cara lama yang sudah saya tulis sebelumnya. Iseng-iseng ngintip output JSON dari AWS CLI  saya menemukan cara menambahkan IP ke security group dengan  ijin akses penuh. Berikut adalah perintahnya :
aws ec2 authorize-security-group-ingress --group-id $SECURITY_GROUP_ID --ip-permissions '[{"IpProtocol": "-1", "IpRanges": [{"CidrIp": "$IP/SUBNET", "Description": "deskripsi d"}]}]'
Menghapus IP private / IP public tertentu dari security group :
IP=[IP_YG_DIHAPUS]
SUBNET=[SUBNET_JARINGAN]
GROUP_NAME=[NAMA_SECURITY_GROUP]
aws ec2 revoke-security-group-ingress --group-name $GROUP_NAME --protocol all --cidr $IP/$SUBNET

Semoga bermanfaat. :)

Referensi :

No comments:

Post a Comment