#cloud #http-api #api #http #web #env-var #service-configuration

bin+lib render_cdk

本包提供了一种简化的接口,用于与Render交互,Render是一个允许您轻松构建、部署和扩展应用程序的平台。

20个版本

0.0.21 2024年8月22日
0.0.20 2024年8月21日
0.0.12 2024年7月29日
0.0.2 2024年5月25日

52 in HTTP客户端

Download history 230/week @ 2024-05-23 32/week @ 2024-05-30 6/week @ 2024-06-06 59/week @ 2024-07-04 564/week @ 2024-07-11 344/week @ 2024-07-18 279/week @ 2024-07-25 37/week @ 2024-08-01 417/week @ 2024-08-08 506/week @ 2024-08-15

1,256 每月下载量

MIT 许可证

99KB
1.5K SLoC

Render 是一个一站式云平台,旨在简化您应用程序和网站的 开发和部署。它提供与 免费TLS证书全球CDN私有网络直接从Git自动部署 的无缝集成。轻松构建、运行和扩展,一切都在一个统一的解决方案中。

入门

配置

要配置与 render_cdk 一起使用的环境变量,您需要设置 API_KEYOWNER_CREDENTIALS 环境变量。您可以通过在项目根目录中创建一个 .env 文件来完成此操作,内容如下

API_KEY=rnd_xxxxXXXXxxxxXXXXxxxXX
OWNER_CREDENTIALS=<render>@<email>.com

请确保将 rnd_xxxxXXXXxxxxXXXXxxxXX 替换为您实际的Render API密钥。

安装

render_cdk 添加到您的 Cargo.toml

[dependencies]
render_cdk = "0.0.21"
  • 或者,在项目根目录中运行 cargo add render_cdk 也会将其添加到您的项目中。

使用示例

以下是一些使用 render_cdk 包与 Render Cloud 交互的基本示例

1. 查询已部署服务

您可以使用 ServiceManager 模块轻松检索有关您的已部署服务的信息。以下是根据各种标准查询服务的示例。

use render_cdk::environment_management::prelude::*;
use render_cdk::resource_management::prelude::*;
use tokio::main;

#[main]
async fn main() {
    // List all deployed services, limiting the result to 50.
    ServiceManager::list_all_services("50").await;

    // List all services with the status "suspended", limiting the result to 50.
    ServiceManager::list_services_with_status("suspended", "50").await;

    // Find a specific service by its name and type.
    ServiceManager::find_service_by_name_and_type("my_api", "web_service").await;

    // Find services deployed in a specific region (e.g., Oregon), limiting the result to 50.
    ServiceManager::find_service_by_region("oregon", "50").await;

    // Find services based on the environment they are deployed in, limiting the result to 50.
    ServiceManager::find_service_by_environment("image", "50").await;

    // Deleting a web service by name and type.
    ServiceManager::delete_service("my_api", "web_service").await.unwrap();

    // Deleting a static site by name and type.
    ServiceManager::delete_service("my_static_site", "static").await.unwrap();

    // List all Postgres database instances, limiting the result to 50.
    ServiceManager::list_postgres_instances(true, "50").await.unwrap();

    // Find a specific Postgres database instance by name.
    ServiceManager::find_postgres_instance_by_name("my_database", true, "50").await.unwrap();

    // Find Postgres database instances with a specific status (e.g., suspended), limiting the result to 50.
    ServiceManager::find_postgres_instance_with_status("suspended", true, "50").await.unwrap();

    // Find redis instances by name.
    ServiceManager::find_redis_instance_by_name("my_redis_instance", "50").await;
}

2. 删除服务

您还可以删除不再需要的服务。

use render_cdk::service_management::ServiceManager;

#[tokio::main]
async fn main() {
    // Delete a static site deployment.
    ServiceManager::delete_service("test_deployment", "static").await;

    // Delete a web service deployment.
    ServiceManager::delete_service("test_deployment", "web_service").await;

    // Delete a postgres instance.
    ServiceManager::delete_postgres_instance("test_postgres").await;

    // Delete a redis instance.
    ServiceManager::delete_redis_instance("test_redis").await;
}

3. 读取配置文件

《Conf》模块允许您读取定义部署设置的配置文件。

use render_cdk::configuration::Conf;

fn main() {
    // Read and parse a configuration file from a specified path.
    let config = Conf::read_configuration_file("./samples/sample.conf").unwrap();

    // Process the configuration as needed...
}

4. 部署现有配置

如果您已经有一个配置文件,可以直接使用《ServiceManager》进行部署。

use render_cdk::service_management::ServiceManager;

#[tokio::main]
async fn main() {
    // Deploy services as specified in the configuration file.
    ServiceManager::deploy_configuration("./samples/sample.conf").await.unwrap();
}

5. 部署静态网站

以下示例演示了如何使用配置模板部署一个简单的静态网站。

use render_cdk::deployment::Template;
use render_cdk::service_management::{ServiceDetails, ServiceManager};

#[tokio::main]
async fn main() {
    let deployment_config = Template {
        type_: "static_site".to_owned(),
        name: "test_deployment".to_owned(),
        repo: "https://github.com/lexara-prime-ai/SAMPLE_STATIC_SITE".to_owned(),
        auto_deploy: "yes".to_owned(),
        root_dir: Some("./public".to_owned()),
        service_details: Some(ServiceDetails {
            publish_path: Some("./".to_owned()),
            pull_request_previews_enabled: Some("yes".to_owned()),
            ..Default::default()
        }),
        ..Default::default()
    };

    // Deploy the static site with the specified configuration.
    ServiceManager::create_service(deployment_config).await.unwrap();
}

