Interfejs wiersza polecenia dla deweloperów platformy Azure — 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 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?

interfejsu wiersza polecenia platformy Azure (azd) i interfejsu wiersza polecenia platformy Azure (az) 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 azd ułatwia łą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?

Interfejs wiersza polecenia dla deweloperów platformy Azure używa nazwy środowiska do ustawiania zmiennej środowiskowej AZURE_ENV_NAME używanej przez szablony interfejsu wiersza polecenia dla deweloperów platformy Azure. AZURE_ENV_NAME służy również do prefiksu nazwy grupy zasobów platformy Azure. Ponieważ każde środowisko ma własny zestaw konfiguracji, interfejs wiersza polecenia dewelopera platformy Azure przechowuje wszystkie pliki konfiguracji w katalogach środowisk.

├── .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). Do zarządzania tymi środowiskami można użyć azd env.

Gdzie jest przechowywany plik konfiguracji środowiska (env)?

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

Jak jest używany plik env?

W interfejsie wiersza polecenia dewelopera platformy Azure polecenia azd odnoszą się do pliku env konfiguracji środowiska. Polecenia, takie jak azd deploy również zaktualizować plik env, na przykład parametry połączenia bazy danych 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 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 zwraca losowo wygenerowane hasło do użycia.

W poniższym przykładzie pokazano typowy przypadek użycia secretOrRandomPassword 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 secretOrRandomPassword powinny być również zapisywane w usłudze 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 funkcji secretOrRandomPassword.
  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 secretOrRandomPassword pobiera przechowywany wpis tajny, który istnieje teraz w usłudze 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 w usłudze Azure App Service wyzwala ostrzeżenie "Zwodnicza witryna z wyprzedzeniem". Jak mogę rozwiązać ten problem?

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 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ć azd down, aby usunąć wszystkie poprzednie wdrożenia. Po usunięciu zasobów uruchom azd provision, 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 usługi ARM podczas azd provision.

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, a następnie wyszukaj grupę zasobów, która jest rg-<your-environment-name>.

Jak znaleźć więcej informacji o błędach platformy Azure?

Do aprowizowania zasobów platformy Azure używamy szablonów Bicep, które znajdują się w obszarze <your-project-directory-name>/infra. 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, a następnie wyszukać grupę zasobów, która jest 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 azd najpierw odnajduje wszystkie grupy zasobów tworzące aplikację, wyszukując grupy oznaczone azd-env-name i wartością zgodną z nazwą środowiska. Następnie wylicza wszystkie zasoby w każdej z tych grup zasobów, wyszukując zasób oznaczony azd-service-name wartością zgodną z nazwą usługi z azure.yaml.

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

Jak wdrożyć określone usługi w moim projekcie podczas pomijania innych?

Podczas wdrażania projektu można wybrać wdrożenie określonych usług, określając nazwę usługi w poleceniu (tj. azd deploy api) lub przechodząc do podfolderu zawierającego tylko usługi, które chcesz wdrożyć. W tym przypadku wszystkie inne usługi będą wyświetlane jako - Skipped.

Jeśli nie chcesz pominąć żadnych usług, pamiętaj, aby uruchomić polecenie z folderu głównego lub dodać flagę --all do polecenia.

Polecenie: azd up

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

Tak. Używamy trybu wdrażania przyrostowego .

Jak znaleźć plik dziennika dla pliku "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 | Microsoft Docs.

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

Nie. 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?

Dzięki OpenID Connect przepływy pracy mogą wymieniać krótkotrwałe tokeny bezpośrednio z platformy Azure.

Chociaż funkcja OIDC jest obsługiwana jako domyślna dla funkcji 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 jako federated spowoduje wystąpienie błędu.
  • Dla programu Terraform:
    • Jeśli --auth-type nie jest zdefiniowana, nastąpi powrót do clientcredentials i spowoduje ostrzeżenie.
    • Jeśli --auth-type jest jawnie ustawiona na federated, spowoduje to wystąpienie błędu.

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

Przejdź do https://github.com/<your-GH-account>/<your-repo>settings/secrets/actions, a następnie zaktualizuj AZURE_CREDENTIALS, 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 jest <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. Zastąp run: azd up --no-promptrun: 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>/actions, 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 działała z AzureDeveloperCliCredential. Alternatywnie możesz skonfigurować aplikację tak, aby używała jednostki usługi zamiast AzureDeveloperCliCredential.