文章目錄
- aws(學習筆記第三十九課) iotcore(Internet Of Thing)
- 學習內容:
- 1. 整體架構
- 1.1 代碼鏈接
- 1.2 整體架構(概要)
- 1.3 整體架構(詳細 )
- 2. 代碼解析
- 2.1 創建`IOT thing`
- 2.2 創建`AWS IOT certificate`證書
- 2.2.1 創建`lambda`需要的`role`
- 2.2.2 創建`lambda`
- 2.2.3 `lambda`的函數處理
- 2.2.4 創建`customResource`
- 2.2.5 創建證書權限(`policy`)
- 2.2.6 將`policy`賦予到證書`certificate`
- 2.2.7 將`certificate`設定到`IOT thing`上
- 2.3 創建`cloudwatch`相關設定
- 2.3.1 創建`IOT`重定向`rule`的權限(`role`)
- 2.3.2 創建`cloudwatch`的`log group`
- 2.3.2 創建`iot_topic_rule`
- 3 開始執行`cdk`
- 3.1 執行`CDK`
- 3.2 準備證書`certificate`和`private key`
- 3.2.1 為什么要準備`certificate`和`private key`
- 3.2.2 保存`certificate`證書和`private key`
- 3.3 確認`AWS IOT`的`endpoint`
- 3.4 `client(device)`端的模擬程序
- 3.5 執行`client(device)`端的模擬程序
- 3.6 刪除測試`stack`
aws(學習筆記第三十九課) iotcore(Internet Of Thing)
- 使用
iotcore
學習內容:
- 使用
iotcore
- 學會使用
CA
證書
1. 整體架構
1.1 代碼鏈接
- 代碼鏈接(cdk_iot_thing)
1.2 整體架構(概要)
1.3 整體架構(詳細 )
- 創建
AWS IOT things
。 - 定義
customResource
,用來執行lambda
,創建AWS IOT
的certificate
和private key
。 lambda
里面,同時將創建的certificate
和private key
存儲到AWS Secret Manager
。- 定義
CdkIOTCloudWatchAccessRole
,用于賦予權限給topicRule
,能夠將收到的IOT Message
轉發到CloudWatch
。 - 創建
topicRule
,可以將AWS things
接受的message
發送到CloudWatch
。
2. 代碼解析
2.1 創建IOT thing
# Environment variablesaccount=Aws.ACCOUNT_IDregion=Aws.REGIONiot_thing_name="CdkThing001"# Create an IoT Thingcfn_thing=iot.CfnThing(self, "MyCdkThing",thing_name=iot_thing_name)
這里,創建IOT thing
,但是topic
不需要特別創建。
2.2 創建AWS IOT certificate
證書
2.2.1 創建lambda
需要的role
這里采用customResource
->lambda
的方式,所以提前創建lambda
執行需要的role
。
# Lambda role for creating certs and keyslambda_role = iam.Role(self, f"{iot_thing_name}LambdaRole", assumed_by=iam.ServicePrincipal("lambda.amazonaws.com"))lambda_role.add_to_policy(iam.PolicyStatement(actions=["secretsmanager:CreateSecret","secretsmanager:DeleteSecret"],resources=["arn:aws:secretsmanager:*:*:secret:*"]))lambda_role.add_to_policy(iam.PolicyStatement(actions=["iot:CreateKeysAndCertificate", "iot:UpdateCertificate"],resources=["*"]))
可以,看出,ServicePrincipal
是lambda.amazonaws.com
,policy
都是和創建iot certificate
證書相關的設定。
2.2.2 創建lambda
# Custom Lambda to create IoT certificate and storing in secrets managercert_lambda = _lambda.Function(self,"CertHandler",function_name="CertHandlerFunction",runtime=_lambda.Runtime.PYTHON_3_11,code=_lambda.Code.from_asset("lambda"),handler="cert_handler.lambda_handler",role=lambda_role,log_retention=logs.RetentionDays.ONE_DAY,timeout=Duration.seconds(60))
2.2.3 lambda
的函數處理
def on_create(event):response = iot.create_keys_and_certificate(setAsActive=True)certificate_id = response['certificateId']certificate_pem = response['certificatePem']key_pair = response['keyPair']if not certificate_id or not certificate_pem or not key_pair:raise ValueError('Faile