咨询:能否通过CloudFormation启动AWS Marketplace实例及解决方案
如何用CloudFormation从AWS Marketplace启动实例?
当然可以用CloudFormation从AWS Marketplace启动实例!你提到的AMI无法直接通过CloudFormation自动获取的问题确实是常见的小卡点,不过有几个靠谱的解决办法,我给你梳理一下:
前提:先完成Marketplace产品订阅
必须先在AWS Marketplace订阅你要使用的产品并接受其条款,否则不管用什么方式启动实例都会失败。这一步在AWS Marketplace控制台操作即可,订阅后你的账户就有权限使用对应的AMI了。
解决办法1:用SSM Parameter Store动态获取AMI ID(推荐)
很多AWS Marketplace的AMI都会在SSM Parameter Store中提供预定义的参数,这些参数会自动同步不同区域的最新AMI ID,非常适合跨区域部署的CloudFormation模板。
查找对应的SSM参数
你可以通过AWS CLI命令查找目标产品的SSM参数:
aws ssm get-parameters --names /aws/service/marketplace/ami-id/<你的产品ID> --region <目标区域>
或者直接在AWS控制台的SSM Parameter Store中搜索/aws/service/marketplace/前缀的参数,找到对应产品的条目。
在CloudFormation模板中引用
用动态引用的方式直接获取AMI ID:
Resources: MyMarketplaceInstance: Type: AWS::EC2::Instance Properties: ImageId: '{{resolve:ssm:/aws/service/marketplace/ami-id/<你的产品ID>:1}}' InstanceType: t2.micro # 补充其他必要属性:密钥对名称、安全组ID等
也可以用!GetParameter函数:
Resources: MyMarketplaceInstance: Type: AWS::EC2::Instance Properties: ImageId: !GetParameter '/aws/service/marketplace/ami-id/<你的产品ID>' InstanceType: t2.micro
解决办法2:用CloudFormation映射(Mappings)硬编码区域对应的AMI ID
如果目标Marketplace AMI没有对应的SSM参数,你可以手动收集各区域的AMI ID,然后在模板中用Mappings来根据部署区域自动匹配:
Mappings: MarketplaceAMIMap: us-east-1: AMI: ami-1234567890abcdef0 us-west-2: AMI: ami-0987654321fedcba0 eu-west-1: AMI: ami-abcdef1234567890 # 按需添加更多区域 Resources: MyMarketplaceInstance: Type: AWS::EC2::Instance Properties: ImageId: !FindInMap [MarketplaceAMIMap, !Ref 'AWS::Region', AMI] InstanceType: t2.micro
这种方式需要你自己维护各区域的AMI ID,当AMI更新时要记得同步修改模板。
内容的提问来源于stack exchange,提问作者Skip
相关产品推荐
相关产品推荐

