亚马逊网络服务 (AWS)

aws 集成提供一个与 亚马逊网络服务 交互的单一位置。目前,它提供一个通知平台,可以将消息发送到 AWS SQSAWS SNS 或调用 AWS Lambda 函数。

设置

您必须拥有一个 AWS 账户才能使用亚马逊网络服务,可以在 这里 创建一个具有 12 个月免费层福利的账户。请注意,即使在前 12 个月内,如果您使用的资源超过免费层提供的数量,仍然可能会收取费用。我们建议您密切监控您的费用在 AWS 计费控制台 中。您可以阅读 控制您的 AWS 成本 指南以获取更多信息。

aws 集成中使用的 lambdasnssqsevents 服务,所有用户在 12 个月期限后仍然提供 始终免费 的服务。家庭自动化中的一般使用最有可能不会达到免费层的限制。有关更多详细信息,请阅读 Lambda 定价SNS 定价SQS 定价EventBridge 定价

aws 集成使用 botocore 与亚马逊网络服务进行通信,这同样也被 AWS 命令客户端接口 工具使用。因此,awsawscli 工具共享相同的凭证和配置文件。请阅读 配置 AWS CLI 以了解如何获取访问密钥以及如何在本地系统上安全地管理它们。

配置

要在您的安装中使用 aws 集成和 notify 平台,请将以下内容添加到您的 configuration.yamlconfiguration.yaml 文件是 Home Assistant 的主要配置文件。它列出了要加载的集成及其特定配置。在某些情况下,需要直接在 configuration.yaml 文件中手动编辑配置。大多数集成可以在 UI 中配置。 [Learn more] 文件中。 在更改了configuration.yamlconfiguration.yaml 文件是 Home Assistant 的主要配置文件。它列出了要加载的集成及其特定配置。在某些情况下,需要直接在 configuration.yaml 文件中手动编辑配置。大多数集成可以在 UI 中配置。 [Learn more] 文件后,重启 Home Assistant 以应用更改。 该集成现在显示在集成页面的 设置 > 设备与服务 下。其实体在集成卡片上以及实体标签上列出。

# 示例 configuration.yaml 条目
aws:
  credentials:
    - name: 我的 AWS 账户
      aws_access_key_id: AWS_ID
      aws_secret_access_key: AWS_SECRET
  notify:
    # 默认使用在 aws 集成中定义的第一个凭证
    - service: lambda
      region_name: us-east-1

凭证配置

Configuration Variables

name string Required

给您的 AWS 凭证起一个名字,以便您可以在其他 AWS 平台中引用它。

aws_access_key_id string (Optional)

您的 AWS 访问密钥 ID。如果提供此项,您还必须提供一个 aws_secret_access_key,且不得提供 profile_name。如果提供 aws_secret_access_key 则此项为必需。

aws_secret_access_key string (Optional)

您的 AWS 秘密访问密钥。如果提供此项,您还必须提供一个 aws_access_key_id,且不得提供 profile_name。如果提供 aws_access_key_id 则此项为必需。

profile_name string (Optional)

凭证配置文件名称。

validate boolean (Optional, default: true)

是否在使用前验证凭证。验证凭证需要 IAM.GetUser 权限。

通知配置

Configuration Variables

service string Required

亚马逊网络服务将用于通知。您可以选择 lambdasnssqs

region_name string Required

要连接的区域标识符,例如 us-east-1

credential_name string (Optional)

aws 凭证的引用。如果没有提供 credential_nameaws_access_key_idprofile_name,通知平台将使用 ~/.aws 中定义的 默认配置文件

aws_access_key_id string (Optional)

您的 AWS 访问密钥 ID。如果提供此项,您还必须提供一个 aws_secret_access_key

aws_secret_access_key string (Optional)

您的 AWS 秘密访问密钥。如果提供此项,您还必须提供一个 aws_access_key_id。如果提供 aws_access_key_id 则此项为必需。

profile_name string (Optional)

凭证配置文件名称。

name string (Optional, default: notify)

设置可选参数 name 允许创建多个通知器。通知器将绑定到 notify.NOTIFIER_NAME 动作。

context string (Optional)

一个可选字典,您可以提供以通过通知处理程序传递自定义上下文。

Lambda 通知用法

AWS Lambda 是一个通知平台,因此可以通过调用 notify 动作如这里所述来控制。它会为通知有效载荷中给出的所有目标调用 Lambda。目标可以格式化为函数名称、完整 ARN(亚马逊资源名称)或部分 ARN。有关更多信息,请参见 botocore 文档

Lambda 事件有效载荷将包含传递给动作有效载荷的所有内容。以下是将发送到 Lambda 的有效载荷示例:

{
  "title": "测试消息!",
  "target": "arn:aws:lambda:us-east-1:123456789012:function:ProcessKinesisRecords",
  "data": {
    "test": "好的"
  },
  "message": "你好,世界!"
}

