Coding Gun

การใช้งาน AWS CLI เบื้องต้น

AWS CLI(Command Line Interface) คือเตรื่องมือที่ช่วยจัดการ resource บน AWS ผ่าน command line ซึ่งจะทำให้เราไม่ต้องทำงานซ้ำๆด้วยมือ(manual) ซึ่งจะช่วยลด Human Error และลดเวลาในการทำงานลง(ทำงานได้เร็วขึ้น)

สร้าง User สำหรับ AWS CLI

เริ่มต้นเราต้องมีสิทธิในการเข้าไปจัดการ resource บน AWS ก่อน โดยจะต้อง

  1. Login เข้าไปที่ AWS Console

  2. เข้าไปที่ Identity and Access Management(IAM) เพื่อสร้าง User ขึ้นมาก่อน

  3. เลือก Add user และ กรอก username

    AWS create user
    สร้าง User ใหม่
    ไม่ต้องเลือก Provide user access to the AWS Management Console

  4. กดปุ่ม Create User Group เพื่อสร้าง Group ขึ้นมาใหม่

    AWS set permission
    เลือกวิธีการกำหนด Permission ให้กับ AWS User แนะนำให้สร้าง group

  5. สร้าง User Group ชื่อว่า admin และกำหนด policy เป็น AdministratorAccess

    AWS create user group and attach policy

  6. นำ user เข้าไปใน admin group

    AWS add user to group
    เพิ่ม User เข้าไปใน group admin

  7. เพิ่ม tag(optional) เพื่อใช้สำหรับการค้นหา ถ้ามี user เยอะๆแนะนำให้ใส่ tag เข้าไปด้วย

    AWS add tags
    เพิ่ม tag ให้กับ User

  8. Review ข้อมูลต่างๆให้ถูกต้อง แล้วกดปุ่ม Create user

  9. AWS จะนำเราไปที่หน้า Users list ดังรูป

    AWS Users list
    รายชื่อ Users ทั้งหมดในระบบ

  10. กดเข้าไปที่ User ของเราแล้วเลือก tab Security Credentials และกดปุ่ม Create Access Key

    generate aws access key
    Generate AWS Access Key และ AWS Secret Key

  11. เลือก Command Line Interface และกด Next

  12. เราสามารถเพิ่ม Tag ให้กับ Access Key ได้ที่ขั้นตอนนี้

  13. กด Create Access Key

  14. Copy Access Key และ Secret Access Key เอาไว้ เพราะเรามองไม่เห็น Secret Access Key อีกแล้ว หรือจะเลือก download เป็นไฟล์ csv เก็บไว้ก็ได้

เราควรสร้าง User ขึ้นมาใหม่ เพื่อใช้เฉพาะ AWS CLI เท่านั้น ไม่ควรใช้รวมกับ user ของ admin หรือ root account

ติดตั้ง AWS CLI

เราจะแยกการติดตั้ง AWS CLI ออกเป็น 2 platform คือ Windows และ MacOS

การติดตั้ง AWS CLI บน Windows

  1. Download ไฟล์ setup AWS CLI ได้จากที่นี่

  2. Double click ไฟล์ AWSCLIV2.msi และ ทำตามขั้นตอนการติดตั้งโปรแกรมปกติ

  3. ตรวจสอบ aws cli ด้วยคำสั่ง

    C:\> aws --version
    

การติดตั้ง AWS CLI บน MacOS

  1. Download ไฟล์ setup ด้วยคำสั่งนี้
    $ curl "https://awscli.amazonaws.com/AWSCLIV2.pkg" -o "AWSCLIV2.pkg"
    
  2. Install AWS CLI ด้วยคำสั่ง
    $ sudo installer -pkg AWSCLIV2.pkg -target /
    
  3. ตรวจสอบว่า aws cli ใช้งานได้หรือไม่ด้วยคำสั่ง
    $ aws --version
    

