Compartilhar via


Tutorial: Criar um relatório de capacidade diária

A API do Power Platform pode ser usada para extrair vários detalhes e metadados dos seus ambientes do Microsoft Power Platform com ou sem uma banco de dados do Microsoft Dataverse. A API é usada internamente por vários clientes disponíveis atualmente, como o PowerShell.

Neste tutorial, você aprenderá a:

  • Criar um fluxo de trabalho do Power Automate ou de Aplicativos Lógicos (Azure) ou um script do PowerShell que autentica com a API do Power Platform.
  • Chame o ponto de extremidade Listar Ambientes para recuperar os detalhes do seu ambiente do Microsoft Power Platform.
  • Faça a iteração pelo objeto de capacidade para recuperar o consumo real.
  • Salve os dados de consumo em uma tabela para exibição.

Como um exemplo desse cenário, um cliente está procurando controlar seu consumo de capacidade para que possa entender melhor a alocação de sua capacidade total de locatário por departamento. Isso ajuda o cliente a executar algumas funções internas de contabilidade de custos e estornos com base em quanto cada departamento está consumindo da capacidade total disponível. Este cliente está usando a Descrição do ambiente para chamar o departamento proprietário de cada ambiente.

Configuração de conector e variável

Use os seguintes detalhes para se conectar ao Power Platform programaticamente. Você pode escolher entre uma experiência Azure ou scripts PowerShell.

Criar o fluxo de trabalho e configurar as variáveis

Para começar, neste tutorial usamos um fluxo de trabalho Aplicativos Lógicos. Um fluxo do Power Automate também é aceitável, e qualquer outro mecanismo de orquestração que sua empresa prefira usar para automação. Todas as chamadas para recuperar os dados usam APIs RESTful, portanto, qualquer ferramenta que suporte REST funciona com este tutorial.

Visite o portal do Azure, crie um novo aplicativo lógico e dê um nome a ele:

Criar um aplicativo lógico.

Depois de terminar o provisionamento, edite o fluxo de trabalho usando o Designer e configure um gatilho de recorrência para ser executado diariamente:

Configure um Gatilho de recorrência.

Em seguida, precisamos inicializar cinco variáveis:

  • SPN-Id – Este é o ClientID do seu principal serviço. Ele é usado posteriormente para executar a autenticação em um contexto de entidade de serviço. Se estiver usando contexto de nome de usuário/senha, você poderá ignorar esta variável.
  • DBCapacity – Esta é uma variável Float para a capacidade consumida do banco de dados em megabytes.
  • FileCapacity – Esta é uma variável Float para a capacidade de arquivo consumida em megabytes.
  • LogCapacity – Esta é uma variável Float para a capacidade de log consumida em megabytes.
  • SimplifiedEnvironmentArray-Init – Esta é uma variável de matriz que preenchemos com algumas propriedades de ambiente. Isso simplifica significativamente a saída final do relatório da tabela HTML.

Crie cinco variáveis.

Em seguida, autenticamos com Microsoft Entra e recuperamos um token para chamar a Power Platform API. Se você não concluiu a configuração do Microsoft Entra, consulte Autenticação – herdada.

Neste tutorial, estamos usando um cofre de chaves para armazenar nosso valor secreto da entidade de serviço. Dessa forma, um administrador de TI pode disponibilizar esse valor com segurança para o seu fluxo de trabalho. Isso é então preenchido na chamada POST para Microsoft Entra recuperar o token.

Em seguida, analisamos a resposta do token do Microsoft Entra em um objeto tipado usando este esquema JSON na ação 'Analisar JSON':

{
    "properties": {
        "access_token": {
            "type": "string"
        },
        "expires_in": {
            "type": "integer"
        },
        "ext_expires_in": {
            "type": "integer"
        },
        "token_type": {
            "type": "string"
        }
    },
    "type": "object"
}

Analise o Microsoft Entra token resposta em um objeto digitado.

Buscar ambientes

Nesta seção, buscamos a lista de ambientes que você administra. Isso pode ser feito por meio da API e pelo PowerShell.

Chamar o ponto de extremidade Listar Ambientes

