การใช้งาน AWS CLI เบื้องต้น
AWS CLI(Command Line Interface) คือเตรื่องมือที่ช่วยจัดการ resource บน AWS ผ่าน command line ซึ่งจะทำให้เราไม่ต้องทำงานซ้ำๆด้วยมือ(manual) ซึ่งจะช่วยลด Human Error และลดเวลาในการทำงานลง(ทำงานได้เร็วขึ้น)
สร้าง User สำหรับ AWS CLI
เริ่มต้นเราต้องมีสิทธิในการเข้าไปจัดการ resource บน AWS ก่อน โดยจะต้อง
-
Login เข้าไปที่ AWS Console
-
เข้าไปที่ Identity and Access Management(IAM) เพื่อสร้าง User ขึ้นมาก่อน
-
เลือก Add user และ กรอก username ไม่ต้องเลือก Provide user access to the AWS Management Console
-
กดปุ่ม Create User Group เพื่อสร้าง Group ขึ้นมาใหม่
-
สร้าง User Group ชื่อว่า admin และกำหนด policy เป็น AdministratorAccess
-
นำ user เข้าไปใน admin group
-
เพิ่ม tag(optional) เพื่อใช้สำหรับการค้นหา ถ้ามี user เยอะๆแนะนำให้ใส่ tag เข้าไปด้วย
-
Review ข้อมูลต่างๆให้ถูกต้อง แล้วกดปุ่ม Create user
-
AWS จะนำเราไปที่หน้า Users list ดังรูป
-
กดเข้าไปที่ User ของเราแล้วเลือก tab Security Credentials และกดปุ่ม Create Access Key
-
เลือก Command Line Interface และกด Next
-
เราสามารถเพิ่ม Tag ให้กับ Access Key ได้ที่ขั้นตอนนี้
-
กด Create Access Key
-
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
-
Download ไฟล์ setup AWS CLI ได้จากที่นี่
-
Double click ไฟล์ AWSCLIV2.msi และ ทำตามขั้นตอนการติดตั้งโปรแกรมปกติ
-
ตรวจสอบ aws cli ด้วยคำสั่ง
C:\> aws --version
การติดตั้ง AWS CLI บน MacOS
- Download ไฟล์ setup ด้วยคำสั่งนี้
$ curl "https://awscli.amazonaws.com/AWSCLIV2.pkg" -o "AWSCLIV2.pkg"
- Install AWS CLI ด้วยคำสั่ง
$ sudo installer -pkg AWSCLIV2.pkg -target /
- ตรวจสอบว่า 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 ของเรา])
-
ในไฟล์ config จะมีไว้เก็บค่า default configuration ซึ่งไม่เป็นความลับ
1 2 3
[default] region = ap-southeast-1 output = json
-
ในไฟล์ credentials จะมีไว้สำหรับเก็บ AWS Access Key และ AWS Secret Key ที่เป็นความลับ
1 2 3
[default] aws_access_key_id = XXXXXXXXXXXXXXXXXXXXXXX aws_secret_access_key = XXXXXXXXXXXXXXXXXXXXXXX
ตอนนี้่เราจะได้ credentials ที่อยู่ใน default profile ในบรรทัดที่ 1 ซึ่งเราสามารถสร้าง profile ได้มากกว่า 1 profile
-
ใน config file เราจะเพิ่ม profile ชื่อ user1 เข้าไปแบบนี้
1 2 3
[profile user1] region = ap-southeast-1 output = json
เราจะต้องมีคำว่า profile นำหน้าชื่อที่เราตั้งเสมอ
-
ส่วน credentials ไฟล์ เราจะตั้งชื่อ profile ได้เลยโดยที่ไม่ต้องมีคำว่า profile นำหน้า
1 2 3
[user1] aws_access_key_id = XXXXXXXXXXXXXXXXXXXXXXX aws_secret_access_key = XXXXXXXXXXXXXXXXXXXXXXX
กำหนด 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
เราสามารถกำหนดสิทธิให้กับทั้ง 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