【发布时间】:2019-10-15 09:10:40
【问题描述】:
我正在尝试创建一个 CloudFormation 脚本,该脚本允许用户从三个选项(ubuntu、redhat、centos)中选择一个 Linux 发行版。然后,根据用户选择的选项,我想从现有映射中为正在创建 CloudFormation 堆栈的区域选择正确的 AMI。最后,我想使用该区域特定的 AMI 作为 EC2 实例的映像 ID。
我为每个分布映射了该区域的 AMI。
我希望这一切都自动化,所以我可以只使用一个 CloudFormation 脚本,而不是每个操作系统都使用一个。
我有一个 Web 应用程序,它可以根据客户偏好在 Ubuntu、CentOS 或 Red Hat 上运行。我不想为每个发行版维护三个单独的 CloudFormation 脚本,特别是考虑到每个发行版唯一不同的是 EC2 实例的 ImageId。
我知道我可能应该使用 CloudFormation 的条件函数,但我还没有真正想出办法。
我无法在网上找到任何可以提供这么大帮助的东西。那是因为真的很容易没有人发布任何关于它的东西,或者不可能,我觉得可能是后者,但希望看到一些其他的观点。
这是我目前正在使用的内容的摘录。
Parameters:
ApplicationServerLinuxDistribution:
Type: "String"
AllowedValues:
- ubuntu
- redhat
- centos
Mappings:
# Ubuntu 18.04 AMIs
AWSUbuntuAMIRegionMap:
ap-northeast-1:
HVM64: "ami-0cd744adeca97abb1"
ap-northeast-2:
HVM64: "ami-00379ec40a3e30f87"
# Red Hat 8 AMIs
AWSRedHatAMIRegionMap:
ap-northeast-1:
HVM64: "ami-0c45b9b8b241f629f"
ap-northeast-2:
HVM64: "ami-090f71670acf741d8"
# CentOS 7 AMIs
AWSCentOSAMIRegionMap:
ap-northeast-1:
HVM64: "ami-045f38c93733dd48d"
ap-northeast-2:
HVM64: "ami-06cf2a72dadf92410"
Resources:
ApplicationServer:
Type: AWS::EC2::Instance
Properties:
ImageId:
所以要明确我想要的是,如果用户在 eu-west-1 并选择 Ubuntu,我想查询我的 Ubuntu 区域/AMI 地图以查找 eu-west-1 AMI,并使用该 AMI 创建EC2 实例,如果用户选择 Red Hat 或 CentOS,则执行相同的操作,但要使用这些地图。
【问题讨论】:
标签: amazon-web-services conditional-statements amazon-cloudformation