Azure Developer CLI — często zadawane pytania

Ten artykuł zawiera odpowiedzi na często zadawane pytania dotyczące interfejsu wiersza polecenia dla deweloperów platformy Azure.

Ogólne

Jak mogę odinstalować interfejs wiersza polecenia dla deweloperów platformy Azure?

Istnieją różne opcje odinstalowywania azd w zależności od sposobu jego instalacji. Aby uzyskać szczegółowe informacje, odwiedź stronę instalacji.

Jaka jest różnica między interfejsem wiersza polecenia dewelopera platformy Azure i interfejsem wiersza polecenia platformy Azure?

Interfejs wiersza polecenia dla deweloperów platformy Azure () i interfejs wiersza polecenia platformy Azure (azdaz) to narzędzia wiersza polecenia, ale ułatwiają wykonywanie różnych zadań.

azd koncentruje się na przepływie pracy deweloperów wysokiego poziomu. Oprócz aprowizacji/zarządzania zasobami platformy Azure ułatwia azd łączenie składników chmury, lokalnej konfiguracji programowania i automatyzacji potoków w kompletnym rozwiązaniu.

Interfejs wiersza polecenia platformy Azure to narzędzie płaszczyzny sterowania do tworzenia i administrowania infrastrukturą platformy Azure, taką jak maszyny wirtualne, sieci wirtualne i magazyn. Interfejs wiersza polecenia platformy Azure jest przeznaczony dla konkretnych zadań administracyjnych.

Co to jest nazwa środowiska?

Narzędzie Azure Developer CLI używa nazwy środowiska do ustawiania zmiennej środowiskowej AZURE_ENV_NAME używanej w szablonach Azure Developer CLI. Zmienna środowiskowa AZURE_ENV_NAME jest używana również jako prefiks nazwy grupy zasobów platformy Azure. Ponieważ każde środowisko ma własny zestaw konfiguracji, narzędzie Azure Developer CLI przechowuje wszystkie pliki konfiguracji w katalogach środowiska.

├── .Azure                          [This directory displays after you run add init or azd up]
│   ├── <your environment1>         [A directory to store all environment-related configurations]
│   │   ├── .env                    [Contains environment variables]
│   │   └── main.parameters.json    [A parameter file]
│   └── <your environment2>         [A directory to store all environment-related configurations]
│   │   ├── .env                    [Contains environment variables]
│   │   └── main.parameters.json    [A parameter file]
│   └──config.json 

Czy mogę skonfigurować więcej niż jedno środowisko?

Tak. Możesz skonfigurować różne środowiska (na przykład deweloperskie, testowe, produkcyjne). Polecenie azd env służy do zarządzania tymi środowiskami.

Gdzie jest przechowywany plik konfiguracji środowiska (.env)?

Ścieżka pliku .env to <your-project-directory-name>\.azure\<your-environment-name>\.env.

Jak jest używany plik env?

W interfejsie wiersza polecenia azd dla deweloperów platformy Azure polecenia odnoszą się do pliku env konfiguracji środowiska. Polecenia, takie jak azd deploy również aktualizują plik env, na przykład db parametry połączenia i punkt końcowy usługi Azure Key Vault.

Mam uruchomić "azd up" w Codespaces. Czy mogę kontynuować pracę w lokalnym środowisku projektowym?

Tak. Możesz kontynuować prace programistyczne lokalnie.

  1. Uruchom polecenie azd init -t <template repo> , aby sklonować projekt szablonu na komputer lokalny.
  2. Aby ściągnąć istniejącą env utworzoną przy użyciu usługi Codespaces, uruchom polecenie azd env refresh. Upewnij się, że podajesz taką samą nazwę środowiska, subskrypcję i lokalizację, jak poprzednio.

Jak jest używany plik azure.yaml?

Plik azure.yaml opisuje aplikacje i typy zasobów platformy Azure, które są zawarte w szablonie.

Jakie jest zachowanie funkcji "secretOrRandomPassword"?

Funkcja secretOrRandomPassword pobiera wpis tajny z usługi Azure Key Vault, jeśli podano parametry nazwy magazynu kluczy i wpisu tajnego. Jeśli te parametry nie są podane lub nie można pobrać wpisu tajnego, funkcja zwróci zamiast tego losowo wygenerowane hasło.

W poniższym przykładzie pokazano typowy przypadek secretOrRandomPassword użycia pliku w pliku main.parameters.json . Zmienne ${AZURE_KEY_VAULT_NAME} i sqlAdminPassword są przekazywane jako parametry nazw usługi Key Vault i wpisu tajnego. Jeśli nie można pobrać wartości, zamiast tego zostanie wygenerowane losowe hasło.

  "sqlAdminPassword": {
    "value": "$(secretOrRandomPassword ${AZURE_KEY_VAULT_NAME} sqlAdminPassword)"
  } 

