44 lines
1.6 KiB
Python
44 lines
1.6 KiB
Python
import pulumi_aws as aws
|
|
|
|
AMI_MAP = {
|
|
"ubuntu-22.04": ("099720109477", "*ubuntu*22.04*"),
|
|
"ubuntu-24.04": ("099720109477", "*ubuntu*24.04*"),
|
|
"rocky-8.10": ("792107900819", "Rocky-8-ec2-8.10*"),
|
|
"amazonlinux-2": ("137112412989", "amzn2-ami-hvm-*-gp2"),
|
|
"amazonlinux-2023": ("137112412989", "al2023-ami-*-x86_64"),
|
|
"debian-12": ("136693071363", "debian-12-*"),
|
|
"almalinux-9": ("151447241410", "AlmaLinux-9-*"),
|
|
}
|
|
|
|
def query_latest_ami(owner: str, name_filter: str, architecture: str = "x86_64") -> str:
|
|
result = aws.ec2.get_ami(
|
|
most_recent=True,
|
|
owners=[owner],
|
|
filters=[
|
|
{"name": "name", "values": [name_filter]},
|
|
{"name": "architecture", "values": [architecture]},
|
|
{"name": "virtualization-type", "values": ["hvm"]},
|
|
],
|
|
)
|
|
return result.id
|
|
|
|
def resolve_ami(ami_keyword: str, region: str, architecture: str = "x86_64") -> str:
|
|
if not aws.config.region:
|
|
raise ValueError("❌ AWS region is not set. Please set aws.config.region before calling resolve_ami")
|
|
|
|
if ami_keyword.startswith("ami-"):
|
|
return ami_keyword
|
|
|
|
keyword = ami_keyword.lower()
|
|
print(f"🔍 Resolving AMI for keyword='{keyword}' in region='{region}' with arch='{architecture}'")
|
|
|
|
if keyword in AMI_MAP:
|
|
owner, name_filter = AMI_MAP[keyword]
|
|
try:
|
|
return query_latest_ami(owner, name_filter, architecture)
|
|
except Exception as e:
|
|
raise ValueError(f"❌ Failed to find AMI for '{keyword}' in region '{region}': {e}")
|
|
|
|
raise ValueError(f"❌ Unsupported AMI keyword: {ami_keyword}. Supported keywords: {list(AMI_MAP.keys())}")
|
|
|