上下文将如下所示:

{
  "custom": {
    "two": "three",
    "test": "one"
  }
}

SNS 通知用法

AWS SNS 是一个通知平台,因此可以通过调用 notify 动作 如这里所述 来控制。它将向通知有效载荷中给出的所有目标发布消息。目标必须是 SNS 主题或端点 ARN(亚马逊资源名称)。有关更多信息,请参见 botocore 文档

如果存在,SNS 主题将设置为标题。除消息外,来自有效载荷的所有属性都将作为字符串化的消息属性发送。

在 AWS 中设置 SNS

  • 登录到您的 AWS 控制台,在“安全与身份”下,选择“身份与访问管理”。
  • 在左侧选择“用户”,然后点击“创建新用户”。在此输入名称,然后点击“创建”。
  • 您可以下载凭证或点击箭头一次性显示它们。

Warning

如果您不下载它们,您将失去它们,必须重建一个新用户。

  • 复制/粘贴在您的 configuration.yamlconfiguration.yaml 文件是 Home Assistant 的主要配置文件。它列出了要加载的集成及其特定配置。在某些情况下,需要直接在 configuration.yaml 文件中手动编辑配置。大多数集成可以在 UI 中配置。 [Learn more] 文件中显示的两个密钥。
  • 在屏幕左侧返回“用户”部分,选择您刚刚创建的用户。在“权限”选项卡中点击“附加策略”图标。搜索 “SNS” 并附加策略 “AmazonSNSFullAccess”。
  • 回到 AWS 控制台,现在需要找到 “SNS” 并点击该服务。它位于移动服务组下。
  • 在左侧,选择“主题”,然后“创建新主题”。
  • 选择主题名称和显示名称。
  • 现在勾选您刚创建的主题旁边的框,在操作下选择“订阅主题”。
  • 在弹出框中选择协议 = 短信,并在“端点”旁边输入您希望发送短信的电话号码。现在点击“创建”。
  • 为其他号码重复此操作。
  • 在“用户”部分,您将看到从“arn:” 开始并以您之前选择的主题名称结束的长字母数字行。这将是您在家庭助理中的“目标”。

SQS 通知用法

AWS SQS 是一个通知平台,因此可以通过调用 notify 动作 如这里所述 来控制。它将为通知有效载荷中给出的所有目标发布消息到队列。目标必须是 SQS 主题 URL。有关更多信息,请参见 SQS 文档botocore 文档

SQS 事件有效载荷将包含传递给动作有效载荷的所有内容。SQS 有效载荷将作为字符串化的 JSON 发布。来自有效载荷的所有属性,除了消息,也将作为字符串化消息属性发送。以下是将发布到 SQS 队列的消息示例:

{
  "title": "测试消息!",
  "target": "https://sqs.us-east-1.amazonaws.com/123456789012/queue2%22",
  "data": {
    "test": "好的"
  },
  "message": "你好,世界!"
}

EventBridge 通知用法

AWS EventBridge 是一个通知平台,因此可以通过调用 notify 动作 如这里所述 来控制。它将向事件总线发布消息,针对通知有效载荷中给出的所有目标。目标必须是可通过给定凭证访问的事件总线的名称。如果未指定目标,则不需要,并将使用默认事件总线。有关更多信息,请参见 EventBridge 文档botocore 文档

有两种选择可以根据动作有效载荷生成事件详细信息。如果指定了 detail 属性,则其值将序列化为 JSON 对象并用于事件详细信息。如果未指定该属性,则 message 属性的值将序列化为一个简单的 JSON 对象,键名为 message,值为传递给动作的消息。

以下是显示动作输入和相应 API 条目的几个示例:

// 服务调用有效载荷
{
  "message": "你好,世界!"
}

// 相应条目
{
  "Detail": "{\"message\": \"你好,世界!\"}"
  "DetailType": "",
  "Source": "homeassistant",
  "Resources": [],
}
// 服务调用有效载荷:
{
  "target": ["eventbus1", "eventbus2"]
  "data": {
    "detail_type": "test_event":
    "detail": {
      "key1", "value1",
      "key2", "value2"
    },
    "resources": ["resource1", "resource2"],
    "source": "example"
  }
}

// 相应条目
[
  {
    "Detail": "{\"key1\": \"value1\",\"key2\": \"key2\": \"value2\"}"
    "DetailType": "test_event",
    "EventBusName": "eventbus1",
    "Resources": ["resource1", "resource2"],
    "Source": "example"
  },
  {
    "Detail": "{\"key1\": \"value1\",\"key2\": \"key2\": \"value2\"}"
    "DetailType": "test_event",
    "EventBusName": "eventbus2",
    "Resources": ["resource1", "resource2"],
    "Source": "example"
  }
]