标签: aws-cloudformation

AWS CloudFormation 函数调用失败:Fn::ImportValue 不得依赖于任何资源、导入的值或 Fn::GetAZs

我有一个云形成模板 (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 未在模板中的任何其他地方使用。

有没有办法使用导出的值作为默认值(默认值不能硬编码,它们是从另一个堆栈的运行中导出的值),同时为用户提供一个选项来提供他们自己的值(以创建资源)。

谢谢。

aws-cloudformation

16
推荐指数
3
解决办法
1万
查看次数

Cloudformation 何时使用 getatt、ref 与 ${}

我试图找出GetAttvs Refvs之间的差异${}

据我了解,您GetAttRef用于引用同一模板中的对象,并且可以用于引用任何内容?另外我${}什么时候用?

aws-cloudformation

16
推荐指数
2
解决办法
6760
查看次数

如何使用Cloud Formation为CloudFront分配配置ACM证书

我正在尝试使用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

15
推荐指数
2
解决办法
7727
查看次数

如何指定安全组中的所有端口 - CloudFormation

我现在有这样的CloudFormation脚本:

    "SecurityGroupIngress" : [{
      "IpProtocol" : "tcp",
      "FromPort" : "0",
      "ToPort" : "65535",
      "CidrIp" : "0.0.0.0/0"
    }]
Run Code Online (Sandbox Code Playgroud)

它看起来像这样,这很好:

在此输入图像描述

但我想知道如何更新模板以获取此信息:

在此输入图像描述

请注意Ports说全部.我也想知道他们是不是有所不同?

amazon-web-services aws-cloudformation amazon-vpc

15
推荐指数
2
解决办法
1万
查看次数

AWS ECS通过Cloudformation创建计划任务(cron)

我们希望通过CloudFormation在AWS ECS中创建ScheduledTasks.是否有通过boto或cloudformation创建的编程方式?

amazon-web-services amazon-ecs aws-cloudformation

15
推荐指数
2
解决办法
5891
查看次数

VPC删除中的Lambda需要更多时间

我使用云形成在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)

如何改善堆栈的删除时间?

aws-cloudformation aws-lambda

15
推荐指数
1
解决办法
5476
查看次数

SAM模板和Cloudformation模板之间的区别

我发现很难理解SAM模板和Cloudformation模板之间的区别.我知道SAM模板可用于定义像Lambda这样的无服务器应用程序,但是它如何使它与Cloudformation模板不同?语法不同吗?我仍然可以在cloudformation模板中指定Lambda定义.所以,我的问题是我为什么要关心SAM?不知道只是云形成模板就足够了吗?

amazon-web-services aws-cloudformation aws-lambda serverless-framework

15
推荐指数
3
解决办法
3563
查看次数

设置IAM角色描述

在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)

结果错误:"遇到不受支持的属性标记"

aws-cloudformation

15
推荐指数
1
解决办法
2037
查看次数

如何在CloudFormation模板中同时使用Sub和GetAtt函数?

我创建了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)

如何一起使用这些功能并获得所需的结果?

yaml amazon-web-services aws-cloudformation

15
推荐指数
4
解决办法
1万
查看次数

获取“资源已存在于堆栈中”错误时如何重新部署堆栈,而不删除资源

我正在尝试向 AWS 中现有的 DynamoDB 表添加“get”函数。我为表添加了一个 yml 文件,当我尝试部署堆栈时,它说我的表的资源已经存在。

过去,我在发生这种情况时删除了该表,然后重新部署了堆栈,但在这种情况下,我不想删除该表,也不知道如何解决该问题。

我的第一个问题是我在 YML 文件中错误地定义了表的架构。然后当我重新定义它时,我遇到了堆栈中已经存在的资源的问题。

我的错误:

无服务器错误 ------------------------------------- 发生错误:ConsumersTable - dev-con堆栈中已存在 arn:aws:cloudformation:us-ea

amazon-web-services aws-cloudformation

15
推荐指数
2
解决办法
5674
查看次数