ถ้าการติดตั้งมีปัญหาแนะนำให้ไปอ่านวิธีการแก้ปัญหาต่างๆที่ Troubleshoot AWS CLI errors

นำ Credential ไปใส่ไว้ในเครื่องที่ต้อง run AWS CLI

บนเครื่องที่ต้องการ run AWS CLI ต้องระบุ credentials โดยใช้คำสั่ง

$ aws configure

หลังจากนั้นให้กรอก AWS Access Key, AWS Secret Key, Default Region และ Output format(ผลลัพธ์ที่ return กลับไปใน command line)

AWS Access Key ID [None]: XXXXXXXXXXX
AWS Secret Access Key [None]: XXXXXXXXXXXXXXXXXXX
Default region name [None]: ap-southeast-1
Default output format [None]: json

เราจะได้ file ชื่อว่า config และ credentials อยู่ใน folder .aws(อยู่ภายใต้ User folder ของเรา เช่นบน Windows จะอยู่ที่ C:\Users\[username ของเรา])

ตอนนี้่เราจะได้ credentials ที่อยู่ใน default profile ในบรรทัดที่ 1 ซึ่งเราสามารถสร้าง profile ได้มากกว่า 1 profile

กำหนด Profile ใน Command Line

เราสามารถกำหนด profile ที่เราต้องการเข้าไปใน command line แบบนี้

$ aws ec2 describe-instances --profile user1

ในตัวอย่างนี้จะดึงรายชื่อ EC2 instances ออกมาโดยใช้ Config และ Credential ของ user1

กำหนด Default Profile

โดยปกติถ้าเรา run command โดยไม่ระบุ –profile AWS CLI จะเลือกใช้ default profile แต่ถ้าเราอยากให้เปลี่ยนเป็น profile อื่นๆ เราจะใช้ Environment Variable ชื่อ AWS_PROFILE

ถ้าบน MacOS เราจะใช้คำสั่ง

$ export AWS_PROFILE=user1

แต่ถ้าบน Windows ให้เข้าไปที่ PowerShell แล้ว run คำสั่ง

> $env:AWS_PROFILE="user1"

หลังจากนี้ AWS CLI จะใช้ user1 เป็น profile หลัก เราไม่อยากระบุ –profile ในทุกๆ command เพราะถ้าลืมใส่ –profile ในบางคำสั่ง จะทำให้เกิดข้อผิดพลาดขึ้น

AWS Identity Ceneter

ในปัจจุบันการทำงานกับ Identity ใน AWS เราจะเปลี่ยนมาใช้ AWS Identity Center(ชื่อเดิมคือ AWS SSO) ซึ่งจะรวบรวมการจัดการ Identity ทั้งจากภายใน(Identity Store) และ Identity จากภายนอกอย่าง Okta หรือ Microsoft Active Directory

AWS Identity Center
AWS Identity Center

เราสามารถกำหนดสิทธิให้กับทั้ง User ที่จะเข้ามาใช้งาน AWS และ User ที่เข้าใช้งาน Application ที่ integrated กับ AWS ด้วย AWS Identity Center เพียงที่เดียว

ใน AWS CLI เราจะใช้ command line สร้าง SSO Session ด้วยคำสั่ง

$ aws configure sso

หลังจากนั้นระบบจะให้เราตอบคำถามเหมือนเดิม แต่คำถามจะเปลี่ยนไปเป็น

SSO session name (Recommended): my-sso
SSO start URL [None]: https://my-sso-portal.awsapps.com/start
SSO region [None]: us-east-1
SSO registration scopes [None]: sso:account:access

ชื่อ SSO session จะเทียบได้กับ profile ที่เรากำหนดในหัวข้อก่อนหน้า

ถ้าเราต้องการ login เข้าไปด้วย profile ไหน เราก็จะใช้คำสั่ง

$ aws sso login --profile [ชื่อ profile]

AWS CLI ที่ต้องใช้บ่อยๆ

