

本文為英文版的機器翻譯版本，如內容有任何歧義或不一致之處，概以英文版為準。

# Lambda
<a name="lambda-rule-action"></a>

Lambda (`lambda`) 動作會叫用 AWS Lambda 函數，以非同步方式傳入 MQTT 訊息。 AWS IoT 叫用 Lambda 函數。

您可依循對您展示如何使用 Lambda 動作 來建立及測試規則的教學課程。如需詳細資訊，請參閱[教學課程：使用 AWS Lambda 函數格式化通知](iot-lambda-rule.md)。

## 需求
<a name="lambda-rule-action-requirements"></a>

此規則動作具有下列需求：
+ 若要 AWS IoT 讓 叫用 Lambda 函數，您必須設定授予 `lambda:InvokeFunction`許可的政策 AWS IoT。您只能叫用 Lambda 政策存在 AWS 區域 的相同 中定義的 Lambda 函數。Lambda 函數使用的是資源型政策，因此您必須將政策連接至 Lambda 函數本身。

  使用下列 AWS CLI 命令來連接授予 `lambda:InvokeFunction`許可的政策。在此命令中，取代：
  + *function\$1name* 與 Lambda 函數的名稱。您可以新增許可來更新函數的資源政策。
  + 具有 函數 AWS 區域 之 *的區域*。
  + *account-id*，其中包含定義規則的 AWS 帳戶 數字。
  + *rule-name*，其中包含您定義 Lambda 動作之 AWS IoT 規則的名稱。
  + *unique\$1id* 具有唯一的陳述式識別符。
**重要**  
如果您為 AWS IoT 委託人新增許可，但未提供 `source-arn`或 `source-account`，則任何使用 Lambda 動作建立規則 AWS 帳戶 的 都可以啟用規則來叫用您的 Lambda 函數 AWS IoT。

  如需詳細資訊，請參閱 [AWS Lambda 許可](https://docs.aws.amazon.com/lambda/latest/dg/intro-permission-model.html)。

  ```
  aws lambda add-permission \ 
      --function-name function_name \ 
      --region region \ 
      --principal iot.amazonaws.com \
      --source-arn arn:aws:iot:region:account-id:rule/rule_name \
      --source-account account-id 
      --statement-id unique_id 
      --action "lambda:InvokeFunction"
  ```
+ 如果您使用 AWS IoT 主控台為 Lambda 規則動作建立規則，則會自動觸發 Lambda 函數。如果您 AWS CloudFormation 改搭配 使用 [https://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/aws-properties-iot-topicrule-lambdaaction.html](https://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/aws-properties-iot-topicrule-lambdaaction.html)，則必須新增 [https://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/aws-resource-lambda-permission.html](https://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/aws-resource-lambda-permission.html) 資源。然後，資源會授予您觸發 Lambda 函數的許可。

  下列程式碼顯示如何新增此資源的範例。在此範例中，取代：
  + *function\$1name* 與 Lambda 函數的名稱。
  + 具有 函數 AWS 區域 之 *的區域*。
  + *account-id*，其中包含定義規則的 AWS 帳戶 數字。
  + *rule-name*，其中包含您定義 Lambda 動作之 AWS IoT 規則的名稱。

  ```
  Type: AWS::Lambda::Permission
  Properties:
    Action: lambda:InvokeFunction
    FunctionName: !Ref function_name
    Principal: "iot.amazonaws.com"
    SourceAccount: account-id
    SourceArn: arn:aws:iot:region:account-id:rule/rule_name
  ```
+ 如果您使用受管 AWS KMS 客戶 AWS KMS key 來加密 Lambda 中的靜態資料，服務必須具有代表發起人使用 AWS KMS key 的許可。如需詳細資訊，請參閱《AWS Lambda 開發人員指南》**中的[靜態加密](https://docs.aws.amazon.com/lambda/latest/dg/security-dataprotection.html#security-privacy-atrest)。

## Parameters
<a name="lambda-rule-action-parameters"></a>

當您使用此動作建立 AWS IoT 規則時，您必須指定下列資訊：

`functionArn`  
要叫用的 Lambda 函數 ARN。 AWS IoT 必須具有叫用函數的許可。如需詳細資訊，請參閱[需求](#lambda-rule-action-requirements)。  
如果您未針對您的 Lambda 函數指定版本或別名，則最新版的函數會關閉。如果想要關閉特定版本的 Lambda 函數，您可以指定版本或別名。如要指定版本或別名，請將版本或別名附加至 Lambda 函數的 ARN。  

```
arn:aws:lambda:us-east-2:123456789012:function:myLambdaFunction:someAlias
```
如需版本控制與別名的詳細資訊，請參閱 [AWS Lambda 函數版本控制與別名](https://docs.aws.amazon.com/lambda/latest/dg/versioning-aliases.html)。  
 AWS CLI 僅支援[替代範本](iot-substitution-templates.md)：API 和

## 範例
<a name="lambda-rule-action-examples"></a>

下列 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()}"
                }
            }
        ]
    }
}
```

## 另請參閱
<a name="lambda-rule-action-see-also"></a>
+ 《 *AWS Lambda 開發人員指南*》中的[什麼是 AWS Lambda？](https://docs.aws.amazon.com/lambda/latest/dg/) 
+ [教學課程：使用 AWS Lambda 函數格式化通知](iot-lambda-rule.md)