本文為英文版的機器翻譯版本,如內容有任何歧義或不一致之處,概以英文版為準。
Lambda
Lambda (lambda) 動作會叫用 AWS Lambda函數,以非同步方式傳入 MQTT 訊息。AWS IoT叫用 Lambda 函數。
您可依循對您展示如何使用 Lambda 動作 來建立及測試規則的教學課程。如需詳細資訊,請參閱教學課程:使用 AWS Lambda 函數來格式化通知。
需求
此規則動作具有下列需求:
-
若要AWS IoT讓 叫用 Lambda 函數,您必須設定授予
lambda:InvokeFunction許可的政策AWS IoT。您只能叫用 Lambda 政策存在AWS 區域的相同 中定義的 Lambda 函數。Lambda 函數使用的是資源型政策,因此您必須將政策連接至 Lambda 函數本身。使用下列AWS CLI命令來連接授予
lambda:InvokeFunction許可的政策。在此命令中,取代:-
function_name與 Lambda 函數的名稱。您可以新增許可來更新函數的資源政策。 -
具有 函數AWS 區域之
的區域。 -
account-id,其中包含定義規則的AWS 帳戶數字。 -
rule-name,其中包含您要為其定義 Lambda 動作的AWS IoT規則名稱。 -
unique_id具有唯一的陳述式識別符。
重要
如果您為AWS IoT委託人新增許可,但未提供
source-arn或source-account,則任何使用 Lambda 動作建立規則AWS 帳戶的 都可以啟用規則,以叫用您的 Lambda 函數AWS IoT。如需詳細資訊,請參閱 AWS Lambda 許可。
aws lambda add-permission \ --function-namefunction_name\ --regionregion\ --principal iot.amazonaws.com \ --source-arn arn:aws:iot:region:account-id:rule/rule_name\ --source-accountaccount-id--statement-idunique_id--action "lambda:InvokeFunction" -
-
如果您使用AWS IoT主控台為 Lambda 規則動作建立規則,則會自動觸發 Lambda 函數。如果您AWS CloudFormation改搭配 使用
AWS::IoT::TopicRule LambdaAction,則必須新增AWS::lambda::Permission資源。然後, 資源會授予您觸發 Lambda 函數的許可。下列程式碼顯示如何新增此資源的範例。在此範例中,取代:
-
function_name與 Lambda 函數的名稱。 -
區域與 函數AWS 區域的 。 -
account-id,其中包含定義規則的AWS 帳戶數字。 -
rule-name,其中包含您定義 Lambda 動作之AWS IoT規則的名稱。
Type: AWS::Lambda::Permission Properties: Action: lambda:InvokeFunction FunctionName: !Reffunction_namePrincipal: "iot.amazonaws.com" SourceAccount:account-idSourceArn: arn:aws:iot:region:account-id:rule/rule_name -
-
如果您使用受管AWS KMS客戶AWS KMS key來加密 Lambda 中的靜態資料,服務必須具有代表發起人使用 AWS KMS key的許可。如需詳細資訊,請參閱《AWS Lambda 開發人員指南》中的靜態加密。
Parameters
當您使用此動作建立 AWS IoT規則時,您必須指定下列資訊:
functionArn-
要叫用的 Lambda 函數 ARN。 AWS IoT必須具有叫用函數的許可。如需詳細資訊,請參閱需求。
如果您未針對您的 Lambda 函數指定版本或別名,則最新版的函數會關閉。如果想要關閉特定版本的 Lambda 函數,您可以指定版本或別名。如要指定版本或別名,請將版本或別名附加至 Lambda 函數的 ARN。
arn:aws:lambda:us-east-2:123456789012:function:myLambdaFunction:someAlias如需版本控制與別名的詳細資訊,請參閱 AWS Lambda 函數版本控制與別名。
僅支援替代範本:API 和AWS CLI
範例
下列 JSON 範例會在 AWS IoT規則中定義 Lambda 動作。
{ "topicRulePayload": { "sql": "SELECT * FROM 'some/topic'", "ruleDisabled": false, "awsIotSqlVersion": "2016-03-23", "actions": [ { "lambda": { "functionArn": "arn:aws:lambda:us-east-2:123456789012:function:myLambdaFunction" } } ] } }
下列 JSON 範例使用 AWS IoT規則中的替代範本定義 Lambda 動作。
{ "topicRulePayload": { "sql": "SELECT * FROM 'some/topic'", "ruleDisabled": false, "awsIotSqlVersion": "2016-03-23", "actions": [ { "lambda": { "functionArn": "arn:aws:lambda:us-east-1:123456789012:function:${topic()}" } } ] } }
另請參閱
-
《 AWS Lambda開發人員指南》中的什麼是AWS Lambda?