amazon-web-services - AWS 参数必须具有值错误(值存在)

标签 amazon-web-services aws-cloudformation

我的 CloudFormation 脚本中有以下参数:

CloudFormationURL:
  Type: String
  Description: S3 URL for nested CloudFormation templates
  Default: ""

此参数涵盖我的部署配置的嵌套文件夹中的 CloudFormation 脚本。

我将它与这样的资源一起使用:

  CloudWatchDashboardStack:
    Type: "AWS::CloudFormation::Stack"
    Properties:
      TemplateURL: !Sub "${CloudFormationURL}/cloudwatch-dashboard.cfn.yaml"
      Parameters:
        AppName: !Ref AppName
        DeployPhase: !Ref DeployPhase
        DeveloperPrefix: !Ref DeveloperPrefix
        Environment: !Ref Environment

效果很好,并且已经工作了几个月。

我需要添加另一个资源,所以我添加了这个:

BatchDNSResources:
  Type: "AWS::CloudFormation::Stack"
  Properties:
    Parameters:
      AppName: !Ref AppName
      Environment: !Ref Environment
      DeveloperPrefix: !Ref DeveloperPrefix
      DeployPhase: !Ref DeployPhase
      AppVersion: !Ref AppVersion
      SharedBucketName: !Ref SharedBucketName
      S3Version: !Ref S3Version
      HostedZone: !Ref HostedZone
      VPCStackName: !FindInMap
        - EnvironmentMap
        - !Ref Environment
        - VpcStackName
      Company: !Ref Company
      CostCenter: !Ref CostCenter
      Team: !Ref Team
    TemplateURL: !Sub "${CloudFormationURL}/batch-dns.cfn.yaml"

CloudFormation 抛出此错误然后失败:

Parameters: [CloudFormationURL] must have values

检查堆栈的变更集,我可以看到 CloudFormationURL 的以下值:

s3://application-shared-dev/application-name/qa/cf/nested/KShyDj205UK8mz6W_XUA5TnEF8nqPWHS

检查应用程序预部署日志,我可以看到:

upload: deploy/cloudformation/templates/nested/batch-dns.cfn.yaml to s3://application-shared-dev/application-name/qa/cf/nested/KShyDj205UK8mz6W_XUA5TnEF8nqPWHS/batch-dns.cfn.yaml

我可以在 S3 存储桶中看到该文件。

如果我删除 BatchDNSResource,堆栈就会成功完成。

我到底错过了什么?

最佳答案

有时,最小的事情也会让你受益匪浅。

我已将主 CloudFormation 脚本(包括此脚本)中的参数复制到嵌套脚本中:

CloudFormationURL:
  Type: String
  Description: S3 URL for nested CloudFormation templates
  Default: ""

如果你仔细观察,你会发现我在调用资源时没有将参数传递到嵌套脚本中:

BatchDNSResources:
  Type: "AWS::CloudFormation::Stack"
  Properties:
    Parameters:
      AppName: !Ref AppName
      Environment: !Ref Environment
      DeveloperPrefix: !Ref DeveloperPrefix
      DeployPhase: !Ref DeployPhase
      AppVersion: !Ref AppVersion
      SharedBucketName: !Ref SharedBucketName
      S3Version: !Ref S3Version
      HostedZone: !Ref HostedZone
      VPCStackName: !FindInMap
        - EnvironmentMap
        - !Ref Environment
        - VpcStackName
      Company: !Ref Company
      CostCenter: !Ref CostCenter
      Team: !Ref Team
    TemplateURL: !Sub "${CloudFormationURL}/batch-dns.cfn.yaml"

因为 CloudFormation 控制台说问题出在 BatchDNSResources 上,所以我一直在查看主脚本以查找问题,但缺少其他脚本中的引用。有两种方法可以解决这个问题:

  • CloudFormationURL 保留为嵌套脚本中的参数(如果您出于某种原因需要它)并传递主脚本中的值。
  • 从嵌套脚本中删除参数(如果不需要)

有时,只需多加观察一下并休息一下就能帮助您发现问题。我想把这个问题/答案留在这里,因为当我在这里和其他地方搜索错误时,没有人提到(可能是出于尴尬)这个错误只是忽略了这样的事情。我希望这个答案能够提示其他人在遇到此类错误时检查所有内容。

关于amazon-web-services - AWS 参数必须具有值错误(值存在),我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/73991022/

相关文章:

mongodb - 如何访问VPC外的mongodb实例

amazon-web-services - AWS::ApiGatewayV2::Integration 如何在 CloudFormation 中使用 MessageAttributes

amazon-web-services - 在存储库的 cloudformation 模板中使用 AWS::CodeBuild::Project 环境变量

amazon-web-services - 通过 Cloudformation 创建资源时无法通过 SSH 连接到我的 ec2 实例

amazon-web-services - 将 cloudformation 无服务器模板转换为 Terraform 的最佳方法

amazon-web-services - 从 S3 迁移到 Redshift 数据库时如何删除标题行?

android - 我现在可以使用 Firebase 吗?

python - 找出运行 lambda 函数的 IP

r - parLapply循环中多个文件在R中的curl内存使用情况

amazon-web-services - cloudformation ECS 强制新部署