1. Wprowadzenie
Cele
Za pomocą Terraform możesz konfigurować projekt Firebase i nim zarządzać, w tym programowo konfigurować infrastrukturę i usługi Firebase.
W tym samouczku najpierw opisujemy, jak utworzyć plik konfiguracyjny Terraform, aby utworzyć nowy projekt Firebase, a następnie jak skonfigurować aplikacje i usługi Firebase, których chcesz używać w tym projekcie. Omówimy też podstawy wiersza poleceń Terraform, takie jak wyświetlanie podglądu zmian, które mają zostać wprowadzone, a następnie ich wdrażanie.
Jeśli chcesz dowiedzieć się, jak konfigurować projekty i usługi Firebase oraz nimi zarządzać za pomocą Terraform, ten kurs jest dla Ciebie.
Czego się nauczysz
- Jak utworzyć plik konfiguracyjny Terraform (
*.tf
) - Jak używać poleceń interfejsu wiersza poleceń Terraform do zarządzania infrastrukturą
- Jak zmodyfikować konfigurację, aby zaktualizować zasoby i usługi
- Jak zastosować konfigurację w prawdziwej aplikacji internetowej (o nazwie Friendly Chat)
- Definiowanie równoległych (i zsynchronizowanych) konfiguracji w różnych środowiskach (produkcyjnym, przejściowym itp.)
Czego potrzebujesz
- terminal/konsola,
- Wybrane IDE lub edytor tekstu, np. WebStorm, Atom, Sublime lub VS Code.
- wybraną przeglądarkę, np. Chrome;
- Google Cloud CLI (gcloud CLI) – zainstaluj ten interfejs wiersza poleceń i zaloguj się za pomocą konta użytkownika lub konta usługi.
Aby ukończyć to ćwiczenie, musisz mieć podstawową znajomość Terraform i jego terminologii, w tym spełniać te wymagania wstępne:
- Zainstaluj Terraform i zapoznaj się z nim, korzystając z oficjalnych samouczków.
W tym laboratorium znajdziesz prawdziwą przykładową aplikację, dzięki której możesz testować i wypróbowywać elementy udostępniane przez Terraform. Aby to zrobić, potrzebujesz:
- Przykładowy kod aplikacji internetowej – pobierz go w następnym kroku tego laboratorium
- Menedżer pakietów npm (zwykle dołączony do Node.js) – zainstaluj te narzędzia.
- Wiersz poleceń Firebase – zainstaluj ten interfejs i zaloguj się.
2. Pobieranie kodu początkowego
W tym ćwiczeniu w Codelabs możesz przetestować, co udostępniasz za pomocą Terraform, w prawdziwej aplikacji internetowej. Zalecamy wykonanie tego ćwiczenia, aby poznać wszystkie kroki potrzebne do korzystania z zasobów udostępnionych przez Terraform.
Sklonuj repozytorium GitHub z poziomu wiersza poleceń:
git clone https://github.com/firebase/codelab-friendlychat-web
Jeśli nie masz zainstalowanego narzędzia git, możesz pobrać repozytorium jako plik ZIP.
3. Tworzenie konfiguracji Terraform
Konfiguracja Terraform
- W kodzie pobranej przykładowej aplikacji przejdź do katalogu głównego
web
. - W katalogu głównym utwórz plik konfiguracji Terraform o nazwie
main.tf
z tą konfiguracją początkową:
main.tf# Terraform configuration to set up providers by version. terraform { required_providers { google-beta = { source = "hashicorp/google-beta" version = "~> 4.0" } } } # Configure the provider not to use the specified project for quota check. # This provider should only be used during project creation and initializing services. provider "google-beta" { alias = "no_user_project_override" user_project_override = false } # Configure the provider that uses the new project's quota. provider "google-beta" { user_project_override = true }
Każdy z dostawców google-beta
ma atrybut o nazwie user_project_override
, który określa, jak operacje z Terraform będą sprawdzane pod kątem limitu. W przypadku większości zasobów należy używać user_project_override = true
, co oznacza sprawdzanie limitu w odniesieniu do własnego projektu Firebase. Aby jednak skonfigurować nowy projekt tak, aby mógł akceptować sprawdzanie limitów, musisz najpierw użyć user_project_override=false
. Składnia Terraform alias
pozwala odróżnić te 2 konfiguracje dostawcy w dalszych krokach tego samouczka.
Inicjowanie Terraform w katalogu
Utworzenie nowej konfiguracji po raz pierwszy wymaga pobrania dostawcy określonego w konfiguracji.
Aby przeprowadzić inicjację, uruchom to polecenie w katalogu głównym, w którym znajduje się plik konfiguracyjny main.tf
:
terraform init
4. Tworzenie projektu Firebase za pomocą Terraform
Pamiętaj, że każdy projekt Firebase jest w rzeczywistości projektem Google Cloud, w którym włączone są usługi Firebase.
Dodawanie blokad do projektu Google Cloud i interfejsów API
- Najpierw udostępnij bazowy projekt Google Cloud.
Do pliku konfiguracyjnegomain.tf
dodaj ten blok zasobów.
Musisz podać własną nazwę projektu (np."Terraform FriendlyChat Codelab"
) i własny identyfikator projektu (np."terraform-codelab-your-initials"
). Pamiętaj, że wartośćname
jest używana tylko w interfejsach Firebase i nie jest widoczna dla użytkowników. Wartośćproject_id
jednoznacznie identyfikuje Twój projekt w Google, więc upewnij się, że podajesz unikalną wartość. main.tf... # Create a new Google Cloud project. resource "google_project" "default" { provider = google-beta.no_user_project_override name = "<PROJECT_NAME_OF_YOUR_PROJECT>" project_id = "<PROJECT_ID_OF_YOUR_PROJECT>" # Required for the project to display in any list of Firebase projects. labels = { "firebase" = "enabled" } }
- Następnie musisz włączyć wymagane interfejsy API: Service Usage API i Firebase Management API.
Włączenie tych interfejsów API jest zwykle obsługiwane w tle, gdy używasz konsoli Firebase do tworzenia projektu Firebase, ale Terraform musi otrzymać wyraźne polecenie, aby to zrobić.
Do pliku konfiguracyjnegomain.tf
(bezpośrednio pod blokiem, który tworzy nowy projekt w Cloud) dodaj ten blok zasobów:
main.tf Po włączeniu interfejsu Service Usage API Twój nowy projekt będzie mógł akceptować sprawdzanie limitów. Dlatego w przypadku wszystkich kolejnych operacji związanych z udostępnianiem zasobów i włączaniem usług używaj dostawcy z... # Enable the required underlying Service Usage API. resource "google_project_service" "serviceusage" { provider = google-beta.no_user_project_override project = google_project.default.project_id service = "serviceusage.googleapis.com" # Don't disable the service if the resource block is removed by accident. disable_on_destroy = false } # Enable the required underlying Firebase Management API. resource "google_project_service" "firebase" { provider = google-beta.no_user_project_override project = google_project.default.project_id service = "firebase.googleapis.com" # Don't disable the service if the resource block is removed by accident. disable_on_destroy = false }
user_project_override
(alias nie jest potrzebny).
Dodawanie bloku w celu włączenia usług Firebase
Ostatnią rzeczą, którą musisz zrobić, aby „utworzyć projekt Firebase”, jest włączenie w nim usług Firebase.
W pliku konfiguracyjnym main.tf
dodaj ten blok zasobów.
Jak wspomnieliśmy powyżej, ten blok zasobów korzysta z dostawcy bez user_project_override
(nie jest potrzebny alias).
main.tf
...
# Enable Firebase services for the new project created above.
resource "google_firebase_project" "default" {
provider = google-beta
project = google_project.default.project_id
# Wait until the required APIs are enabled.
depends_on = [
google_project_service.firebase,
google_project_service.serviceusage,
]
}
W bloku zasobów powyżej możesz zauważyć klauzulę depends_on
, która nakazuje Terraformowi poczekać na włączenie bazowych interfejsów API. Bez tego klauzula Terraform nie będzie znać zależności i może napotkać błędy podczas równoległego udostępniania zasobów.
Zastosuj konfigurację
- Aby udostępnić nowe zasoby i włączyć interfejsy API określone w pliku konfiguracyjnym, uruchom to polecenie w katalogu głównym, w którym znajduje się plik
main.tf
(powinien to być katalogweb
):terraform apply
- W terminalu Terraform wyświetli plan działań, które wykona.
Jeśli wszystko wygląda zgodnie z oczekiwaniami, zatwierdź działania, wpisującyes
.
main.tfTerraform used the selected providers to generate the following execution plan. Resource actions are indicated with the following symbols: + create Terraform will perform the following actions: # google_firebase_project.default will be created + resource "google_firebase_project" "default" { + display_name = (known after apply) + id = (known after apply) + project = "terraform-friendlychat-codelab" + project_number = (known after apply) } # google_project.default will be created + resource "google_project" "default" { + auto_create_network = true + id = (known after apply) + labels = { + "firebase" = "enabled" } + name = "Terraform FriendlyChat Codelab" + number = (known after apply) + project_id = "terraform-friendlychat-codelab" + skip_delete = (known after apply) } # google_project_service.firebase will be created + resource "google_project_service" "firebase" { + disable_on_destroy = false + id = (known after apply) + project = "terraform-friendlychat-codelab" + service = "firebase.googleapis.com" } # google_project_service.serviceusage will be created + resource "google_project_service" "serviceusage" { + disable_on_destroy = false + id = (known after apply) + project = "terraform-friendlychat-codelab" + service = "serviceusage.googleapis.com" } Plan: 4 to add, 0 to change, 0 to destroy. Do you want to perform these actions? Terraform will perform the actions described above. Only 'yes' will be accepted to approve. Enter a value: yes # <----
Jeśli chcesz tylko wyświetlić podgląd zmian bez ich stosowania, możesz użyć polecenia terraform plan
.
Sprawdź zmiany
Po zakończeniu działania Terraform możesz sprawdzić stan wszystkich zasobów i usług udostępnionych przez Terraform, uruchamiając to polecenie:
terraform show
Oto przykład tego, co powinno zostać wydrukowane. Stan będzie zawierać wartości specyficzne dla Twojego projektu.
# google_firebase_project.default:
resource "google_firebase_project" "default" {
display_name = "Terraform FriendlyChat Codelab"
id = "projects/terraform-friendlychat-codelab"
project = "terraform-friendlychat-codelab"
project_number = "000000000"
}
# google_project.default:
resource "google_project" "default" {
auto_create_network = true
id = "projects/terraform-friendlychat-codelab"
labels = {
"firebase" = "enabled"
}
name = "Terraform FriendlyChat Codelab"
number = "000000000"
project_id = "terraform-friendlychat-codelab"
}
# google_project_service.firebase:
resource "google_project_service" "firebase" {
disable_on_destroy = false
id = "terraform-friendlychat-codelab/firebase.googleapis.com"
project = "terraform-friendlychat-codelab"
service = "firebase.googleapis.com"
}
# google_project_service.serviceusage:
resource "google_project_service" "serviceusage" {
disable_on_destroy = false
id = "terraform-friendlychat-codelab/serviceusage.googleapis.com"
project = "terraform-friendlychat-codelab"
service = "serviceusage.googleapis.com"
}
Możesz też sprawdzić, czy projekt został utworzony, wyświetlając go w konsoli Firebase.
5. Rejestrowanie aplikacji Firebase za pomocą Terraform
Aby korzystać z Firebase, musisz zarejestrować w projekcie Firebase każdą wersję platformową aplikacji. W tym ćwiczeniu z programowania użyjesz prawdziwej aplikacji do testowania i interakcji z zasobami, które udostępnisz za pomocą Terraform. Ta aplikacja jest aplikacją internetową, więc musisz poinformować Terraform, aby zarejestrował aplikację internetową Firebase w nowo utworzonym projekcie Firebase.
Dodawanie bloku do rejestrowania aplikacji internetowej
Aby zarejestrować aplikację internetową w projekcie Firebase, dodaj do pliku main.tf
ten blok zasobów.
Musisz podać własną display_name
dla aplikacji internetowej. Pamiętaj, że ta nazwa jest używana tylko w interfejsach Firebase i nie jest widoczna dla użytkowników.
main.tf
...
# Create a Firebase Web App in the new project created above.
resource "google_firebase_web_app" "default" {
provider = google-beta
project = google_firebase_project.default.project
display_name = "<DISPLAY_NAME_OF_YOUR_WEB_APP>"
deletion_policy = "DELETE"
}
Zastosuj konfigurację
- Aby udostępnić nowy zasób, uruchom to polecenie w katalogu głównym, w którym znajduje się plik
main.tf
(powinien to być katalogweb
). Pamiętaj, że to polecenie nie spowoduje ponownego utworzenia nowego projektu Google Cloud. Terraform wykryje, że projekt o podanym identyfikatorze już istnieje, porówna jego obecny stan z zawartością plikuterraform apply
.tf
i wprowadzi wszelkie wykryte zmiany. - Sprawdź wydrukowany plan działań. Jeśli wszystko wygląda zgodnie z oczekiwaniami, wpisz
yes
i naciśnij Enter, aby zatwierdzić działania.
Sprawdź zmiany
Stan nowo utworzonego zasobu możesz sprawdzić, uruchamiając to polecenie:
terraform show
Możesz też sprawdzić, czy aplikacja została zarejestrowana w projekcie, wyświetlając ją w konsoli Firebase. Otwórz Ustawienia projektu i przewiń w dół do sekcji Twoje aplikacje.
6. Konfigurowanie Uwierzytelniania Firebase
Uwierzytelnianie jest ważnym elementem każdej aplikacji. Aby umożliwić użytkownikom logowanie się w aplikacji internetowej za pomocą kont Google, możesz włączyć Uwierzytelnianie Firebase i skonfigurować metodę logowania przez Google.
W tym laboratorium kodu udostępniamy 2 różne opcje konfiguracji uwierzytelniania Firebase:
- Opcja 1 (zalecana): skonfiguruj uwierzytelnianie Firebase w konsoli. Nie wymaga to GCIP.
- Skorzystanie z tej opcji oznacza, że nie musisz powiązywać nowego projektu z kontem rozliczeniowym Cloud.
- Opcja 2: skonfiguruj uwierzytelnianie Firebase za pomocą Terraform przy użyciu interfejsów API Google Cloud Identity Platform (GCIP).
- Jeśli wybierzesz tę opcję, musisz powiązać nowy projekt z kontem rozliczeniowym Cloud, ponieważ GCIP wymaga, aby projekt korzystał z abonamentu Blaze.
Opcja 1. Konfigurowanie uwierzytelniania za pomocą konsoli Firebase
Aby skonfigurować uwierzytelnianie Firebase za pomocą konsoli Firebase, Twój projekt nie musi być objęty abonamentem Blaze.
Aby skonfigurować uwierzytelnianie Firebase i logowanie za pomocą Google:
- W konsoli Firebase w panelu po lewej stronie znajdź sekcję Kompilacja.
- Kliknij Uwierzytelnianie, a następnie Rozpocznij i kartę Metoda logowania (możesz też kliknąć tutaj, aby przejść bezpośrednio do tej karty).
- Kliknij Dodaj nowego dostawcę, a w sekcji Dodatkowi dostawcy wybierz Google.
- Włącz przełącznik Włącz.
- Ustaw publiczną nazwę aplikacji na przykład na
FriendlyChat
(nie musi być unikalna na całym świecie). - Wybierz Adres e-mail pomocy dotyczącej projektu z menu, a następnie kliknij Zapisz.
- Google powinno być widoczne jako włączony dostawca logowania.
Opcja 2. Konfigurowanie uwierzytelniania za pomocą Terraform przy użyciu interfejsów Google Cloud Identity Platform (GCIP) API
Aby skonfigurować uwierzytelnianie Firebase za pomocą Terraform, musisz użyć interfejsów GCIP API, co oznacza, że projekt musi być objęty abonamentem Blaze. Aby przenieść projekt Firebase na abonament Blaze, musisz powiązać z nim konto Cloud Billing.
Włączanie płatności za pomocą Terraform
- Jeśli nie masz jeszcze konta rozliczeniowego w Cloud, pierwszym krokiem jest utworzenie nowego konta w konsoli Google Cloud. Zanotuj identyfikator konta rozliczeniowego. Identyfikator konta rozliczeniowego znajdziesz na stronie Płatności w sekcji Identyfikator konta rozliczeniowego powiązanej z Twoim projektem.
- Aby włączyć płatności w projekcie za pomocą Terraform, dodaj atrybut
billing_account
do istniejącego zasobugoogle_project
w plikumain.tf
:
main.tf... # Create a new Google Cloud project. resource "google_project" "default" { provider = google-beta.no_user_project_override name = "<PROJECT_NAME_OF_YOUR_PROJECT>" project_id = "<PROJECT_ID_OF_YOUR_PROJECT>" billing_account = "<YOUR_BILLING_ACCOUNT_ID>" # Add this line with your Cloud Billing account ID # Required for the project to display in any list of Firebase projects. labels = { "firebase" = "enabled" } } ...
Włączanie uwierzytelniania Firebase i logowania się przez Google za pomocą Terraform
- Aby udostępnić uwierzytelnianie Firebase za pomocą GCIP, dodaj do pliku
main.tf
te bloki zasobów:
main.tf... # Enable the Identity Toolkit API. resource "google_project_service" "auth" { provider = google-beta project = google_firebase_project.default.project service = "identitytoolkit.googleapis.com" # Don't disable the service if the resource block is removed by accident. disable_on_destroy = false } # Create an Identity Platform config. # Also, enable Firebase Authentication using Identity Platform (if Authentication isn't yet enabled). resource "google_identity_platform_config" "auth" { provider = google-beta project = google_firebase_project.default.project # For example, you can configure to auto-delete anonymous users. autodelete_anonymous_users = true # Wait for identitytoolkit.googleapis.com to be enabled before initializing Authentication. depends_on = [ google_project_service.auth, ] }
- Włączenie Logowania przez Google wymaga posiadania klienta OAuth. Aby to zrobić, otwórz sekcję Interfejsy API i usługi w konsoli Google Cloud.
- To pierwszy raz, gdy tworzysz identyfikator klienta w tym projekcie, więc musisz skonfigurować ekran zgody OAuth.
- Otwórz stronę Ekran zgody OAuth, a potem wybierz utworzony projekt.
- Ustaw Typ użytkownika na Zewnętrzny, a następnie kliknij Utwórz.
- Na następnym ekranie wykonaj te czynności, a potem kliknij Zapisz i kontynuuj.
- Ustaw publiczną nazwę aplikacji na przykład na
FriendlyChat
(nie musi być unikalna na całym świecie). - W menu wybierz Adres e-mail pomocy dla użytkowników.
- Wpisz adres e-mail w sekcji Dane kontaktowe dewelopera.
- Ustaw publiczną nazwę aplikacji na przykład na
- Na kolejnych ekranach wykonaj te czynności:
- Na stronie Zakresy zaakceptuj wartości domyślne i kliknij Zapisz i kontynuuj.
- Na stronie Użytkownicy testowi zaakceptuj wartości domyślne, a potem kliknij Zapisz i kontynuuj.
- Sprawdź podsumowanie i kliknij Wróć do panelu.
- Skonfiguruj klienta OAuth na stronie Dane logowania, wykonując te czynności:
- Kliknij Utwórz dane logowania i wybierz Identyfikator klienta OAuth.
- W menu Typ aplikacji wybierz Aplikacja internetowa.
- W polu Nazwa wpisz nazwę aplikacji, np.
FriendlyChat
(nie musi być globalnie niepowtarzalna). - Zezwól adresowi URL aplikacji na korzystanie z tego klienta OAuth, ustawiając te wartości:
- W sekcji Autoryzowane źródła JavaScript kliknij Dodaj URI i wpisz
https://<PROJECT_ID>.firebaseapp.com
, gdzie<PROJECT_ID>
to identyfikator projektu ustawiony wmain.tf
. - W sekcji Autoryzowane identyfikatory URI przekierowania kliknij Dodaj URI i wpisz
https://<PROJECT_ID>.firebaseapp.com/__/auth/handler
, gdzie<PROJECT_ID>
to identyfikator projektu ustawiony wmain.tf
.
- W sekcji Autoryzowane źródła JavaScript kliknij Dodaj URI i wpisz
- Kliknij Zapisz.
- Aby włączyć logowanie przez Google za pomocą identyfikatora klienta OAuth i tajnego klucza klienta, dodaj do pliku
main.tf
ten blok:
main.tf... variable "oauth_client_secret" { type = string description = "OAuth client secret. For this codelab, you can pass in this secret through the environment variable TF_VAR_oauth_client_secret. In a real app, you should use a secret manager service." sensitive = true } resource "google_identity_platform_default_supported_idp_config" "google_sign_in" { provider = google-beta project = google_firebase_project.default.project enabled = true idp_id = "google.com" client_id = "<YOUR_OAUTH_CLIENT_ID>" client_secret = var.oauth_client_secret depends_on = [ google_identity_platform_config.auth ] }
Zastosuj konfigurację
- Aby skonfigurować uwierzytelnianie zgodnie z konfiguracją, uruchom te polecenia w katalogu głównym, w którym znajduje się plik
main.tf
(powinien to być katalogweb
):export TF_VAR_oauth_client_secret="<YOUR_OAUTH_CLIENT_SECRET>"
Pamiętaj, że uruchomienie poleceniaterraform apply
terraform apply
nie spowoduje ponownego utworzenia nowego projektu Google Cloud. Terraform wykryje, że projekt o podanym identyfikatorze już istnieje, i porówna bieżący stan projektu z tym, co znajduje się w pliku.tf
. Następnie wprowadzi wszystkie znalezione zmiany. - Sprawdź wydrukowany plan działań. Jeśli wszystko wygląda zgodnie z oczekiwaniami, wpisz
yes
i naciśnij Enter, aby zatwierdzić działania.
Sprawdź zmiany
- W konsoli Firebase w panelu po lewej stronie znajdź sekcję Kompilacja.
- Kliknij Uwierzytelnianie, a następnie kartę Metoda logowania (lub kliknij tutaj, aby przejść bezpośrednio do tej karty).
- Google powinno być widoczne jako włączony dostawca logowania.
7. Konfigurowanie bazy danych Firestore i jej reguł bezpieczeństwa
W przypadku aplikacji internetowej z tego laboratorium będziesz przechowywać wiadomości między użytkownikami w bazie danych Firestore.
- Aby włączyć wymagane interfejsy API i udostępnić instancję bazy danych, dodaj do pliku
main.tf
te bloki zasobów:
main.tf... # Enable required APIs for Cloud Firestore. resource "google_project_service" "firestore" { provider = google-beta project = google_firebase_project.default.project for_each = toset([ "firestore.googleapis.com", "firebaserules.googleapis.com", ]) service = each.key # Don't disable the service if the resource block is removed by accident. disable_on_destroy = false } # Provision the Firestore database instance. resource "google_firestore_database" "default" { provider = google-beta project = google_firebase_project.default.project name = "(default)" # See available locations: # https://firebase.google.com/docs/firestore/locations location_id = "<NAME_OF_DESIRED_REGION>" # "FIRESTORE_NATIVE" is required to use Firestore with Firebase SDKs, # authentication, and Firebase Security Rules. type = "FIRESTORE_NATIVE" concurrency_mode = "OPTIMISTIC" depends_on = [ google_project_service.firestore ] }
- Zmień
<NAME_OF_DESIRED_REGION>
na region, w którym ma się znajdować baza danych.
Podczas tworzenia aplikacji produkcyjnej warto wybrać region, który jest blisko większości użytkowników i jest wspólny z innymi usługami Firebase, takimi jak Cloud Functions. W tym samouczku możesz użyć regionuus-east1
(Karolina Południowa) lub regionu znajdującego się najbliżej Ciebie (patrz lokalizacje Cloud Firestore). - Każda instancja bazy danych Firestore dostępna dla Firebase musi być chroniona przez reguły zabezpieczeń Firebase.
Przykładowy kod w tym laboratorium zawiera zestaw bezpiecznych reguł Firestore w plikufirestore.rules
, który znajdziesz w katalogu głównymweb
. - Aby wykonać te czynności, dodaj do pliku
main.tf
te bloki zasobów:- Utwórz zbiór reguł zabezpieczeń Firebase z lokalnego pliku
firestore.rules
. - Opublikuj zestaw reguł dla instancji Firestore.
firebase deploy --only firestore:rules
.
main.tf... # Create a ruleset of Firestore Security Rules from a local file. resource "google_firebaserules_ruleset" "firestore" { provider = google-beta project = google_firebase_project.default.project source { files { name = "firestore.rules" # Write security rules in a local file named "firestore.rules". # Learn more: https://firebase.google.com/docs/firestore/security/get-started content = file("firestore.rules") } } # Wait for Firestore to be provisioned before creating this ruleset. depends_on = [ google_firestore_database.default, ] } # Release the ruleset for the Firestore instance. resource "google_firebaserules_release" "firestore" { provider = google-beta name = "cloud.firestore" # must be cloud.firestore ruleset_name = google_firebaserules_ruleset.firestore.name project = google_firebase_project.default.project # Wait for Firestore to be provisioned before releasing the ruleset. depends_on = [ google_firestore_database.default, ] lifecycle { replace_triggered_by = [ google_firebaserules_ruleset.firestore ] } }
- Utwórz zbiór reguł zabezpieczeń Firebase z lokalnego pliku
- Uruchom polecenie
terraform apply
, aby udostępnić bazę danych Firestore i wdrożyć jej reguły zabezpieczeń. - Sprawdź, czy baza danych została udostępniona i czy wdrożono jej reguły bezpieczeństwa:
- W konsoli Firebase w panelu po lewej stronie znajdź sekcję Kompilacja.
- Otwórz sekcję Baza danych Firestore, a następnie kliknij kartę Reguły.
8. Konfigurowanie zasobnika Cloud Storage i jego reguł zabezpieczeń
W aplikacji internetowej z tego laboratorium będziesz przechowywać obrazy udostępniane przez użytkowników w zasobniku Cloud Storage.
- Aby włączyć wymagane interfejsy API i udostępnić domyślny zasobnik Cloud Storage, dodaj do pliku
main.tf
te bloki zasobów.
Pamiętaj, że domyślny zasobnik Cloud Storage w Twoim projekcie jest udostępniany przez Google App Engine i musi mieć taką samą lokalizację jak baza danych Firestore. Więcej informacji znajdziesz w sekcji Lokalizacje App Engine.
Jeśli w projekcie chcesz mieć kilka zasobników, utwórz je za pomocągoogle_storage_bucket
zasobu (nie jest to pokazane w tym laboratorium).
main.tf... # Enable required APIs for Cloud Storage for Firebase. resource "google_project_service" "storage" { provider = google-beta project = google_firebase_project.default.project for_each = toset([ "firebasestorage.googleapis.com", "storage.googleapis.com", ]) service = each.key # Don't disable the service if the resource block is removed by accident. disable_on_destroy = false } # Provision the default Cloud Storage bucket for the project via Google App Engine. resource "google_app_engine_application" "default" { provider = google-beta project = google_firebase_project.default.project # See available locations: https://firebase.google.com/docs/projects/locations#default-cloud-location # This will set the location for the default Storage bucket and the App Engine App. location_id = "<NAME_OF_DESIRED_REGION_FOR_DEFAULT_BUCKET>" # Must be in the same location as Firestore (above) # Wait until Firestore is provisioned first. depends_on = [ google_firestore_database.default ] } # Make the default Storage bucket accessible for Firebase SDKs, authentication, and Firebase Security Rules. resource "google_firebase_storage_bucket" "default-bucket" { provider = google-beta project = google_firebase_project.default.project bucket_id = google_app_engine_application.default.default_bucket }
- Każdy zasobnik Cloud Storage dostępny dla Firebase musi być chroniony przez reguły zabezpieczeń Firebase.
Przykładowy kod w tym laboratorium zawiera zestaw bezpiecznych reguł Firestore w plikustorage.rules
, który znajdziesz w katalogu głównymweb
. - Aby wykonać te czynności, dodaj do pliku
main.tf
te bloki zasobów:- Utwórz z pliku lokalnego zbiór reguł zabezpieczeń Firebase.
- Zwolnij zestaw reguł dla zasobnika Cloud Storage.
firebase deploy --only storage
.
main.tf... # Create a ruleset of Cloud Storage Security Rules from a local file. resource "google_firebaserules_ruleset" "storage" { provider = google-beta project = google_firebase_project.default.project source { files { # Write security rules in a local file named "storage.rules". # Learn more: https://firebase.google.com/docs/storage/security/get-started name = "storage.rules" content = file("storage.rules") } } # Wait for the default Storage bucket to be provisioned before creating this ruleset. depends_on = [ google_firebase_storage_bucket.default-bucket, ] } # Release the ruleset to the default Storage bucket. resource "google_firebaserules_release" "default-bucket" { provider = google-beta name = "firebase.storage/${google_app_engine_application.default.default_bucket}" ruleset_name = "projects/${google_firebase_project.default.project}/rulesets/${google_firebaserules_ruleset.storage.name}" project = google_firebase_project.default.project lifecycle { replace_triggered_by = [ google_firebaserules_ruleset.storage ] } }
- Uruchom polecenie
terraform apply
, aby udostępnić domyślny zasobnik Cloud Storage i wdrożyć jego reguły zabezpieczeń. - Sprawdź, czy zasobnik został udostępniony i czy wdrożono jego reguły zabezpieczeń:
- W konsoli Firebase w panelu po lewej stronie znajdź sekcję Kompilacja.
- Otwórz sekcję Przechowywanie danych i kliknij kartę Reguły.
9. Lokalne uruchamianie aplikacji
Możesz teraz po raz pierwszy uruchomić aplikację internetową. Do lokalnego obsługiwania aplikacji użyjesz emulatora Hostingu Firebase.
- Otwórz nowe okno terminala i w katalogu
web
uruchom to polecenie interfejsu Firebase CLI, aby uruchomić emulator:firebase emulators:start --project=<PROJECT_ID>
- W przeglądarce otwórz aplikację internetową pod lokalnym adresem URL zwróconym przez interfejs CLI (zwykle
http://localhost:5000
).
Powinien pojawić się interfejs aplikacji FriendlyChat, który (jeszcze!) nie działa. Aplikacja nie jest jeszcze połączona z Firebase, ale po wykonaniu kolejnych kroków tego samouczka zostanie połączona.
Pamiętaj, że za każdym razem, gdy wprowadzisz zmiany w aplikacji internetowej (tak jak w kolejnych krokach tego samouczka), musisz odświeżyć przeglądarkę, aby zaktualizować lokalny adres URL.
10. Instalowanie, konfigurowanie i inicjowanie Firebase
Aby aplikacja działała z Firebase, musi mieć pakiet SDK Firebase i konfigurację Firebase dla projektu Firebase.
Przykładowy kod do tego szkolenia to działająca aplikacja ze wszystkimi zależnościami i wymaganymi funkcjami do korzystania z różnych usług Firebase. Jeśli chcesz zobaczyć, co zostało już zrobione, zajrzyj do katalogów web/package.json
i web/src/index.js
.
Chociaż przykładowy kod jest w większości gotowy, musisz jeszcze wykonać kilka czynności, aby uruchomić aplikację, m.in. zainstalować pakiet SDK Firebase, rozpocząć kompilację, dodać konfigurację Firebase do aplikacji i w końcu zainicjować Firebase.
Zainstaluj pakiet SDK Firebase i rozpocznij kompilację webpack
Aby rozpocząć kompilację aplikacji, musisz uruchomić kilka poleceń.
- Otwórz nowe okno terminala.
- Sprawdź, czy jesteś w katalogu głównym
web
. - Uruchom
npm install
, aby pobrać pakiet SDK Firebase. - Uruchom
npm update
, aby zaktualizować zależności. - Uruchom
npm run start
, aby uruchomić webpack.
Przez resztę tego laboratorium webpack będzie stale ponownie kompilować kod źródłowy.
Dodawanie konfiguracji Firebase do aplikacji
Musisz też dodać do aplikacji konfigurację Firebase, aby pakiety SDK Firebase wiedziały, którego projektu Firebase mają używać.
W tym laboratorium masz 2 opcje uzyskania konfiguracji Firebase:
- Opcja 1: pobierz konfigurację Firebase z konsoli Firebase.
- Opcja 2. Uzyskanie konfiguracji Firebase za pomocą Terraform.
Opcja 1. Pobierz konfigurację z konsoli Firebase i dodaj ją do bazy kodu
- W konsoli Firebase otwórz ustawienia projektu.
- Przewiń w dół do karty Twoje aplikacje, a potem wybierz aplikację internetową.
- W panelu fragmentu kodu pakietu SDK Firebase kliknij Config (Konfiguracja), a następnie skopiuj fragment kodu konfiguracji.
- Wklej konfigurację do pliku
web/src/firebase-config.js
w aplikacji, jak pokazano poniżej:
firebase-config.js... const config = { apiKey: "<API_KEY>", authDomain: "<PROJECT_ID>.firebaseapp.com", projectId: "<PROJECT_ID>", storageBucket: "<PROJECT_ID>.appspot.com", messagingSenderId: "<SENDER_ID>", appId: "<APP_ID>", measurementId: "<G-MEASUREMENT_ID>", }; ...
Opcja 2. Pobierz konfigurację za pomocą Terraform i dodaj ją do bazy kodu
Możesz też uzyskać konfigurację Firebase za pomocą Terraform jako wartość wyjściową w interfejsie wiersza poleceń.
- W pliku
main.tf
znajdź blok zasobówgoogle_firebase_web_app
(blok, który zarejestrował aplikację internetową w Twoim projekcie). - Bezpośrednio po tym bloku dodaj te bloki:
main.tf... data "google_firebase_web_app_config" "default" { provider = google-beta project = google_firebase_project.default.project web_app_id = google_firebase_web_app.default.app_id } output "friendlychat_web_app_config" { value = { projectId = google_firebase_project.default.project appId = google_firebase_web_app.default.app_id apiKey = data.google_firebase_web_app_config.default.api_key authDomain = data.google_firebase_web_app_config.default.auth_domain storageBucket = lookup(data.google_firebase_web_app_config.default, "storage_bucket", "") messagingSenderId = lookup(data.google_firebase_web_app_config.default, "messaging_sender_id", "") measurementId = lookup(data.google_firebase_web_app_config.default, "measurement_id", "") } } ...
- Bloki
data
ioutput
nie są przeznaczone do modyfikowania infrastruktury w żaden sposób, więc wystarczy, że uruchomisz te polecenia.- Aby wczytać konfigurację Firebase aplikacji internetowej do stanu Terraform w katalogu, uruchom to polecenie:
terraform refresh
- Aby wydrukować wartości konfiguracji Firebase, uruchom to polecenie:
Poniżej znajdziesz przykładowe dane wyjściowe konfiguracji. Wydruk będzie zawierać wartości projektu i aplikacji.terraform output –json
{ "friendlychat_web_app_config": { "sensitive": false, "type": [ "object", { "apiKey": "string", "appId": "string", "authDomain": "string", "measurementId": "string", "messagingSenderId": "string", "projectId": "string", "storageBucket": "string" } ], "value": { "apiKey": "<API_KEY>", "appId": "<APP_ID>", "authDomain": "<PROJECT_ID>.firebaseapp.com", "measurementId": "<G-MEASUREMENT_ID>", "messagingSenderId": "<SENDER_ID>", "projectId": "<PROJECT_ID>", "storageBucket": "<PROJECT_ID>.appspot.com" } } }
- Aby wczytać konfigurację Firebase aplikacji internetowej do stanu Terraform w katalogu, uruchom to polecenie:
- Skopiuj wartości z mapy
value
. - Wklej te wartości (konfigurację) do pliku
web/src/firebase-config.js
aplikacji w ten sposób:
firebase-config.js... const config = { apiKey: "<API_KEY>", appId: "<APP_ID>", authDomain: "<PROJECT_ID>.firebaseapp.com", measurementId: "<G-MEASUREMENT_ID>", messagingSenderId: "<SENDER_ID>", projectId: "<PROJECT_ID>", storageBucket: "<PROJECT_ID>.appspot.com", }; ...
Inicjowanie Firebase w aplikacji
Aby zainicjować Firebase, dodaj do pliku web/src/index.js
aplikacji ten kod:
...
const firebaseAppConfig = getFirebaseConfig();
initializeApp(firebaseAppConfig);
Wypróbuj aplikację
Po skonfigurowaniu wszystkich ustawień Firebase możesz wypróbować działającą aplikację internetową.
- Odśwież przeglądarkę, w której działa aplikacja.
- Od tego momentu logowanie się za pomocą Google powinno być możliwe, a Ty będziesz mieć możliwość publikowania wiadomości na czacie. Jeśli masz pliki z obrazami, możesz je przesłać.
11. Replikowanie konfiguracji w różnych środowiskach
Terraform doskonale sprawdza się w zarządzaniu wieloma podobnie skonfigurowanymi infrastrukturami (np. konfigurowaniem testowego projektu Firebase, który jest podobny do projektu produkcyjnego).
W tym laboratorium kodowania utworzysz drugi projekt Firebase, który będzie środowiskiem przejściowym.
Aby skopiować istniejącą konfigurację i utworzyć ten projekt testowy, masz 2 możliwości:
- Opcja 1: utwórz kopię konfiguracji Terraform.
Ta opcja zapewnia największą elastyczność w zakresie różnic między replikowanym a źródłowym projektem. - Opcja 2: wielokrotne używanie konfiguracji za pomocą funkcji
for_each
.
Ta opcja zapewnia większą możliwość ponownego wykorzystania kodu, jeśli projekty nie powinny się znacząco różnić i chcesz propagować zmiany we wszystkich projektach jednocześnie.
Opcja 1. Utwórz kopię konfiguracji Terraform
Ta opcja zapewnia największą elastyczność w zakresie różnic między sklonowanym projektem a projektem źródłowym, np. w przypadku aplikacji o różnych wyświetlanych nazwach i wdrażanych etapami.
- W katalogu głównym
web
utwórz nowy plik konfiguracji Terraform o nazwiemain_staging.tf
. - Skopiuj wszystkie bloki zasobów z pliku
main.tf
(z wyjątkiem blokówterraform
iprovider
), a następnie wklej je do plikumain_staging.tf
. - Następnie musisz zmodyfikować każdy z replikowanych bloków zasobów w
main_staging.tf
, aby działały w projekcie testowym:- Etykiety zasobów: użyj nowej nazwy, aby uniknąć konfliktu. Na przykład zmień nazwę
resource "google_project" "default"
naresource "google_project" "staging"
. - Odwołania do zasobów: zaktualizuj każde z nich. Na przykład zmień
google_firebase_project.default.project
nagoogle_firebase_project.staging.project
.
main_staging.tf
znajdziesz w repozytorium GitHub tego laboratorium programowania:web/terraform-checkpoints/replicate-config/main_staging-copypaste.tf
Jeśli chcesz użyć tej konfiguracji, wykonaj te czynności:- Skopiuj konfigurację z
main_staging-copypaste.tf
, a następnie wklej ją do plikumain_staging.tf
. - W pliku
main_staging.tf
wykonaj te czynności:- W bloku zasobów
google_project
zaktualizuj atrybutyname
,project-id
i (jeśli uwierzytelnianie zostało skonfigurowane za pomocą Terraform)billing_account
, podając własne wartości. - W bloku zasobów
google_firebase_web_app
zaktualizuj atrybutdisplay_name
, podając własną wartość. - W blokach zasobów
google_firestore_database
igoogle_app_engine_application
zaktualizuj atrybutylocation_id
, podając własną wartość.
- W bloku zasobów
# Create a new Google Cloud project. resource "google_project" "staging" { provider = google-beta.no_user_project_override name = "<PROJECT_NAME_OF_STAGING_PROJECT>" project_id = "<PROJECT_ID_OF_STAGING_PROJECT" # Required if you want to set up Authentication via Terraform billing_account = "<YOUR_BILLING_ACCOUNT_ID>" # Required for the project to display in any list of Firebase projects. labels = { "firebase" = "enabled" } } # Enable the required underlying Service Usage API. resource "google_project_service" "staging_serviceusage" { provider = google-beta.no_user_project_override project = google_project.staging.project_id service = "serviceusage.googleapis.com" # Don't disable the service if the resource block is removed by accident. disable_on_destroy = false } # Enable the required underlying Firebase Management API. resource "google_project_service" "staging_firebase" { provider = google-beta.no_user_project_override project = google_project.staging.project_id service = "firebase.googleapis.com" # Don't disable the service if the resource block is removed by accident. disable_on_destroy = false } # Enable Firebase services for the new project created above. resource "google_firebase_project" "staging" { provider = google-beta project = google_project.staging.project_id # Wait until the required APIs are enabled. depends_on = [ google_project_service.staging_serviceusage, google_project_service.staging_firebase, ] } # Create a Firebase Web App in the new project created above. resource "google_firebase_web_app" "staging" { provider = google-beta project = google_firebase_project.staging.project display_name = "<DISPLAY_NAME_OF_YOUR_WEB_APP>" deletion_policy = "DELETE" }
- Etykiety zasobów: użyj nowej nazwy, aby uniknąć konfliktu. Na przykład zmień nazwę
- Uruchom
terraform apply
, aby udostępnić nowy projekt Firebase „staging” i wszystkie jego zasoby oraz włączyć jego usługi. - Sprawdź, czy wszystko zostało skonfigurowane i włączone zgodnie z oczekiwaniami, tak jak wcześniej w konsoli Firebase.
Opcja 2. Wielokrotne używanie konfiguracji za pomocą for_each
Ta opcja zapewnia większą możliwość ponownego wykorzystania kodu, jeśli projekty nie powinny się znacząco różnić i chcesz propagować zmiany we wszystkich projektach jednocześnie. Korzysta z metaargumentu for_each
w języku Terraform.
- Otwórz plik
main.tf
. - Do każdego bloku zasobów, który chcesz powielić, dodaj metaargument
for_each
w ten sposób:
main.tf Pełną konfigurację pliku# Create new Google Cloud projects. resource "google_project" "default" { provider = google-beta.no_user_project_override name = each.value # Create a unique project ID for each project, with each ID starting with <PROJECT_ID>. project_id = "<PROJECT_ID>-${each.key}" # Required if you want to set up Authentication via Terraform billing_account = "<YOUR_BILLING_ACCOUNT_ID>" # Required for the projects to display in any list of Firebase projects. labels = { "firebase" = "enabled" } for_each = { prod = "<PROJECT_NAME_OF_PROD_PROJECT>" staging = "<PROJECT_NAME_OF_STAGING_PROJECT>" } } # Enable the required underlying Service Usage API. resource "google_project_service" "serviceusage" { provider = google-beta.no_user_project_override for_each = google_project.default project = each.value.project_id service = "serviceusage.googleapis.com" # Don't disable the service if the resource block is removed by accident. disable_on_destroy = false } # Enable the required underlying Firebase Management API. resource "google_project_service" "firebase" { provider = google-beta.no_user_project_override for_each = google_project.default project = each.value.project_id service = "firebase.googleapis.com" # Don't disable the service if the resource block is removed by accident. disable_on_destroy = false } # Enable Firebase services for each of the new projects created above. resource "google_firebase_project" "default" { provider = google-beta for_each = google_project.default project = each.value.project_id depends_on = [ google_project_service.serviceusage, google_project_service.firebase, ] } # Create a Firebase Web App in each of the new projects created above. resource "google_firebase_web_app" "default" { provider = google-beta for_each = google_firebase_project.default project = each.value.project # The Firebase Web App created in each project will have the same display name. display_name = "<DISPLAY_NAME_OF_YOUR_WEB_APP>" deletion_policy = "DELETE" } # NOTE: For this codelab, we recommend setting up Firebase Authentication # using the Firebase console. However, if you set up Firebase Authentication # using Terraform, copy-paste from your main.tf the applicable blocks. # Make sure to add the `for_each` meta-argument into each block. # Copy-paste from your main.tf file the applicable resource blocks # for setting up Cloud Firestore (including rules) and # for setting up Cloud Storage for Firebase (including rules). # Make sure to add the `for_each` meta-argument into each block.
main.tf
, który używa metaargumentufor_each
, znajdziesz w repozytorium GitHub tego laboratorium programowania:web/terraform-checkpoints/replicate-config/main-foreach.tf
Jeśli chcesz użyć tej konfiguracji, wykonaj te czynności:- Skopiuj konfigurację z
main-foreach.tf
, a następnie wklej ją do plikumain.tf
. - W pliku
main.tf
wykonaj te czynności:- W bloku zasobów
google_project
zaktualizuj atrybutyname
,project-id
i (jeśli uwierzytelnianie zostało skonfigurowane za pomocą Terraform)billing_account
, podając własne wartości. - W bloku zasobów
google_firebase_web_app
zaktualizuj atrybutdisplay_name
, podając własną wartość. - W blokach zasobów
google_firestore_database
igoogle_app_engine_application
zaktualizuj atrybutylocation_id
, podając własną wartość.
- W bloku zasobów
- Skopiuj konfigurację z
- Zamiast od razu stosować tę konfigurację, warto zrozumieć i naprawić kilka kwestii związanych z tym, jak Terraform interpretuje tę konfigurację w porównaniu z dotychczasową infrastrukturą.
- Jeśli zastosujesz tę konfigurację, która korzysta z
for_each
, adresy zasobów będą wyglądać tak: Jednak istniejący projekt utworzony w pierwszej części tego laboratorium kodowania jest znany Terraformowi jako:google_project.default["prod"] google_project.default["staging"] google_firebase_project.default["prod"] google_firebase_project.default["staging"] google_firebase_web_app.default["prod"] google_firebase_web_app.default["staging"]
google_project.default google_firebase_project.default google_firebase_android_app.default
- Uruchom polecenie
terraform plan
, aby sprawdzić, jakie działania wykona Terraform w bieżącym stanie.
Dane wyjściowe powinny wskazywać, że Terraform usunie projekt utworzony w pierwszej części tego samouczka i utworzy 2 nowe projekty. Wynika to z tego, że Terraform nie wie, że projekt pod adresemgoogle_project.default
został przeniesiony pod nowy adresgoogle_project.default["prod"]
. - Aby to naprawić, uruchom polecenie
terraform state mv
:terraform state mv "google_project.default" "google_project.default[\"prod\"]"
- Podobnie, aby naprawić wszystkie inne bloki zasobów, uruchom polecenie
terraform state mv
dla blokówgoogle_firebase_project
,google_firebase_web_app
i wszystkich innych bloków zasobów w plikumain.tf
. - Jeśli teraz ponownie uruchomisz polecenie
terraform plan
, nie powinno ono wskazywać, że Terraform usunie projekt utworzony w pierwszej części tego laboratorium.
- Jeśli zastosujesz tę konfigurację, która korzysta z
- Uruchom
terraform apply
, aby udostępnić nowy projekt Firebase „staging” i wszystkie jego zasoby oraz włączyć jego usługi. - Sprawdź, czy wszystko zostało skonfigurowane i włączone zgodnie z oczekiwaniami, tak jak wcześniej w konsoli Firebase.
12. Krok dodatkowy: wdróż aplikacje w środowisku testowym i produkcyjnym
- W kodzie aplikacji zmień
firebase-config.js
, aby zamiast tego używać konfiguracji Firebase z projektu testowego.
Aby przypomnieć sobie, jak uzyskać konfigurację Firebase i dodać ją do aplikacji, zapoznaj się z wcześniejszym krokiem tego kursu: Dodawanie konfiguracji Firebase do aplikacji. - W katalogu głównym
web
uruchom to polecenie, aby wdrożyć aplikację w przejściowym projekcie Firebase.firebase deploy --only hosting --project=<STAGING_PROJECT_ID>
- Otwórz aplikację testową w przeglądarce, korzystając z adresu URL wyświetlanego w wyniku działania polecenia
firebase deploy
. Spróbuj się zalogować, wysłać wiadomości i przesłać obrazy.
Gdy wdrażasz aplikację w projekcie Firebase, korzysta ona z prawdziwych zasobów Firebase, a nie z zasobów emulowanych. Podczas korzystania z aplikacji w wersji testowej w projekcie testowym w konsoli Firebase powinny pojawiać się dane i obrazy. - Po przetestowaniu aplikacji w środowisku testowym zmień
firebase-config.js
z powrotem na konfigurację Firebase projektu produkcyjnego (pierwszego projektu utworzonego w tym laboratorium). - W katalogu głównym
web
uruchom to polecenie, aby wdrożyć aplikację w produkcyjnym projekcie Firebase.firebase deploy --only hosting --project=<PRODUCTION_PROJECT_ID>
- Otwórz aplikację produkcyjną w przeglądarce, korzystając z adresu URL wydrukowanego w wyniku działania polecenia
firebase deploy
. Spróbuj się zalogować, wysłać wiadomości i przesłać obrazy.
Dane i obrazy powinny pojawić się w projekcie produkcyjnym w konsoli Firebase. - Gdy skończysz korzystać z obu aplikacji w tym laboratorium, możesz zatrzymać ich obsługę przez Firebase. Uruchom to polecenie w przypadku każdego projektu:
firebase hosting:disable --project=<STAGING_PROJECT_ID>
firebase hosting:disable --project=<PRODUCTION_PROJECT_ID>
13. Gratulacje!
Udało Ci się skonfigurować aplikację internetową do czatu w czasie rzeczywistym za pomocą Terraform. Zastosowano też sprawdzone metody dotyczące środowisk deweloperskich, tworząc osobne projekty Firebase na potrzeby testowania i produkcji.
Omówione zagadnienia
- Zarządzanie zasobami w chmurze za pomocą interfejsu wiersza poleceń Terraform
- Konfigurowanie usług Firebase (Uwierzytelnianie, Firestore, Cloud Storage i reguły zabezpieczeń) za pomocą Terraform
- Uruchamianie i testowanie aplikacji internetowej lokalnie za pomocą Pakietu emulatorów lokalnych Firebase
- Importowanie Firebase do aplikacji internetowej
- Replikowanie konfiguracji w wielu środowiskach za pomocą Terraform
Więcej informacji o Firebase i Terraform znajdziesz w naszej dokumentacji. Znajdziesz tam listę wszystkich usług Firebase obsługujących Terraform, przykładowe konfiguracje Terraform dla typowych przypadków użycia oraz przydatne wskazówki dotyczące rozwiązywania problemów i odpowiedzi na najczęstsze pytania.