Agora é a hora de chamar a API do Power Platform. Use o endpoint List Environments para recuperar todos os nossos ambientes e seus metadados, especificamente com o parâmetro $expand para capacidade. Isso também usa o cabeçalho de Autorização com o Token do Portador que recebemos na seção anterior do Microsoft Entra ID. Se tiver usado o contexto de nome de usuário/senha, você também poderá inserir o token do portador nesta etapa.

Usar o ponto de extremidade Listar ambientes para recuperar todos os ambientes e seus metadados.

Em seguida, analisamos a API resposta em um objeto tipado usando este esquema JSON com a ação 'Analisar JSON': Power Platform

{
    "properties": {
        "value": {
            "items": {
                "properties": {
                    "description": {
                        "type": "string"
                    },
                    "id": {
                        "type": "string"
                    },
                    "location": {
                        "type": "string"
                    },
                    "name": {
                        "type": "string"
                    },
                    "properties": {
                        "properties": {
                            "addons": {
                                "type": "array"
                            },
                            "azureRegion": {
                                "type": "string"
                            },
                            "capacity": {
                                "items": {
                                    "properties": {
                                        "actualConsumption": {
                                            "type": "number"
                                        },
                                        "capacityType": {
                                            "type": "string"
                                        },
                                        "capacityUnit": {
                                            "type": "string"
                                        },
                                        "ratedConsumption": {
                                            "type": "number"
                                        },
                                        "updatedOn": {
                                            "type": "string"
                                        }
                                    },
                                    "required": [
                                        "capacityType",
                                        "actualConsumption",
                                        "ratedConsumption",
                                        "capacityUnit",
                                        "updatedOn"
                                    ],
                                    "type": "object"
                                },
                                "type": "array"
                            },
                            "clientUris": {
                                "properties": {
                                    "admin": {
                                        "type": "string"
                                    },
                                    "maker": {
                                        "type": "string"
                                    }
                                },
                                "type": "object"
                            },
                            "cluster": {
                                "properties": {
                                    "category": {
                                        "type": "string"
                                    },
                                    "number": {
                                        "type": "string"
                                    }
                                },
                                "type": "object"
                            },
                            "connectedGroups": {
                                "type": "array"
                            },
                            "createdBy": {
                                "properties": {
                                    "displayName": {
                                        "type": "string"
                                    },
                                    "id": {
                                        "type": "string"
                                    },
                                    "type": {
                                        "type": "string"
                                    }
                                },
                                "type": "object"
                            },
                            "createdTime": {
                                "type": "string"
                            },
                            "creationType": {
                                "type": "string"
                            },
                            "databaseType": {
                                "type": "string"
                            },
                            "displayName": {
                                "type": "string"
                            },
                            "environmentSku": {
                                "type": "string"
                            },
                            "isDefault": {
                                "type": "boolean"
                            },
                            "linkedEnvironmentMetadata": {
                                "properties": {
                                    "backgroundOperationsState": {
                                        "type": "string"
                                    },
                                    "baseLanguage": {
                                        "type": "number"
                                    },
                                    "createdTime": {
                                        "type": "string"
                                    },
                                    "domainName": {
                                        "type": "string"
                                    },
                                    "friendlyName": {
                                        "type": "string"
                                    },
                                    "instanceApiUrl": {
                                        "type": "string"
                                    },
                                    "instanceState": {
                                        "type": "string"
                                    },
                                    "instanceUrl": {
                                        "type": "string"
                                    },
                                    "platformSku": {
                                        "type": "string"
                                    },
                                    "resourceId": {
                                        "type": "string"
                                    },
                                    "scaleGroup": {
                                        "type": "string"
                                    },
                                    "uniqueName": {
                                        "type": "string"
                                    },
                                    "version": {
                                        "type": "string"
                                    }
                                },
                                "type": "object"
                            },
                            "protectionStatus": {
                                "properties": {
                                    "keyManagedBy": {
                                        "type": "string"
                                    }
                                },
                                "type": "object"
                            },
                            "provisioningState": {
                                "type": "string"
                            },
                            "retentionDetails": {
                                "properties": {
                                    "backupsAvailableFromDateTime": {
                                        "type": "string"
                                    },
                                    "retentionPeriod": {
                                        "type": "string"
                                    }
                                },
                                "type": "object"
                            },
                            "retentionPeriod": {
                                "type": "string"
                            },
                            "runtimeEndpoints": {
                                "properties": {
                                    "microsoft.ApiManagement": {
                                        "type": "string"
                                    },
                                    "microsoft.BusinessAppPlatform": {
                                        "type": "string"
                                    },
                                    "microsoft.CommonDataModel": {
                                        "type": "string"
                                    },
                                    "microsoft.Flow": {
                                        "type": "string"
                                    },
                                    "microsoft.PowerApps": {
                                        "type": "string"
                                    },
                                    "microsoft.PowerAppsAdvisor": {
                                        "type": "string"
                                    }
                                },
                                "type": "object"
                            },
                            "states": {
                                "properties": {
                                    "management": {
                                        "properties": {
                                            "id": {
                                                "type": "string"
                                            }
                                        },
                                        "type": "object"
                                    },
                                    "runtime": {
                                        "properties": {
                                            "id": {
                                                "type": "string"
                                            }
                                        },
                                        "type": "object"
                                    }
                                },
                                "type": "object"
                            },
                            "updateCadence": {
                                "properties": {
                                    "id": {
                                        "type": "string"
                                    }
                                },
                                "type": "object"
                            }
                        },
                        "type": "object"
                    },
                    "type": {
                        "type": "string"
                    }
                },
                "required": [
                    "id",
                    "type",
                    "location",
                    "name",
                    "properties"
                ],
                "type": "object"
            },
            "type": "array"
        }
    },
    "type": "object"
}

