azure api 管理

    科技2023-12-06  116

    azure api 管理

    Key Technologies: Hasura, Postgres, Terraform, Docker, and Azure.

    关键技术: Hasura , Postgres , Terraform , Docker和Azure 。

    I created a data model to store railroad systems, services, scheduled, time points, and related information, detailing the schema “Beyond CRUD n’ Cruft Data-Modeling” with a few tweaks. The original I’d created for Apache Cassandra, and have since switched to Postgres giving the option of primary and foreign keys, relations, and the related connections for the model.

    我创建了一个数据模型来存储铁路系统,服务,计划的,时间点和相关信息,并通过一些调整详细描述了“超越CRUD n'Cruft数据建模”模式 。 我为Apache Cassandra创建的原始文档,后来切换到Postgres,为模型提供了主键和外键,关系以及相关的连接选项。

    In this post I’ll use that schema to build out an infrastructure as code solution with Terraform, utilizing Postgres and Hasura (OSS).

    在本文中,我将使用Postgres和Hasura(OSS)使用该架构通过Terraform构建基础架构作为代码解决方案。

    先决条件 (Prerequisites)

    Terraform & Azure CLI — Installation & Setup.

    Terraform和Azure CLI- 安装和设置 。

    Docker — Installation & Setup on Windows/Windows Home, MacOS, Linux Ubuntu, Fedora, Debian, or CentOS.

    Docker-在Windows / Windows Home , MacOS ,Linux Ubuntu , Fedora , Debian或CentOS上进行安装和设置。

    Hasura CLI — Installing the binary globally, and other options.

    Hasura CLI- 全局安装二进制文件和其他选项 。

    Docker Compose开发环境 (Docker Compose Development Environment)

    For the Docker Compose file I just placed them in the root of the repository. Add a docker-compose.yaml file and then added services. The first service I setup was the Postgres/PostgreSQL database. This is using the standard Postgres image on Docker Hub. I opted for version 12, I do want it to always restart if it gets shutdown or crashes, and then the last of the obvious settings is the port which maps from 5432 to 5432.

    对于Docker Compose文件,我只是将它们放置在存储库的根目录中。 添加docker-compose.yaml文件,然后添加服务。 我设置的第一个服务是Postgres / PostgreSQL数据库。 这是使用Docker Hub上的标准Postgres映像 。 我选择了版本12,但我确实希望它在关机或崩溃时始终重新启动,然后最后一个明显的设置是端口从5432映射到5432。

    For the volume, since I might want to backup or tinker with the volume, I put the db_data location set to my own Codez directory. All my databases I tend to setup like this in case I need to debug things locally.

    对于该卷,由于可能要备份或修改该卷,因此将db_data位置设置为我自己的Codez目录。 我倾向于像这样设置所有数据库,以防需要本地调试。

    The POSTGRES_PASSWORD is an environment variable, thus the syntax ${PPASSWORD}. This way no passwords go into the repo. Then I can load the environment variable via a standard export POSTGRES_PASSWORD="theSecretPasswordHere!" line in my system startup script or via other means.

    POSTGRES_PASSWORD是环境变量,因此语法${PPASSWORD} 。 这样,没有密码进入仓库。 然后,我可以通过标准export POSTGRES_PASSWORD="theSecretPasswordHere!"加载环境变量export POSTGRES_PASSWORD="theSecretPasswordHere!" 在我的系统启动脚本中插入行或通过其他方式。

    services: postgres: image: postgres:12 restart: always volumes: - db_data:/Users/adron/Codez/databases environment: POSTGRES_PASSWORD: ${PPASSWORD} ports: - 5432:5432

    For the db_data volume, toward the bottom I add the key value setting to reference it.

    对于db_data卷,向底部添加键值设置以引用它。

    volumes: db_data:

    Next I added the GraphQL solution with Hasura. The image for the v1.1.0 probably needs to be updated (I believe we’re on version 1.3.x now) so I’ll do that soon, but got the example working with v1.1.0. Next I’ve got the ports mapped to open 8080 to 8080. Next, this service will depend on the postgres service already detailed. Restart, also set on always just as the postgres service. Finally two evnironment variables for the container:

    接下来,我使用Hasura添加了GraphQL解决方案。 v1.1.0的映像可能需要更新(我相信我们现在使用的是1.3.x版),因此我将尽快进行更新,但该示例已与v1.1.0一起使用。 接下来,我将端口映射为打开8080到8080。接下来,此服务将取决于已经详述的postgres服务。 重新启动,也总是像postgres服务一样设置。 最后是容器的两个环境变量:

    HASURA_GRAPHQL_DATABASE_URL — this variable is the base postgres URL connection string.

    HASURA_GRAPHQL_DATABASE_URL —此变量是基本的postgres URL连接字符串。 HASURA_GRAPHQL_ENABLE_CONSOLE — this is the variable that will set the console user interface to initiate. We’ll definitely want to have this for the development environment. However in production I’d likely want this turned off.

    HASURA_GRAPHQL_ENABLE_CONSOLE —这是将控制台用户界面设置为启动的变量。 我们绝对希望在开发环境中使用它。 但是在生产中,我可能希望关闭此功能。 graphql-engine: image: hasura/graphql-engine:v1.1.0 ports: - "8080:8080" depends_on: - "postgres" restart: always environment: HASURA_GRAPHQL_DATABASE_URL: postgres://postgres:logistics@postgres:5432/postgres HASURA_GRAPHQL_ENABLE_CONSOLE: "true"

    At this point the commands to start this are relatively minimal, but in spite of that I like to create a start and stop shell script. My start script and stop script simply look like this:

    此时,启动此命令的命令相对较少,尽管如此,我还是喜欢创建一个启动和停止Shell脚本。 我的开始脚本和停止脚本看起来像这样:

    Starting the services.

    启动服务。

    docker-compose up -d

    For the first execution of the services you may want to skip the -d and instead watch the startup just to become familiar with the events and connections as they start.

    对于服务的首次执行,您可能希望跳过-d,而是看着启动,只是为了熟悉事件和连接的开始。

    Stopping the services.

    停止服务。

    docker-compose down

    🚀 That’s it for the basic development environment, we’re launched and ready for development. With the services started, navigate to https://localhost:8080/console to start working with the user interface, which I’ll have a more details on the “Beyond CRUD n’ Cruft Data-Modeling” swap to Hasura and Postgres in an upcoming blog post.

    for就是这样,对于基本开发环境,我们已经启动并准备进行开发。 随着服务的启动,导航到https:// localhost:8080 / console来开始使用用户界面,我将在“超越CRUD和Cruft数据建模”交换到Hasura和Postgres的详细信息中。即将发布的博客文章。

    For full syntax of the docker-compose.yaml check out this gist: https://gist.github.com/Adron/0b2ea637b5e00681f4d62404805c3a00

    有关docker-compose.yaml的完整语法,请查看以下要点: https ://gist.github.com/Adron/0b2ea637b5e00681f4d62404805c3a00

    地形生产环境 (Terraform Production Environment)

    For the production deployment of this stack I want to deploy to Azure, use Terraform for infrastructure as code, and the Azure database service for Postgres while running Hasura for my API GraphQL tier.

    对于此堆栈的生产部署,我想部署到Azure ,并在为我的API GraphQL层运行Hasura时将Terraform用作基础结构作为代码,并将Azure数据库服务用于Postgres 。

    For the Terraform files I created a folder and added a main.tf file. I always create a folder to work in, generally, to keep the state files and initial prototyping of the infrastructre in a singular place. Eventually I'll setup a location to store the state and fully automate the process through a continues integration (CI) and continuous delivery (CD) process. For now though, just a singular folder to keep it all in.

    对于Terraform文件,我创建了一个文件夹并添加了main.tf文件。 通常,我总是创建一个用于工作的文件夹,以将状态文件和基础结构的初始原型保留在单个位置。 最终,我将设置一个位置来存储状态,并通过持续集成(CI)和连续交付(CD)流程使流程完全自动化。 目前,仅保留一个文件夹即可。

    For this I know I’ll need a few variables and add those to the file. These are variables that I’ll use to provide values to multiple resources in the Terraform templating.

    为此,我知道我需要一些变量并将其添加到文件中。 这些变量将用于在Terraform模板中为多个资源提供值。

    variable "database" { type = string}variable "server" { type = string}variable "username" { type = string}variable "password" { type = string}

    One other variable I’ll want so that it is a little easier to verify what my Hasura connection information is, will look like this.

    我想要的另一个变量是这样,它可以更容易地验证我的Hasura连接信息是什么。

    output "hasura_url" { value = "postgres://${var.username}%40${azurerm_postgresql_server.logisticsserver.name}:${var.password}@${azurerm_postgresql_server.logisticsserver.fqdn}:5432/${var.database}"}

    Let’s take this one apart a bit. There is a lot of concatenated and interpolated variables being wedged together here. This is basically the Postgres connection string that Hasura will need to make a connection. It includes the username and password, and all of the pertinent parsed and string escaped values. Note specifically the %40 between the ${var.username} and ${azurerm_postgresql_server.logisticsserver.name} variables while elsewhere certain characters are not escaped, such as the @ sign. When constructing this connection string, it is very important to be prescient of all these specific values being connected together. But, I did the work for you so it's a pretty easy copy and paste now!

    让我们分开一点。 这里有许多串联和插值变量被楔在一起。 这基本上是Hasura建立连接所需的Postgres连接字符串。 它包括用户名和密码,以及所有相关的已解析和字符串转义的值。 请特别注意${var.username}和${azurerm_postgresql_server.logisticsserver.name}变量之间的%40 ,而其他字符未转义,例如@符号。 在构造此连接字符串时,预先了解所有这些特定值连接在一起非常重要。 但是,我为您完成了工作,因此现在可以非常轻松地进行复制和粘贴!

    Next I’ll need the Azure provider information.

    接下来,我将需要Azure提供程序信息。

    provider "azurerm" { version = "=2.20.0" features {}}

    Note that there is a features array that is just empty, it is now required for the provider to designate this even if the array is empty.

    请注意,有一个features数组只是空的,即使数组为空,提供者现在也需要指定它。

    Next up is the resource group that everything will be deployed to.

    下一步是将所有内容部署到的资源组。

    resource "azurerm_resource_group" "adronsrg" { name = "adrons-rg" location = "westus2"}

    Now the Postgres Server itself. Note the location and resource_group_name simply map back to the resource group. Another thing I found a little confusing, as I wasn't sure if it was a Terraform name or resource name tag or the server name itself, is the "name" key value pair in this resource. It is however the server name, which I've assigned var.server. The next value assigned "B_Gen5_2" is the Azure designator, which is a bit cryptic. More on that in a future post.

    现在是Postgres服务器本身。 注意, location和resource_group_name只是映射回资源组。 我不确定的另一件事是不确定此资源中的“名称”键值对,因为我不确定它是Terraform名称或资源名称标签还是服务器名称本身。 但是,这是服务器名称,我已var.server分配了var.server 。 下一个分配为“ B_Gen5_2”的值是Azure指示符,这有点神秘。 在以后的文章中将对此进行更多介绍。

    After that information the storage is set to, I believe if I RTFM’ed correctly to 5 gigs of storage. For what I’m doing this will be fine. The backup is setup for 7 days of retention. This means I’ll be able to fall back to a backup from any of the last seven days, but after 7 days the backups are rolled and the last day is deleted to make space for the newest backup. The geo_redundant_backup_enabled setting is set to false, because with Postgres' excellent reliability and my desire to not pay for that extra reliability insurance, I don't need geographic redundancy. Last I set auto_grow_enabled to true, albeit I do need to determine the exact flow of logic this takes for this particular implementation and deployment of Postgres.

    在将信息设置为存储之后,我相信我是否将RTFM正确设置为5 gigs。 对于我正在做的事情,这会很好。 备份设置为保留7天。 这意味着我将能够从最近7天的任何时间恢复到备份状态,但是7天后将备份备份,并删除最后一天以为最新备份腾出空间。 geo_redundant_backup_enabled设置设置为false,因为Postgres具有出色的可靠性,并且我希望不为这种额外的可靠性保险付费,因此我不需要地理冗余。 最后,我将auto_grow_enabled设置为true,尽管我确实需要确定针对Postgres的这种特定实现和部署所需要的确切逻辑流程。

    The last chunk of details for this resource are simply the username and password, which are derived from variables, which are derived from environment variables to keep the actual username and passwords out of the repository. The last two bits set the ssl to enabled and the version of Postgres to v9.5.

    此资源的最后细节只是用户名和密码,它们是从变量派生的,变量是从环境变量派生的,以将实际的用户名和密码保留在存储库之外。 最后两位将ssl设置为enabled,将Postgres的版本设置为v9.5。

    resource "azurerm_postgresql_server" "logisticsserver" { name = var.server location = azurerm_resource_group.adronsrg.location resource_group_name = azurerm_resource_group.adronsrg.name sku_name = "B_Gen5_2" storage_mb = 5120 backup_retention_days = 7 geo_redundant_backup_enabled = false auto_grow_enabled = true administrator_login = var.username administrator_login_password = var.password version = "9.5" ssl_enforcement_enabled = true}

    Since the database server is all setup, now I can confidently add an actual database to that database. Here the resource_group_name pulls from the resource group resource and the server_name pulls from the server resource. The name, being the database name itself, I derive from a variable too. Then the character set is UTF8 and collation is set to US English, which are generally standard settings on Postgres being installed for use within the US.

    由于数据库服务器已全部安装,因此现在我可以放心地将实际数据库添加到该数据库中。 在这里, resource_group_name从资源组资源中提取, server_name从服务器资源中提取。 该名称本身就是数据库名称,我也是从变量派生的。 然后将字符集设置为UTF8,将排序规则设置为美国英语,这通常是在美国安装的Postgres的标准设置。

    resource "azurerm_postgresql_database" "logisticsdb" { name = var.database resource_group_name = azurerm_resource_group.adronsrg.name server_name = azurerm_postgresql_server.logisticsserver.name charset = "UTF8" collation = "English_United States.1252"}

    The next thing I discovered, after some trial and error and a good bit of searching, is the Postgres specific firewall rule. It appears this is related to the Postgres service in Azure specifically, as for a number of trials and many errors I attempted to use the standard available firewalls and firewall rules that are available in virtual networks. My understanding now is that the Postgres Servers exist outside of that paradigm and by relation to that have their own firewall rules.

    经过一番反复尝试和大量搜索之后,我发现的第二件事是Postgres特定的防火墙规则。 看来,这与Azure中的Postgres服务特别相关,在许多尝试和许多错误中,我尝试使用虚拟网络中可用的标准可用防火墙和防火墙规则。 我现在的理解是,Postgres服务器不存在于该范式中,并且与之相关,具有自己的防火墙规则。

    This firewall rule basically attaches the firewall to the resource group, then the server itself, and allows internal access between the Postgres Server and the Hasura instance.

    该防火墙规则基本上将防火墙附加到资源组,然后附加到服务器本身,并允许Postgres Server和Hasura实例之间的内部访问。

    resource "azurerm_postgresql_firewall_rule" "pgfirewallrule" { name = "allow-azure-internal" resource_group_name = azurerm_resource_group.adronsrg.name server_name = azurerm_postgresql_server.logisticsserver.name start_ip_address = "0.0.0.0" end_ip_address = "0.0.0.0"}

    The last and final step is setting up the Hasura instance to work with the Postgres Server and the designated database now available.

    最后也是最后一步是设置Hasura实例以与Postgres Server和现在可用的指定数据库一起使用。

    To setup the Hasura instance I decided to go with the container service that Azure has. It provides a relatively inexpensive, easier to setup, and more concise way to setup the server than setting up an entire VM or full Kubernetes environment just to run a singular instance.

    为了设置Hasura实例,我决定使用Azure具有的容器服务。 与仅为了运行单个实例而设置整个VM或完整的Kubernetes环境相比,它提供了一种相对便宜,易于设置且更简洁的服务器设置方法。

    The first section sets up a public IP address, which of course I’ll need to change as the application is developed and I’ll need to provide an actual secured front end. But for now, to prove out the deployment, I’ve left it public, setup the DNS label, and set the OS type.

    第一部分设置了公共IP地址,当然,在开发应用程序时我将需要更改该IP地址,并且需要提供实际的安全前端。 但是现在,为证明部署,我将其公开,设置DNS标签,并设置操作系统类型。

    The next section in this resource I then outline the container details. The name of the container can be pretty much whatever you want it to be, it’s your designator. The image however is specifically hasura/graphql-engine. I've set the CPU and memory pretty low, at 0.5 and 1.5 respectively as I don't suspect I'll need a ton of horsepower just to test things out.

    然后,在本资源的下一部分中,我概述了容器的详细信息。 容器的名称几乎可以是您想要的任何名称,它是您的指定者。 但是,该图像特别是hasura/graphql-engine 。 我将CPU和内存设置得很低,分别为0.5和1.5,因为我不怀疑我需要大量的能力来进行测试。

    Next I set the port available to port 80. Then the environment variables HASURA_GRAPHQL_SERVER_PORT and HASURA_GRAPHQL_ENABLE_CONSOLE to that port to display the console there. Then finally that wild concatenated interpolated connection string that I have setup as an output variable - again specifically for testing - HASURA_GRAPHQL_DATABASE_URL.

    接下来,我将可用端口设置为端口80。然后将环境变量HASURA_GRAPHQL_SERVER_PORT和HASURA_GRAPHQL_ENABLE_CONSOLE到该端口以在其中显示控制台。 然后最后,我已将其设置为输出变量的狂野级联插值连接字符串-再次专门用于测试HASURA_GRAPHQL_DATABASE_URL 。

    resource "azurerm_container_group" "adronshasure" { name = "adrons-hasura-logistics-data-layer" location = azurerm_resource_group.adronsrg.location resource_group_name = azurerm_resource_group.adronsrg.name ip_address_type = "public" dns_name_label = "logisticsdatalayer" os_type = "Linux" container { name = "hasura-data-layer" image = "hasura/graphql-engine" cpu = "0.5" memory = "1.5" ports { port = 80 protocol = "TCP" } environment_variables = { HASURA_GRAPHQL_SERVER_PORT = 80 HASURA_GRAPHQL_ENABLE_CONSOLE = true } secure_environment_variables = { HASURA_GRAPHQL_DATABASE_URL = "postgres://${var.username}%40${azurerm_postgresql_server.logisticsserver.name}:${var.password}@${azurerm_postgresql_server.logisticsserver.fqdn}:5432/${var.database}" } } tags = { environment = "datalayer" }}

    With all that setup it’s time to test. But first, just for clarity here’s the entire Terraform file contents.

    完成所有设置后,就该进行测试了。 但是首先,为清楚起见,这里是整个Terraform文件的内容。

    provider "azurerm" { version = "=2.20.0" features {}}resource "azurerm_resource_group" "adronsrg" { name = "adrons-rg" location = "westus2"}resource "azurerm_postgresql_server" "logisticsserver" { name = var.server location = azurerm_resource_group.adronsrg.location resource_group_name = azurerm_resource_group.adronsrg.name sku_name = "B_Gen5_2" storage_mb = 5120 backup_retention_days = 7 geo_redundant_backup_enabled = false auto_grow_enabled = true administrator_login = var.username administrator_login_password = var.password version = "9.5" ssl_enforcement_enabled = true}resource "azurerm_postgresql_database" "logisticsdb" { name = var.database resource_group_name = azurerm_resource_group.adronsrg.name server_name = azurerm_postgresql_server.logisticsserver.name charset = "UTF8" collation = "English_United States.1252"}resource "azurerm_postgresql_firewall_rule" "pgfirewallrule" { name = "allow-azure-internal" resource_group_name = azurerm_resource_group.adronsrg.name server_name = azurerm_postgresql_server.logisticsserver.name start_ip_address = "0.0.0.0" end_ip_address = "0.0.0.0"}resource "azurerm_container_group" "adronshasure" { name = "adrons-hasura-logistics-data-layer" location = azurerm_resource_group.adronsrg.location resource_group_name = azurerm_resource_group.adronsrg.name ip_address_type = "public" dns_name_label = "logisticsdatalayer" os_type = "Linux" container { name = "hasura-data-layer" image = "hasura/graphql-engine" cpu = "0.5" memory = "1.5" ports { port = 80 protocol = "TCP" } environment_variables = { HASURA_GRAPHQL_SERVER_PORT = 80 HASURA_GRAPHQL_ENABLE_CONSOLE = true } secure_environment_variables = { HASURA_GRAPHQL_DATABASE_URL = "postgres://${var.username}%40${azurerm_postgresql_server.logisticsserver.name}:${var.password}@${azurerm_postgresql_server.logisticsserver.fqdn}:5432/${var.database}" } } tags = { environment = "datalayer" }}variable "database" { type = string}variable "server" { type = string}variable "username" { type = string}variable "password" { type = string}output "hasura_url" { value = "postgres://${var.username}%40${azurerm_postgresql_server.logisticsserver.name}:${var.password}@${azurerm_postgresql_server.logisticsserver.fqdn}:5432/${var.database}"}

    To run this, similarly to how I setup the dev environment, I’ve setup a startup and shutdown script. The startup script named prod-start.sh has the following commands. Note the $PUSERNAME and $PPASSWORD are derived from environment variables, where as the other two values are just inline.

    要运行此程序,与设置开发环境的方式类似,我已经设置了启动和关闭脚本。 名为prod-start.sh的启动脚本具有以下命令。 请注意, $PUSERNAME和$PPASSWORD是从环境变量派生的,而其他两个值只是内联。

    cd terraformterraform apply -auto-approve \ -var 'server=logisticscoresystemsdb' \ -var 'username='$PUSERNAME'' \ -var 'password='$PPASSWORD'' \ -var 'database=logistics'

    For the full Terraform file check out this gist: https://gist.github.com/Adron/6d7cb4be3a22429d0ff8c8bd360f3ce2

    有关完整的Terraform文件,请查看以下要点: https : //gist.github.com/Adron/6d7cb4be3a22429d0ff8c8bd360f3ce2

    Executing that script gives me results that, if everything goes right, looks similarly to this.

    如果一切正常,执行该脚本会给我带来类似于此结果的结果。

    ./prod-start.sh azurerm_resource_group.adronsrg: Creating...azurerm_resource_group.adronsrg: Creation complete after 1s [id=/subscriptions/77ad15ff-226a-4aa9-bef3-648597374f9c/resourceGroups/adrons-rg]azurerm_postgresql_server.logisticsserver: Creating...azurerm_postgresql_server.logisticsserver: Still creating... [10s elapsed]azurerm_postgresql_server.logisticsserver: Still creating... [20s elapsed]...and it continues.

    Do note that this process will take a different amount of time and is completely normal for it to take ~3 or more minutes. Once the server is done in the build process a lot of the other activities start to take place very quickly. Once it’s all done, toward the end of the output I get my hasura_url output variable so that I can confirm that it is indeed put together correctly! Now that this is preformed I can take next steps and remove that output variable, start to tighten security, and other steps. Which I’ll detail in a future blog post once more of the application is built.

    请注意,此过程将花费不同的时间,并且花费大约3分钟或更长时间是完全正常的。 在构建过程中完成服务器后,许多其他活动开始很快发生。 一旦完成,在输出末尾,我将获得hasura_url输出变量,以便可以确认它确实正确地组合在一起! 现在已经执行了此操作,我可以继续执行下一步,删除该输出变量,开始加强安全性,以及其他步骤。 一旦构建了更多应用程序,我将在以后的博客文章中详细介绍。

    ... other output here ...azurerm_container_group.adronshasure: Still creating... [40s elapsed]azurerm_postgresql_database.logisticsdb: Still creating... [40s elapsed]azurerm_postgresql_database.logisticsdb: Still creating... [50s elapsed]azurerm_container_group.adronshasure: Still creating... [50s elapsed]azurerm_postgresql_database.logisticsdb: Creation complete after 51s [id=/subscriptions/77ad15ff-226a-4aa9-bef3-648597374f9c/resourceGroups/adrons-rg/providers/Microsoft.DBforPostgreSQL/servers/logisticscoresystemsdb/databases/logistics]azurerm_container_group.adronshasure: Still creating... [1m0s elapsed]azurerm_container_group.adronshasure: Creation complete after 1m4s [id=/subscriptions/77ad15ff-226a-4aa9-bef3-648597374f9c/resourceGroups/adrons-rg/providers/Microsoft.ContainerInstance/containerGroups/adrons-hasura-logistics-data-layer]Apply complete! Resources: 5 added, 0 changed, 0 destroyed.Outputs:hasura_url = postgres://postgres%40logisticscoresystemsdb:theSecretPassword!@logisticscoresystemsdb.postgres.database.azure.com:5432/logistics

    Now if I navigate over to logisticsdatalayer.westus2.azurecontainer.io I can view the Hasura console! But where in the world is this fully qualified domain name (FQDN)? Well, the quickest way to find it is to navigate to the Azure portal and take a look at the details page of the container itself. In the upper right the FQDN is available as well as the IP that has been assigned to the container!

    现在,如果我导航到logisticsdatalayer.westus2.azurecontainer.io ,则可以查看Hasura控制台! 但是,这个完全合格的域名(FQDN)在世界上呢? 好吧,最快的找到它的方法是导航到Azure门户并查看容器本身的详细信息页面。 右上角的FQDN以及分配给容器的IP均可用!

    Navigating to that FQDN URI will bring up the Hasura console!

    导航到该FQDN URI将打开Hasura控制台!

    下一步 (Next Steps)

    From here I’ll take up next steps in a subsequent post. I’ll get the container secured, map the user interface or CLI or whatever the application is that I build lined up to the API end points, and more!

    从这里开始,我将在后续文章中介绍下一步。 我将确保容器的安全,映射用户界面或CLI或我构建的与API端点对齐的任何应用程序,等等!

    翻译自: https://medium.com/@adron/setup-postgres-and-graphql-api-with-hasura-on-azure-980bb1873da4

    azure api 管理

    相关资源:四史答题软件安装包exe
    Processed: 0.017, SQL: 8