我正在尝试使用Cloud Formation在我的CloudFrontDistribution中设置证书.
我的证书已通过证书管理器发出.它已被批准,我已经验证证书可以通过CloudFront控制台直接手动配置.
在我的CloudFormation模板中,我尝试在IamCertificateId属性中使用与证书关联的标识符和ARN值:
"ViewerCertificate" : {
"IamCertificateId" : "********",
"SslSupportMethod": "sni-only"
}
Run Code Online (Sandbox Code Playgroud)
但在这两种情况下我都收到以下错误:
The specified SSL certificate doesn't exist, isn't valid, or doesn't include a valid certificate chain.
Run Code Online (Sandbox Code Playgroud)
阅读DistributionConfig Complex Type的文档,看起来有一个'ACMCertificateArn'属性,但这似乎不适用于CloudFormation.
任何帮助,将不胜感激.
ssl ssl-certificate amazon-web-services amazon-cloudfront aws-cloudformation
我有一个网络负载均衡器和一个关联的目标组,配置为对EC2实例进行运行状况检查.问题是我看到了很多健康检查请求; 每秒多次.
检查之间的默认间隔应该是30秒,但是它们比它们应该的频率高出约100倍.
我的堆栈是在CloudFormation中构建的,我试过覆盖HealthCheckIntervalSeconds,这没有任何效果.有趣的是,当我尝试在控制台中手动更改间隔时,我发现这些值是灰色的:
这是模板的相关部分,我尝试更改注释的间隔:
NLB:
Type: "AWS::ElasticLoadBalancingV2::LoadBalancer"
Properties:
Type: network
Name: api-load-balancer
Scheme: internal
Subnets:
- Fn::ImportValue: PrivateSubnetA
- Fn::ImportValue: PrivateSubnetB
- Fn::ImportValue: PrivateSubnetC
NLBListener:
Type : AWS::ElasticLoadBalancingV2::Listener
Properties:
DefaultActions:
- Type: forward
TargetGroupArn: !Ref NLBTargetGroup
LoadBalancerArn: !Ref NLB
Port: 80
Protocol: TCP
NLBTargetGroup:
Type: AWS::ElasticLoadBalancingV2::TargetGroup
Properties:
# HealthCheckIntervalSeconds: 30
HealthCheckPath: /healthcheck
HealthCheckProtocol: HTTP
# HealthyThresholdCount: 2
# UnhealthyThresholdCount: 5
# Matcher:
# HttpCode: 200-399
Name: api-nlb-http-target-group
Port: 80
Protocol: TCP
VpcId: !ImportValue PublicVPC
Run Code Online (Sandbox Code Playgroud)
我的EC2实例位于私有子网中,无法访问外部世界.NLB是内部的,因此没有通过API网关就无法访问它们.API网关没有 …
amazon-ec2 amazon-web-services amazon-elb aws-cloudformation
我正在尝试向 AWS 中现有的 DynamoDB 表添加“get”函数。我为表添加了一个 yml 文件,当我尝试部署堆栈时,它说我的表的资源已经存在。
过去,我在发生这种情况时删除了该表,然后重新部署了堆栈,但在这种情况下,我不想删除该表,也不知道如何解决该问题。
我的第一个问题是我在 YML 文件中错误地定义了表的架构。然后当我重新定义它时,我遇到了堆栈中已经存在的资源的问题。
我的错误:
无服务器错误 ------------------------------------- 发生错误:ConsumersTable - dev-con堆栈中已存在 arn:aws:cloudformation:us-ea
据我所知,我可以使用ImportValue 来引用Resources.
NetworkInterfaces:
- GroupSet:
- Fn::ImportValue:
Fn::Sub: "${NetworkStackNameParameter}-SecurityGroupID"
AssociatePublicIpAddress: 'true'
DeviceIndex: '0'
DeleteOnTermination: 'true'
SubnetId:
Fn::ImportValue:
Fn::Sub: "${NetworkStackNameParameter}-SubnetID"
Run Code Online (Sandbox Code Playgroud)
不过这个功能好像不能用Parameters
Parameters:
VPC:
Description: VPC ID
Type: String
Default:
Fn::ImportValue:
!Sub "${NetworkStackNameParameter}-VPC"
Run Code Online (Sandbox Code Playgroud)
如果我使用上面的方式,会得到错误:
调用 CreateChangeSet 操作时发生错误 (ValidationError):模板格式错误:每个默认成员必须是字符串。
无论如何要解决吗?因为同一个vpc id、子网id、安全组Id,不会只用在一个地方。
所以我不得不放弃:
- 在您的 AWS CloudFormation 模板中,确认参数部分不包含任何内部函数。
https://aws.amazon.com/premiumsupport/knowledge-center/cloudformation-template-validation/
我有一个生成SecurityGroup和ELB的CloudFormation脚本; 我正在尝试在ELB创建中引用SecurityGroup; 这是资源位:
"ELBSecurityGroup" : {
"Type" : "AWS::EC2::SecurityGroup",
"Properties" : {
"GroupDescription" : "Security group for the Arena dev stack",
"SecurityGroupIngress" : [
{"IpProtocol" : "tcp", "FromPort" : 80, "ToPort" : 80, "CidrIp" : { "Ref" : "OfficeIp" }}
]
}
},
"ProjectLoadBalancerTest" : {
"Type" : "AWS::ElasticLoadBalancing::LoadBalancer",
"Properties" : {
"AvailabilityZones" : { "Fn::GetAZs" : "" },
"Instances" : [ ],
"Listeners" : [ {
"LoadBalancerPort" : "80",
"InstancePort" : "12345",
"Protocol" : "HTTP"
} ],
"HealthCheck" : …Run Code Online (Sandbox Code Playgroud) 我们有一个CloudFormation模板,用于创建EC2实例和安全组(以及许多其他资源),但我们需要能够向同一个EC2实例添加一些其他预先存在的安全组.
我们遇到的问题是,预先存在的安全组的数量并不总是相同,我们希望有一个模板来处理所有情况.
目前,我们有一个输入参数,如下所示:
"WebTierSgAdditional": {
"Type": "String",
"Default": "",
"Description": ""
}
Run Code Online (Sandbox Code Playgroud)
我们将此参数传递给逗号分隔的预先存在的安全组字符串,例如'sg-abc123,sg-abc456'.
EC2实例的SecurityGroup标记如下所示:
"SecurityGroups": [
{
"Ref": "WebSg"
},
{
"Ref": "WebTierSgAdditional"
}
]
Run Code Online (Sandbox Code Playgroud)
使用此代码,在创建实例时,我们会在AWS控制台中收到此错误:
必须对所有安全组使用group-id或group-name,而不是同时使用
上面的'WebSg'参考是在模板中其他地方创建的安全组之一.如果我们通过输入参数传入组名列表而不是组ID列表,则会出现同样的错误.
当我们将输入参数的"类型"字段更改为"CommaDelimitedList"时,我们会收到错误消息:
属性值SecurityGroups的类型必须是List of String
它显然无法使用字符串连接列表以使其成为新列表.
当参数只包含一个sg id时,所有内容都会成功创建,但是,我们需要能够添加多个sg id.
我们Fn::Join在SecurityGroups标记中尝试了许多不同的使用组合,但似乎没有任何效果.我们真正需要的是某种"爆炸"功能,用于从参数字符串中提取单个id.
有谁知道一个很好的方法让这个工作?
我有一个CloudFormation模板,可以创建一个自动缩放组(以及其他内容).如何在模板中为自动缩放组指定名称?
AWS文档没有提及任何内容(http://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/aws-properties-as-group.html),如果我通过AWS网站创建它,可能会这样做.(我需要给一个组命名,因为我需要从另一个脚本中找到这个组)
编辑:我试图添加一个名为"名称"的标签,但它仍然无法正常工作:
"Resources": {
"MyServerGroup" : {
"Type" : "AWS::AutoScaling::AutoScalingGroup",
"Properties" : {
"AvailabilityZones" : { "Fn::GetAZs" : ""},
"LaunchConfigurationName" : { "Ref" : "LaunchConfig" },
"MinSize" : { "Ref" : "ServerCount" },
"MaxSize" : { "Ref" : "ServerCount" },
"DesiredCapacity" : { "Ref" : "ServerCount" },
"LoadBalancerNames" : [ { "Ref" : "ElasticLoadBalancerName" } ],
"Tags" : [ {
"Key" : "Name",
"Value" : { "Ref" : "ServerName" },
"PropagateAtLaunch" : "true"
} ]
},
"CreationPolicy": …Run Code Online (Sandbox Code Playgroud) 嗨,我正在尝试使用"IF"函数,就像在RDS DeletionPolicy的云形成文档中提到的那样,但由于某种原因,它说我的函数不返回字符串.
这是条件:
Run Code Online (Sandbox Code Playgroud)"DeletionPolicy" : { "Fn::If" : [ "CreateProdResources", "Snapshot", "Delete" ]}
错误是标题中的错误:
Template validation error: Template format error: Every DeletionPolicy member must be a string.
Run Code Online (Sandbox Code Playgroud)
其他尝试不起作用:
有了地图:
Run Code Online (Sandbox Code Playgroud)"RdsDeletionPolicyMap" :{ "production" : { "policy" : "Snapshot" }, "staging" : { "policy" : "Delete" } }
然后:
Run Code Online (Sandbox Code Playgroud)"DeletionPolicy" : { "Fn::FindInMap" : [ "RdsDeletionPolicyMap", {"Ref": "RailsEnvironment"}, "policy" ] }
和Simple "Ref": ...一样也不行.我非常怀疑这是一个关于cloudformation的错误
我正在尝试为ALB编写一个CloudFormation模板,但我仍然想要将ALB的HTTP侦听器流量重定向到HTTPS侦听器.文档仅提及转发/重定向到目标组.
我知道使用Web界面(AWS控制台)是可以实现的,我想避免这种情况.在服务器上处理它也不适合我.
这个ALB的功能是不是在CloudFormation中实现,而是存在于Console中?
https http-redirect aws-cloudformation elastic-load-balancer aws-load-balancer
我尝试了此答案中的解决方案,但对我不起作用。我收到错误:
提供的执行角色无权调用 EC2 上的 CreateNetworkInterface(服务:AWSLambdaInternal;状态代码:400;错误代码:InvalidParameterValueException;请求 ID:4c8d047c-2710-4334-86cd-51b7467c6f08)
这是与错误相关的 CloudFormation:
EventLambdaFunction:
Type: AWS::Lambda::Function
Properties:
FunctionName: !Sub ${DeveloperPrefix}event-lambda-${Environment}-${DeployPhase}
Handler: EventHandler
Runtime: java8
Code:
S3Bucket: !Ref SharedBucketName
S3Key: !Sub ${WorkspacePrefix}/event-subscriber-${AppVersion}.jar
S3ObjectVersion: !Ref EventLambdaS3Version
Role: !GetAtt EventLambdaRole.Arn
Environment:
Variables:
retry_event_table_name: !Sub "${DeveloperPrefix}${AppName}-${RetryEventTableName}-${Environment}-${DeployPhase}"
test_enabled: true # TODO: Remove once endpoint provided.
VpcConfig:
SecurityGroupIds:
- !Ref LambdaSecurityGroup
SubnetIds:
- Fn::ImportValue: !Sub ${VPCStackName}-SubnetPrivateL
- Fn::ImportValue: !Sub ${VPCStackName}-SubnetPrivateR
Timeout: 28
MemorySize: 256
EventLambdaRole:
Type: AWS::IAM::Role
Properties:
RoleName: !Sub ${DeveloperPrefix}${AppName}-${Environment}-${DeployPhase}-EventLambdaRole
AssumeRolePolicyDocument:
Statement:
- Effect: Allow
Principal:
Service: …Run Code Online (Sandbox Code Playgroud) amazon-ec2 amazon-web-services aws-cloudformation aws-lambda