Analise a API resposta em um objeto digitado. Power Platform

Iterar por meio do objeto Capacidade

Esta é a parte mais complexa do tutorial. Here usamos um loop dentro de um loop para iterar cada ambiente no Ambiente de Lista resposta, e cada ambiente tem uma matriz de detalhes de capacidade que também iteramos. Isso nos permite capturar as informações necessárias para cada linha de ambiente em nossa tabela de relatório de capacidade.

For-each e análise

Vamos fazer isso passo a passo. Primeiro, usamos um controle For Each usando o 'valor' da saída Parse-List-Response:

Usar um controle For Each usando o valor da saída de Parse-List-Response.

Em seguida, analisamos esse ambiente único em um objeto tipado usando este esquema JSON:

{
    "properties": {
        "description": {
            "type": "string"
        },
        "id": {
            "type": "string"
        },
        "location": {
            "type": "string"
        },
        "name": {
            "type": "string"
        },
        "properties": {
            "properties": {
                "addons": {
                    "type": "array"
                },
                "azureRegion": {
                    "type": "string"
                },
                "capacity": {
                    "items": {
                        "properties": {
                            "actualConsumption": {
                                "type": "number"
                            },
                            "capacityType": {
                                "type": "string"
                            },
                            "capacityUnit": {
                                "type": "string"
                            },
                            "ratedConsumption": {
                                "type": "number"
                            },
                            "updatedOn": {
                                "type": "string"
                            }
                        },
                        "required": [
                            "capacityType",
                            "actualConsumption",
                            "ratedConsumption",
                            "capacityUnit",
                            "updatedOn"
                        ],
                        "type": "object"
                    },
                    "type": "array"
                },
                "clientUris": {
                    "properties": {
                        "admin": {
                            "type": "string"
                        },
                        "maker": {
                            "type": "string"
                        }
                    },
                    "type": "object"
                },
                "cluster": {
                    "properties": {
                        "number": {
                            "type": "string"
                        }
                    },
                    "type": "object"
                },
                "connectedGroups": {
                    "type": "array"
                },
                "createdBy": {
                    "properties": {
                        "displayName": {
                            "type": "string"
                        },
                        "id": {
                            "type": "string"
                        },
                        "type": {
                            "type": "string"
                        }
                    },
                    "type": "object"
                },
                "createdTime": {
                    "type": "string"
                },
                "creationType": {
                    "type": "string"
                },
                "databaseType": {
                    "type": "string"
                },
                "displayName": {
                    "type": "string"
                },
                "environmentSku": {
                    "type": "string"
                },
                "isDefault": {
                    "type": "boolean"
                },
                "linkedEnvironmentMetadata": {
                    "properties": {
                        "backgroundOperationsState": {
                            "type": "string"
                        },
                        "baseLanguage": {
                            "type": "integer"
                        },
                        "createdTime": {
                            "type": "string"
                        },
                        "domainName": {
                            "type": "string"
                        },
                        "friendlyName": {
                            "type": "string"
                        },
                        "instanceApiUrl": {
                            "type": "string"
                        },
                        "instanceState": {
                            "type": "string"
                        },
                        "instanceUrl": {
                            "type": "string"
                        },
                        "resourceId": {
                            "type": "string"
                        },
                        "scaleGroup": {
                            "type": "string"
                        },
                        "uniqueName": {
                            "type": "string"
                        },
                        "version": {
                            "type": "string"
                        }
                    },
                    "type": "object"
                },
                "protectionStatus": {
                    "properties": {
                        "keyManagedBy": {
                            "type": "string"
                        }
                    },
                    "type": "object"
                },
                "provisioningState": {
                    "type": "string"
                },
                "retentionDetails": {
                    "properties": {
                        "backupsAvailableFromDateTime": {
                            "type": "string"
                        },
                        "retentionPeriod": {
                            "type": "string"
                        }
                    },
                    "type": "object"
                },
                "retentionPeriod": {
                    "type": "string"
                },
                "runtimeEndpoints": {
                    "properties": {
                        "microsoft.ApiManagement": {
                            "type": "string"
                        },
                        "microsoft.BusinessAppPlatform": {
                            "type": "string"
                        },
                        "microsoft.CommonDataModel": {
                            "type": "string"
                        },
                        "microsoft.Flow": {
                            "type": "string"
                        },
                        "microsoft.PowerApps": {
                            "type": "string"
                        },
                        "microsoft.PowerAppsAdvisor": {
                            "type": "string"
                        }
                    },
                    "type": "object"
                },
                "states": {
                    "properties": {
                        "management": {
                            "properties": {
                                "id": {
                                    "type": "string"
                                }
                            },
                            "type": "object"
                        },
                        "runtime": {
                            "properties": {
                                "id": {
                                    "type": "string"
                                }
                            },
                            "type": "object"
                        }
                    },
                    "type": "object"
                },
                "updateCadence": {
                    "properties": {
                        "id": {
                            "type": "string"
                        }
                    },
                    "type": "object"
                }
            },
            "type": "object"
        },
        "type": {
            "type": "string"
        }
    },
    "type": "object"
}

