Skip to content

Overview

This is a reference design and implementation of an environment template to provision a self-service environment with a Generative AI application running on Amazon ECS with a LLM from Amazon Bedrock. This reference design is based on Rafay's Environment Manager.

The ECS cluster is configured to use the "Fargate Launch Type Model" which makes the environment extremely simple and cost effective. AWS Fargate allows Amazon ECS to run containers without having to manage servers or clusters of Amazon EC2 instances. With Fargate, you no longer have to provision, configure, or scale clusters of virtual machines to run containers. This removes the need to choose server types, decide when to scale your clusters, or optimize cluster packing.

Organizations also want developer environments to be extremely cost effective. With Fargate and ECS,

  • You only pay for the amount of vCPU and memory resources that your containerized application requests.
  • vCPU and memory resources are calculated from the time your container images are pulled until the Amazon ECS Task terminates, rounded up to the nearest second.

Architecture


Source Code for Template

The Terraform source code and related assets are available in a public Git repo as shown below

Git Repo


Initial Setup

The platform team is expected to perform an initial configuration and setup of the Amazon ECS based Environment Template. The sequence diagram describes the high level steps. In this step, the platform team will create the Environment Template in a root level, central project they control and will share the template downstream with every developer.

sequenceDiagram
    participant plat as Platform Team
    participant rafay as Rafay <br> Environment Manager
    participant csp as AWS 

    plat->>rafay: Create Central "genai" Project 
    plat->>rafay: Import Gen AI <br>Environment Template for ECS 
    plat->>csp: Enable Models in Amazon Bedrock 
    plat-->>rafay: Validate Template by <br>creating sample environment (optional)

Request for Environment

When a developer requests for a Gen AI environment (based on ECS), a series of automated workflows will need to be performed to fulfil this request. The sequence diagram below describes the high level steps.

Important

Although the recommended workflow assumes and recommends using an Integration with an Identity Provider (IdP) to provide a Single Sign On (SSO) experience, organizations can also use locally managed users.

sequenceDiagram
    participant dev as Developer
    participant plat as Platform Team 
    participant rafay as Rafay <br> Environment Manager
    participant idp as Identity Provider <br> (IdP)

    dev->>plat: Request Gen AI Environment <br>based on ECS 
    plat-->>rafay: Create New Project in Org <br> for Developer
    rafay->>idp: Create Group for New Project  
    rafay->>idp: Add developer to Group 
    rafay-->>rafay: Create Group in Rafay <br>with Env Template User Role 
    rafay->>rafay: Share "genai" Env Template <br>with New Project 
    rafay-->>dev: Environment Ready for Use 

Developer Creates Environment

The developer will have the ability to deploy and deprovision environments based on the shared environment template. Note that the developer

  • Does not need to have any knowledge of Terraform
  • Does not need access to privileged credentials for AWS
  • Does not any help from the Platform team to deploy their environment
sequenceDiagram
    participant dev as Developer
    participant rafay as Rafay <br> Environment Manager
    participant csp as ECS Cluster
    participant idp as Identity Provider 

    dev->>idp: Access Environment 
    idp-->>dev: Redirect to Rafay 
    dev-->>rafay: SSO to Rafay with <br> RBAC (Env Template User)

    dev->>rafay: Create Environment <br>based on Env Template 
    rafay->>csp: Provision new ECS Cluster w/VPC, subnets and Gen AI App  
    rafay-->>dev: Environment Ready 
    dev->>csp: Uses GenAI Environment 

Assumptions

  • You have access to a AWS Account
  • You have access to a Mac or Linux machine
  • You have a Git client on your machine that is setup for push/pull
  • You have Docker installed on your machine