appdev_with_generative_ai/tf/firebase.tf (129 lines of code) (raw):
resource "google_firebase_web_app" "knowledge_drive" {
provider = google-beta
display_name = "knowledge-drive"
}
data "google_firebase_web_app_config" "knowledge_drive" {
provider = google-beta
web_app_id = google_firebase_web_app.knowledge_drive.app_id
}
resource "local_file" "firebase_config" {
filename = "firebase-config.json"
content = jsonencode({
projectId = var.project_id
appId = google_firebase_web_app.knowledge_drive.app_id
apiKey = data.google_firebase_web_app_config.knowledge_drive.api_key
authDomain = data.google_firebase_web_app_config.knowledge_drive.auth_domain
storageBucket = lookup(data.google_firebase_web_app_config.knowledge_drive, "storage_bucket", "")
})
}
resource "google_identity_platform_config" "default" {
sign_in {
allow_duplicate_emails = false
anonymous {
enabled = false
}
email {
enabled = true
password_required = true
}
}
}
resource "google_firestore_database" "default" {
provider = google-beta
name = "(default)"
location_id = var.region
type = "FIRESTORE_NATIVE"
}
resource "google_firebaserules_ruleset" "firestore" {
provider = google-beta
source {
files {
name = "firestore.rules"
content = file("firestore.rules")
}
}
depends_on = [
google_firestore_database.default
]
}
resource "google_firebaserules_release" "firestore" {
provider = google-beta
name = "cloud.firestore"
ruleset_name = google_firebaserules_ruleset.firestore.name
}
resource "google_firestore_index" "items1" {
provider = google-beta
collection = "items"
query_scope = "COLLECTION"
fields {
field_path = "parent"
order = "ASCENDING"
}
fields {
field_path = "timestamp"
order = "DESCENDING"
}
depends_on = [
google_firestore_database.default
]
}
resource "google_firestore_index" "items2" {
provider = google-beta
collection = "items"
query_scope = "COLLECTION"
fields {
field_path = "name"
order = "ASCENDING"
}
fields {
field_path = "timestamp"
order = "DESCENDING"
}
depends_on = [
google_firestore_index.items1
]
}
resource "time_sleep" "wait_30_seconds_for_firebase" {
depends_on = [
google_firestore_database.default
]
create_duration = "30s"
}
resource "google_app_engine_application" "default" {
location_id = var.region
depends_on = [
time_sleep.wait_30_seconds_for_firebase
]
}
resource "google_firebase_storage_bucket" "default" {
provider = google-beta
bucket_id = google_app_engine_application.default.default_bucket
}
resource "google_firebaserules_ruleset" "storage" {
provider = google-beta
source {
files {
name = "storage.rules"
content = file("storage.rules")
}
}
depends_on = [
google_firebase_storage_bucket.default
]
}
resource "google_firebaserules_release" "storage" {
provider = google-beta
name = "firebase.storage/${google_app_engine_application.default.default_bucket}"
ruleset_name = "projects/${var.project_id}/rulesets/${google_firebaserules_ruleset.storage.name}"
depends_on = [
google_firebaserules_ruleset.storage
]
}
resource "null_resource" "update_dot_env_for_knowledge_drive" {
provisioner "local-exec" {
command = "./firebase_config.sh"
}
depends_on = [
local_file.firebase_config
]
}