字段说明

  • build_command:在每次部署前,Render 运行以构建您的应用程序的命令,例如 npm run buildyarn build
  • publish_path:静态网站将要发布的目录路径,例如 /public/
  • pull_request_previews_enabled:指示是否为此部署启用了拉取请求预览。

6. 部署 Web 服务

以下是一个部署简单 Node.js Web 服务的示例。

use render_cdk::deployment::Template;
use render_cdk::service_management::{EnvSpecificDetails, ServiceDetails, ServiceManager};

#[tokio::main]
async fn main() {
    let deployment_config = Template {
        type_: "web_service".to_owned(),
        name: "test_deployment".to_owned(),
        repo: "https://github.com/lexara-prime-ai/SAMPLE_WEB_SERVICE".to_owned(),
        auto_deploy: "yes".to_owned(),
        root_dir: Some("./".to_owned()),
        service_details: Some(ServiceDetails {
            region: "oregon".to_owned(),
            plan: "starter".to_owned(),
            runtime: "node".to_owned(),
            num_instances: 1,
            env_specific_details: Some(EnvSpecificDetails {
                build_command: Some("yarn".to_owned()),
                start_command: Some("npm start".to_owned()),
            }),
            pull_request_previews_enabled: Some("yes".to_owned()),
            ..Default::default()
        }),
        ..Default::default()
    };

    // Deploy the web service with the specified configuration.
    ServiceManager::create_web_service(deployment_config).await.unwrap();
}

7. 获取所有者信息

最后,您可以通过简单的 API 调用来获取当前账户的所有者 ID。

use render_cdk::environment_management::prelude::*;

#[tokio::main]
async fn main() {
    // Retrieve the owner ID of the current Render account.
    Info::get_owner_id().await;
}

8. 使用简单的 .conf 文件进行资源配置

  • .conf 文件提供了程序化资源配置的便捷替代方案,允许您通过简单的配置设置定义和管理资源。

配置文件示例

以下是一个用于配置托管 Postgres 实例和托管 Redis 实例的 示例配置 文件。

  • [database] 部分指定了托管 Postgres 实例的配置
  • nameuser 字段应填写所需的数据库名称和用户。
  • enable_high_availability 指示是否应启用高可用性。
  • plan 指定实例的定价计划,而 version 指示 Postgres 版本。
  • cidrBlocks 定义哪些 IP 范围可以访问数据库,使用 CIDR 表示法。
# Sample configuration file for provisioning
# managed Postgres and Redis instances.

[database]
databaseName = ""                   # Replace with the desired database name
databaseUser = ""                   # Replace with the desired user for the database
enableHighAvailability = false      # Set to true to enable high availability
plan = "starter"                    # Pricing plan for the database instance
version = "12"                      # Postgres version
name = ""

# The following portion enables access control via CIDR blocks
cidrBlocks = [
    { cidrBlock = "0.0.0.0/0", description = "Public access from anywhere" },
    # { cidrBlock = "192.168.1.0/24", description = "Office network" },
    # Add more CIDR blocks here as needed
]

注意:任何空白字段(如 nameuser)将如果未提供则自动生成。

  • [redis] 部分指定了托管 Redis 实例的配置
    • plan 指定实例的定价计划。
    • cidrBlocks 控制哪些 IP 范围可以访问 Redis 实例,使用 CIDR 表示法。
[redis]
name = ""                           # Replace with the desired Redis instance name
plan = "starter"                    # Pricing plan for the Redis instance

# CIDR blocks for access control to Redis
cidrBlocks = [
    { cidrBlock = "0.0.0.0/0", description = "Public access from anywhere" },
    # { cidrBlock = "10.0.0.0/16", description = "Private network access" },
    # Add more CIDR blocks here as needed
]

说明

  • [database] 部分:

    • name:Postgres 数据库的名称。

    • user:Postgres 数据库的用户。

    • enable_high_availability:用于启用或禁用数据库高可用的布尔值。

    • plan:Postgres 实例的定价计划。选项可能包括 "入门级"、"标准"、"高级" 等。


      注意:免费计划将导致部署失败。


    • version:要使用的 Postgres 版本。

    • cidrBlocks:控制访问数据库的 CIDR 块列表。这确保只有允许的 IP 范围可以访问实例。

      • cidrBlock:表示允许 IP 范围的字符串,使用 CIDR 格式(例如,公开访问的 0.0.0.0/0 或私有网络的 192.168.1.0/24)。
      • description:对 CIDR 块用途的易读描述。
  • [redis] 部分:

    • 名称: Redis 实例的名称。

    • 方案: Redis 实例的价格方案。选项可能包括“入门级”、“标准”、“高级”等。


      注意:免费计划将导致部署失败。


    • cidrBlocks: 控制访问 Redis 实例的 CIDR 块列表,类似于数据库配置。

此配置文件允许您轻松设置特定计划和访问控制,以满足项目需求,以便设置管理数据库缓存服务。

use render_cdk::config::Conf;

fn main() {
    let config = Conf::read_configuration_file().unwrap();
    println!("Sample Configuration: {:?}\n", config);
}

本指南应使您对如何使用 Render CDK 通过 Render Cloud 流线化云开发有了全面了解。

通过利用 Render CDK 的强大功能,您可以简化云资源的供应、管理和扩展过程。

凭借其声明式方法和无缝集成,Render CDK 使您能够更多地关注构建和创新,同时它处理云基础设施的复杂性。

依赖项

~8-20MB
~288K SLoC