

# Especificação do formato da lente no AWS WA Tool
<a name="lenses-format-specification"></a>

As lentes são definidas usando um formato JSON específico. Ao começar a criar uma lente personalizada, você tem a opção de baixar um arquivo JSON de modelo. Você pode usar esse arquivo como base para suas lentes personalizadas, pois ele define a estrutura básica dos pilares, das perguntas, das melhores práticas e do plano de melhoria.

## Seção de lentes
<a name="lenses-format-lens"></a>

Esta seção define os atributos da própria lente personalizada. Este é o nome e a descrição.
+ `schemaVersion`: A versão do esquema de lente personalizada a ser usada. Definido pelo modelo, não altere.
+ `name`: Nome da lente. O nome pode ter até 128 caracteres. 
+ `description`: Descrição em texto da lente. Esse texto é exibido ao selecionar lentes para adicionar durante a criação da workload ou ao selecionar uma lente para aplicar a uma workload existente posteriormente. A descrição pode ter até 2.048 caracteres.

```
    "schemaVersion": "2021-11-01",
    "name": "Company Policy ABC",
    "description": "This lens provides a set of specific questions to assess compliance with company policy ABC-2021 as revised on 2021/09/01.",
```

## Seção de pilares
<a name="lenses-format-pillars"></a>

Esta seção define os pilares associados à lente personalizada. Você pode mapear suas perguntas para os pilares do AWS Well-Architected Framework, definir seus próprios pilares ou ambos.

Você pode definir até dez pilares em uma lente personalizada.
+ `id`: ID do pilar. O ID pode ter entre 3 e 128 caracteres e conter somente caracteres alfanuméricos e sublinhado (“\$1”). Os IDs usados em um pilar devem ser exclusivos. 

  Ao mapear suas perguntas para os pilares da Estrutura, use os seguintes IDs:
  + `operationalExcellence`
  + `security`
  + `reliability`
  + `performance`
  + `costOptimization`
  + `sustainability`
+ `name`: Nome do pilar. O nome pode ter até 128 caracteres.

```
     "pillars": [
        {
            "id": "company_Privacy",
            "name": "Privacy Excellence",
            .
            .
            .
        },
        {
            "id": "company_Security",
            "name": "Security",
            .
            .
            .
        }
     ]
```

## Seção de perguntas
<a name="lenses-format-questions"></a>

Esta seção define as questões associadas a um pilar.

Você pode definir até 20 perguntas em um pilar em uma lente personalizada.
+ `id`: ID da pergunta. A ID pode ter de 3 a 128 caracteres e conter apenas caracteres alfanuméricos e de sublinhado ("\$1"). As IDs usadas em uma pergunta devem ser exclusivas. 
+ `title`: Título da pergunta. O título pode ter até 128 caracteres.
+ `description`: Descreve a pergunta com mais detalhes. A descrição pode ter até 2.048 caracteres.
+ `helpfulResource displayText`: opcional. Texto que fornece informações úteis sobre a pergunta. O texto pode ter até 2.048 caracteres. Deve ser especificado se `helpfulResource url` for especificado. 
+ `helpfulResource url`: opcional. Um recurso de URL que explica a pergunta com mais detalhes. O URL deve começar com `http://` ou `https://`.

**nota**  
 Ao sincronizar uma workload da lente personalizada com o Jira, as perguntas exibem o “ID” e o “título” da pergunta.   
 O formato usado nos tíquetes do Jira é `[ QuestionID ] QuestionTitle`. 

```
"questions": [
    {
        "id": "privacy01",
        "title": "How do you ensure HR conversations are private?",
        "description": "Career and benefits discussions should occur on secure channels only and be audited regularly for compliance.",
        "helpfulResource": {
            "displayText": "This is helpful text for the first question",
            "url": "https://example.com/poptquest01_help.html"
        },
        .
        .
        .
    },
    {
        "id": "privacy02",
        "title": "Is your team following the company privacy policy?",
        "description": "Our company requires customers to opt-in to data use and does not disclose customer data to third parties either individually or in aggregate.",
        "helpfulResource": {
            "displayText": "This is helpful text for the second question",
            "url": "https://example.com/poptquest02_help.html"
        },
        .
        .
        .
    }
]
```

## Seção de opções
<a name="lenses-format-choices"></a>

Esta seção define as opções associadas a uma pergunta.