Dane wyjściowe polecenia powinny być również zapisywane w usłudze secretOrRandomPassword Key Vault przy użyciu funkcji Bicep na potrzeby przyszłych uruchomień. Pobieranie i ponowne korzystanie z tych samych wpisów tajnych we wszystkich wdrożeniach może zapobiec błędom lub niezamierzonym zachowaniom, które mogą wystąpić podczas wielokrotnego generowania nowych wartości. Aby utworzyć usługę Key Vault i zapisać wygenerowany wpis tajny, użyj poniższego kodu Bicep. Pełny przykładowy kod dla tych modułów można wyświetlić w repozytorium GitHub interfejsu wiersza polecenia dewelopera platformy Azure.

module keyVault './core/security/keyvault.bicep' = {
  name: 'keyvault'
  scope: resourceGroup
  params: {
    name: '${take(prefix, 17)}-vault'
    location: location
    tags: tags
    principalId: principalId
  }
}

module keyVaultSecrets './core/security/keyvault-secret.bicep' = {
  name: 'keyvault-secret-sqlAdminPassword'
  scope: resourceGroup
  params: {
    keyVaultName: keyVault.outputs.name
    name: 'sqlAdminPassword'
    secretValue: sqlAdminPassword
  }
}]

Ta konfiguracja Bicep umożliwia następujący przepływ pracy do zarządzania wpisami tajnymi:

  1. Jeśli określony wpis tajny istnieje, jest pobierany z usługi Key Vault przy użyciu secretOrRandomPassword funkcji .
  2. Jeśli wpis tajny nie istnieje, zostanie utworzony magazyn kluczy, a wygenerowany losowo wpis tajny jest przechowywany w nim.
  3. W przyszłych wdrożeniach metoda pobiera przechowywany wpis tajny, który istnieje teraz w usłudze secretOrRandomPassword Key Vault. Usługa Key Vault nie zostanie ponownie utworzona, jeśli już istnieje, ale ta sama wartość wpisu tajnego zostanie ponownie zapisana dla następnego uruchomienia.

Czy mogę używać bezpłatnej subskrypcji platformy Azure?

Tak, ale każda lokalizacja platformy Azure może mieć tylko jedno wdrożenie. Jeśli została już użyta wybrana lokalizacja platformy Azure, zostanie wyświetlony błąd wdrożenia:

InvalidTemplateDeployment: The template deployment '<env_name>' isn't valid according to the validation procedure. The tracking ID is '<tracking_id>'. See inner errors for details.

Aby rozwiązać ten problem, możesz wybrać inną lokalizację platformy Azure.

Moja aplikacja hostowana za pomocą usługi aplikacja systemu Azure wyzwala ostrzeżenie "Zwodnicze witryny z wyprzedzeniem", jak mogę ją naprawić?

Może się to zdarzyć z powodu naszej metody nazewnictwa zasobów.

Nasze szablony "Azure Dev" umożliwiają skonfigurowanie nazwy zasobu. W tym celu możesz dodać wpis do main.parameters.json folderu w folderze infra . Na przykład:

  "webServiceName": {
  "value": "my-unique-name"
}

Ten wpis tworzy nowy zasób o nazwie "my-unique-name" zamiast losowej wartości, takiej jak "app-web-aj84u2adj" przy następnej aprowizacji aplikacji. Możesz ręcznie usunąć starą grupę zasobów przy użyciu witryny Azure Portal lub uruchomić polecenie azd down , aby usunąć wszystkie poprzednie wdrożenia. Po usunięciu zasobów uruchom azd provision polecenie , aby utworzyć je ponownie przy użyciu nowej nazwy.

Ta nazwa musi być globalnie unikatowa. W przeciwnym razie podczas próby utworzenia zasobu wystąpi błąd azd provision usługi ARM.

Polecenie: azd provision

Jak polecenie wie, jakie zasoby należy aprowizować?

Polecenie używa szablonów Bicep, które znajdują się w obszarze <your-project-directory-name>/infra aprowizacji zasobów platformy Azure.

Gdzie mogę znaleźć, jakie zasoby są aprowidowane na platformie Azure?

Przejdź do https://portal.azure.com strony , a następnie wyszukaj grupę zasobów, czyli rg-<your-environment-name>.

Jak mogę znaleźć więcej informacji na temat błędów platformy Azure?

Używamy szablonów Bicep, które znajdują się w obszarze <your-project-directory-name>/infra, aby aprowizować zasoby platformy Azure. Jeśli występują problemy, w danych wyjściowych interfejsu wiersza polecenia dołączymy komunikat o błędzie.

Możesz również przejść do https://portal.azure.com strony , a następnie wyszukać grupę zasobów, czyli rg-<your-environment-name>. Jeśli którekolwiek z wdrożeń zakończy się niepowodzeniem, wybierz link błędu, aby uzyskać więcej informacji.

Aby uzyskać informacje o innych zasobach, zobacz Rozwiązywanie typowych błędów wdrażania platformy Azure — Azure Resource Manager.

Czy istnieje plik dziennika dla "aprowizacji azd"?

Wkrótce. Ta funkcja jest planowana na przyszłe wydanie.

Polecenie: azd deploy

Czy mogę ponownie uruchomić to polecenie?

Tak.

