のAWSのiotデモ

8058 ワード

建築



  • デモ

  • demo react web 私たちがテスト/TestCountパブからデータを公表する必要があるので、ここでリアルタイムでありません.パイ
  • video demo
  • GitHub here

  • CDK
  • IOTを作成し、ポリシーをX 509証明書にアタッチし、
  • を作成するiotルールキネシスファイヤーホースにデータを提供する
  • DBから照会するラムダ関数を作成する

  • 増幅する
  • 認知とPubsubは、IOT話題を購読します
  • を認識するAWSのIOTポリシー
  • 事前に構築した認証UI ( UseAuthenticator )

  • チャールス
  • プロットと更新2つの簡単なチャート
  • チャート1 .DBからAPIを介してデータを取得し続ける
  • チャート2 .IOTトピックを購読する
  • 増幅するアプリケーションをホストする反応

  • IOTと証明書
  • X 509証明書を物理的なIOTデバイスに接続する
  • x 509 ceritifcateにAWS IOTポリシーを付けて、read/writeを実行します.

  • トピックルール
  • AWS IOTルールをS 3、FireSome、Dyanmodbに書き込むようにルールにロールを追加する
  • チェックAWSサービスエンドポイント


    aws iot describe-endpoint --region ap-southeast-1
    

    ダウンロードリンク

  • MQTTクライアントを設定するのに必要なCA証明書をダウンロードします.reference 1 and reference 2 .
  •     https://www.amazontrust.com/repository/AmazonRootCA1.pem \
        https://www.amazontrust.com/repository/AmazonRootCA2.pem \
        https://www.amazontrust.com/repository/AmazonRootCA3.pem \
        https://www.amazontrust.com/repository/AmazonRootCA4.pem \
    
  • 別の方法はCA証明書を作成することですreference 3
  • openssl genrsa -out root_CA_key_filename.key 2048
    
    openssl req -x509 -new -nodes \
        -key root_CA_key_filename.key \
        -sha256 -days 1024 \
        -out root_CA_cert_filename.pem
    

    キーと証明書

  • CLIかAWSコンソールからキーと証明書を作成しなければなりません.CDKから作成するには、このカスタムリソースに従ってくださいreference 4
  • aws iot create-keys-and-certificate \
    --set-as-active \
    --certificate-pem-outfile esp-certificate.crt \
    --public-key-outfile esp-public.key \
    --private-key-outfile esp-private.key \
    --region ap-southeast-1
    
  • 認証しない
  • IDを指定した証明書の再ダウンロード
    テキストとしてAWS CLI出力を構成する
  • aws iot describe-certificate --certificate-id 
    

    証明書、X 509証明書、およびポリシー


    IOTがAWS IOTコアにデータを書き込むことができるようにするためには、X 509証明書を物理的なIOTデバイスに接続する必要があります.また、ACTでX 509証明書にポリシーをアタッチする必要があります.
  • X 509証明書のポリシーを作成する
  • const policy = new aws_iot.CfnPolicy(
          this,
          'PolicyForDemoDevice',
          {
            policyName: 'PolicyForDemoDevice',
            policyDocument: new aws_iam.PolicyDocument(
              {
                statements: [
                  new aws_iam.PolicyStatement(
                    {
                      actions: ['iot:*'],
                      resources: ['*'],
                      effect: aws_iam.Effect.ALLOW
                    }
                  )
                ]
              }
            )
          }
        )
    
  • ポリシーをX 509証明書に付けます
  • const attachPolicy = new aws_iot.CfnPolicyPrincipalAttachment(
          this,
          'AttachPolicyForDemoDevice',
          {
            policyName: policy.policyName!.toString(),
            principal: props.certificateArn
          }
        )
    
        attachPolicy.addDependsOn(
          policy
        )
    
  • X 509証明書をIOTに接続する
  • const attachCert = new aws_iot.CfnThingPrincipalAttachment(
          this,
          'AttachCertificiateToThing',
          {
            thingName: thing.thingName!.toString(),
            principal: props.certificateArn
          }
        )
    
        attachCert.addDependsOn(
          thing
        )
    

    IOT規則と役割


    IOSルールをS 3、DynamoDB、FireSomeのような他のサービスに配信するためには、各ルールにロールをアタッチする必要があります.
  • 役割を作る
  •  const role = new aws_iam.Role(
          this,
          'RoleForIoTCoreToAccessS3',
          {
            roleName: 'RoleForIoTCoreToAccessS3',
            assumedBy: new aws_iam.ServicePrincipal('iot.amazonaws.com')
          }
        )
    
  • インラインポリシーをロールにアタッチ
  •  role.attachInlinePolicy(
          new aws_iam.Policy(
            this,
            'PolicyForIoTcoreToAccessS3',
            {
              policyName: 'PolicyForIoTcoreToAccessS3',
              statements: [
                new aws_iam.PolicyStatement(
                  {
                    actions: ['s3:*'],
                    resources: ['arn:aws:s3:::bucketName/*']
                  }
                ),
                new aws_iam.PolicyStatement(
                  {
                    actions: ['firehose:*'],
                    resources: ['*']
                  }
                ),
                new aws_iam.PolicyStatement(
                  {
                    actions: ['dynamodb:*'],
                    resources: ['*']
                  }
                )
              ]
            }
          )
        )
    
  • アクションでルールを作成し、役割を添付
  • const topicRule = new aws_iot.CfnTopicRule(
          this,
          'TopicRuleDemo',
          {
            ruleName: 'TopicRuleDemo',
            topicRulePayload: {
              actions: [
                {
                  firehose: {
                    deliveryStreamName: firehoseDeilvery.deliveryStreamName,
                    roleArn: role.roleArn
                  }
                },
                {
                  s3: {
                    bucketName: 'bucketName',
                    key: 'iot-one',
                    roleArn: role.roleArn
                  },
                },
                {
                  dynamoDb: {
                    hashKeyField: 'id',
                    hashKeyValue: 'device01',
                    hashKeyType: 'STRING',
                    rangeKeyField: 'timestamp',
                    rangeKeyValue: '${timestamp()}',
                    rangeKeyType: 'STRING',
                    roleArn: role.roleArn,
                    tableName: table.tableName
                  }
                }
              ],
              sql: `SELECT *, cast(timestamp() as STRING) AS timestamp FROM 'topic/subtopic'`
            }
          }
        )
    

    増幅、認知とAWS IOTポリシー


    Amplifyを使用するには、AWSのIOTトピックを購読するには、Conigto IDにポリシーを添付する必要があります.
  • 次のように反応Webアプリケーションからの認知IDを見つける
  • import Amplify, { Auth, PubSub } from 'aws-amplify';
    Auth.currentCredentials().then(creds => console.log(creds));
    
    The Cognito ID can be found from the creds log
    
  • 次のようにAWAX IOTポリシーを認識する
  • aws iot attach-policy --policy-name 'PolicyForDemoDevice' --target ap-southeast-1:41f19265-5ecd-4c86-8b34-cc58dee6c2f0
    aws iot attach-policy --policy-name 'PolicyForDemoDevice' --target ap-southeast-1:2d1afbd5-2d7d-43ec-b906-a40ac2416c10