From c267cc8f51a99e59f7481f5c86f5b5dacd5ddf9e Mon Sep 17 00:00:00 2001 From: Kazuho CryerShinozuka Date: Thu, 24 Oct 2024 19:46:22 +0900 Subject: [PATCH] docs: update readme --- README.md | 7 ++++++- images/iot.png | Bin 0 -> 17880 bytes 2 files changed, 6 insertions(+), 1 deletion(-) create mode 100644 images/iot.png diff --git a/README.md b/README.md index 96f8252..5f8fcf7 100644 --- a/README.md +++ b/README.md @@ -2,6 +2,8 @@ This is a CDK construct that creates an AWS IoT Core Thing with a certificate and policy using [aws-sdk-js-v3](https://github.com/aws/aws-sdk-js-v3). +![elements](./images/iot.png) + Cloudformation does not support creating a certificate for an IoT Thing, so this construct uses the AWS SDK to create a certificate and attach it to the Thing. This construct is a modified version of this excellent [construct (cdk-iot-core-certificate)](https://github.com/devops-at-home/cdk-iot-core-certificates) to work with aws-sdk-js-v3. @@ -9,7 +11,7 @@ This construct is a modified version of this excellent [construct (cdk-iot-core- ## Installation ```bash -npm i cdk-iot-core-certificate-v3 +npm i cdk-iot-core-certificates-v3 ``` ## Usage @@ -18,8 +20,11 @@ npm i cdk-iot-core-certificate-v3 import { ThingWithCert } from 'cdk-iot-core-certificate-v3'; const thing = new ThingWithCert(this, 'MyThing', { + // The name of the thing thingName: 'MyThing', + // Whether to save the certificate and private key to the SSM Parameter Store saveToParamStore: true, + // The prefix to use for the SSM Parameter Store parameters paramPrefix: 'test', }); diff --git a/images/iot.png b/images/iot.png new file mode 100644 index 0000000000000000000000000000000000000000..262c5c705306662cb850c2eb32f679fb033ff661 GIT binary patch literal 17880 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 literal 0 HcmV?d00001