我有一个云形成模板 (mainVPC),它在 VPC 中创建几个子网,并导出名称为“PrivateSubnetA”、“PrivateSubnetB”的子网……我有一个不同的云形成模板来创建 DBSubnetGroup。如果用户不提供数据,我想使用“PrivateSubnetA”、“PrivateSubnetB”作为默认值。CloundFormation 不支持在参数中导入值。所以我放了一些默认值(XXXX)并有一个条件部分来查看用户是否提供了一些输入
Conditions:
userNotProvidedSubnetA: !Equals
- !Ref PrivateSubnetA
- XXXX
userNotProvidedSubnetB: !Equals
- !Ref PrivateSubnetB
- XXXX
Run Code Online (Sandbox Code Playgroud)
这有助于我确定用户是否提供了数据。现在我想使用默认值,如果用户没有提供值,否则使用用户提供的值。下面是代码
DBSubnetGroup:
Type: 'AWS::RDS::DBSubnetGroup'
Properties:
DBSubnetGroupDescription: RDS Aurora Cluster Subnet Group
SubnetIds:
- !If
- userNotProvidedSubnetA
- Fn::ImportValue:
!Sub '${fmMainVpc}-PrivateSubnetA'
- !Ref PrivateSubnetA
- !If
- userNotProvidedSubnetB
- Fn::ImportValue:
!Sub '${fmMainVpc}-PrivateSubnetB'
- !Ref PrivateSubnetB
Run Code Online (Sandbox Code Playgroud)
失败并显示错误“模板错误:Fn::ImportValue 中的属性不得依赖于任何资源、导入的值或 Fn::GetAZs”。ImportValue 未在模板中的任何其他地方使用。
有没有办法使用导出的值作为默认值(默认值不能硬编码,它们是从另一个堆栈的运行中导出的值),同时为用户提供一个选项来提供他们自己的值(以创建资源)。
谢谢。
我试图找出GetAttvs Refvs之间的差异${}。
据我了解,您GetAtt仅Ref用于引用同一模板中的对象,并且可以用于引用任何内容?另外我${}什么时候用?
我正在尝试使用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
我现在有这样的CloudFormation脚本:
"SecurityGroupIngress" : [{
"IpProtocol" : "tcp",
"FromPort" : "0",
"ToPort" : "65535",
"CidrIp" : "0.0.0.0/0"
}]
Run Code Online (Sandbox Code Playgroud)
它看起来像这样,这很好:
但我想知道如何更新模板以获取此信息:
请注意Ports说全部.我也想知道他们是不是有所不同?
我们希望通过CloudFormation在AWS ECS中创建ScheduledTasks.是否有通过boto或cloudformation创建的编程方式?
我使用云形成在VPC中创建了一个lambda的堆栈.当我尝试删除整个堆栈时,需要40-45分钟的时间.
我的Iam角色具有以下权限:
Action:
- ec2:DescribeInstances
- ec2:CreateNetworkInterface
- ec2:AttachNetworkInterface
- ec2:DescribeNetworkInterfaces
- ec2:DeleteNetworkInterface
- ec2:DetachNetworkInterface
- ec2:ModifyNetworkInterfaceAttribute
- ec2:ResetNetworkInterfaceAttribute
- autoscaling:CompleteLifecycleAction
- iam:CreateRole
- iam:CreatePolicy
- iam:AttachRolePolicy
- iam:PassRole
- lambda:GetFunction
- lambda:ListFunctions
- lambda:CreateFunction
- lambda:DeleteFunction
- lambda:InvokeFunction
- lambda:GetFunctionConfiguration
- lambda:UpdateFunctionConfiguration
- lambda:UpdateFunctionCode
- lambda:CreateAlias
- lambda:UpdateAlias
- lambda:GetAlias
- lambda:ListAliases
- lambda:ListVersionsByFunction
- logs:FilterLogEvents
- cloudwatch:GetMetricStatistics
Run Code Online (Sandbox Code Playgroud)
如何改善堆栈的删除时间?
我发现很难理解SAM模板和Cloudformation模板之间的区别.我知道SAM模板可用于定义像Lambda这样的无服务器应用程序,但是它如何使它与Cloudformation模板不同?语法不同吗?我仍然可以在cloudformation模板中指定Lambda定义.所以,我的问题是我为什么要关心SAM?不知道只是云形成模板就足够了吗?
amazon-web-services aws-cloudformation aws-lambda serverless-framework
在AWS Console中,可以选择设置IAM角色的描述.你是如何使用CloudFormation做到这一点的?文档没有说明如何执行此操作.到目前为止我已经尝试过.
Resources:
MyRole:
Type: "AWS::IAM::Role"
Properties:
Description: My Description
Run Code Online (Sandbox Code Playgroud)
结果错误:没有实际CF错误,但此描述未显示在控制台中
Resources:
MyRole:
Type: "AWS::IAM::Role"
Description: My Description
Properties:
.....
Run Code Online (Sandbox Code Playgroud)
结果错误:"遇到不受支持的属性说明"
Resources:
MyRole:
Type: "AWS::IAM::Role"
Properties:
Tags:
Key: Description
Value: My Description
Run Code Online (Sandbox Code Playgroud)
结果错误:"遇到不受支持的属性标记"
Resources:
MyRole:
Type: "AWS::IAM::Role"
Tags:
Key: Description
Value: My Description
Properties:
.....
Run Code Online (Sandbox Code Playgroud)
结果错误:"遇到不受支持的属性标记"
我创建了CloudFormation yaml模板,我需要在"AWS :: ApiGateway :: Method"Integration Uri中使用它!GetAtt "TestLambda.Arn"作为!Sub函数的一部分:
...
Type: "AWS::ApiGateway::Method"
Properties:
RestApiId:
Ref: "RestApi"
ResourceId:
Ref: "TestResource"
HttpMethod: "GET"
AuthorizationType: "NONE"
Integration:
Type: "AWS_PROXY"
IntegrationHttpMethod: "POST"
Uri: !Sub "arn:aws:apigateway:us-east-1:lambda:path/2015-03-31/functions/[[place where I want to use !GetAtt "TestLambda.Arn"]]/invocations"
...
Run Code Online (Sandbox Code Playgroud)
结果我希望获得类似的值:
"arn:aws:apigateway:us-east-1:lambda:path/2015-03-31/functions/my-endpoint-lambda/invocations"
Run Code Online (Sandbox Code Playgroud)
如何一起使用这些功能并获得所需的结果?
我正在尝试向 AWS 中现有的 DynamoDB 表添加“get”函数。我为表添加了一个 yml 文件,当我尝试部署堆栈时,它说我的表的资源已经存在。
过去,我在发生这种情况时删除了该表,然后重新部署了堆栈,但在这种情况下,我不想删除该表,也不知道如何解决该问题。
我的第一个问题是我在 YML 文件中错误地定义了表的架构。然后当我重新定义它时,我遇到了堆栈中已经存在的资源的问题。
我的错误:
无服务器错误 ------------------------------------- 发生错误:ConsumersTable - dev-con堆栈中已存在 arn:aws:cloudformation:us-ea