

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á.

# Procedimento de imagem dourada
<a name="procedure"></a>

As seções a seguir descrevem o procedimento para criar uma imagem dourada e gravá-la em cada dispositivo na linha de produção.

## Crie seu dispositivo dourado
<a name="create"></a>

**Etapa 1: instalar e provisionar o Greengrass.**

[Instale o tempo de execução do Greengrass edge](https://docs.aws.amazon.com/greengrass/v2/developerguide/install-greengrass-core-v2.html) em seu dispositivo dourado, como você normalmente faria, e provisione-o usando seu método de [provisionamento](https://docs.aws.amazon.com/iot/latest/developerguide/iot-provision.html) preferido.

**Etapa 2: implante seus componentes.**

Da nuvem, implante os componentes e a configuração do seu aplicativo em seu dispositivo dourado, como você normalmente faria.

## Leia a imagem dourada do seu dispositivo dourado
<a name="read"></a>

Agora você pode fotografar seu dispositivo dourado para criar uma imagem dourada.

**Etapa 1: Encerrar o Greengrass.**

Encerre o serviço Greengrass em seu dispositivo dourado. Por exemplo:

```
sudo systemctl stop greengrass.service
```

**Etapa 2: Crie um instantâneo da árvore de arquivos do Greengrass.**

Dependendo do seu método dourado preferido, tire um instantâneo completo ou parcial da árvore de arquivos do Greengrass e inclua-o em sua imagem dourada.

**Etapa 3: copie suas imagens do Docker.**

Se seus componentes usam imagens do Docker como artefatos, tire um instantâneo do registro de imagens do Docker e inclua-o na sua imagem dourada.

Como alternativa, você pode usar `docker save` para criar um arquivo de cada imagem do Docker e copiá-las do dispositivo dourado. Por exemplo:

```
user@machine:~/environment $ docker images
REPOSITORY                     TAG       IMAGE ID       CREATED      SIZE
homeassistant/home-assistant   2024.6    2b4c9de733f1   9 days ago   1.6GB
user@machine:~/environment $ docker save homeassistant/home-assistant | gzip > home-assistant.tar.gz
```

Em geral, essa abordagem é mais lenta do que adicionar o registro de imagens do Docker à sua imagem dourada.

## Escreva a imagem dourada em seus dispositivos de produção
<a name="write"></a>

Agora você precisa escrever a imagem dourada em cada um dos dispositivos de produção que passam pela linha de fabricação. As etapas a seguir normalmente seriam automatizadas usando scripts.

**Etapa 1: escreva a imagem.**

Grave sua imagem dourada no dispositivo de produção. Certifique-se de que ele inclua o instantâneo completo ou parcial da árvore de diretórios do Greengrass e do registro de imagens do Docker, conforme aplicável.

**Etapa 2: Carregar imagens do Docker.**

Se você optou por usar `docker save` para copiar artefatos de imagem do Docker do seu dispositivo dourado, use `docker load` para carregar essas imagens no seu dispositivo de produção. Por exemplo:

```
user@machine:~/environment $ docker load < home-assistant.tar.gz
user@machine:~/environment $ docker images
REPOSITORY                     TAG       IMAGE ID       CREATED      SIZE
homeassistant/home-assistant   2024.6    2b4c9de733f1   9 days ago   1.6GB
```

Em geral, essa abordagem é mais lenta do que adicionar o registro de imagens do Docker à sua imagem dourada.

**Etapa 3: adicione credenciais.**

Se seu dispositivo não usa o [provisionamento de frota](https://docs.aws.amazon.com/greengrass/v2/developerguide/fleet-provisioning.html), instale o certificado X.509 exclusivo e a chave privada para o dispositivo de produção, substituindo as credenciais douradas do dispositivo. O método exato de fazer isso depende se você usa um [módulo de segurança de hardware (HSM)](https://docs.aws.amazon.com/greengrass/v2/developerguide/hardware-security.html) e sua infraestrutura de chave pública (PKI) específica.

## Configure seus dispositivos de produção
<a name="configure"></a>

Depois de escrever a imagem dourada, você deve configurar cada dispositivo de produção. Essa configuração depende se você usa o método de snapshot completo ou parcial do Greengrass. As etapas devem ser automatizadas.

### Método completo de captura instantânea do Greengrass
<a name="full-snapshot"></a>

**Importante**  
Siga essas etapas somente se você estiver usando o método **completo** de snapshot do Greengrass.

**Etapa 1: Edite a configuração.**

Edite o arquivo `config/effectiveConfig.yaml`. Por exemplo:

```
sudo nano /greengrass/v2/config/effectiveConfig.yaml
```

**Etapa 2: defina o nome da coisa.**

As ações necessárias para definir o nome do novo dispositivo de produção dependem de você estar usando o provisionamento de frota. Faça as modificações corretas para seu caso de uso.

Se você não estiver usando o provisionamento de frota, poderá definir o nome do item do seu dispositivo de produção editando a `thingName` propriedade para substituir o nome dourado do dispositivo pelo nome do item do dispositivo de produção. Por exemplo:

```
system:
  certificateFilePath: "/greengrass/v2/thingCert.crt"
  privateKeyPath: "/greengrass/v2/privKey.key"
  rootCaPath: "/greengrass/v2/rootCA.pem"
  rootpath: "/greengrass/v2"
  thingName: "ProductionDeviceThingName1"
```

Se você estiver usando o provisionamento de frota, primeiro deverá apagar parte da configuração dourada do dispositivo para garantir que o [plug-in de provisionamento de frota](https://github.com/aws-greengrass/aws-greengrass-fleet-provisioning-by-claim) seja executado no dispositivo de produção. Você pode fazer isso substituindo o nome dourado do dispositivo na `thingName` propriedade por uma string vazia. Por exemplo:

```
system:
  certificateFilePath: "/greengrass/v2/thingCert.crt"
  privateKeyPath: "/greengrass/v2/privKey.key"
  rootCaPath: "/greengrass/v2/rootCA.pem"
  rootpath: "/greengrass/v2"
  thingName: ""
```

Além disso, você deve adicionar a configuração do plug-in de aprovisionamento de frota à `services` propriedade e passar o nome do dispositivo de produção como uma propriedade dentro da `templateParameters` propriedade. O exemplo a seguir pressupõe que o [modelo de aprovisionamento de frota](https://docs.aws.amazon.com/iot/latest/developerguide/provision-template.html#fleet-provision-template) tenha um parâmetro chamado e`ThingName`, portanto, haja uma `ThingName` propriedade dentro da configuração `templateParameters` do plug-in:

```
system:
  certificateFilePath: "/greengrass/v2/thingCert.crt"
  privateKeyPath: "/greengrass/v2/privKey.key"
  rootCaPath: "/greengrass/v2/rootCA.pem"
  rootpath: "/greengrass/v2"
  thingName: ""
services:
  aws.greengrass.FleetProvisioningByClaim:
    configuration:
      rootPath: "/greengrass/v2"
      awsRegion: "us-east-1"
      iotDataEndpoint: "<prefix>-ats.iot.us-east-1.amazonaws.com"
      iotCredentialEndpoint: "<prefix>.credentials.iot.us-east-1.amazonaws.com"
      iotRoleAlias: "GreengrassCoreTokenExchangeRoleAlias"
      provisioningTemplate: "GreengrassFleetProvisioningTemplate"
      claimCertificatePath: "/greengrass/v2/claim-certs/claim.pem.crt"
      claimCertificatePrivateKeyPath: "/greengrass/v2/claim-certs/claim.private.pem.key"
      rootCaPath: "/greengrass/v2/rootCA.pem"
      templateParameters:
        ThingName: "ProductionDeviceThingName1"
```

Seu caso de uso pode exigir alguns parâmetros de configuração do plug-in de provisionamento de frota diferentes dos mostrados aqui. Para obter mais informações, consulte [Configurar o plug-in de provisionamento de AWS IoT frota](https://docs.aws.amazon.com/greengrass/v2/developerguide/fleet-provisioning-configuration.html) na AWS IoT Greengrass documentação.

**Etapa 3: atualize os nomes das coisas interpoladas.**

Se você tiver algum componente que use a [variável de `iot:thingName` receita](https://docs.aws.amazon.com/greengrass/v2/developerguide/component-recipe-reference.html#recipe-variables) para [interpolar](https://docs.aws.amazon.com/greengrass/v2/developerguide/greengrass-nucleus-component.html#greengrass-nucleus-component-configuration-interpolate-component-configuration) o nome da coisa, provavelmente terá instruções de controle de acesso nas quais o nome dourado da coisa do dispositivo foi interpolado. Por exemplo, no caso do [componente comunitário Certificate Rotator](https://github.com/awslabs/aws-greengrass-labs-certificate-rotator):

```
services:
  aws.greengrass.labs.CertificateRotator:
    componentType: "GENERIC"
    configuration:
      accessControl:
        aws.greengrass.ipc.mqttproxy:
          aws.greengrass.labs.CertificateRotator:mqttproxy:1:
            operations:
            - "aws.greengrass#PublishToIoTCore"
            policyDescription: "Allows access to publish to relevant topics"
            resources:
            - "$aws/things/GoldenDeviceThingName/jobs/+/get"
            - "$aws/things/GoldenDeviceThingName/jobs/+/update"
            - "awslabs/things/GoldenDeviceThingName/certificate/create"
            - "awslabs/things/GoldenDeviceThingName/certificate/commit"
          aws.greengrass.labs.CertificateRotator:mqttproxy:2:
            operations:
            - "aws.greengrass#SubscribeToIoTCore"
            policyDescription: "Allows access to subscribe to relevant topics"
            resources:
            - "$aws/things/GoldenDeviceThingName/jobs/notify-next"
            - "$aws/things/GoldenDeviceThingName/jobs/+/get/accepted"
            - "$aws/things/GoldenDeviceThingName/jobs/+/get/rejected"
            - "$aws/things/GoldenDeviceThingName/jobs/+/update/accepted"
            - "$aws/things/GoldenDeviceThingName/jobs/+/update/rejected"
            - "awslabs/things/GoldenDeviceThingName/certificate/create/accepted"
            - "awslabs/things/GoldenDeviceThingName/certificate/create/rejected"
            - "awslabs/things/GoldenDeviceThingName/certificate/commit/accepted"
            - "awslabs/things/GoldenDeviceThingName/certificate/commit/rejected"
      keyAlgorithm: "RSA-2048"
      signingAlgorithm: "SHA256WITHRSA"
```

Em todos esses casos, você deve substituir todas as instâncias do nome dourado do dispositivo pelo nome do item do dispositivo de produção.

**Etapa 4: remova os segredos dourados do dispositivo.**

Examine se `effectiveConfig.yaml` há segredos criptografados que foram armazenados pelo seu dispositivo dourado. Eles serão armazenados na configuração do componente do gerenciador secreto. Por exemplo:

```
  aws.greengrass.SecretManager:
    componentType: "PLUGIN"
    configuration:
      cloudSecrets:
      - arn: "arn:aws:secretsmanager:us-east-1:111122223333:secret:greengrass-home-assistant-KIzJfZ"
    dependencies:
    - "aws.greengrass.Nucleus:SOFT"
    lifecycle: {}
    runtime:
      secretResponse: "{\"secrets\":[{\"arn\":\"arn:aws:secretsmanager:us-east-1:111122223333:secret:greengrass-home-assistant-KIzJfZ\"\
        ,\"name\":\"greengrass-home-assistant\",\"versionId\":\"8e481177-9250-4458-9f1f-3690d28e4ae9\"\
        ,\"encryptedSecretString\":\"AgV4Rpc9 ... MYeVALYQ==\"\
        ,\"versionStages\":[\"AWSCURRENT\"],\"createdDate\":1660648425915}]}"
    version: "2.1.8"
```

Você deve excluir esse segredo para garantir que seu dispositivo de produção não tente descriptografar um segredo que foi criptografado pelo dispositivo dourado. Exclua a `secretResponse` propriedade. Por exemplo:

```
  aws.greengrass.SecretManager:
    componentType: "PLUGIN"
    configuration:
      cloudSecrets:
      - arn: "arn:aws:secretsmanager:us-east-1:111122223333:secret:greengrass-home-assistant-KIzJfZ"
    dependencies:
    - "aws.greengrass.Nucleus:SOFT"
    lifecycle: {}
    runtime:
    version: "2.1.8"
```

**Etapa 5: aplique a configuração alterada.**

Aplique a configuração alterada para atualizar`config/config.tlog`. Por exemplo:

```
sudo java -Droot="/greengrass/v2" \
  -jar /greengrass/v2/alts/current/distro/lib/Greengrass.jar \
  --start false \
  --init-config /greengrass/v2/config/effectiveConfig.yaml
```

### Método de captura instantânea parcial do Greengrass
<a name="partial-snapshot"></a>

A configuração de seus dispositivos de produção é trivial se você usar o método de captura instantânea parcial do Greengrass. O procedimento é idêntico ao procedimento normal de configuração parcial do bootstrap quando você [instala o Greengrass](https://docs.aws.amazon.com/greengrass/v2/developerguide/install-greengrass-core-v2.html), exceto que a configuração inicial é passada para o runtime do Greengrass que já está instalado.

**Importante**  
Siga essas etapas somente se você estiver usando o método de snapshot **parcial** do Greengrass.

**Etapa 1: Crie a configuração.**

A configuração parcial necessária depende se você está usando o provisionamento de frota. Certifique-se de fazer as modificações corretas para seu caso de uso.

Se você não estiver usando o provisionamento de frota, poderá criar um arquivo de configuração parcial que não inclua nenhuma configuração para o plug-in de provisionamento de frota. Defina a `thingName` propriedade como o nome do item do seu dispositivo de produção. Por exemplo:

```
system:
  certificateFilePath: "/greengrass/v2/device.pem.crt"
  privateKeyPath: "/greengrass/v2/private.pem.key"
  rootCaPath: "/greengrass/v2/AmazonRootCA1.pem"
  rootpath: "/greengrass/v2"
  thingName: "ProductionDeviceThingName1"
services:
  aws.greengrass.Nucleus:
    componentType: "NUCLEUS"
    version: "2.12.6"
    configuration:
      awsRegion: "us-east-1"
      iotRoleAlias: "GreengrassCoreTokenExchangeRoleAlias"
      iotDataEndpoint: "<prefix>-ats.iot.us-east-1.amazonaws.com"
      iotCredEndpoint: "<prefix>.credentials.iot.us-east-1.amazonaws.com"
```

Se você estiver usando o provisionamento de frota, a configuração parcial deve incluir a configuração do plug-in de [provisionamento de frota](https://github.com/aws-greengrass/aws-greengrass-fleet-provisioning-by-claim). Essa configuração deve passar o nome do dispositivo de produção como uma propriedade dentro da `templateParameters` propriedade. O exemplo a seguir pressupõe que o [modelo de aprovisionamento de frota](https://docs.aws.amazon.com/iot/latest/developerguide/provision-template.html#fleet-provision-template) tenha um parâmetro chamado e`ThingName`, portanto, haja uma `ThingName` propriedade dentro da configuração `templateParameters` do plug-in:

```
services:
  aws.greengrass.Nucleus:
    version: "2.12.6"
  aws.greengrass.FleetProvisioningByClaim:
    configuration:
      rootPath: "/greengrass/v2"
      awsRegion: "us-east-1"
      iotDataEndpoint: "<prefix>-ats.iot.us-east-1.amazonaws.com"
      iotCredentialEndpoint: "<prefix>.credentials.iot.us-east-1.amazonaws.com"
      iotRoleAlias: "GreengrassCoreTokenExchangeRoleAlias"
      provisioningTemplate: "GreengrassFleetProvisioningTemplate"
      claimCertificatePath: "/greengrass/v2/claim-certs/claim.pem.crt"
      claimCertificatePrivateKeyPath: "/greengrass/v2/claim-certs/claim.private.pem.key"
      rootCaPath: "/greengrass/v2/AmazonRootCA1.pem"
      templateParameters:
        ThingName: "ProductionDeviceThingName1"
```

Seu caso de uso pode exigir parâmetros de configuração do plug-in de provisionamento de frota diferentes dos mostrados aqui. Para obter mais informações, consulte [Configurar o plug-in de provisionamento de AWS IoT frota](https://docs.aws.amazon.com/greengrass/v2/developerguide/fleet-provisioning-configuration.html) na AWS IoT Greengrass documentação.

**Etapa 2: aplique a configuração.**

Aplique a configuração para criar`config/config.tlog`. Por exemplo:

```
sudo java -Droot="/greengrass/v2" \
  -jar /greengrass/v2/alts/current/distro/lib/Greengrass.jar \
  --start false \
  --init-config config.yaml
```