TL;DR
Bạn đang cố khởi chạy một loại EC2 instance không tồn tại ở region đích. Hãy kiểm tra xem region đó thực sự hỗ trợ những loại instance nào, sau đó chuyển region hoặc chọn loại instance được hỗ trợ.
# Kiểm tra nhanh: liệt kê các loại instance khả dụng trong region của bạn
aws ec2 describe-instance-type-offerings \
--location-type region \
--filters Name=instance-type,Values=m6g.large \
--region ap-southeast-1
# Nếu output rỗng, loại instance đó KHÔNG khả dụng ở region này
Lỗi đầy đủ
An error occurred (InvalidParameterValue) when calling the RunInstances operation:
The instance type 'm6g.large' is not supported in this region (us-gov-east-1)
Lỗi này xảy ra khi chạy aws ec2 run-instances, apply Terraform plan, hoặc deploy CloudFormation stack. Loại instance bạn chỉ định đơn giản là không tồn tại ở AWS region đã chọn.
Nguyên nhân
AWS không triển khai mọi loại instance đến mọi region cùng lúc. Các loại dựa trên Graviton như m6g và c7g, instance GPU như p4d, và các loại chuyên dụng như inf1 — đều ra mắt ở các region lớn trước. Một số mất hàng tháng mới đến GovCloud hoặc China region. Thậm chí có loại không bao giờ đến được.
Các nguyên nhân phổ biến:
- Copy-paste loại instance từ bài blog được test ở
us-east-1, trong khi bạn deploy lênap-south-1hoặc GovCloud - Dùng instance Graviton2/3 (
m6g,c6g,r6g) ở region chưa nhận được loại đó - Chọn loại instance thế hệ mới trong Terraform module cũ mà không kiểm tra tính khả dụng theo region
- Template Spot instance tham chiếu đến loại không có ở một AZ cụ thể
Cách 1: Tìm các loại instance thực sự khả dụng ở region của bạn
Chạy lệnh này trước tiên. Đây là cách đáng tin cậy nhất để biết bạn đang làm việc với gì:
# Liệt kê TẤT CẢ loại instance khả dụng ở một region cụ thể
aws ec2 describe-instance-type-offerings \
--location-type region \
--region ap-southeast-1 \
--query 'InstanceTypeOfferings[].InstanceType' \
--output text | tr '\t' '\n' | sort
# Lọc theo dòng (ví dụ: tất cả loại m6g)
aws ec2 describe-instance-type-offerings \
--location-type region \
--filters "Name=instance-type,Values=m6g.*" \
--region eu-south-1 \
--query 'InstanceTypeOfferings[].InstanceType' \
--output table
Cách 2: Tìm loại instance tương đương ở cùng region
Khi loại chính xác không khả dụng, thế hệ trước thường là lựa chọn tốt nhất. Thông số tương tự, hỗ trợ region rộng hơn:
# Bạn muốn m6g.large (Graviton2) nhưng không có
# Dùng m5.large (Intel, thông số tương đương) hoặc m6i.large thay thế
aws ec2 describe-instance-type-offerings \
--location-type region \
--filters "Name=instance-type,Values=m5.large,m5a.large,m6i.large" \
--region YOUR_REGION \
--query 'InstanceTypeOfferings[].InstanceType' \
--output table
Bảng tham chiếu nhanh cho các fallback phổ biến:
m6g.*không có → thửm5.*hoặcm5a.*c6g.*không có → thửc5.*hoặcc5a.*r6g.*không có → thửr5.*p4d.*không có → thửp3.*
Cách 3: Kiểm tra tính khả dụng theo AZ (cho Spot hoặc AZ cụ thể)
Đôi khi một loại instance tồn tại trong region nhưng không có ở một Availability Zone cụ thể. Điều này hay gây vấn đề với cấu hình Spot Fleet:
# Kiểm tra tính khả dụng theo AZ
aws ec2 describe-instance-type-offerings \
--location-type availability-zone \
--filters "Name=instance-type,Values=c5.xlarge" \
--region us-west-2 \
--query 'InstanceTypeOfferings[].{Type:InstanceType,AZ:Location}' \
--output table
Cách 4: Terraform hoặc CloudFormation
Với IaC, cách đúng là biến loại instance thành biến với giá trị mặc định hợp lý theo từng region — không hardcode giá trị cố định:
# terraform.tfvars — ghi đè theo từng region
instance_type = "m5.large" # fallback cho region không có m6g
# variables.tf
variable "instance_type" {
description = "Loại EC2 instance (dùng m6g.* cho region hỗ trợ Graviton)"
default = "m5.large"
}
Với CloudFormation, dùng mappings block:
Mappings:
RegionInstanceTypeMap:
us-east-1:
InstanceType: m6g.large
us-gov-east-1:
InstanceType: m5.large
ap-south-1:
InstanceType: m5.large
Resources:
MyInstance:
Type: AWS::EC2::Instance
Properties:
InstanceType: !FindInMap [RegionInstanceTypeMap, !Ref AWS::Region, InstanceType]
Xác nhận
Sau khi chuyển sang loại instance được hỗ trợ, khởi chạy instance và xác nhận trạng thái trả về là running:
# Khởi chạy và xác nhận
aws ec2 run-instances \
--image-id ami-0abcdef1234567890 \
--instance-type m5.large \
--count 1 \
--region YOUR_REGION \
--query 'Instances[0].{ID:InstanceId,State:State.Name,Type:InstanceType}' \
--output table
# Kiểm tra trạng thái đang chạy
aws ec2 describe-instances \
--instance-ids i-0123456789abcdef0 \
--query 'Reservations[0].Instances[0].State.Name' \
--output text
# Kết quả mong đợi: running
Ngăn lỗi trước khi xảy ra
Tích hợp bước kiểm tra này vào pipeline deploy để phát hiện sự không tương thích trước khi AWS báo lỗi:
#!/bin/bash
INSTANCE_TYPE="m6g.large"
REGION="ap-southeast-1"
AVAILABLE=$(aws ec2 describe-instance-type-offerings \
--location-type region \
--filters "Name=instance-type,Values=${INSTANCE_TYPE}" \
--region "${REGION}" \
--query 'length(InstanceTypeOfferings)' \
--output text)
if [ "$AVAILABLE" -eq 0 ]; then
echo "LỖI: ${INSTANCE_TYPE} không khả dụng ở ${REGION}"
echo "Chạy: aws ec2 describe-instance-type-offerings --location-type region --region ${REGION}"
exit 1
fi
echo "${INSTANCE_TYPE} khả dụng ở ${REGION}, tiếp tục..."
Cách dùng AWS Console
Không quen CLI? Vào EC2 → Instance Types trong AWS Console. Đảm bảo bộ chọn region (góc trên bên phải) được đặt đúng, sau đó dùng tìm kiếm và bộ lọc để xem những loại nào khả dụng. Mỗi loại hiển thị nhãn Current generation hoặc Previous generation — hữu ích để nhận ra các lựa chọn thay thế ngay lập tức.

