- examples/big-suite: E-Commerce 10 functions, 6 layers, real depends_on - provider: nodejs packages now wrapped in ESM zip (buildJSDeployZip) - provider: loadPackageLiteral reads raw file, nodejs zip via source_dir - all 10 functions verified working: python/node/ruby/go runtimes
86 lines
3.5 KiB
Terraform
86 lines
3.5 KiB
Terraform
# ──────────────────────────────────────────────────────────────────────────────
|
|
# Services layer: user-get, product-catalog, cart-service
|
|
#
|
|
# user-get — depends_on auth-check (нужно что auth маршрут доступен)
|
|
# product-catalog — depends_on rate-limiter
|
|
# cart-service — depends_on ОБОИХ: user-get + product-catalog
|
|
# (cart нужны оба сервиса — деплой только когда оба готовы)
|
|
# ──────────────────────────────────────────────────────────────────────────────
|
|
|
|
# ─── user-get ─────────────────────────────────────────────────────────────────
|
|
|
|
resource "fission_package" "user_get" {
|
|
name = "ecom-user-get-pkg"
|
|
environment = fission_environment.python.name
|
|
source_dir = "${path.module}/code/python-user"
|
|
|
|
depends_on = [fission_http_trigger.auth_check]
|
|
}
|
|
|
|
resource "fission_function" "user_get" {
|
|
name = "ecom-user-get"
|
|
environment = fission_environment.python.name
|
|
package_name = fission_package.user_get.name
|
|
entrypoint = "main.main"
|
|
}
|
|
|
|
resource "fission_http_trigger" "user_get" {
|
|
name = "ecom-user-get-route"
|
|
function = fission_function.user_get.name
|
|
url = "/ecom/users"
|
|
methods = ["GET"]
|
|
}
|
|
|
|
# ─── product-catalog ──────────────────────────────────────────────────────────
|
|
|
|
resource "fission_package" "product_catalog" {
|
|
name = "ecom-product-catalog-pkg"
|
|
environment = fission_environment.ruby.name
|
|
source_dir = "${path.module}/code/ruby-product"
|
|
|
|
depends_on = [fission_http_trigger.rate_limiter]
|
|
}
|
|
|
|
resource "fission_function" "product_catalog" {
|
|
name = "ecom-product-catalog"
|
|
environment = fission_environment.ruby.name
|
|
package_name = fission_package.product_catalog.name
|
|
entrypoint = "handler"
|
|
}
|
|
|
|
resource "fission_http_trigger" "product_catalog" {
|
|
name = "ecom-product-catalog-route"
|
|
function = fission_function.product_catalog.name
|
|
url = "/ecom/products"
|
|
methods = ["GET"]
|
|
}
|
|
|
|
# ─── cart-service ─────────────────────────────────────────────────────────────
|
|
# user-get и product-catalog деплоятся ПАРАЛЛЕЛЬНО,
|
|
# cart ждёт пока ОБА готовы
|
|
|
|
resource "fission_package" "cart_service" {
|
|
name = "ecom-cart-service-pkg"
|
|
environment = fission_environment.python.name
|
|
source_dir = "${path.module}/code/python-cart"
|
|
|
|
depends_on = [
|
|
fission_http_trigger.user_get,
|
|
fission_http_trigger.product_catalog,
|
|
]
|
|
}
|
|
|
|
resource "fission_function" "cart_service" {
|
|
name = "ecom-cart-service"
|
|
environment = fission_environment.python.name
|
|
package_name = fission_package.cart_service.name
|
|
entrypoint = "main.main"
|
|
}
|
|
|
|
resource "fission_http_trigger" "cart_service" {
|
|
name = "ecom-cart-service-route"
|
|
function = fission_function.cart_service.name
|
|
url = "/ecom/cart"
|
|
methods = ["GET", "POST", "DELETE"]
|
|
}
|