- html - 出于某种原因,IE8 对我的 Sass 文件中继承的 html5 CSS 不友好?
- JMeter 在响应断言中使用 span 标签的问题
- html - 在 :hover and :active? 上具有不同效果的 CSS 动画
- html - 相对于居中的 html 内容固定的 CSS 重复背景?
我正在尝试使用 AWS cloudformation。对于此模板,我尝试将用户数据链接到参数 selectAMI
。如果选择 AmazonLinux2
,脚本将安装 httpd
。如果选择 UbuntuServer
,脚本将安装 apache2
。
所以,显然两者的脚本是不同的。我尝试在有条件的情况下实现此功能,请参阅下面的 YAML 脚本
。
---
Mappings :
mapAMI :
AmazonLinux2 :
AMI : ami-090fa75af13c156b4
UbuntuServer :
AMI : ami-052efd3df9dad4825
mapUserData :
AmazonLinux2 :
Data : |
#!/bin/bash -xe
sudo yum update -y
sudo yum install httpd
sudo systemctl start httpd
sudo systemctl enable httpd.service
echo "User Data executed successfully and installed HTTPD" > AmazonLinux2.txt
UbuntuServer :
Data : |
sudo #!/bin/bash -xe
sudo apt update && sudo apt upgrade
sudo apt install apache2
sudo systemctl start apache2
sudo systemctl enable apache2.service
echo "User Data executed successfully and installed apache2" > UbuntuServer.txt
Parameters :
selectAMI :
Description : Select the operating system or machine image for the instance. Amazon linux 2 or Ubuntu
AllowedValues :
- AmazonLinux2
- UbuntuServer
Type : String
Conditions :
IsAmiUbuntu :
!Equals [!Ref selectAMI, UbuntuServer]
Resources :
EC2Instance :
Type : AWS::EC2::Instance
Properties:
UserData :
Fn::Base64 :
Fn::Sub :
!If [IsAmiUbuntu, !FindInMap [mapUserData, UbuntuServer, Data], !FindInMap [mapUserData, AmazonLinux2, Data]]
...
当我尝试验证模板时,我遇到了 ValidationError - 模板错误:一个或多个 Fn::Sub 内部函数未指定预期参数。指定一个字符串作为第一个参数,并指定一个可选的第二个参数来指定要在字符串中替换的值的映射
。
请帮助我了解如何正确映射用户数据,以便在创建 EC2Instance
时安装 httpd
或 apache2
最佳答案
各位程序员/爱好者,
感谢@Paolo。
以下是我遇到的一些问题以及问题的解决方案。
事实证明,用户数据中缺少 -y
标志。因此,执行停止了,因为它无限期地等待用户输入。以下是代码中更新的映射部分片段。即使安装了 HTTPD 或 Apache2,最后一行的 .txt
文件也不会创建,或者它们是在不同的位置创建的。
Mappings :
mapAMI :
AmazonLinux2 :
AMI : ami-090fa75af13c156b4
UbuntuServer :
AMI : ami-052efd3df9dad4825
mapUserData :
AmazonLinux2 :
Data : |
#!/bin/bash
sudo yum update -y
sudo yum install -y httpd
sudo systemctl start httpd
sudo systemctl enable httpd.service
echo "User Data executed successfully and installed HTTPD" > ~/AmazonLinux2.txt
UbuntuServer :
Data : |
#!/bin/bash
sudo apt update && sudo apt upgrade -y
sudo apt install -y apache2
sudo systemctl start apache2
sudo systemctl enable apache2.service
echo "User Data executed successfully and installed apache2" > ~/UbuntuServer.txt
我们需要记住,我们不会替换任何变量。所以Fn::Sub
是完全没有必要的。由于我们使用两个函数来映射(Fn::Base64 和 Fn::If),其中一个函数必须是完整形式,另一个可以是缩写形式。检查 documentation 中的注释部分.
这是实现的代码片段。
Conditions :
AmIUbuntu :
!Equals [!Ref selectAMI, UbuntuServer]
Resources :
EC2Instance :
Type : AWS::EC2::Instance
Properties:
UserData :
Fn::Base64 :
!If [AmIUbuntu, !FindInMap [mapUserData, UbuntuServer, Data], !FindInMap [mapUserData, AmazonLinux2, Data]]
检查日志文件。当 userdata 执行时,AWS 会记录它。正确执行没有问题,否则检查cloud-init-output.log
文件并解码并解决问题。
运行以下命令来cat
日志文件。
sudo cat/var/log/cloud-init-output.log
使用 AmazonLinux2 时,YUM 通过 HTTPS 协议(protocol)访问亚马逊的 yum 存储库。因此,请确保在安全组中提供出站 HTTPS
规则。
允许入站 SSH
规则设置 EC2 实例连接。 EC2 实例连接不仅适用于 amazon Linux,还适用于 ubuntu。
查看模板 validator 。谨慎使用!
有兴趣查看我的完整代码吗? Click here
关于amazon-web-services - 在资源部分映射用户数据,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/73368654/
This question already has answers here: Using Variable for Thread group Ramp up time (3个答案) 3年前关闭。 从
我希望使用 RPyC 为硬件板提供 API 作为服务。该板一次只能满足一个用户的需求。有什么方法可以让 RPyC 强制执行一次只有一个用户可以访问吗? 最佳答案 我不确定这是否有效(或有效),但您可以
如果我想以每秒 10 个请求运行测试。如何让 Jmeter 选择每秒处理该请求数所需的最佳线程数。 我将线程数设置为与每秒请求数相同。 最佳答案 您可以使用恒定吞吐量计时器 click here你只需
我正在尝试进行查询以检查客户表并返回过去 30 天、过去 365 天和所有时间具有特定值的用户数。 所有时间的计数很简单: $stmt = $conn->prepare("SELECT count(i
我是一名优秀的程序员,十分优秀!