

Aviso de fim do suporte: em 7 de outubro de 2026, AWS o suporte para o. AWS IoT Greengrass Version 1 Depois de 7 de outubro de 2026, você não poderá mais acessar os AWS IoT Greengrass V1 recursos. Para obter mais informações, visite [Migrar de AWS IoT Greengrass Version 1](https://docs.aws.amazon.com/greengrass/v2/developerguide/migrate-from-v1.html).

As traduções são geradas por tradução automática. Em caso de conflito entre o conteúdo da tradução e da versão original em inglês, a versão em inglês prevalecerá.

# Acesso aos recursos locais com funções e conectores do Lambda
<a name="access-local-resources"></a>

Esse recurso está disponível para o AWS IoT Greengrass Core v1.3 e versões posteriores.

Com AWS IoT Greengrass, você pode criar AWS Lambda funções, configurar [conectores](connectors.md) na nuvem e implantá-los nos dispositivos principais para execução local. Nos núcleos do Greengrass que executam Linux, essas funções do Lambda localmente implantadas e conectores podem acessar recursos locais fisicamente presentes no dispositivo de núcleo do Greengrass. Por exemplo, para se comunicar com dispositivos conectados por meio do Modbus ou CANbus, você pode ativar sua função Lambda para acessar a porta serial no dispositivo principal. Para configurar o acesso seguro a recursos locais, você deve garantir a segurança do seu hardware físico e do SO do seu dispositivo de núcleo do Greengrass.

Para começar a acessar recursos locais, consulte os seguintes tutoriais:
+ [Como configurar o acesso a recursos locais usando a interface de linha de AWS comando](lra-cli.md)
+ [Como configurar o acesso a recursos locais usando o Console de gerenciamento da AWS](lra-console.md)

## Tipos de recursos compatíveis
<a name="lra-resource-types"></a>

Você pode acessar dois tipos de recursos locais: recursos de volume e recursos do dispositivo.

**Recursos do volume**  
Arquivos ou diretórios no sistema de arquivos raiz (exceto em `/sys`, `/dev` ou `/var`). Isso inclui:  
+ Pastas ou arquivos usados para ler ou gravar informações em funções do Lambda do Greengrass (por exemplo, `/usr/lib/python2.x/site-packages/local`).
+ As pastas ou os arquivos no sistema de arquivos /proc do host (por exemplo, `/proc/net` ou `/proc/stat`). Compatível com a versão 1.6 ou posterior. Para requisitos adicionais, consulte [Recursos de volume no diretório /proc](#lra-proc-resources).
Para configurar os diretórios `/var`, `/var/run` e `/var/lib` como recursos de volume, primeiro monte o diretório em uma pasta diferente e, em seguida, configure a pasta como um volume de recursos.
Ao configurar recursos de volume, você especifica um caminho de *origem* e um caminho de *destino*. O caminho de origem é o caminho absoluto do recurso no host. O caminho de destino é o caminho absoluto do recurso no ambiente do namespace do Lambda. Este é o contêiner que é executado em uma função ou conector do Lambda do Greengrass. Qualquer alteração no caminho de destino é refletida no caminho de origem do sistema de arquivos do host.  
Os arquivos no caminho de destino são visíveis somente no namespace do Lambda. Não é possível vê-los em um namespace Linux regular.

**Recursos de dispositivo**  
Arquivos em `/dev`. Somente dispositivos de caracteres ou dispositivos de bloco em `/dev` são permitidos para recursos do dispositivo. Isso inclui:  
+ Portas seriais usadas para se comunicar com dispositivos conectados por meio de portas seriais (por exemplo, `/dev/ttyS0` e `/dev/ttyS1`).
+ USB usado para conectar periféricos USB (por exemplo, `/dev/ttyUSB0` ou `/dev/bus/usb`).
+ GPIOs usado para sensores e atuadores por meio de GPIO (por exemplo,`/dev/gpiomem`).
+ GPUs usado para acelerar o aprendizado de máquina usando a tecnologia on-board GPUs (por exemplo,`/dev/nvidia0`).
+ Câmeras usadas para capturar imagens e vídeos (por exemplo, `/dev/video0`).
`/dev/shm` é uma exceção. Ele pode ser configurado apenas como um recursos de volume. Devem ser concedidas permissões de `rw` aos recursos em `/dev/shm`.

AWS IoT Greengrass também oferece suporte a tipos de recursos usados para realizar inferências de aprendizado de máquina. Para obter mais informações, consulte [Executar a inferência de machine learning](ml-inference.md).

## Requisitos
<a name="lra-requirements"></a>

Os requisitos a seguir se aplicam ao configurar o acesso seguro a recursos locais:
+ Você deve estar usando o AWS IoT Greengrass Core Software v1.3 ou posterior. Para criar recursos para o diretório /proc do host, você deve estar usando a v1.6 ou posterior.
+ O recurso local (inclusive todos os drivers e bibliotecas obrigatórios) deve estar instalado corretamente no dispositivo básico do Greengrass e disponível de maneira consistente durante o uso.
+ A operação desejada do recurso, bem como o acesso ao recurso, não devem exigir privilégios de raiz. 
+ Estão disponíveis somente permissões de `read` ou `read and write`. As funções do Lambda não podem realizar operações privilegiadas nos recursos.
+ Você precisa fornecer o caminho completo do recurso local no sistema operacional do dispositivo de núcleo do Greengrass.
+ Um nome de recurso ou ID tem um comprimento máximo de 128 caracteres e deve usar o padrão `[a-zA-Z0-9:_-]+`.

### Recursos de volume no diretório /proc
<a name="lra-proc-resources"></a>

As considerações a seguir se aplicam a recursos de volume no diretório /proc do host.
+ Você deve estar usando o AWS IoT Greengrass Core Software v1.6 ou posterior.
+ Você pode permitir acesso somente leitura para funções do Lambda, mas não acesso de leitura/gravação. Esse nível de acesso é gerenciado por AWS IoT Greengrass.
+ Também pode ser necessário conceder ao grupo do sistema operacional permissões para permitir acesso de leitura no sistema de arquivos. Por exemplo, suponhamos que o diretório de origem ou o arquivo tenha uma permissão de 660 arquivos, o que significa que somente o proprietário ou o usuário no grupo tem acesso de leitura (e gravação). Nesse caso, você deve adicionar as permissões do proprietário do grupo do sistema operacional ao recurso. Para obter mais informações, consulte [Permissão de acesso a arquivo do proprietário do grupo](#lra-group-owner).
+ Como o ambiente de host e o namespace do Lambda contêm um diretório /proc, certifique-se de evitar conflitos de nomenclatura ao especificar o caminho de destino. Por exemplo, caso /proc seja o caminho de origem, você pode especificar /host-proc como o caminho de destino (ou qualquer nome de caminho que não seja "*/proc*").

## Permissão de acesso a arquivo do proprietário do grupo
<a name="lra-group-owner"></a>

Um processo de função AWS IoT Greengrass Lambda normalmente é executado como e. `ggc_user` `ggc_group` No entanto, você pode conceder permissões de acesso adicionais a arquivos ao processo da função do Lambda na definição de recurso local, da seguinte maneira:
+ Para adicionar as permissões do grupo Linux que possui o recurso, use o parâmetro `GroupOwnerSetting#AutoAddGroupOwner` ou a opção do console **Automatically add file system permissions of the system group that owns the resource (Adicionar automaticamente permissões de sistema de arquivos do grupo de sistemas que possui o recurso)**.
+ Para adicionar as permissões de um grupo de Linux diferente, use o parâmetro `GroupOwnerSetting#GroupOwner` ou a opção de console **Specify another system group to add file system permissions (Especificar outro grupo de sistemas ao qual adicionar permissões de sistema de arquivos)**. O valor `GroupOwner` será ignorado se `GroupOwnerSetting#AutoAddGroupOwner` for verdadeiro.

Um processo de função AWS IoT Greengrass Lambda herda todas as permissões do sistema de arquivos de `ggc_user``ggc_group`, e do grupo Linux (se adicionado). Para a função do Lambda acessar um recurso, o processo de função do Lambda deve ter as permissões obrigatórias para o recurso. Você pode usar o comando `chmod(1)` para alterar a permissão do recurso, se necessário.

## Consulte também
<a name="lra-seealso"></a>
+ [Cotas de serviço](https://docs.aws.amazon.com/general/latest/gr/greengrass.html#limits_greengrass) para recursos no *Referência geral da Amazon Web Services*

# Como configurar o acesso a recursos locais usando a interface de linha de AWS comando
<a name="lra-cli"></a>

Esse recurso está disponível para o AWS IoT Greengrass Core v1.3 e versões posteriores.

Para usar um recurso local, você deve adicionar uma definição de recurso à definição do grupo implantada no dispositivo básico do Greengrass. A definição do grupo também deve conter uma função do Lambda na qual você concede permissões de acesso dos recursos locais às suas funções do Lambda. Para obter mais informações, inclusive sobre os requisitos e restrições, consulte [Acesso aos recursos locais com funções e conectores do Lambda](access-local-resources.md).

Este tutorial descreve o processo para criar um recurso local e configurar o acesso a ele usando a AWS Command Line Interface (CLI). Para seguir as etapas do tutorial, você já deve ter criado um grupo do Greengrass, conforme descrito em [Começando com AWS IoT Greengrass](gg-gs.md). 

Para obter um tutorial que usa o Console de gerenciamento da AWS, consulte[Como configurar o acesso a recursos locais usando o Console de gerenciamento da AWS](lra-console.md).

## Criar recursos locais
<a name="lra-cli-create-resources"></a>

Primeiro, você usa o comando `[CreateResourceDefinition](https://docs.aws.amazon.com/greengrass/v1/apireference/createresourcedefinition-post.html)` para criar uma definição do recurso que especifica os recursos a serem acessados. Neste exemplo, criamos dois recursos, `TestDirectory` e `TestCamera`:

```
aws greengrass create-resource-definition  --cli-input-json '{
    "Name": "MyLocalVolumeResource",
    "InitialVersion": {
        "Resources": [
            {
                "Id": "data-volume",
                "Name": "TestDirectory",
                "ResourceDataContainer": {
                    "LocalVolumeResourceData": {
                        "SourcePath": "/src/LRAtest",
                        "DestinationPath": "/dest/LRAtest",
                        "GroupOwnerSetting": {
                            "AutoAddGroupOwner": true,
                            "GroupOwner": ""
                        }
                    }
                }
            },
            {
                "Id": "data-device",
                "Name": "TestCamera",
                "ResourceDataContainer": {
                    "LocalDeviceResourceData": {
                        "SourcePath": "/dev/video0",
                        "GroupOwnerSetting": {
                            "AutoAddGroupOwner": true,
                            "GroupOwner": ""
                        }
                    }
                }
            }
        ]
    }
}'
```

**Recursos**: Uma lista de objetos `Resource` no grupo do Greengrass. Um grupo do Greengrass pode ter até 50 recursos.

**Resource\$1Id**: O identificador exclusivo do recurso. O ID é usado para consultar um recurso na configuração da função do Lambda. Comprimento máximo 128 caracteres. Padrão: [a-zA-Z0-9:\$1-]\$1. 

**Resource\$1Name**: O nome do recurso. O nome do recurso é exibido no console do Greengrass. Comprimento máximo 128 caracteres. Padrão: [a-zA-Z0-9:\$1-]\$1.

**LocalDeviceResourceData\$1 SourcePath**: O caminho absoluto local do recurso do dispositivo. O caminho de origem de um recurso do dispositivo só pode se referir a um dispositivo de caracteres ou dispositivo de blocos em `/dev`.

**LocalVolumeResourceData\$1 SourcePath**: O caminho absoluto local do recurso de volume no dispositivo principal do Greengrass. Esse local está fora do [contêiner](lambda-group-config.md#lambda-function-containerization) em que a função é executada. O caminho de origem de um tipo de recurso de volume não pode começar com `/sys`.

**LocalVolumeResourceData\$1 DestinationPath**: O caminho absoluto do recurso de volume dentro do ambiente Lambda. Esse local está dentro do contêiner em que a função é executada.

**GroupOwnerSetting**: permite que você configure privilégios de grupo adicionais para o processo Lambda. Esse campo é opcional. Para obter mais informações, consulte [Permissão de acesso a arquivo do proprietário do grupo](access-local-resources.md#lra-group-owner).

**GroupOwnerSetting\$1 AutoAddGroupOwner**: Se verdadeiro, o Greengrass adiciona automaticamente o proprietário do grupo de sistema operacional Linux especificado do recurso aos privilégios do processo Lambda. Assim, o processo do Lambda tem as permissões de acesso do arquivo do grupo do Linux adicionado.

**GroupOwnerSetting\$1 GroupOwner**: especifica o nome do grupo do sistema operacional Linux cujos privilégios são adicionados ao processo Lambda. Esse campo é opcional. 

O ARN da versão de definição do recurso é retornado por `[CreateResourceDefinition](https://docs.aws.amazon.com/greengrass/v1/apireference/createresourcedefinition-post.html)`. O ARN deve ser usado durante a atualização de uma definição de grupo.

```
{
    "LatestVersionArn": "arn:aws:greengrass:us-west-2:012345678901:/greengrass/definition/resources/ab14d0b5-116e-4951-a322-9cde24a30373/versions/a4d9b882-d025-4760-9cfe-9d4fada5390d",
    "Name": "MyLocalVolumeResource",
    "LastUpdatedTimestamp": "2017-11-15T01:18:42.153Z",
    "LatestVersion": "a4d9b882-d025-4760-9cfe-9d4fada5390d",
    "CreationTimestamp": "2017-11-15T01:18:42.153Z",
    "Id": "ab14d0b5-116e-4951-a322-9cde24a30373",
    "Arn": "arn:aws:greengrass:us-west-2:123456789012:/greengrass/definition/resources/ab14d0b5-116e-4951-a322-9cde24a30373"
}
```

## Criar a função do Greengrass
<a name="lra-cli-create-function"></a>

Depois que os recursos forem criados, use o comando `[CreateFunctionDefinition](https://docs.aws.amazon.com/greengrass/v1/apireference/createfunctiondefinition-post.html)` para criar a função do Greengrass e conceder o acesso de função ao recurso: 

```
aws greengrass create-function-definition --cli-input-json '{
    "Name": "MyFunctionDefinition",
    "InitialVersion": {
        "Functions": [
            {
                "Id": "greengrassLraTest",
                "FunctionArn": "arn:aws:lambda:us-west-2:012345678901:function:lraTest:1",
                "FunctionConfiguration": {
                    "Pinned": false,
                    "MemorySize": 16384,
                    "Timeout": 30,
                    "Environment": {
                        "ResourceAccessPolicies": [
                            {
                                "ResourceId": "data-volume",
                                "Permission": "rw"
                            },
                            {
                                "ResourceId": "data-device",
                                "Permission": "ro"
                            }                            
                        ],
                        "AccessSysfs": true
                    }
                }
            }
        ]
    }
}'
```

**ResourceAccessPolicies**: contém o `resourceId` e `permission` que concede à função Lambda acesso ao recurso. Uma função do Lambda pode acessar no máximo 20 recursos.

**ResourceAccessPolicy\$1Permission**: especifica quais permissões a função Lambda tem no recurso. As opções disponíveis são `rw` (leitura/gravação) ou `ro` (somente leitura). 

**AccessSysfs**: Se verdadeiro, o processo Lambda pode ter acesso de leitura à `/sys` pasta no dispositivo principal do Greengrass. Isso é usado nos casos em que a função do Lambda do Greengrass precisa ler informações do dispositivo de `/sys`.

Novamente, `[CreateFunctionDefinition](https://docs.aws.amazon.com/greengrass/v1/apireference/createfunctiondefinition-post.html)` retorna um ARN da versão de definição da função. O ARN deve ser usado na versão de definição do grupo. 

```
{
    "LatestVersionArn": "arn:aws:greengrass:us-west-2:012345678901:/greengrass/definition/functions/3c9b1685-634f-4592-8dfd-7ae1183c28ad/versions/37f0d50e-ef50-4faf-b125-ade8ed12336e", 
    "Name": "MyFunctionDefinition", 
    "LastUpdatedTimestamp": "2017-11-22T02:28:02.325Z", 
    "LatestVersion": "37f0d50e-ef50-4faf-b125-ade8ed12336e", 
    "CreationTimestamp": "2017-11-22T02:28:02.325Z", 
    "Id": "3c9b1685-634f-4592-8dfd-7ae1183c28ad", 
    "Arn": "arn:aws:greengrass:us-west-2:123456789012:/greengrass/definition/functions/3c9b1685-634f-4592-8dfd-7ae1183c28ad"
}
```

## Adicionar a função do Lambda ao grupo
<a name="lra-cli-add-function"></a>

Por fim, use `[CreateGroupVersion](https://docs.aws.amazon.com/greengrass/v1/apireference/creategroupversion-post.html)` para adicionar a função ao grupo. Por exemplo:

```
aws greengrass create-group-version --group-id "b36a3aeb-3243-47ff-9fa4-7e8d98cd3cf5" \
--resource-definition-version-arn "arn:aws:greengrass:us-west-2:123456789012:/greengrass/definition/resources/db6bf40b-29d3-4c4e-9574-21ab7d74316c/versions/31d0010f-e19a-4c4c-8098-68b79906fb87" \
--core-definition-version-arn "arn:aws:greengrass:us-west-2:123456789012:/greengrass/definition/cores/adbf3475-f6f3-48e1-84d6-502f02729067/versions/297c419a-9deb-46dd-8ccc-341fc670138b" \
--function-definition-version-arn "arn:aws:greengrass:us-west-2:123456789012:/greengrass/definition/functions/d1123830-da38-4c4c-a4b7-e92eec7b6d3e/versions/a2e90400-caae-4ffd-b23a-db1892a33c78" \
--subscription-definition-version-arn "arn:aws:greengrass:us-west-2:123456789012:/greengrass/definition/subscriptions/7a8ef3d8-1de3-426c-9554-5b55a32fbcb6/versions/470c858c-7eb3-4abd-9d48-230236bfbf6a"
```

**nota**  
Para saber como obter o ID do grupo a ser usado com esses comandos, consulte [Obter o ID do grupo](deployments.md#api-get-group-id).

É apresentada uma nova versão do grupo:

```
{
    "Arn": "arn:aws:greengrass:us-west-2:012345678901:/greengrass/groups/b36a3aeb-3243-47ff-9fa4-7e8d98cd3cf5/versions/291917fb-ec54-4895-823e-27b52da25481",
    "Version": "291917fb-ec54-4895-823e-27b52da25481",
    "CreationTimestamp": "2017-11-22T01:47:22.487Z",
    "Id": "b36a3aeb-3243-47ff-9fa4-7e8d98cd3cf5"
}
```

Seu grupo do Greengrass agora contém a função *LRatest Lambda* que tem acesso a dois recursos: e. TestDirectory TestCamera

Esta função do Lambda de exemplo, `lraTest.py`, escrito em Python, grava no recurso do volume local: 

```
# Demonstrates a simple use case of local resource access.
# This Lambda function writes a file test to a volume mounted inside
# the Lambda environment under destLRAtest. Then it reads the file and 
# publishes the content to the AWS IoT LRAtest topic. 

import sys
import greengrasssdk
import platform
import os
import logging

# Setup logging to stdout
logger = logging.getLogger(__name__)
logging.basicConfig(stream=sys.stdout, level=logging.DEBUG)

# Create a Greengrass Core SDK client.
client = greengrasssdk.client('iot-data')
volumePath = '/dest/LRAtest'

def function_handler(event, context):
    try:
        client.publish(topic='LRA/test', payload='Sent from AWS IoT Greengrass Core.')
        volumeInfo = os.stat(volumePath)
        client.publish(topic='LRA/test', payload=str(volumeInfo))
        with open(volumePath + '/test', 'a') as output:
            output.write('Successfully write to a file.')
        with open(volumePath + '/test', 'r') as myfile:
            data = myfile.read()
        client.publish(topic='LRA/test', payload=data)
    except Exception as e:
        logger.error('Failed to publish message: ' + repr(e))
    return
```

Esses comandos são fornecidos pela API do Greengrass para criar e gerenciar definições de recursos e versões de definição de recursos:
+ [CreateResourceDefinition](https://docs.aws.amazon.com/greengrass/v1/apireference/createresourcedefinition-post.html)
+ [CreateResourceDefinitionVersion](https://docs.aws.amazon.com/greengrass/v1/apireference/createresourcedefinitionversion-post.html)
+  [DeleteResourceDefinition](https://docs.aws.amazon.com/greengrass/v1/apireference/deleteresourcedefinition-delete.html)
+  [GetResourceDefinition](https://docs.aws.amazon.com/greengrass/v1/apireference/getresourcedefinition-get.html)
+  [GetResourceDefinitionVersion](https://docs.aws.amazon.com/greengrass/v1/apireference/getresourcedefinitionversion-get.html)
+  [ListResourceDefinitions](https://docs.aws.amazon.com/greengrass/v1/apireference/listresourcedefinitions-get.html)
+  [ListResourceDefinitionVersions](https://docs.aws.amazon.com/greengrass/v1/apireference/listresourcedefinitionversions-get.html)
+  [UpdateResourceDefinition](https://docs.aws.amazon.com/greengrass/v1/apireference/updateresourcedefinition-put.html)

## Solução de problemas
<a name="lra-faqs"></a>
+ **P:** Por que minha implantação do grupo do Greengrass falha com um erro semelhante a:

  ```
  group config is invalid: 
      ggc_user or [ggc_group root tty] don't have ro permission on the file: /dev/tty0
  ```

  **R:** Esse erro indica que o processo do Lambda não tem permissão para acessar o recurso especificado. A solução é alterar a permissão do arquivo do recurso, de maneira que o Lambda possa acessá-lo. (Consulte [Permissão de acesso a arquivo do proprietário do grupo](access-local-resources.md#lra-group-owner) para obter detalhes).
+ **P**: quando eu configuro `/var/run` como um recurso do volume, por que a função do Lambda não consegue inicializar, gerando uma mensagem de erro no runtime.log? 

  ```
  [ERROR]-container_process.go:39,Runtime execution error: unable to start lambda container. 
  container_linux.go:259: starting container process caused "process_linux.go:345: 
  container init caused \"rootfs_linux.go:62: mounting \\\"/var/run\\\" to rootfs \\\"/greengrass/ggc/packages/1.3.0/rootfs_sys\\\" at \\\"/greengrass/ggc/packages/1.3.0/rootfs_sys/run\\\" 
  caused \\\"invalid argument\\\"\""
  ```

  **R:** o AWS IoT Greengrass núcleo atualmente não suporta a configuração de `/var``/var/run`, e `/var/lib` como recursos de volume. Uma solução é primeiro montar `/var`, `/var/run` ou `/var/lib` em uma pasta diferente e, em seguida, configurar a pasta como recurso de volume.
+ **P:** quando eu configuro `/dev/shm` como um recurso do volume com permissão somente leitura, por que a função do Lambda não consegue iniciar, gerando um erro no runtime.log? 

  ```
  [ERROR]-container_process.go:39,Runtime execution error: unable to start lambda container. 
  container_linux.go:259: starting container process caused "process_linux.go:345: 
  container init caused \"rootfs_linux.go:62: mounting \\\"/dev/shm\\\" to rootfs \\\"/greengrass/ggc/packages/1.3.0/rootfs_sys\\\" at \\\"/greengrass/ggc/packages/1.3.0/rootfs_sys/dev/shm\\\" 
  caused \\\"operation not permitted\\\"\""”
  ```

  **R:** `/dev/shm` só pode ser configurado como leitura/gravação. Altere a permissão do recurso para `rw` a fim de resolver o problema.

# Como configurar o acesso a recursos locais usando o Console de gerenciamento da AWS
<a name="lra-console"></a>

Esse recurso está disponível para AWS IoT Greengrass Core v1.3 e versões posteriores.

Você pode configurar funções do Lambda para acessar com segurança recursos locais no dispositivo de núcleo do Greengrass do host. Os *recursos locais* referem-se a barramentos e periféricos que estão fisicamente presentes no host, ou a volumes do sistema de arquivos no SO do host. Para obter mais informações, inclusive sobre os requisitos e restrições, consulte [Acesso aos recursos locais com funções e conectores do Lambda](access-local-resources.md).

Este tutorial descreve como usar o Console de gerenciamento da AWS para configurar o acesso aos recursos locais que estão presentes em um dispositivo AWS IoT Greengrass principal. Ele contém as seguintes etapas de nível elevado:

1. [Crie um pacote de implantação para a função do Lambda](#lra-console-create-package)

1. [Crie e publique uma função do Lambda](#lra-console-create-function)

1. [Adicionar a função do Lambda ao grupo](#lra-console-add-function)

1. [Adicionar um recurso local ao grupo](#lra-console-create-resource)

1. [Adicionar assinaturas ao grupo](#lra-console-add-subscription)

1. [Implantar o grupo](#lra-console-deploy-group)

Para obter um tutorial que usa o AWS Command Line Interface, consulte[Como configurar o acesso a recursos locais usando a interface de linha de AWS comando](lra-cli.md).

## Pré-requisitos
<a name="lra-console-prerequisites"></a>

Para concluir este tutorial, é necessário:
+ Um grupo do Greengrass e um núcleo do Greengrass (versão 1.3 ou posterior). Para criar um grupo ou núcleo do Greengrass, consulte [Começando com AWS IoT Greengrass](gg-gs.md).
+ Os seguintes diretórios no dispositivo de núcleo do Greengrass:
  + /src/ LRAtest
  + /dest/ LRAtest

  O grupo de proprietários desses diretórios deve ter acesso de leitura e gravação aos diretórios. Você pode usar o seguinte comando para conceder acesso:

  ```
  sudo chmod 0775 /src/LRAtest
  ```

## Etapa 1: crie um pacote de implantação para a função do Lambda
<a name="lra-console-create-package"></a>

Nesta etapa, você cria um pacote de implantação da função do Lambda, que é um arquivo ZIP que contém o código e as dependências da função. Você também baixa o SDK AWS IoT Greengrass principal para incluir no pacote como uma dependência.

1. No seu computador, copie o script do Python a seguir em um arquivo local chamado `lraTest.py`. Essa é a lógica do aplicativo para a função do Lambda.

   ```
   # Demonstrates a simple use case of local resource access.
   # This Lambda function writes a file test to a volume mounted inside
   # the Lambda environment under destLRAtest. Then it reads the file and 
   # publishes the content to the AWS IoT LRAtest topic. 
   
   import sys
   import greengrasssdk
   import platform
   import os
   import logging
   
   # Setup logging to stdout
   logger = logging.getLogger(__name__)
   logging.basicConfig(stream=sys.stdout, level=logging.DEBUG)
   
   # Create a Greengrass Core SDK client.
   client = greengrasssdk.client('iot-data')
   volumePath = '/dest/LRAtest'
   
   def function_handler(event, context):
       try:
           client.publish(topic='LRA/test', payload='Sent from AWS IoT Greengrass Core.')
           volumeInfo = os.stat(volumePath)
           client.publish(topic='LRA/test', payload=str(volumeInfo))
           with open(volumePath + '/test', 'a') as output:
               output.write('Successfully write to a file.')
           with open(volumePath + '/test', 'r') as myfile:
               data = myfile.read()
           client.publish(topic='LRA/test', payload=data)
       except Exception as e:
           logger.error('Failed to publish message: ' + repr(e))
       return
   ```

1. <a name="download-ggc-sdk"></a> Na página de downloads do [AWS IoT Greengrass Core SDK](what-is-gg.md#gg-core-sdk-download), baixe o AWS IoT Greengrass Core SDK para Python em seu computador.

1. <a name="unzip-ggc-sdk"></a>Descompacte o pacote obtido por download para obter o SDK. O SDK é a pasta do `greengrasssdk`.

1. Comprima os seguintes itens em um arquivo chamado `lraTestLambda.zip`.
   + `lraTest.py`. Lógica do aplicativo.
   + `greengrasssdk`. Biblioteca necessária para todas as funções do Lambda do Python.

   O arquivo `lraTestLambda.zip` é o pacote de implantação de sua função do Lambda. Agora, você está pronto para criar uma função do Lambda e fazer upload do pacote de implantação.

## Etapa 2: crie e publique uma função do Lambda
<a name="lra-console-create-function"></a>

Nesta etapa, você usa o AWS Lambda console para criar uma função Lambda e configurá-la para usar seu pacote de implantação. Depois, publique uma versão da função e crie um alias.

Primeiro, crie a função do Lambda.

1. No Console de gerenciamento da AWS, escolha **Serviços** e abra o AWS Lambda console.

1. Selecione **Funções**.

1. <a name="lambda-console-create-function"></a>Selecione **Criar função** e, em seguida, selecione **Criar do zero**.

1. Na seção **Basic information (Informações básicas)**, especifique os seguintes valores.

   1. Em **Function name** (Nome da função), insira **TestLRA**.

   1. Em **Runtime (Tempo de execução)**, selecione **Python 3.7**.

   1. Em **Permissões**, mantenha a configuração padrão. Isso cria uma função de execução que concede permissões básicas do Lambda. Essa função não é usada por AWS IoT Greengrass.

1. Selecione **Criar função**.  
![\[A página Create function (Criar função) com a função Create (Criar) em destaque.\]](http://docs.aws.amazon.com/pt_br/greengrass/v1/developerguide/images/lra-console/create-function.png)

    

1. Carregue o seu pacote de implantação da função do Lambda e registre o manipulador.

   1. <a name="lambda-console-upload"></a>Na guia **Código**, em **Fonte do código**, selecione **Fazer upload a partir de**. No menu suspenso, selecione o **arquivo .zip**.  
![\[O menu suspenso Fazer upload a partir de com o arquivo .zip destacado.\]](http://docs.aws.amazon.com/pt_br/greengrass/v1/developerguide/images/lra-console/upload-deployment-package.png)

   1. Selecione **Upload** e, em seguida, selecione seu pacote de implantação `lraTestLambda.zip`. Selecione **Salvar**.

   1. <a name="lambda-console-runtime-settings-para"></a>Na guia **Código** da função, em **Configurações de runtime**, selecione **Editar** e insira os valores a seguir.
      + Em **Runtime (Tempo de execução)**, selecione **Python 3.7**.
      + Em **Handler (Manipulador)**, insira **lraTest.function\$1handler**.

   1. <a name="lambda-console-save-config"></a>Escolha **Salvar**.
**nota**  
O botão **Testar** no AWS Lambda console não funciona com essa função. O SDK AWS IoT Greengrass principal não contém módulos necessários para executar suas funções do Greengrass Lambda de forma independente no console. AWS Lambda Esses módulos (por exemplo, `greengrass_common`) são fornecidos às funções depois de serem implantados no núcleo do Greengrass.

   Em seguida, publique a primeira versão da sua função do Lambda. Em seguida, crie um [alias para a versão](https://docs.aws.amazon.com/lambda/latest/dg/versioning-aliases.html).

   Os grupos do Greengrass podem fazer referência a uma função do Lambda por alias (recomendado) ou por versão. Usar um alias facilita o gerenciamento de atualizações de código porque você não precisa alterar a tabela de assinaturas nem a definição do grupo ao atualizar a função do código. Em vez disso, você pode simplesmente apontar o alias para a nova versão da função.

1. No menu **Ações**, selecione **Publish new version (Publicar nova versão)**.

1. Em **Version description (Descrição da versão)**, insira **First version** e, em seguida, selecione **Publish (Publicar)**.

1. Na página de configuração **TestLRA: 1**, em **Ações**, selecione **Criar alias**.

1. Na página **Criar novo alias**, em **Nome**, insira **test**. Em **Version (Versão)**, insira **1**. 
**nota**  
AWS IoT Greengrass **não oferece suporte a aliases Lambda para as versões \$1LATEST.**

1. Selecione **Create** (Criar).  
![\[A página Create a new alias (Criar outro alias) com a função Create (Criar) em destaque.\]](http://docs.aws.amazon.com/pt_br/greengrass/v1/developerguide/images/lra-console/create-alias.png)

   Agora, você pode adicionar a função do Lambda ao seu grupo do Greengrass.

## Etapa 3: adicionar a função do Lambda ao grupo do Greengrass
<a name="lra-console-add-function"></a>

Nesta etapa, você adiciona a função para o grupo e configura seu ciclo de vida da função.

Primeiro, adicione a função do Lambda ao seu grupo do Greengrass.

1. No painel de navegação do AWS IoT console, em **Gerenciar**, expanda dispositivos **Greengrass** e **escolha Grupos (**V1).

1. Selecione o grupo Greengrass onde você deseja adicionar a função do Lambda.

1. Na página de configuração do grupo, selecione a guia **Funções do Lambda**.

1. Na seção **Minhas funções do Lambda**, selecione **Adicionar**.

1. Na página **Adicionar função do Lambda**, selecione **Função do Lambda**. Selecione **TestLRA**.

1. Selecione a **Versão da função do Lambda**.

1. Na seção **Configuração da função do Lambda**, selecione **Usuário e grupo do sistema** e **Conteinerização da função do Lambda**.

    

   Em seguida, configure o ciclo de vida da função do Lambda.

1. Para **Tempo limite**, selecione **30 seconds (30 segundos)**.
**Importante**  
As funções do Lambda que usam recursos locais (conforme descrito neste procedimento) deve ser executadas em um contêiner do Greengrass. Caso contrário, haverá falha na implantação se você tentar implantar a função. Para obter mais informações, consulte [Conteinerização](lambda-group-config.md#lambda-function-containerization).

1. Na parte inferior da página, selecione **Adicionar função do Lambda**.

## Etapa 4: Adicionar um recurso local a um grupo do Greengrass
<a name="lra-console-create-resource"></a>

Nesta etapa, você adicionará um recurso de volume local a um grupo do Greengrass e concederá à função acesso de leitura e gravação ao recurso. Um recurso local tem um escopo no nível do grupo. É possível conceder permissões para qualquer função do Lambda no grupo para acessar o recurso.

1. Na página de configuração do grupo, selecione a guia **Recursos**.

1. Na seção **Recursos locais**, selecione **Adicionar**.

1. Na página **Adicionar um recurso local**, use os seguintes valores.

   1. Em **Resource Name (Nome do recurso)**, insira **testDirectory**.

   1. Em **Tipo de recurso**, selecione **Volume**.

   1. Em **Caminho do dispositivo local**, insira **/src/LRAtest**. Este caminho deve existir no sistema operacional do host. 

      O caminho local do dispositivo é o caminho local absoluto do recurso no sistema de arquivos do dispositivo de núcleo. Esse local está fora do [contêiner](lambda-group-config.md#lambda-function-containerization) em que a função é executada. O caminho não pode começar com `/sys`.

   1. Para **Destination path (Caminho de destino)**, insira **/dest/LRAtest**. Este caminho deve existir no sistema operacional do host.

      O caminho de destino é o caminho absoluto do recurso no namespace do Lambda. Esse local está dentro do contêiner em que a função é executada.

   1. Em **Permissão de acesso ao arquivo do proprietário do grupo do sistema**, selecione **Adicionar automaticamente as permissões de grupo do sistema operacional do grupo Linux que tem o recurso**.

      A opção **Proprietário do grupo do sistema e permissão de acesso a arquivos** permite conceder permissões adicionais de acesso a arquivos para o processo do Lambda. Para obter mais informações, consulte [Permissão de acesso a arquivo do proprietário do grupo](access-local-resources.md#lra-group-owner).

1. Selecione **Adicionar recurso**. A página **Resources** exibe o novo recurso testDirectory.

## Etapa 5: Adicionar assinaturas ao grupo do Greengrass
<a name="lra-console-add-subscription"></a>

Nesta etapa, você adiciona duas assinaturas ao grupo do Greengrass. Essas assinaturas permitem a comunicação bidirecional entre a função Lambda e. AWS IoT

Primeiro, crie uma assinatura para a função do Lambda para enviar mensagens para a AWS IoT.

1. Na página de configuração do grupo, selecione a guia **Assinaturas** .

1. Selecione **Adicionar**.

1. Na página **Criar uma assinatura**, configure a origem e o destino, da seguinte forma:

   1. Em **Tipo de origem**, selecione **Função do Lambda** e, em seguida, **TestLRA**.

   1. Para **Tipo de destino**, selecione **Serviço** e, em seguida, **IoT Cloud**.

   1. Em **Filtro de tópicos**, insira **LRA/test** e, em seguida selecione **Criar assinatura**.

1. A página **Subscriptions** exibe a nova assinatura.

    

   Em seguida, configure uma assinatura que invoque a função de. AWS IoT

1. Na página **Subscriptions**, selecione **Add Subscription**.

1. Na página **Select your source and target**, configure a origem e o destino, da seguinte forma:

   1. Em **Tipo de origem**, selecione **Função do Lambda** e, em seguida, selecione **IoT Cloud**.

   1. Em **Tipo de destino**, selecione **Serviço** e, em seguida, selecione **TestLRA**.

   1. Selecione **Next** (Próximo).

1. Na página **Filter your data with a topic (Filtrar os dados com um tópico)**, em **Topic filter (Filtro de tópico)**, insira **invoke/LRAFunction** e, em seguida, selecione **Next (Próximo)**.

1. Selecione **Finish**. A página **Subscriptions** exibe ambas as assinaturas.

## Etapa 6: implantar o AWS IoT Greengrass grupo
<a name="lra-console-deploy-group"></a>

Nesta etapa, você implanta a versão atual da definição do grupo.

1. Certifique-se de que o AWS IoT Greengrass núcleo esteja funcionando. Execute os seguintes comandos no seu terminal do Raspberry Pi, conforme necessário.

   1. Para verificar se o daemon está em execução:

      ```
      ps aux | grep -E 'greengrass.*daemon'
      ```

      Se a saída contém uma entrada `root` para `/greengrass/ggc/packages/1.11.6/bin/daemon`, o daemon está em execução.
**nota**  
A versão no caminho depende da versão do software AWS IoT Greengrass principal que está instalada em seu dispositivo principal.

   1. Para iniciar o daemon:

      ```
      cd /greengrass/ggc/core/
      sudo ./greengrassd start
      ```

1. Na página de configuração do grupo, selecione **Implantar**.
**nota**  
A implantação falhará se você executar sua função do Lambda sem a conteinerização e tentar acessar recursos locais anexados.

1. Se solicitado, na guia **Função do Lambda**, em **Funções do Lambda do sistema**, selecione **Detector de IP** e, em seguida, **Editar** e, em seguida, **Detectar automaticamente**.

   Isso permite que os dispositivos adquiram automaticamente as informações de conectividade para o núcleo, como endereço IP, DNS e o número da porta. A detecção automática é recomendada, mas AWS IoT Greengrass também oferece suporte a endpoints especificados manualmente. Você só é solicitado pelo método de descoberta na primeira vez em que o grupo for implantado.
**nota**  
Se solicitado, conceda permissão para criar a função de [serviço do Greengrass](service-role.md) e associá-la à Conta da AWS sua na atual. Região da AWS Essa função permite AWS IoT Greengrass acessar seus recursos em AWS serviços.

   A página **Deployments** mostra a data e hora, ID de versão e status da implantação. Quando concluído, o status da implantação é **Concluído**.

   Para obter ajuda sobre a solução de problemas, consulte [Solução de problemas AWS IoT Greengrass](gg-troubleshooting.md).

## Testar o acesso aos recursos locais
<a name="lra-console-test-results"></a>

Agora você pode verificar se o acesso aos recursos locais foi configurado corretamente. Para testar, inscreva-se no tópico `LRA/test` e publique no tópico `invoke/LRAFunction`. O teste será bem-sucedido se a função Lambda enviar a carga esperada para o. AWS IoT

1. No menu de navegação do AWS IoT console, em **Teste**, escolha **Cliente de teste MQTT**.

1. Em **Inscrever-se em um tópico**, em **Filtro de tópicos**, insira**LRA/test**.

1. Em **Informações adicionais**, para **Exibição da carga útil do MQTT**, selecione **Exibir cargas úteis como strings**.

1. Selecione **Subscribe**. Sua função Lambda publica no tópico. LRA/test   
![\[A página Subscriptions (Inscrições) com Subscribe to topic (Inscrever-se no tópico) em destaque.\]](http://docs.aws.amazon.com/pt_br/greengrass/v1/developerguide/images/lra-console/test-subscribe.png)

1. Em **Publicar em um tópico**, em **Nome do tópico**, insira **invoke/LRAFunction** e, em seguida selecione **Publicar** para invocar sua função do Lambda. O teste é bem-sucedido se a página exibir as três cargas úteis de mensagens da função.  
![\[A página de assinaturas com o invoke/LRAFunction tópico e o tópico Publicar no tópico destacados e os resultados do teste com dados da mensagem.\]](http://docs.aws.amazon.com/pt_br/greengrass/v1/developerguide/images/lra-console/test-publish.png)

O arquivo de teste criado pela função do Lambda está no diretório `/src/LRAtest` no dispositivo de núcleo do Greengrass. Embora a função do Lambda grave em um arquivo no diretório de `/dest/LRAtest`, esse arquivo está visível apenas no namespace do Lamda. Você não pode vê-lo em um namespace Linux regular. Qualquer alteração no caminho de destino é refletida no caminho de origem no sistema de arquivos.

Para obter ajuda sobre a solução de problemas, consulte [Solução de problemas AWS IoT Greengrass](gg-troubleshooting.md).