Em seguida, usamos outro controle For Each usando a 'capacidade' da saída Parse-CurrentItem. Em seguida, analisamos isso em um objeto digitado usando este esquema JSON:

Controle For Each usando a capacidade da saída de Parse-CurrentItem.

Agora podemos usar o controle Switch na propriedade CapacityType da saída de Parse-Capacity. Este é o valor de 'Banco de Dados', 'Arquivo' ou 'Log'. Em cada caso de switch, capture a propriedade 'actualConsumption' relacionada na variável relacionada. No caso a seguir, você vê que estamos capturando a capacidade do banco de dados:

Use o controle de alternância na propriedade CapacityType da saída de Parse-Capacity.

Como a última etapa do loop "ambiente For each", agora podemos capturar os detalhes do ambiente para esta linha no relatório. Usando o controle Acrescentar à variável de matriz, use o seguinte esquema JSON:

{
    "properties": {
        "actualConsumption": {
            "type": "number"
        },
        "capacityType": {
            "type": "string"
        },
        "capacityUnit": {
            "type": "string"
        },
        "ratedConsumption": {
            "type": "number"
        },
        "updatedOn": {
            "type": "string"
        }
    },
    "type": "object"
}

Capture os detalhes do ambiente.

Criar tabela de relatório

Parabéns, agora você chegou à parte fácil! Agora que temos nossa matriz de capacidade de ambiente totalmente preenchida e simplificada, podemos exibi-la em formato tabular.

Usar o conector de tabela HTML

Passe valor para o conector Criar tabela HTML.

Executando o aplicativo lógico, agora podemos ver a saída do relatório da tabela HTML:

Saída do relatório da tabela HTML.

O relatório pode ser opcionalmente enviado por email para as partes interessadas neste exemplo para fins de contabilidade de custos ou os dados podem ser salvos em um banco de dados para análise posterior e tendências históricas.