หลังจากที่เราเข้าใจการกำหนด Identity ให้กับ command line ของเราแล้วลองมาดูการใช้งานเบื้องต้น โดยที่ผมจะรวบรวมเอา command ที่เราต้องใช้บ่อยๆมาให้เรานำไปใช้งานได้ง่ายขชึ้น

1. List Ec2 Instances

เราจะ list รายชื่อ ec2 instances ออกมาด้วยคำสั่ง

$ aws ec2 describe-instances

ถ้าเราต้องการดึงรายชื่อของ Volumes หรือ Disk ที่ attach กับ instance ต่างๆออกมาเราจะใช้คำสั่ง

$ aws ec2 describe-volumes

และถ้าต้องการดู Volume ที่ผูกอยู่กับ ec2 instance ที่มี id เป็น i-1234567890abcdef0 เราจะใช้คำสั่ง

$ aws ec2 describe-volumes \
      --filters Name=attachment.instance-id,Values=i-1234567890abcdef0

ถ้าเราต้องการดึงรายชื่อ subnets ขึ้นมาเราจะใช้คำสั่ง

$ aws ec2 describe-subnets

ถ้าเราต้องการดึงรายชื่อ security groups ออกมาเราจะใช้คำสั่ง

$ aws ec2 describe-security-groups

และถ้าเราต้องการค้นหา Security Group ที่เปิดให้ Secure Shell(ssh) จากที่ไหนก็ได้(0.0.0.0/0) ซึ่งเป็นสิ่งที่ไม่ควรทำ(Bad practices)

$ aws ec2 describe-security-groups \
    --filters Name=ip-permission.from-port,Values=22
              Name=ip-permission.to-port,Values=22
              Name=ip-permission.cidr,Values='0.0.0.0/0'

2. จัดการกับ S3 Buckets

เราสามารถดึงรายชื่อของ S3 Buckets ออกมาด้วยคำสั่ง

$ aws s3 ls

ถ้าต้องการ list รายชื่อ files หรือ directories ใน S3 Bucket ออกมาเราจะใช้คำสั่ง

$ aws s3 ls s3://bucket-nmae

ถ้าต้องการลบ bucket ออกเราจะใช้คำสั่ง

$ aws s3 rb s3://bucket-name --force

ถ้าต้องกรลบ files หรือ directory ใน S3 bucket เราจะใช้คำสั่ง

$ aws s3 rm s3://bucket-name/file-name

ถ้าต้องการ Download ไฟล์จาก S3 Bucket ลงมาที่เครื่องของเรา ต้องใช้คำสั่ง

$ aws s3 sync s3://bucket-name/ /local-directory

ถ้าต้องการ Upload ไฟล์จาก local ขึ้นไปบน S3 Bucket เราจะใช้คำสั่ง

$ aws s3 sync /local-directiory s3://bucket-name/

/local-directory คือ folder ในเครื่องที่เรา run AWS CLI

การใช้คำสั่ง aws s3 sync จะเป็นการ sync ให้ files และ directories ในเครื่องเราตรงกับ S3 bucket

3. จัดการกับ IAM User

เราสามารถดึงรายชื่อ User ทั้งหมดออกมาด้วยคำสั่ง

$ aws iam list-users

ถ้าเราต้องการดึงรายชื่อ Group ทั่้งหมดออกมาเราจะใช้คำสั่ง

$ aws iam list-groups

ถ้าเราต้องการดึงรายชื่อ Role ทั่้งหมดออกมาเราจะใช้คำสั่ง

$ aws iam list-roles

ถ้าเราต้องการดู Policy ที่ attach อยู่กับ User เราจะใช้คำสั่ง

$ aws iam list-attached-user-policies --user-name admin

ถ้าเราต้องการดู Policy ที่ attach อยู่กับ Role เราจะใช้คำสั่ง

$ aws iam list-attached-role-policies --role-name admin

อ่านบทความอื่นๆต่อได้ที่

Phanupong Permpimol
Follow me