如何启用cloudwatch日志并在cloudformation中分配自定义域名

时间:2016-12-08 17:22:09

标签: amazon-web-services amazon-cloudformation amazon-cloudwatch

我有一个使用API​​网关构建我的api的cloudformation模板。

我不知道如何:

  1. 在云端模板模板

  2. 中启用舞台的云监视日志
  3. 将舞台分配到cloudformation模板中的自定义域名。

  4. 在json cloudformation模板中是否可以使用其中任何一个?

2 个答案:

答案 0 :(得分:3)

  • Cloudwatch日志

是的,您可以在cloudformation中启用cloudwatch日志:

  1. 将CloudTrail日志文件传递配置到CloudWatch Logs。
  2. 使用模板创建AWS CloudFormation堆栈。
  3. cloudwatch条目应该是simalar:

    "SecurityGroupChangesAlarm": {
          "Type": "AWS::CloudWatch::Alarm",
          "Properties": {
              "AlarmName" : "CloudTrailSecurityGroupChanges",
              "AlarmDescription" : "Alarms when an API call is made to create, update or delete a Security Group.",
              "AlarmActions" : [{ "Ref" : "AlarmNotificationTopic" }],
              "MetricName" : "SecurityGroupEventCount",
              "Namespace" : "CloudTrailMetrics",
              "ComparisonOperator" : "GreaterThanOrEqualToThreshold",
              "EvaluationPeriods" : "1",
              "Period" : "300",
              "Statistic" : "Sum",
              "Threshold" : "1"
          }
    },
    

    检查aws official doc那里的一切都很详细。

    • 自定义域名:

    自定义域名未在cloudformation模板中定义。它应按照aws doc

    中的规定单独创建
    1. https://console.aws.amazon.com/apigateway
    2. 登录API网关控制台
    3. 从主导航窗格中选择自定义域名。
    4. 在辅助导航窗格中选择“创建”。
    5. 在“创建自定义域名”
    6. 使用Amazon Route 53设置DNS

答案 1 :(得分:3)

更新Jul 5 2017 AWS::ApiGateway::DomainName资源现已可用,因此此部分不再需要自定义资源。

2016年12月24日原帖:

  
      
  1. 在云端模板模板中为舞台启用cloudwatch日志
  2.   

要为每个方法调用API使用CloudFormation为ApiGateway Stage启用CloudWatch日志,您需要为DataTraceEnabled资源中的所有方法将AWS::ApiGateway::Stage属性设置为true

如文档的Set Up a Stage部分所述,您还需要将API网关帐户与正确的IAM权限相关联,以将数据推送到CloudWatch Logs。为此,您还需要创建一个AWS::ApiGateway::Account资源,该资源引用包含AmazonAPIGatewayPushToCloudWatchLogs托管策略的IAM角色,如文档example中所述:

CloudWatchRole: 
 Type: "AWS::IAM::Role"
 Properties: 
  AssumeRolePolicyDocument: 
   Version: "2012-10-17"
   Statement: 
    - Effect: Allow
      Principal: 
       Service: 
        - "apigateway.amazonaws.com"
      Action: "sts:AssumeRole"
  Path: "/"
  ManagedPolicyArns: 
   - "arn:aws:iam::aws:policy/service-role/AmazonAPIGatewayPushToCloudWatchLogs"
Account: 
 Type: "AWS::ApiGateway::Account"
 Properties: 
  CloudWatchRoleArn: 
   "Fn::GetAtt": 
    - CloudWatchRole
    - Arn
  
      
  1. 将舞台分配给云信息模板中的自定义域名
  2.   

不幸的是,CloudFormation不提供与DomainName APIGateway REST API相对应的官方资源。幸运的是,Carl Nordenfelt的非正式API Gateway for CloudFormation项目 提供了Custom::ApiDomainName。以下是文档中提供的示例:

TestApiDomainName:
    Type: Custom::ApiDomainName
    Properties:
        ServiceToken: {Lambda_Function_ARN}
        domainName: example.com
        certificateName: testCertificate
        certificateBody": "-----BEGIN CERTIFICATE-----line1 line2 ... -----END CERTIFICATE-----"
        certificateChain: "-----BEGIN CERTIFICATE-----line1 line2 ... -----END CERTIFICATE-----"
        certificatePrivateKey: "-----BEGIN RSA PRIVATE KEY-----line1 line2 ... -----END RSA PRIVATE KEY-----"

另请注意,一旦创建了域名,您应该创建指向!GetAtt TestApiDomainName.distributionDomainName的Route53别名记录和静态CloudFront托管区域ID(Z2FDTNDATAQYW2),例如:

myDNSRecord:
  Type: AWS::Route53::RecordSet
  Properties: 
    HostedZoneName:
      !Ref HostedZone
    Name:
      !Ref DomainName
    Type: A
    AliasTarget:
      DNSName: !GetAtt TestApiDomainName.distributionDomainName
      HostedZoneId: Z2FDTNDATAQYW2