AWS IoT
开发人员指南
AWS 服务或AWS文档中描述的功能,可能因地区/位置而异。请点击 Amazon AWS 入门,可查看中国地区的具体差异

AWS IoT 按钮 AWS CloudFormation 快速入门

在按下 AWS IoT 按钮时,它会将与按钮有关的基本信息发送至 Amazon SNS 主题。随后主题会将该信息以邮件消息的方式转发给您。本快速入门向您说明如何使用 AWS CloudFormation 模板配置 AWS IoT 按钮。

您需要 AWS 账户和 AWS IoT 按钮才能完成本快速入门中的步骤。

  1. 使用 AWS IoT 控制台创建 AWS IoT 证书:

    1. 打开 AWS IoT 控制台

    2. 出现 Welcome 页面时,请选择 Get started

    3. 在 AWS 区域选择器中,选择您要创建 AWS IoT 证书的 AWS 区域 (例如,美国东部 (弗吉尼亚北部))。您将在同一 AWS 区域创建所有支持的 AWS 资源 (其他 AWS IoT 资源和 Amazon SNS 资源)。

    4. 控制面板上,在左侧导航窗格中选择安全,然后选择证书

    5. Certificates 窗格中选择 Create

    6. 选择 One-click certificate creation - Create certificate

    7. 证书已创建页面上,为证书、私有密钥和 AWS IoT 的根 CA 选择下载,将它们保存到您的计算机中,然后选择激活

    8. 选择完成

    9. Certificates 页面上,选择您刚创建的证书。

    10. Details 信息中,记下证书 ARN 值 (例如,arn:aws:iot:region-ID:account-ID:cert/random-ID)。您需要在本过程的后面部分中使用它。

  2. https://console.amazonaws.cn/cloudformation/ 使用 AWS CloudFormation 控制台创建 AWS IoT 资源、Amazon SNS 资源和 IAM 角色:

    1. 将 AWS CloudFormation 模板文件命名为 AWSIoTButtonQuickStart.template 并保存到您的计算机。

      注意

      检查您按钮的 DSN。确保“AllowedPattern”字符串的开头与您的 DSN 匹配。

      { "AWSTemplateFormatVersion": "2010-09-09", "Description": "Creates required AWS resources to allow an AWS IoT button to send information through an Amazon Simple Notification Service (Amazon SNS) topic to an email address.", "Parameters": { "IoTButtonDSN": { "Type": "String", "AllowedPattern": "G030[A-Z][A-Z][0=9][0-9][0-9][0-5][0-9][1-7][0-9A-HJ-NP-X][0-9A-HJ-NP-X][0-9A-HJ-NP-X][0-9A-HJ-NP-X]", "Description": "The device serial number (DSN) of the AWS IoT Button. This can be found on the back of the button. The DSN must match the pattern of 'G030[A-Z][A-Z][0=9][0-9][0-9][0-5][0-9][1-7][0-9A-HJ-NP-X][0-9A-HJ-NP-X][0-9A-HJ-NP-X][0-9A-HJ-NP-X]'." }, "CertificateARN": { "Type": "String", "Description": "The Amazon Resource Name (ARN) of the existing AWS IoT certificate." }, "SNSTopicName": { "Type": "String", "Default": "aws-iot-button-sns-topic", "Description": "The name of the Amazon SNS topic for AWS CloudFormation to create." }, "SNSTopicRoleName": { "Type": "String", "Default": "aws-iot-button-sns-topic-role", "Description": "The name of the IAM role for AWS CloudFormation to create. This IAM role allows AWS IoT to send notifications to the Amazon SNS topic." }, "EmailAddress": { "Type": "String", "Description": "The email address for the Amazon SNS topic to send information to." } }, "Resources": { "IoTThing": { "Type": "AWS::IoT::Thing", "Properties": { "ThingName": { "Fn::Join" : [ "", [ "iotbutton_", { "Ref": "IoTButtonDSN" } ] ] } } }, "IoTPolicy": { "Type" : "AWS::IoT::Policy", "Properties": { "PolicyDocument": { "Version": "2012-10-17", "Statement": [ { "Action": "iot:Publish", "Effect": "Allow", "Resource": { "Fn::Join": [ "", [ "arn:aws:iot:", { "Ref": "AWS::Region" }, ":", { "Ref": "AWS::AccountId" }, ":topic/iotbutton/", { "Ref": "IoTButtonDSN" } ] ] } } ] } } }, "IoTPolicyPrincipalAttachment": { "Type": "AWS::IoT::PolicyPrincipalAttachment", "Properties": { "PolicyName": { "Ref": "IoTPolicy" }, "Principal": { "Ref": "CertificateARN" } } }, "IoTThingPrincipalAttachment": { "Type" : "AWS::IoT::ThingPrincipalAttachment", "Properties": { "Principal": { "Ref": "CertificateARN" }, "ThingName": { "Ref": "IoTThing" } } }, "SNSTopic": { "Type": "AWS::SNS::Topic", "Properties": { "DisplayName": "AWS IoT Button Press Notification", "Subscription": [ { "Endpoint": { "Ref": "EmailAddress" }, "Protocol": "email" } ], "TopicName": { "Ref": "SNSTopicName" } } }, "SNSTopicRole": { "Type": "AWS::IAM::Role", "Properties": { "AssumeRolePolicyDocument": { "Version": "2012-10-17", "Statement": [ { "Effect": "Allow", "Principal": { "Service": "iot.amazonaws.com" }, "Action": "sts:AssumeRole" } ] }, "Path": "/", "Policies": [ { "PolicyDocument": { "Version": "2012-10-17", "Statement": [ { "Effect": "Allow", "Action": "sns:Publish", "Resource": { "Fn::Join": [ "", [ "arn:aws:sns:", { "Ref": "AWS::Region" }, ":", { "Ref": "AWS::AccountId" }, ":", { "Ref": "SNSTopicName" } ] ] } } ] }, "PolicyName": { "Ref": "SNSTopicRoleName" } } ] } }, "IoTTopicRule": { "Type": "AWS::IoT::TopicRule", "Properties": { "RuleName": { "Fn::Join": [ "", [ "iotbutton_", { "Ref": "IoTButtonDSN" } ] ] }, "TopicRulePayload": { "Actions": [ { "Sns": { "RoleArn": { "Fn::GetAtt": [ "SNSTopicRole", "Arn" ] }, "TargetArn": { "Ref": "SNSTopic" } } } ], "AwsIotSqlVersion": "2015-10-08", "RuleDisabled": false, "Sql": { "Fn::Join": [ "", [ "SELECT * FROM 'iotbutton/", { "Ref": "IoTButtonDSN" }, "'" ] ] } } } } } }
    2. 通过以下网址打开 AWS CloudFormation 控制台:https://console.amazonaws.cn/cloudformation/

    3. 请确保 AWS 区域选择器显示您创建 AWS IoT 证书的区域 (例如,美国东部 (弗吉尼亚北部))。

    4. 选择 Create Stack

    5. Select Template 页面上,选择 Upload a template to Amazon S3,然后选择 Browse

    6. 选中您之前保存的 AWSIoTButtonQuickStart.template 文件,选择 Open,然后选择 Next

    7. Specify Details 页面上,在 Stack name 中键入该 AWS CloudFormation 堆栈的名称 (例如 MyAWSIoTButtonStack)。

    8. 对于 CertificateARN,键入您之前记下的 AWS IoT 证书的 Amazon 资源名称 (ARN) (证书 ARN 值)。

    9. EmailAddress 中键入您的电子邮件地址。

    10. IoTButtonDSN 中键入设备序列号 (DSN)。它显示在 AWS IoT 按钮的背面 (例如,G030JF051234A5BC)。

    11. SNSTopicNameSNSTopicRoleName 可以保留默认值,您也可指定不同的 Amazon SNS 主题名称和相关联的 IAM 角色名称。例如,如果您计划设置更多 AWS IoT 按钮,您可能需要更改这些值。选择 Next

    12. Options 页面中不需要进行执行操作。选择 Next

    13. Review 页面上,选择 I acknowledge that AWS CloudFormation might create IAM resources,然后选择 Create

    14. 如果 MyAWSIoTButtonStack 显示 CREATE_COMPLETE,请在您的电子邮件收件箱中查找主题为“AWS IoT Button Press Notification”的消息。选择邮件消息正文中的 Confirm subscription 链接。

  3. 使用您之前创建的私有密钥和证书,按照 Configure Your Device 中的步骤设置您的 AWS IoT 按钮。

  4. 在设置之后,请按一次按钮。白灯闪烁几下,然后绿灯会亮起一段时间。不久后,您应收到主题行中包含“AWS IoT Button Press Notification”的邮件消息。它包含由按钮在电子邮件正文中发送的信息。

  5. 在完成试用后,您可以进行清理 AWS CloudFormation 模板创建的 AWS 资源。为此,请返回 AWS CloudFormation 控制台并删除 MyAWSIoTButtonStack。在删除 MyAWSIoTButtonStack 后,按照以下步骤删除 AWS IoT 证书:

    1. 返回 AWS IoT 控制台。

    2. 在资源列表中,在代表 AWS IoT 证书的栏中 (带有握手图标的栏) 选中复选框。

    3. 对于 Actions,选择 Deactivate,然后确认。

    4. 保持选中代表 AWS IoT 证书的栏,为 Actions 选择 Delete,然后确认。

    5. 您之前下载的私有密钥和证书不再有效,您现在可以将它们从计算机中删除。