มาลองเล่น AWS ECR กันเถอะ !!

AWS ECR หรือว่าชื่อเต็มๆก็คือ Amazon Elastic Container Registry ทำหน้าที่เป็น “คลังเก็บ” Docker image ของเรานั่นเองครับ ซึ่งถ้าพูดถึง คลังเก็บที่อื่นๆ อย่างดังๆเลย ที่ทุกๆท่านคงรู้จักก็คือ hub.docker.com ของ Docker เอง หรือว่า gcr.io อันนี้เป็นของ Google ครับ

ไม่รอช้าเเล้ว มาเริ่มกันเลยดีกว่าครับ

  1. ก่อนที่เราจะใช้คำสั่ง docker push เพื่อส่ง docker image ของเราไปเก็บบน ECR เราก็ต้องมาสร้าง repository กันก่อน โดยไปที่ AWS ECR Service ครับ ซึ่งสามารถเข้าถึงได้ผ่านทาง AWS Management Console โดยพิมพ์ในช่อง Search ว่า “ECR” หรือว่าเลือก Service “ECR” ได้จากรายการ AWS Service ทั้งหมดครับ โดยจะอยู่ในหมวดหมู่ Compute นั่นเอง

2. หลังจากนั้น ก็มาสร้าง repository กัน กดปุ่มสีส้มๆที่มีคำว่า Create repository เลยครับ ซึ่งระบบมันก็จะนำพาเรามายังหน้านี้ ให้เราตั้งชื่อ Project ของเราเลยครับ ในที่นี้ผมจะตั้งชื่อว่า webapp001 ก็เเล้วกัน

เราจะเห็นรายการสองรายการด้านล่าง มีปุ่มเปิดปิดครับ ซึ่งอันเเรก

Tag immutability ก็คือการป้องกันการที่เราไป push docker image เเล้วใช้ tag ซ้ำกัน ซึ่งอันนี้ผมเเนะนำให้เปิดไว้นะครับ ส่วน Scan on push ก็คือการ scan ช่องโหว่ด้านความปลอดภัยของ Docker image ที่เราจะ push เข้าไป อันนี้ผมก็เเนะนำให้เปิดไว้

และจากนั้นก็กดปุ่มสีส้ม “Create repository” เลยครับ

3. เเละเมื่อระบบมันสร้าง repository ให้เราเสร็จสิ้น มันก็จะเเสดงรายการ repository ของเรา ทั้งที่เคยสร้างไว้เเล้ว เเละเพิ่งสร้างเมื่อขั้นตอนก่อนหน้าครับ ดังตัวอย่างตามภาพด้านล่าง

ซึ่งค่าที่เราจะเอาไปใช้ก็คือค่า url ครับ ซึ่งมันโคตรจะยาว (ถ้าทำ custom domain ได้คงจะดี 555+) ขออภัยที่เเอบบ่นครับ url พวกนี้มันก็มีความหมายนะครับ อย่างของผม

975614627293.dkr.ecr.ap-southeast-1.amazonaws.com/webapp001

ตัวเลขด้านหน้าสุดคือ Account ID ของผมครับ

dkr อันนี้คิดว่ามาจาก docker repository

ecr ก็ชื่อ service

ap-southeast-1 ก็คือ region ที่เราเลือกใช้ครับ อย่างอันนี้ก็สิงคโปว์

และตามด้วย .amazonaws.com ตามเเบบฉบับ AWS 55555+

และ /webapp001 เป็นชื่อ repository ที่เราตั้งเอาไว้ในขั้นตอนเเรกครับ

4. เมื่อเรามี repository เรียบร้อย ก็พร้อมที่จะ push docker image ของเราไปเก็บเเล้ว เเต่เดี่ยวๆๆๆๆๆๆก่อนนนนน !!! คุณลง AWS CLI เเล้วรึยัง มี Access Key / Secret key เเล้วรึยังเอ่อยย ??

ส่วนสาเหตุที่ทำไมต้องมี เพราะเราต้องใช้ AWS CLI ในการ Gen User/Password ให้ Docker ที่เราลงอยู่ในเครื่องเราติดต่อกับ AWS ECR ได้นั่นเองครับ

เเละ Permission ที่เราจะกำหนดให้ User ต้องเพียงพอเเละมีสิทธิ์เข้าถึง AWS ECR นะครับ หรือจะเลือก Permission เป็น Admin ก็ได้ ถ้า Account นี้ใช้คนเดียว ไม่เกี่ยวกับใคร เเต่ถ้าใช้กันหลายๆคน ก็จำกัดสิทธ์ซะหน่อย อันนี้ก็เเล้วเเต่นโยบายด้านความปลอดภัยเลยครับ ส่วนผมเองใช้คนเดียวก็ตั้งให้มันมีสิทธิ์เป็น admin ได้สบายๆ

ถ้าไม่มีก็ มาสร้าง Access Key / Secret key กันก่อนเลยครับ โม้เยอะเเล้ว 555+

โดยไปที่ IAM Service ซึ่ง Search หาได้เหมือนเดิม หลังจากนั้นก็ไปที่ User และกดปุ่มสีน้ำเงินเพื่อสร้าง User ใหม่เลยครับ

