

本文属于机器翻译版本。若本译文内容与英语原文存在差异，则一律以英文原文为准。

# 示例：SQS CloudWatch、和 SNS
<a name="customize-environment-resources-sqs"></a>

此示例给环境添加 Amazon SQS 队列以及有关队列深度的警报。此示例中显示的属性是必须具备的最低程度的属性，必须为每个资源进行设置。您可以在 [SQS、SNS 和](https://elasticbeanstalk.s3.amazonaws.com/extensions/SNS.config)上下载该示例。 CloudWatch

**注意**  
此示例创建了 Amazon 资源，您可能需要为此付费。有关 Amazon 定价的更多信息，请参阅[https://www.amazonaws.cn/pricing/](https://www.amazonaws.cn/pricing/)。有些服务属于 Amazon 免费使用套餐的一部分。如果您是新客户，则可免费试用这些服务。请参阅[https://www.amazonaws.cn/free/](https://www.amazonaws.cn/free/)了解更多信息。

要使用此示例，请执行下列操作：

1. 在源包的顶级目录中创建 `[.ebextensions](ebextensions.md)` 目录。

1. 创建两个扩展名为 `.config` 的配置文件并将其放入您的 `.ebextensions` 目录。一个配置文件定义资源，另一个配置文件定义选项。

1. 将应用程序部署到 Elastic Beanstalk。

   YAML 依赖一致的缩进。当替换示例配置文件中的内容时，应匹配缩进级别，并且确保您的文本编辑器使用空格而不是字符来进行缩进。

创建定义资源的配置文件 (例如，sqs.config)。在此示例中，我们创建 SQS 队列并定义 `VisbilityTimeout` 资源中的 `MySQSQueue` 属性。下一步，我们创建 SNS `Topic`，并指定电子邮件在警报激发时发送到 `someone@example.com`。最后，如果队列超过 10 条消息，我们会创建 CloudWatch警报。在 `Dimensions` 属性中，我们指定维度的名称以及代表维度度量的值。我们使用 `Fn::GetAtt` 从 `QueueName` 中返回 `MySQSQueue` 的值。

```
#This sample requires you to create a separate configuration file to define the custom options for the SNS topic and SQS queue.
Resources:
  MySQSQueue:
    Type: AWS::SQS::Queue
    Properties: 
      VisibilityTimeout:
        Fn::GetOptionSetting:
          OptionName: VisibilityTimeout
          DefaultValue: 30
  AlarmTopic:
    Type: AWS::SNS::Topic
    Properties: 
      Subscription:
        - Endpoint:
            Fn::GetOptionSetting:
              OptionName: AlarmEmail
              DefaultValue: "nobody@amazon.com"
          Protocol: email
  QueueDepthAlarm:
    Type: AWS::CloudWatch::Alarm
    Properties:
      AlarmDescription: "Alarm if queue depth grows beyond 10 messages"
      Namespace: "AWS/SQS"
      MetricName: ApproximateNumberOfMessagesVisible
      Dimensions:
        - Name: QueueName
          Value : { "Fn::GetAtt" : [ "MySQSQueue", "QueueName"] }
      Statistic: Sum
      Period: 300
      EvaluationPeriods: 1
      Threshold: 10
      ComparisonOperator: GreaterThanThreshold
      AlarmActions:
        - Ref: AlarmTopic
      InsufficientDataActions:
        - Ref: AlarmTopic

Outputs :
  QueueURL: 
    Description : "URL of newly created SQS Queue"
    Value : { Ref : "MySQSQueue" }
  QueueARN :
    Description : "ARN of newly created SQS Queue"
    Value : { "Fn::GetAtt" : [ "MySQSQueue", "Arn"]}
  QueueName :
    Description : "Name newly created SQS Queue"
    Value : { "Fn::GetAtt" : [ "MySQSQueue", "QueueName"]}
```

有关此示例配置文件中使用的资源的更多信息，请参阅以下参考：
+ [AWS::SQS::Queue](https://docs.amazonaws.cn/AWSCloudFormation/latest/UserGuide/aws-properties-sqs-queues.html)
+ [AWS::SNS::Topic](https://docs.amazonaws.cn/AWSCloudFormation/latest/UserGuide/aws-properties-sns-topic.html)
+ [AWS::CloudWatch::Alarm](https://docs.amazonaws.cn/AWSCloudFormation/latest/UserGuide/aws-properties-cw-alarm.html)

创建名为 `options.config` 的单独配置文件，并定义自定义选项设置。

```
option_settings:
  "aws:elasticbeanstalk:customoption":
     VisibilityTimeout : 30
     AlarmEmail : "nobody@example.com"
```

**这些行告诉 Elastic Beanstalk **VisibilityTimeout 从配置文件（我们的示例中**VisibilityTimeout 为 options.config）中获取和**订阅端点属性的值，该**文件包含一个 option\_settings 部分，其中有一个 aws: elasticbeanstalk: customoption 部分，其中包含包含要使用的实际值的名称-值对。**在以上示例中，这意味着 30 和“nobody@amazon.com”将用于这些值。有关 `Fn::GetOptionSetting` 的更多信息，请参阅 [函数](ebextensions-functions.md)。