# Whizlabs là gì Là website để cung cấp các bài thực hành & học AWS Mỗi lab ở whizlabs, khi click **Start Lab**, system sẽ init một IAM với Permission vừa đủ cho bài lab và sẽ drop IAM này khi hết giờ hoặc khi User bấm **End Lab**. User sẽ thực hành bằng cách Login vào AWS sử dụng IAM được cấp --- # CloudWatch - Creating a CloudWatch Dashboard for EC2 Instance > Link: https://www.whizlabs.com/labs/creating-a-cloudwatch-dashboard-for-ec2-instance Desc: Tạo Cloudwatch follow thông số của Instance EC2 # ELB - Introduction to AWS Elastic Load Balancing > Link: https://www.whizlabs.com/labs/introduction-to-aws-elastic-load-balancing Desc: Open 1 cái Load Balancing đê serve cho 2 con Instance EC2 # CloudFront - Use Amazon CloudFront for dynamic Websites 25/11/2022 > Link: https://www.whizlabs.com/labs/use-amazon-cloudfront-for-dynamic-websites ![](https://i.imgur.com/fTrK2TZ.png) Desc: Tạo 2 instance > tạo LB để load 2 instance > Tạo CloudFont để cache cái LB > DONE # VPC - Creating a VPC Networking Environment for the Cafe 28/11 > Link https://www.whizlabs.com/labs/creating-a-vpc-networking-environment-for-the-cafe ![](https://i.imgur.com/vfq86hX.png) Desc: Tạo 2 con EC2, 1 con để làm Bastion Host đặt ở Public Subnet, con còn lại đặt ở Private Subnet. Muốn SSH vào con ở private thì phải đi qua con Bastion Host, ngoài ra con ec2 ở private có thể access internet qua con Bastion Host # VPC - How to setup a free VPN server in AWS > Link https://www.whizlabs.com/labs/how-to-setup-a-free-vpn-server-in-aws Lauch 1 con instance EC2, sử dụng AMI OpenVPN ![](https://i.imgur.com/XVBiTBp.png) Setup các thứ ở admin sau khi lauch con EC2, cuối cùng connect đến server qua tool OpenVPN ==> Done # S3 - Generate S3 presign URL using CloudShell > Link https://www.whizlabs.com/labs/generate-s3-presign-url-using-cloudshell **Overview** Upload image lên S3, dùng CloudShell để gõ lệnh generate ra S3 presign URL **Note** Image upload lên S3 bị chặn theo policy, lệnh này sẽ generate ra token có expired 60s, lúc đấy có thể truy cập đc image `$ aws s3 presign [S3 URI] --expires-in 60` S3 URI có dạng `s3://mywhizbucket1th12/smily.jpg` # S3 - AWS S3 Multipart Upload using AWS CLI > Link https://www.whizlabs.com/labs/aws-s3-multipart-upload-using-aws-cli **Overview** Chia 1 file thành nhiều file nhỏ, mỗi khi upload file thì có 1 id, cuối cùng tổng hợp list ID đấy vào 1 file và ghép vào **Note** Split một file thành nhiều file nhỏ ``` $ split [options] [filename] # split -b 40M video.mp4 ``` Step 1. Tạo 1 multipath upload ==> lấy Upload-id ``` $ aws s3api create-multipart-upload --bucket [Bucket name] --key [original file name] ``` Step2. Upload chunk ``` $ aws s3api upload-part --bucket [bucketname] --key [filename] --part-number [number] --body [chunk file name] --upload-id [id] ``` Step3. Ghép các id vào 1 file ``` $ nano list.json ## Nội dung file { "Parts": [ { "PartNumber": 1, "ETag": "\"2771bc3662b381da1259fdf39904045a\"" }, { "PartNumber": 2, "ETag": "\"9fdc79d796e33027565ac06358af966d\"" }, { "PartNumber": 3, "ETag": "\"eb9311b12d3c23b7543f08364bfe079b\"" }, { "PartNumber": 4, "ETag": "\"327c0ca55097aea8cb65c8bc8eee8b4f\"" } ] } ``` Step 4. Complete multipath-upload ``` $ aws s3api complete-multipart-upload --multipart-upload [json file link] --bucket [upload bucket name] --key [original file name] --upload-id [upload id] ``` # S3 - Creating and Subscribing to SNS Topics, Adding SNS event for S3 bucket > Link https://www.whizlabs.com/labs/creating-and-subscribing-to-sns-topics-adding-sns-event-for-s3-bucket Kết quả nè ![](https://i.imgur.com/Gmcjs7Q.png) **Overview** - Tạo SNS topic > Tạo Subscriptions > Confirm Subscriptions - Tạo S3 - Vào SNS topic > Sửa Access policy để follow SourceArn = S3 vừa tạo - Vào S3 > Property > Event notifications > Chọn event PUT > Destination: chọn SNS topic vừa tạo - Save lại rồi test bằng cách Upload 1 file lên S3 - DONE **Note** - có thể có nhiều Subscriptions cho 1 topic # S3 - Comparing Data Transfer Speeds with S3 Transfer Acceleration > Link https://www.whizlabs.com/labs/comparing-data-transfer-speeds-with-s3-transfer-acceleration **Overview** Bật Transfer Acceleration ở Bucket > properties > Transfer acceleration > Enabled Kết quả là upload nhanh hơn # S3 - Encrypt an S3 bucket using AWS KMS and monitor the activities with CloudTrail > Link https://www.whizlabs.com/labs/how-to-encrypt-an-s3-bucket-using-aws-kms-and-monitor-the-activities-with-cloudtrail ![](https://i.imgur.com/h0OdRmq.png) **Overview** Tạo KMS để encrypt object trong S3 **Gán KMS vào object** bằng cách vào Object detail > Server-side encryption settings > Edit > Server-side encryption = Enable; chọn Choose from your AWS KMS keys rồi gán vào ![](https://i.imgur.com/cg7xK0b.png) **Gán CloudTrail** vào AWS bằng cách tạo 1 Trail, Edit ở Management events và Data events (chọn S3) ![](https://i.imgur.com/jAfurg5.png) **Note** Các Object bị encrypt phải sử dụng token mới có thể get được, kể cả có public thì cũng không thể đọc được # EC2 - Elastic Network Interface - Multiple IPs on an EC2 > Link https://www.whizlabs.com/labs/create-elastic-network-interface-multiple-ips-on-an-ec2 **Overview** Tạo 1 con EC2 > 2 cái Security group > 1 cái attach vào con EC2, 1 cái attach vào ELP > Gán ELP vào EC2 > EC2 có 2 IP ![](https://i.imgur.com/mNrnpnm.png) **Note** Có thể attach nhiều Network Interface vào 1 EC2 # EC2 - Mount Elastic File System (EFS) on EC2 > Link https://www.whizlabs.com/labs/mount-elastic-file-system-efs-on-ec2 **Overview** Tạo 2 con EC2, tạo 1 cái EFS và assign cho nó sử dụng cùng SG với 2 con EC2 => vào con EC2 rồi bấm cài amazon-efs-utils. `$ yum install -y amazon-efs-utils` => vào con EFS mới tạo bấm vào Attach > copy command hiển thị để chạy trên EC2 ``` $ sudo mount -t efs -o tls fs-0476c76ca57137e28:/ efs ``` ![](https://i.imgur.com/lnhL4zE.png) => vào 2 con EC2 check, tạo thử 1 file ở trong efs folder, nếu con EC2 còn lại vẫn hiện là ok **Note** Architech Design ![](https://i.imgur.com/0u6ol7p.png) # VPC - Access S3 from Private EC2 instance using VPC Endpoint > Link https://www.whizlabs.com/labs/access-s3-from-private-ec2-instance-using-vpc-endpoint ![](https://i.imgur.com/v3RiV8Q.png) **Overview** => Tạo mới 1 VPC = MyVPC => Tạo 1 con Internet Gateway ==> Tạo 2 subnet trong đó, 1 cái private, 1 cái public ==> Tạo 2 Route Table, 1 cái public thì gán 0.0.0.0 vào ig public, cái private thì không gán gì hết, đặt tên là **RT for Private subnet** ==> Tạo 2 Security Group, Cái 1: SG = Bastion-SG allow SSH, HTTP, HTTPS, cái còn lại SG = Endpoint-SG chỉ allow SSH từ thằng Bastion-SG ==> Tạo EC2 tên Bastion gán cho nó subnet public, Bastion-SG ==> Tạo private EC2 gán cho nó subnet public, Bastion-SG =====> SSH vào con private EC2 qua con Bastion =======> **Tạo VPC Endpoint** for S3 Gán VPC = **MyVPC**; Route table = **RT for Private subnet**; Service thì gán S3 Gateway =========> SSH vào con EC2 private, gõ `aws configure` để setup key AWS, sau đó gõ `aws ls s3` để check thử có call đc đến S3 không. DONE **Note** **VPC Endpoint** cho phép tạo kết nối private (sử dụng hạ tầng của AWS) tới các dịch vụ của AWS thay vì đi qua kết nối Internet # RDS - How to Query into RDS MySQL Using AWS Lambda > Link https://www.whizlabs.com/labs/how-to-query-into-rds-mysql-using-aws-lambda **Overview** Dựng 1 con RDS lên > Build AWS lamda func để query trong con RDS đấy **Note** Cần học thêm về lambda func Có thể import code lên Lambda bằng file .zip ![](https://i.imgur.com/AfXICyS.png) Khi tạo code mới thì cần phải Deploy rồi bấm test ![](https://i.imgur.com/qYDaNU6.png) # Terraform - Launch an EC2 Instance > Link https://www.whizlabs.com/labs/launch-an-ec2-instance-as-a-web-server-using-terraform **Overview** Build source code để dựng EC2 từ code terraform **Note** ``` $ terraform init # để init từ file main.tf $ terraform plan # để xem code nó làm những gì $ terraform apply # để thực thi code ``` # Deploying a Highly Available Web Application and Bastion Host in AWS > Link https://www.whizlabs.com/labs/deploying-a-highly-available-web-application-and-bastion-host-in-aws ![](https://i.imgur.com/MS8BO8W.png) **Overview** Dựng LB để load 2 con EC2 private. Ngoài ra dựng Bastion host để còn ssh được vào 2 con EC2 private đấy **Note** Nhớ tạo Target group để dựng LB --- # Các bài thực hành khác # Dựng website wordpress trên AWS ## Step1: Dựng RDS - Chọn RDS loại Aurora ![](https://i.imgur.com/eOlyoEa.png) - Instance thì chọn t3.small - Chọn luôn initial database cho tiện lợi ## Step2: Run EC2 + cài Wordpress - Chọn instance loại t2.small - Security Group thì Create new 1 SG với thông số: open all cho SSH, HTTP, HTTPS - Cài wordpress bằng cách cài apache, php, php-fpm, php-zip... & pull file về ``` $ sudo yum install -y wget httpd $ sudo systemctl start httpd $ sudo systemctl enable httpd $ sudo amazon-linux-extras install -y php7.2 $ sudo yum install php php-{pear,cgi,common,curl,mbstring,gd,mysqlnd,gettext,bcmath,json,xml,fpm,intl,zip,imap} $ sudo systemctl restart php-fpm $ wget https://wordpress.org/latest.tar.gz ``` giải nén và cập nhật lại cấu hình follow theo https://devopsvn.tech/xay-dung-ha-tang-phuc-vu-hang-trieu-nguoi-dung-tren-aws/bai-0-chuan-bi - Check các kiểu, mở đc trang cấu hình wordpress ra là ok, sau đó mới đi copy file wp-config và cấu hình trỏ đến DB theo các thông số ở DB Type = writer instance ## Tạo S3 và cấu hình connect tới S3 - Tạo ra 1 cái S3 với buket policy là public. Sử dụng role sau trong Bucket Policy ``` { "Version": "2012-10-17", "Statement": [ { "Sid": "PublicRead", "Effect": "Allow", "Principal": "*", "Action": [ "s3:GetObject", "s3:GetObjectVersion" ], "Resource": "arn:aws:s3:::<your-bucket-name>/*" } ] } ``` - Cài plugin **WP Offload Media Lite for Amazon S3** để kết nối tới S3, thực hiện cấu hình key các kiểu - Xong rồi, check lại project thôi # Dựng Auto Scaling cho website wordpress - Tạo AMI từ EC2 đang chạy (check site wp chạy ổn định đã rồi mới tạo AMI) - Tạo Auto Scaling Group với AMI vừa tạo ở trên. Chú ý cấu hình các thông số Desired capacity; Minimum capacity; Maximum capacity và Security Group - Sau khi tạo xong Auto Scaling => check xem instance mới đã được tạo chưa, nếu tạo rồi thì thử truy cập vào IP xem vào đc chưa - Tạo đến Load Balancer, ở đây Create New: Target Group = Auto Scaling Group vừa tạo ở trên - Cuối cùng vào thử từ domain của Load balancer xem được chưa. OK xong. Mô hình vừa tạo nó sẽ giống cái bên dưới. ![](https://i.imgur.com/Uu1La0Y.png) *Note: Chỗ này thiếu là phải cho đống EC2 kia vào trong private subnet* # Tạo Lambda function resize image mới Upload lên S3 Link bài lab https://000078.awsstudygroup.com/vi/2-resize-image-function/ ## Tạo function resize image - Thêm trigger để run lambda function bằng cách bấm Add trigger ở màn hình chính ![](https://i.imgur.com/tl6hSzb.png) - Ngoài ra cần add permission để Lambda có quyền đọc, ghi object (vào Configuration > Permission > Click vào role để add permission) ## Tạo function insert DynamoDB - Nhớ thêm permission DynamoDBFullAccess để thực thi thôi # Viết frontend gọi API gateway Link bài lab https://000079.awsstudygroup.com/vi/1-introduction/ Thành quả bài lab ra 1 cái web xịn ![](https://i.imgur.com/bIBByBw.jpg) Trong quá trình làm bài lab - Lamda function book_list cần có quyền đọc DynamoDB - Lamda function book_create cần có quyền PutObject lên S3 > Bucket book-image-store - Lamda function book_delete cần có quyền DeleteObject ở S3 > Bucket book-image-resize-store - Lamda function resize image cần có quyền ReadObject & DeleteObject ở Bucket book-image-store, quyền PutObject ở Bucket book-image-resize-store - Có thể check lại log của API dựa trên **CloudWatch**, check vào phần show all if error ![](https://i.imgur.com/zU8knLL.png)