จากนั้นก็ใส่ชื่อที่ต้องการลงไปและเลือก access type เป็น Programmatic access เเละกดปุ่ม Next: Permission เลย

เราจะเห็นหน้าจอให้เรากำหนด Policy ครับ ผมจะกำหนด Policy ให้กับ User ตรงๆเลย ก็เลือก Attach existing policies directly เเละเลือก Policy เป็น Admin ตามตัวอย่างครับ ซึ่ง account นี้มันจะเข้าถึง service อื่นๆได้ทั้งหมดเลย เเต่ถ้าเราอยากให้เข้าถึงได้เฉพาะ ECR ก็เลือกเป็น AmazonEC2ContainerRegistryFullAccess ก็ได้ครับ

จากนั้นก็กดปุ่ม Next มันจะมีค่า Tag ให้เราใส่ ซึ่งเราไม่ต้องใส่ก็ได้ครับ กดปุ่ม Review ได้เลย ระบบมันจะเเสดง summary สรุปค่าต่างๆที่เรากำหนด ถ้าถูกต้องเเล้วกดปุ่ม Create User ได้เลยครับ เมื่อการสร้างเสร็จสมบูรณ์ มันก็จะเเสดง Access Key / Secret Key ให้เรา ยินดีด้วยครับ ชีวิตใกล้ประสบความสำเร็จเเล้ว 5555+ ก็จัดการ Copy ไปวางที่อื่นก่อนนะครับ

หลังจากนั้น ก็มาลง AWS CLI กัน ถ้าลงไว้เเล้วก็ข้ามไปได้เลย วิธีการลงผมไม่พูดถึงล้ะนะ ศึกษาเองตามลิ๊งนี้ https://docs.aws.amazon.com/cli/latest/userguide/install-cliv1.html

และเมื่อลง AWS CLI เสร็จเเล้ว ก็จัดการ Run คำสั่ง “aws configure” เพื่อทำการตั้งค่าครับ

มันจะถาม Access Key / Secret Key ก็เอาจากที่สร้างไว้มาใส่

และจะถาม default region ก็ใส่ลงไป ของผมเองใช้  ap-southeast-1

และมันจะถาม default output ก็ใส่เป็น json ก็ได้ครับ

5. จากนั้นก็จัดการเขียน Dockerfile เตรียม resource ต่างๆให้เรียบร้อย เเละ build docker image กัน โดยกำหนด repository url ตามที่ AWS ECR กำหนดมาให้ครับ

เมื่อ build เสร็จเรียบร้อย ก็เท่ากับว่าเราเตรียม image พร้อมเเล้ว ต่อไปก็จัดการตั้งค่า docker ให้เชื่อมต่อไปหา AWS ECS กัน

หมายเหตุ : ในที่นี้ผมใส่ tag เป็น v1 นะครับ จะใช้ชื่ออื่นก็ตามต้องการ

6. ใช้คำสั่ง aws ecr get-login --region <region> --no-include-email

เพื่อสร้างคำสั่งในการเอาไป config ที่ docker ครับ ตรง region ให้ระบุ region ที่เราจะใช้ ในที่นี้ผมใช้ ap-southeast-1 นะครับ

พอรันคำสั่งนี้ มันจะ return คำสั่งของ docker ยาวๆ (โคตรยาวววววว !!!) ออกมา หน้าตาประมาณนี้ครับ

เราก็จัดการ Copy คำสั่งที่มัน gen ให้มา เอาไปรันอีกรอบ ซึ่งถ้าสำเร็จ มันจะมีข้อความประมาณนี้ตอบกลับมาครับ

WARNING! Using –password via the CLI is insecure. Use –password-stdin.

WARNING! Your password will be stored unencrypted in /root/.docker/config.json.

Configure a credential helper to remove this warning. See

Login Succeeded

เเค่นี้ก็เรียบร้อยเเล้ว ต่อไปก็จัดการ push docker image ของเราไปเก็บไว้บน ECR กัน

7. ใช้คำสั่ง docker push “your-url”/<project>:tag เพื่อจัดการ push image ไปเก็บไว้บน ECR ตัวอย่างก็ตามภาพครับ

รอให้มัน push เสร็จ เราก็กลับไปที่ ECR web console กัน คลิกที่ชื่อ Project ที่เรา push image เข้ามา เราก็จะเจอกับรายการ image ที่เรา push มาเก็บครับ

เย้ !! เสร็จเเล้ว Image ของเรามาอยู่บน AWS ECR เรียบร้อยเเล้วครับ ถือว่าชีวิตประสบความสำเร็จเเล้ว 55+ ต่อไปจะเอา image ไป deploy บน ECS หรือ EKS ก็ตามศรัทธาเลย

ขอจบบทความไว้เพียงเท่านี้นะครับ

และขอลงโฆษณานิดหน่อย ท่านใดสนใจ AWS Cloud ผมมีคอร์สให้ลงเรียน รายละเอียดคลิกที่นี่เลยครับ

คราวนี้จบบทความเเล้วจริงๆ ไว้พบกันใหม่ สวัสดีครับ

Network / Cloud Engineer , Instructor / Blogger รักเเละหลงไหลไปกับเทคโนโลยีต่างๆมากมาย

Leave A Reply