标签: aws-cloudformation

如何使用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
查看次数

NLB目标群体健康检查失控

我有一个网络负载均衡器和一个关联的目标组,配置为对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

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

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

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

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

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

我的错误:

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

amazon-web-services aws-cloudformation

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

如何在参数中使用ImportValue?

据我所知,我可以使用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,不会只用在一个地方。

更新

所以我不得不放弃:

  1. 在您的 AWS CloudFormation 模板中,确认参数部分不包含任何内部函数。

https://aws.amazon.com/premiumsupport/knowledge-center/cloudformation-template-validation/

amazon-web-services aws-cloudformation

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

如何从CloudFormation将创建的SecurityGroup分配给ELB?

我有一个生成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)

amazon-web-services amazon-elb aws-cloudformation

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

将未知大小的安全组列表添加到EC2实例

我们有一个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.

有谁知道一个很好的方法让这个工作?

amazon-ec2 amazon-web-services aws-cloudformation

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

如何在CloudFormation模板中命名Auto Scaling组?

我有一个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)

amazon-ec2 amazon-web-services aws-cloudformation

14
推荐指数
1
解决办法
4338
查看次数

Cloudformation模板格式错误:每个DeletionPolicy成员必须是一个字符串

嗨,我正在尝试使用"IF"函数,就像在RDS DeletionPolicy的云形成文档中提到的那样,但由于某种原因,它说我的函数不返回字符串.

关于条件语句的AWS文档

这是条件:

 "DeletionPolicy" : {
    "Fn::If" : [
      "CreateProdResources",
      "Snapshot",
      "Delete"
    ]}
Run Code Online (Sandbox Code Playgroud)

错误是标题中的错误:

Template validation error: Template format error: Every DeletionPolicy member must be a string.
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" ]
   }
Run Code Online (Sandbox Code Playgroud)

和Simple "Ref": ...一样也不行.我非常怀疑这是一个关于cloudformation的错误

amazon-web-services aws-cloudformation

14
推荐指数
1
解决办法
3041
查看次数

AWS CloudFormation应用程序负载均衡器 - 如何将HTTP侦听器重定向到HTTPS侦听器?

我正在尝试为ALB编写一个CloudFormation模板,但我仍然想要将ALB的HTTP侦听器流量重定向到HTTPS侦听器.文档仅提及转发/重定向到目标组.

我知道使用Web界面(AWS控制台)是可以实现的,我想避免这种情况.在服务器上处理它也不适合我.

这个ALB的功能是不是在CloudFormation中实现,而是存在于Console中?

https http-redirect aws-cloudformation elastic-load-balancer aws-load-balancer

14
推荐指数
1
解决办法
7810
查看次数

无法修复“提供的执行角色无权在 EC2 上调用 CreateNetworkInterface”

我尝试了此答案中的解决方案,但对我不起作用。我收到错误:

提供的执行角色无权调用 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

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