- html - 出于某种原因,IE8 对我的 Sass 文件中继承的 html5 CSS 不友好?
- JMeter 在响应断言中使用 span 标签的问题
- html - 在 :hover and :active? 上具有不同效果的 CSS 动画
- html - 相对于居中的 html 内容固定的 CSS 重复背景?
我在验证我的 cfn 时收到此错误。
'Template error: every Ref object must have a single String value.`
有人能告诉我我的 cfn 模板哪里出了问题吗?
我无法判断它引用的是哪个 Ref,因为我已经检查了它们并且可以看到所有引用都被定义为参数。
CloudFormation {
#Script Parameters
Parameter ("region") {
Type String
Default region
}
Parameter ("environment") {
Type String
Default environment.capitalize
}
Parameter ("vpcId") {
Type String
Default vpcId
}
Parameter ("vpcCidr") {
Type String
Default vpcCidr
}
Parameter ("keyName") {
Type String
Default keyName
}
Parameter ("pubSub1") {
Type String
Default pubSub1
}
Parameter ("pubSub2") {
Type String
Default pubSub2
}
Parameter ("priRtb1") {
Type String
Default priRtb1
}
Parameter ("priRtb2") {
Type String
Default priRtb2
}
Parameter ("natType") {
Type String
Default natType
}
Parameter ("nuPings") {
Type String
Default nuPings
}
Parameter ("pingTimeout") {
Type String
Default pingTimeout
}
Parameter ("pingWait") {
Type String
Default pingWait
}
Parameter ("instStopWait") {
Type String
Default instStopWait
}
Parameter ("instStartWait") {
Type String
Default instStartWait
}
Mapping("AWSNATAMI", {
"us-east-1" => {
"AMI" => "ami-54cf5c3d"
},
"us-west-2" => {
"AMI" => "ami-8e27adbe"
},
"us-west-1" => {
"AMI" => "ami-b63210f3"
},
"eu-west-1" => {
"AMI" => "ami-3c5f5748"
},
"ap-southeast-1" => {
"AMI" => "ami-ba7538e8"
},
"ap-southeast-2" => {
"AMI" => "ami-b6df4e8c"
},
"ap-northeast-1" => {
"AMI" => "ami-5d7dfa5c"
},
"sa-east-1" => {
"AMI" => "ami-89c81394"
}
})
Resource("NATRole") do
Type("AWS::IAM::Role")
Property("PolicyName", "NAT_Takeover")
Property("Path", "/")
Property("AssumeRolePolicyDocument", {
"Effect" => "Allow",
"Principal"=> {
"Service" => [ "ec2.amazonaws.com" ]
},
"Action" => [ "sts:AssumeRole" ]
})
Property("Policies", [
{
"PolicyDocument" => {
"Statement" => [
{
"Action" => [
"ec2:DescribeInstances",
"ec2:DescribeRouteTables",
"ec2:CreateRoute",
"ec2:ReplaceRoute",
"ec2:StartInstances",
"ec2:StopInstances"
],
"Effect" => "Allow",
"Resource" => "*"
}
]
}
}
])
end
Resource("NATRoleProfile") do
Type("AWS::IAM::Role")
Property("Path", "/")
Property("Roles", {
"Ref" => [ "NATRole" ]
})
end
Resource("NAT1EIP") do
Type("AWS::EC2::EIP")
Property("Domain", "vpc")
Property("InstanceId", {
"Ref" => [ "NAT1Instance" ]
})
end
Resource("NAT2EIP") do
Type("AWS::EC2::EIP")
Property("Domain", "vpc")
Property("InstanceId", {
"Ref" => [ "NAT2Instance" ]
})
end
Resource("NAT1Instance") do
Type("AWS::EC2::Instance")
Metadata("Comment1", "Create NAT #1")
Property("InstanceType", {
"Ref" => [ "natType" ]
})
Property("KeyName", {
"Ref" => [ "keyName" ]
})
Property("IamInstanceProfile", {
"Ref" => [ "NATRoleProfile" ]
})
Property("SubnetId", {
"Ref" => [ "pubSub1" ]
})
Property("SourceDestCheck", "false")
Property("ImageID", FnFindInMap("AWSNATAMI", Ref("region"), "AMI"))
Property("SecurityGroupIds", {
"Ref" => [ "NATSecurityGroup" ]
})
Property("Tags", {
"Key" => [ "Name" ],
"Value" => [ "NAT #1" ],
})
Property("UserData", FnBase64(FnJoin("", [
"#!/bin/bash\n",
"yum update -y aws*\n",
". /etc/profile.d/aws-apitools-common.sh\n",
"# Configure iptables\n",
"/sbin/iptables -t nat -A POSTROUTING -o eth0 -s 0.0.0.0/0 -j MASQUERADE\n",
"/sbin/iptables-save > /etc/sysconfig/iptables\n",
"# Configure ip forwarding and redirects\n",
"echo 1 > /proc/sys/net/ipv4/ip_forward && echo 0 > /proc/sys/net/ipv4/conf/eth0/send_redirects\n",
"mkdir -p /etc/sysctl.d/\n",
"cat <<EOF > /etc/sysctl.d/nat.conf\n",
"net.ipv4.ip_forward = 1\n",
"net.ipv4.conf.eth0.send_redirects = 0\n",
"EOF\n",
"# Download nat_monitor.sh and configure\n",
"cd /root\n",
"wget http://media.amazonwebservices.com/articles/nat_monitor_files/nat_monitor.sh\n",
"# Wait for NAT #2 to boot up and update PrivateRouteTable2\n",
"sleep 180\n",
"NAT_ID=\n",
"# CloudFormation should have updated the PrivateRouteTable2 by now (due to yum update), however loop to make sure\n",
"while [ \"$NAT_ID\" == \"\" ]; do\n",
" sleep 60\n",
" NAT_ID=`/opt/aws/bin/ec2-describe-route-tables ", Ref( "priRtb2"),
" -U https://ec2.", Ref("region"), ".amazonaws.com | grep 0.0.0.0/0 | awk '{print $2;}'`\n",
" #echo `date` \"-- NAT_ID=$NAT_ID\" >> /tmp/test.log\n",
"done\n",
"# Update NAT_ID, NAT_RT_ID, and My_RT_ID\n",
"sed \"s/NAT_ID=/NAT_ID=$NAT_ID/g\" /root/nat_monitor.sh > /root/nat_monitor.tmp\n",
"sed \"s/NAT_RT_ID=/NAT_RT_ID=",
Ref("priRtb2" ),
"/g\" /root/nat_monitor.tmp > /root/nat_monitor.sh\n",
"sed \"s/My_RT_ID=/My_RT_ID=",
Ref("priRtb1"),
"/g\" /root/nat_monitor.sh > /root/nat_monitor.tmp\n",
"sed \"s/EC2_URL=/EC2_URL=https:\\/\\/ec2.",
Ref("region"),
".amazonaws.com",
"/g\" /root/nat_monitor.tmp > /root/nat_monitor.sh\n",
"sed \"s/Num_Pings=3/Num_Pings=",
Ref("nuPings"),
"/g\" /root/nat_monitor.sh > /root/nat_monitor.tmp\n",
"sed \"s/Ping_Timeout=1/Ping_Timeout=",
Ref("pingTimeout"),
"/g\" /root/nat_monitor.tmp > /root/nat_monitor.sh\n",
"sed \"s/Wait_Between_Pings=2/Wait_Between_Pings=",
Ref("pingWait"),
"/g\" /root/nat_monitor.sh > /root/nat_monitor.tmp\n",
"sed \"s/Wait_for_Instance_Stop=60/Wait_for_Instance_Stop=",
Ref("instStopWait"),
"/g\" /root/nat_monitor.tmp > /root/nat_monitor.sh\n",
"sed \"s/Wait_for_Instance_Start=300/Wait_for_Instance_Start=",
Ref("instStartWait"),
"/g\" /root/nat_monitor.sh > /root/nat_monitor.tmp\n",
"mv /root/nat_monitor.tmp /root/nat_monitor.sh\n",
"chmod a+x /root/nat_monitor.sh\n",
"echo '@reboot /root/nat_monitor.sh > /tmp/nat_monitor.log' | crontab\n",
"/root/nat_monitor.sh > /tmp/nat_monitor.log &\n"
])))
end
Resource("NAT2Instance") do
Type("AWS::EC2::Instance")
Metadata("Comment1", "Create NAT #2")
Property("InstanceType", {
"Ref" => [ "natType" ]
})
Property("KeyName", {
"Ref" => [ "keyName" ]
})
Property("IamInstanceProfile", {
"Ref" => [ "NATRoleProfile" ]
})
Property("SubnetId", {
"Ref" => [ "pubSub2" ]
})
Property("SourceDestCheck", "false")
Property("ImageID", FnFindInMap("AWSNATAMI", Ref("region"), "AMI"))
Property("SecurityGroupIds", {
"Ref" => [ "NATSecurityGroup" ]
})
Property("Tags", {
"Key" => [ "Name" ],
"Value" => [ "NAT #2" ],
})
Property("UserData", FnBase64(FnJoin("", [
"#!/bin/bash -v\n",
"yum update -y aws*\n",
"# Configure iptables\n",
"/sbin/iptables -t nat -A POSTROUTING -o eth0 -s 0.0.0.0/0 -j MASQUERADE\n",
"/sbin/iptables-save > /etc/sysconfig/iptables\n",
"# Configure ip forwarding and redirects\n",
"echo 1 > /proc/sys/net/ipv4/ip_forward && echo 0 > /proc/sys/net/ipv4/conf/eth0/send_redirects\n",
"mkdir -p /etc/sysctl.d/\n",
"cat <<EOF > /etc/sysctl.d/nat.conf\n",
"net.ipv4.ip_forward = 1\n",
"net.ipv4.conf.eth0.send_redirects = 0\n",
"EOF\n",
"# Download nat_monitor.sh and configure\n",
"cd /root\n",
"wget http://media.amazonwebservices.com/articles/nat_monitor_files/nat_monitor.sh\n",
"# Update NAT_ID, NAT_RT_ID, and My_RT_ID\n",
"sed \"s/NAT_ID=/NAT_ID=",
Ref("NAT1Instance"),
"/g\" /root/nat_monitor.sh > /root/nat_monitor.tmp\n",
"sed \"s/NAT_RT_ID=/NAT_RT_ID=",
Ref("priRtb1"),
"/g\" /root/nat_monitor.tmp > /root/nat_monitor.sh\n",
"sed \"s/My_RT_ID=/My_RT_ID=",
Ref("priRtb2"),
"/g\" /root/nat_monitor.sh > /root/nat_monitor.tmp\n",
"sed \"s/EC2_URL=/EC2_URL=https:\\/\\/ec2.",
Ref("region"), ".amazonaws.com",
"/g\" /root/nat_monitor.tmp > /root/nat_monitor.sh\n",
"sed \"s/Num_Pings=3/Num_Pings=",
Ref("nuPings"),
"/g\" /root/nat_monitor.sh > /root/nat_monitor.tmp\n",
"sed \"s/Ping_Timeout=1/Ping_Timeout=",
Ref("pingTimeout"),
"/g\" /root/nat_monitor.tmp > /root/nat_monitor.sh\n",
"sed \"s/Wait_Between_Pings=2/Wait_Between_Pings=",
Ref("pingWait"),
"/g\" /root/nat_monitor.sh > /root/nat_monitor.tmp\n",
"sed \"s/Wait_for_Instance_Stop=60/Wait_for_Instance_Stop=",
Ref("instStopWait"),
"/g\" /root/nat_monitor.tmp > /root/nat_monitor.sh\n",
"sed \"s/Wait_for_Instance_Start=300/Wait_for_Instance_Start=",
Ref("instStartWait"),
"/g\" /root/nat_monitor.sh > /root/nat_monitor.tmp\n",
"mv /root/nat_monitor.tmp /root/nat_monitor.sh\n",
"chmod a+x /root/nat_monitor.sh\n",
"echo '@reboot /root/nat_monitor.sh > /tmp/nat_monitor.log' | crontab\n",
"/root/nat_monitor.sh >> /tmp/nat_monitor.log &\n"
])))
end
Resource("NATSecurityGroup") do
Type("AWS::EC2::SecurityGroup")
Property("GroupDescription", "Rules for allowing access to HA Nodes")
Property("VpcId", {
"Ref" => [ "vpcId" ]
})
Property("SecurityGroupIngress", [
{
"CidrIp" => "0.0.0.0/0",
"FromPort" => "22",
"IpProtocol" => "tcp",
"ToPort" => "22"
},
{
"CidrIp" => "0.0.0.0/0",
"FromPort" => "0",
"IpProtocol" => "-1",
"ToPort" => "65535"
}
])
Property("SecurityGroupEgress", [
{
"CidrIp" => "0.0.0.0/0",
"FromPort" => "0",
"IpProtocol" => "-1",
"ToPort" => "65535"
}
])
end
Resource("NATAllowICMP") do
Type("AWS::EC2::SecurityGroupIngress")
Property("GroupId", {
"Ref" => [ "NATSecurityGroup" ]
})
Property("IpProtocol", "icmp")
Property("FromPort", "-1")
Property("ToPort", "-1")
Property("SourceSecurityGroupId", {
"Ref" => [ "NATSecurityGroup" ]
})
end
}'
我在从 cfndsl 生成 json 时使用参数文件
---
region: "us-east-1"
environment: "test"
vpcId: "vpc-xxxxxxxx"
vpcCidr: "10.0.0.0/16"
keyName: "xxxxxx"
pubSub1: "subnet-xxxxxxx"
pubSub2: "subnet-xxxxxxx"
priRtb1: "rtb-xxxxxxx"
priRtb2: "rtb-xxxxxxx"
natType: "t2.micro"
nuPings: "3"
pingTimeout: "1"
pingWait: "2"
instStopWait: "60"
instStartWait: "300"
最佳答案
问题是你的Ref
内部函数(例如, { "Ref"=> [ "NATRole"] }
目前具有字符串数组值 [ "NATRole"]
,但它们应该只是常规字符串“NATRole”
。
从模板中的 Ref
函数中删除数组括号,CloudFormation 应该正确处理引用。
关于amazon-web-services - Cloudformation模板错误: every Ref object must have a single String value,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/33651101/
我有一个几乎可以构建的Maven / Grails应用,但在web.xml上找不到[my-app]\webapp\WEB-INF\web.xml。但是目录结构像往常一样包含web-app文件夹,而不是
正如我在标题中提到的:我想知道 web-service 和 web-socket 之间的区别?我们什么时候使用每一个? 谢谢! 最佳答案 一个web service是一个响应客户端 SOAP/REST
让我们看一个示例场景: 客户端打开一个网站并找到他从文本框中输入的两个数字的总和。然后单击“添加”按钮。两个参数通过 HTTP GET 发送到服务器,在服务器上写入 PHP 代码以添加数字,结果为回声
我知道这是一个老问题,肯定已经被回答了数百次,但我还无法找到令人满意的答案。 我正在创建一个应用程序,其他应用程序(移动/网络)将使用该应用程序来获取数据。现在我有两个选择: 将我的应用程序创建为简单
通过 Web 作业部署新功能有 3 种方法: 创建一个新的 Web 应用,并部署一个包含该函数的 Web 作业。 向现有 Web 作业添加一项新函数(这样您现在在一个 Web 作业中就拥有了多个函数)
我收到来自网络场景的通知,上面写着“问题”和“确定”。我想在问题发生时包含网络响应的内容。我不担心标题值,只担心网页的内容. 这是我可以在通知设置中引用的变量吗? 最佳答案 不幸的是 zabbix 不
就目前而言,这个问题不适合我们的问答形式。我们希望答案得到事实、引用或专业知识的支持,但这个问题可能会引起辩论、争论、投票或扩展讨论。如果您觉得这个问题可以改进并可能重新打开,visit the he
嗨,这是一个理论问题,但我真的无法弄清楚 Web 应用程序、基于 Web 的应用程序和基于云的应用程序之间的区别。这个你能帮我吗。 最佳答案 @Matt 是对的 - 这真的无关紧要,但是,为了清楚起见
我正在尝试使用多个 Web 服务,这些服务在它们的 wsdl 中重新定义了一些相同的公共(public)类。我目前在网站中引用了它们,但我想转换为 Web 应用程序。 由于一些相同的类是从多个 Web
一个。我必须考虑哪些事项?b.当前应用程序正在执行多个存储过程。如果我创建等效的方法来执行这些过程,会有什么风险或挑战。 最佳答案 在架构上,将网络应用程序转换为网络服务时必须考虑的一件事是,对方法和
关闭。这个问题不满足Stack Overflow guidelines .它目前不接受答案。 想改善这个问题吗?更新问题,使其成为 on-topic对于堆栈溢出。 5年前关闭。 Improve thi
网络 API 和网络服务之间有什么区别吗?或者它们是同一个吗? 最佳答案 网络服务通常提供 WSDL您可以从中自动创建客户端 stub 。 Web 服务基于 SOAP protocol 。ASP.NE
我已经获得了我需要的所有资源。我将 Web 服务放入应用程序服务环境中,然后将 NSG 连接到应用程序服务环境使用的子网。然后,我允许 VNET 内的应用程序与 Web 服务进行通信,但它无法正常工作
我已经获得了我需要的所有资源。我将 Web 服务放入应用程序服务环境中,然后将 NSG 连接到应用程序服务环境使用的子网。然后,我允许 VNET 内的应用程序与 Web 服务进行通信,但它无法正常工作
我正在使用 stub 将我的网络服务相关测试与实际网络服务隔离开来。 你/我应该如何合并测试以确保我制作的响应与实际的网络服务匹配(我无法控制它)? 我不想知道怎么做,而是何时何地? 我应该为测试数据
我在互联网上搜索了很多,但我仍然没有得到网络服务和网络 API 之间的明显区别?我在某处读到所有 Web 服务都是 API,但所有 API 都不是 Web 服务。如何? 我所知道的是两者都允许利用其他
假设我已经完成了使用 JavaEE 制作的 Web 应用程序。这个 Web 应用程序包含登录系统,但最后它是非常基本的 Web 应用程序。我使用的是 GlassFish 3.1.2.2。 我想知道一旦
我希望设计者能够打开与我相同的解决方案文件。这可以通过 Expressions Web 实现吗? 最佳答案 简短的回答是“不”;但这是一个非常常见的请求,我知道很多人都希望下一个版本(无论何时)对此有
我正在尝试在 CF10 中创建一个 Web 服务对象。我已验证它在 SoapUI 中按预期工作。但是,当我在 CF 中运行它时,我得到一个错误,它无法找到在 WSDL 的导入语句中导入的 XSD。这是
我的要求是开发一个 Web 服务,充当外部 Web 服务和客户端之间的中间人。 我知道,我可以为我的服务设计一个wsdl,然后将外部wsdl映射到代码中我的wsdl。我的问题是有一个开源 api/工具
我是一名优秀的程序员,十分优秀!