W jaki sposób usługa azd znajduje zasób platformy Azure w celu wdrożenia kodu?

Podczas wdrażania najpierw odnajduje wszystkie grupy zasobów tworzące aplikację, azd wyszukując grupy oznaczone tagiem azd-env-name i z wartością zgodną z nazwą środowiska. Następnie wylicza wszystkie zasoby w każdej z tych grup zasobów, szukając zasobu oznaczonego wartością zgodną z azd-service-name nazwą usługi z .azure.yaml

Zalecamy używanie tagów dla zasobów, ale można również użyć resourceName właściwości w pliku , azure.yaml aby podać jawną nazwę zasobu. W takim przypadku powyższa logika nie jest uruchamiana.

Polecenie: azd up

Czy mogę ponownie uruchomić polecenie "azd up"?

Tak. Używamy trybu wdrażania przyrostowego.

Jak mogę znaleźć plik dziennika "azd up"?

Wkrótce. Ta funkcja jest planowana na przyszłe wydanie.

Polecenie: potok azd

Co to jest jednostka usługi platformy Azure?

Jednostka usługi platformy Azure to tożsamość utworzona do użytku z aplikacjami, hostowanymi usługami i zautomatyzowanymi narzędziami w celu uzyskania dostępu do zasobów platformy Azure. Ten dostęp jest ograniczony przez role przypisane do jednostki usługi, która zapewnia kontrolę nad tym, do których zasobów można uzyskiwać dostęp i na jakim poziomie. Aby uzyskać więcej informacji na temat uwierzytelniania z platformy Azure do usługi GitHub, zobacz Connect GitHub and Azure | (Łączenie usług GitHub i Azure | Microsoft Docs.

Czy muszę utworzyć jednostkę usługi platformy Azure przed uruchomieniem polecenia "azd pipeline config"?

L.p. Polecenie azd pipeline config zajmuje się tworzeniem jednostki usługi platformy Azure i wykonywaniem niezbędnych kroków do przechowywania wpisów tajnych w repozytorium GitHub.

Jakie są wszystkie wpisy tajne przechowywane w usłudze GitHub?

Polecenie przechowuje cztery wpisy tajne w usłudze GitHub: AZURE_CREDENTIALS, AZURE_ENV_NAME, AZURE_LOCATION i AZURE_SUBSCRIPTION_ID. Możesz zastąpić wartość każdego wpisu tajnego, przechodząc do .https://github.com/<your-GH-account>/<your-repo>/secrets/actions

Co to jest openID Connect (OIDC) i czy jest obsługiwany?

Za pomocą protokołu OpenID Connect przepływy pracy mogą wymieniać krótkotrwałe tokeny bezpośrednio z poziomu platformy Azure.

Chociaż funkcja OIDC jest obsługiwana jako domyślna funkcja GitHub Actions i Azure Pipeline (ustawiona jako federacyjna), nie jest obsługiwana w przypadku usług Azure DevOps ani Terraform.

  • W przypadku usługi Azure DevOps jawne wywołanie --auth-type federated metodyki spowoduje wystąpienie błędu.
  • Dla programu Terraform:
    • Jeśli --auth-type nie zostanie zdefiniowana, powróci ona do clientcredentials elementu i spowoduje ostrzeżenie.
    • Jeśli --auth-type jawnie ustawiono wartość federated, spowoduje to błąd.

Jak mogę zresetować jednostkę usługi platformy Azure przechowywaną w funkcji GitHub Actions?

Przejdź do https://github.com/<your-GH-account>/<your-repo>settings/secrets/actionselementu , a następnie zaktualizuj AZURE_CREDENTIALS go, kopiując i wklejając cały obiekt JSON dla nowej jednostki usługi. Na przykład:

{
  "clientId": "<GUID>",
  "clientSecret": "<GUID>",
  "subscriptionId": "<GUID>",
  "tenantId": "<GUID>",
  (...)
}

Gdzie jest przechowywany plik funkcji GitHub Actions?

Ścieżka pliku funkcji GitHub Actions to <your-project-directory-name>\.github\workflows\azure-dev.yml.

Czy w pliku azure-dev.yml można wdrożyć tylko kod w kroku kompilacji?

Tak. Zamień run: azd up --no-prompt na run: azd deploy --no-prompt.

Gdzie mogę znaleźć dziennik zadania funkcji GitHub Actions, które zostało wyzwolone po uruchomieniu polecenia "azd pipeline config"?

Przejdź do https://github.com/<your-GH-account>/<your-repo>/actionsstrony , a następnie zapoznaj się z plikiem dziennika w przebiegu przepływu pracy.

Lokalne kompilowanie aplikacji kontenera

Dlaczego nie mogę uruchomić lokalnie aplikacji kontenera, którą kompiluję?

Podczas lokalnego kompilowania aplikacji kontenerów należy uruchomić azd auth login w kontenerze, aby aplikacja mogła pracować z AzureDeveloperCliCredentialprogramem . Alternatywnie można skonfigurować aplikację tak, aby używała jednostki usługi zamiast AzureDeveloperCliCredential.