Você pode definir até 15 opções para uma pergunta em uma lente personalizada.
+ `id`: ID da escolha. O ID pode ter entre 3 e 128 caracteres e conter somente caracteres alfanuméricos e sublinhado (“\$1”). Um ID exclusivo deve ser especificado para cada opção em uma pergunta. A adição de uma opção com um sufixo `_no` funcionará como uma opção `None of these` para a pergunta. 
+ `title`: Título da escolha. O título pode ter até 128 caracteres.
+ `helpfulResource displayText`: opcional. Texto que fornece informações úteis sobre uma opção. O texto pode ter até 2.048 caracteres. Deverá ser incluído se `helpfulResource url` for especificado.
+ `helpfulResource url`: opcional. Um recurso de URL que explica a escolha em mais detalhes. O URL deve começar com `http://` ou `https://`.
+ `improvementPlan displayText`: Texto que descreve como uma escolha pode ser aprimorada. O texto pode ter até 2.048 caracteres. É necessário um `improvementPlan` para cada opção, exceto para uma opção `None of these`.
+ `improvementPlan url`: opcional. Um recurso de URL que pode ajudar na melhoria. O URL deve começar com `http://` ou `https://`.
+ `additionalResources type`: opcional. O tipo de recursos adicionais. O valor pode ser `HELPFUL_RESOURCE` ou `IMPROVEMENT_PLAN`.
+ `additionalResources content`: opcional. Especifica os valores `displayText` e `url` para o recurso adicional. Até cinco recursos úteis adicionais e até cinco itens adicionais do plano de melhoria podem ser especificados para uma escolha.
  + `displayText`: opcional. Texto que descreve o recurso útil ou o plano de melhoria. O texto pode ter até 2.048 caracteres. Deverá ser incluído se `url` for especificado.
  + `url`: opcional. Um recurso de URL para o recurso útil ou plano de melhoria. O URL deve começar com `http://` ou `https://`.

**nota**  
 Ao sincronizar uma workload da lente personalizada com o Jira, as opções exibem o “ID” da pergunta e da escolha, bem como o “título” da escolha.   
 O formato usado é `[ QuestionID | ChoiceID ] ChoiceTitle`. 

```
    "choices": [
         {
             "id": "choice_1",
             "title": "Option 1",
             "helpfulResource": {
                 "displayText": "This is helpful text for the first choice",
                 "url": "https://example.com/popt01_help.html"
             },
             "improvementPlan": {
                 "displayText": "This is text that will be shown for improvement of this choice.",
                 "url": "https://example.com/popt01_iplan.html"
             }
         },
         {
             "id": "choice_2",
             "title": "Option 2",
             "helpfulResource": {
                 "displayText": "This is helpful text for the second choice",
                 "url": "https://example.com/hr_manual_CORP_1.pdf"
             },
             "improvementPlan": {
                 "displayText": "This is text that will be shown for improvement of this choice.",
                 "url": "https://example.com/popt02_iplan_01.html"
             },
             "additionalResources":[
                {
                  "type": "HELPFUL_RESOURCE",
                  "content": [
                    {
                      "displayText": "This is the second set of helpful text for this choice.",
                      "url": "https://example.com/hr_manual_country.html"
                    },
                    {
                      "displayText": "This is the third set of helpful text for this choice.",
                      "url": "https://example.com/hr_manual_city.html"
                    }
                  ]
                },
                {
                  "type": "IMPROVEMENT_PLAN",
                  "content": [
                    {
                      "displayText": "This is additional text that will be shown for improvement of this choice.",
                      "url": "https://example.com/popt02_iplan_02.html"
                    },
                    {
                      "displayText": "This is the third piece of improvement plan text.",
                      "url": "https://example.com/popt02_iplan_03.html"
                    }
                    {
                      "displayText": "This is the fourth piece of improvement plan text.",
                      "url": "https://example.com/popt02_iplan_04.html"
                    }
                  ]
                }
              ]
         },
         {
              "id": "option_no",
              "title": "None of these",
              "helpfulResource": {
                "displayText": "Choose this if your workload does not follow these best practices.",
                "url": "https://example.com/popt02_iplan_none.html"
              }
              
            }
```

## Seção de regras de risco
<a name="lenses-format-risk-rules"></a>

Esta seção define como as opções selecionadas determinam o nível de risco.

Você pode definir no máximo três regras de risco por pergunta, uma para cada nível de risco.
+ `condition`: Uma expressão booleana das opções mapeada para um nível de risco para a pergunta, ou `default`.

  Deve haver uma regra de risco `default` para cada pergunta.
+ `risk`: Indica o risco associado à condição. Os valores válidos são `HIGH_RISK`, `MEDIUM_RISK` e `NO_RISK`.

A ordem de suas regras de risco é significativa. O primeiro `condition` que é avaliado como `true` define o risco para a pergunta. Um padrão comum para a implementação de regras de risco é começar com as regras menos arriscadas (e, normalmente, mais granulares) e ir descendo até as regras mais arriscadas (e menos específicas).

Por exemplo:

```
 "riskRules": [
       {
         "condition": "choice_1 && choice_2 && choice_3",
         "risk": "NO_RISK"   
       },
       {
         "condition": "((choice_1 || choice_2) && choice_3) || (!choice_1 && choice_3)",
         "risk": "MEDIUM_RISK"
       },
       {
         "condition": "default",
         "risk": "HIGH_RISK"
       }
 ]
```

Se a pergunta tiver três opções (`choice_1`, `choice_2`, e `choice_3`), essas regras de risco resultarão no seguinte comportamento:
+ Se todas as três opções forem selecionadas, não há risco.
+ Se um `choice_1` ou `choice_2` for selecionado **e** `choice_3` for selecionado, o risco é médio.
+ Se `choice_1` **não** for selecionado, mas `choice_3` for selecionado, também haverá um risco médio.
+ Se nenhuma dessas condições anteriores for verdadeira, o risco é alto.