Skip to main content
Version: Next

AWS Cloud

Updated 2024.12.02

You can install Edge Conductor in an AWS Cloud environment. The installation is done using Helm, a Kubernetes object customization tool.

infra

Below are the components running inside EKS.

infra

Prepare Deploy Server


aws cli installation and setup

Install aws cli

AWS Command Line Interface(AWS CLI) is an open source tool that enables you to interact with AWS services using commands in your command-line shell.

$ curl "https://awscli.amazonaws.com/awscli-exe-linux-x86_64.zip" -o "awscliv2.zip"
$ unzip awscliv2.zip
$ sudo ./aws/install

$ aws --version
aws-cli/2.12.7 Python/3.11.4 Linux/5.4.0-196-generic exe/x86_64.ubuntu.20 prompt/off

For more information about installing aws cli, please refer to the link below. https://docs.aws.amazon.com/cli/latest/userguide/getting-started-install.html

aws configure setup

## aws configure setup
$ aws configure
AWS Access Key ID [None]: {{access-key}}
AWS Secret Access Key [None]: {{secret-key}}
Default region name [None]: ap-northeast-2
Default output format [None]: json

## check aws configure
$ cat .aws/credentials
[default]
aws_access_key_id = {{access-key}}
aws_secret_access_key = {{secret-key}}

## Returns details about the IAM user
$ aws sts get-caller-identity
{
"UserId": "userid",
"Account": "account",
"Arn": "arn:aws:iam::account:user/username"
}
  • access-key : Access Key for role with control permissions over the AWS Cloud EKS
  • secret-key : Secret Key for role with control permissions over the AWS Cloud EKS

kubeconfig setup

Configure kubectl to control the AWS Cloud EKS cluster in installed Edge Conductor.

## aws configure setup
$ aws eks update-kubeconfig --region ap-northeast-2 --name {{eks-cluster-name}}

## Check kubeconfig settings
$ kubectl config get-contexts
CURRENT NAME CLUSTER AUTHINFO NAMESPACE
* arn:aws:eks:ap-northeast-2:000000000000:cluster/eks-cluster-name arn:aws:eks:ap-northeast-2:000000000000:cluster/eks-cluster-name arn:aws:eks:ap-northeast-2:000000000000:cluster/eks-cluster-name
  • eks-cluster-name : Name of the AWS Cloud EKS Cluster

For more detailed information, refer to the following Amazon EKS install-kubectl

Install helm

The Helm community provides methods to install Helm through different package managers. For installation methods using other methods (script, apt, etc.), please refer to the official installation helm page.

From snap

sudo snap install helm --classic

From apt

curl https://baltocdn.com/helm/signing.asc | gpg --dearmor | sudo tee /usr/share/keyrings/helm.gpg > /dev/null
sudo apt-get install apt-transport-https --yes
echo "deb [arch=$(dpkg --print-architecture) signed-by=/usr/share/keyrings/helm.gpg] https://baltocdn.com/helm/stable/debian/ all main" | sudo tee /etc/apt/sources.list.d/helm-stable-debian.list
sudo apt-get update
sudo apt-get install helm

Check helm installation

$ helm version
version.BuildInfo{Version:"v3.16.4", GitCommit:"7877b45b63f95635153b29a42c0c2f4273ec45ca", GitTreeState:"clean", GoVersion:"go1.22.7"}

$ helm
The Kubernetes package manager

Common actions for Helm:

- helm search: search for charts
- helm pull: download a chart to your local directory to view
- helm install: upload the chart to Kubernetes
- helm list: list releases of charts

Environment variables:
...

Deploy Edge Conductor


After you set up the Deployment Server and install the helm client, add the Helm repo(Chartmuseum) to install the Edge Conductor.

Add Helm repository

helm repo add mellerikat-edge-conductor https://mellerikat.github.io/Edge-Conductor/

List chart repository

helm repo ls

Update information of Helm repo

To update information of available charts locally from chart repositories

helm repo update

Search Helm chart

helm search repo mellerikat-edge-conductor [ --versions {{chart-version}} ]

Display information of chart

helm show chart mellerikat-edge-conductor/edge-conductor [ --version {{chart-version}} ]

Below is an example of checking the repo and chartmuseum after adding the Helm repo.

$ helm repo add mellerikat-edge-conductor https://mellerikat.github.io/Edge-Conductor/
"mellerikat-edge-conductor" has been added to your repositories

$ helm repo list
NAME URL
mellerikat-edge-conductor https://mellerikat.github.io/Edge-Conductor/

$ helm repo update
Hang tight while we grab the latest from your chart repositories...
...Successfully got an update from the "mellerikat-edge-conductor" chart repository
Update Complete. ⎈Happy Helming!⎈

$ helm search repo edge-conductor --versions
NAME CHART VERSION APP VERSION DESCRIPTION
mellerikat-edge-conductor/edge-conductor 1.1.3 2.3.1-beta1 A Helm chart for Edge Conductor
mellerikat-edge-conductor/edge-conductor 1.1.0 2.3.1 A Helm chart for Edge Conductor

$ helm show chart mellerikat-edge-conductor/edge-conductor --version 1.1.3
apiVersion: v2
appVersion: 2.3.1-beta1
dependencies:
- condition: backend.enabled
name: backend
repository: ""
- condition: frontend.enabled
name: frontend
repository: ""
description: A Helm chart for Edge Conductor
home: https://github.com/mellerikat/Edge-Conductor
maintainers:
- email: youngjun.jeon@lge.com
name: youngjun.jeon
name: edge-conductor
sources:
- https://github.com/mellerikat/Edge-Conductor
type: application
version: 1.1.3

Create Project Value

helm show values mellerikat-edge-conductor/edge-conductor [ --version {{chart-version}} ] | tee project-values.yaml

Edge Conductor installation supports different infrastructure resource names, permissions, and other settings depending on the Cloud environment.

The downloaded Base charts file contains these settings as default values, which can be modified by the installer if needed.

The modified values should be saved in a YAML file (e.g., project-values.yaml) and used during helm install or upgrade.

Some values must follow the resource names and settings configured in EKS.

For detailed explanation of Value, refer to About Project Value

Install

helm install {{release-name}} --values {{project-value}} --namespace {{namespace}} {{chart-name}} --version {{chart-version}}

Upgrade

helm upgrade --install {{release-name}} --values {{project-value}} --namespace {{namespace}} {{chart-name}} --version {{chart-version}}

Below is an example of executing the commands. Run the appropriate command depending on whether you are installing or upgrading.

$ helm install edge-conductor --values ./project-vaules.yaml --namespace edge-conductor mellerikat-edge-conductor/edge-conductor --version 1.0.0

$ helm upgrade --install edge-conductor --values ./project-values.yaml --namespace edge-conductor mellerikat-edge-conductor/edge-conductor --version 1.0.0

Delete

helm delete {{release_name}} --namespace {{namespace}}

If necessary, the user can stop the service. Below is an example of checking and stopping the currently running helm processes.

$ helm list -nedge-conductor
NAME NAMESPACE REVISION UPDATED STATUS CHART APP VERSION
edge-conductor edge-conductor 1 2024-07-16 07:53:36.231641998 +0000 UTC deployed edge-conductor-0.1.7 v2.2.1

$ helm delete edge-conductor --namespace edge-conductor

About Project Value


For reference, the following is an example, and the addition or deletion of env Value values may vary depending on the chart version.

Global parameters

NameDescriptionDependent on Cloud InfraUnique within EKS ClusterExample
serviceAccount.nameK8s Service Account Name for running Edge ConductorOOedge-conductor
nodeSelector.nodegroupNodeGroup information created in the Cloud for Edge ConductorOXnodegroup: ng-an2-edgecond-mellerikat

backend parameters

NameDescriptionDependent on Cloud InfraUnique within EKS ClusterExample
backend.service.nodePortPort information for the backend serviceOO31020
backend.replicaCountNumber of pod replicas for deploymentXX2
backend.flower.replicaCountNumber of pod replicas for flower deploymentXX2

frontend parameters

NameDescriptionDependent on Cloud InfraUnique within EKS ClusterExample
frontend.service.nodePortPort information for the frontend serviceOO31010
frontend.replicaCountNumber of pod replicas for deploymentXX1

common parameters

NameDescriptionDependent on Cloud InfraUnique within EKS ClusterExample
pv.storageClassNameName of the StorageClass used in PersistentVolumeXXefs-sc-edgecond
pv.csi.vloumeHandleEFS ID used in the PV StorageClassOOfs-00000000000000000
redis.urlAddress of the ElasticCache (Redis) in AWSOOrediss://master.redis.xxxxx.apn2.cache.amazonaws.com:6379
secret.objects.nameAWS Secret Manager informationOX/parameter/ap-northeast-2/mellerikat/dev/rds
configMap.data.BACKEND_CORS_ORIGINSEdge Conductor domain information defined in Route53OX'["https://edgecond.meerkat-dev.com"]'
configMap.data.BACKEND_ENDPOINTEdge Conductor domain information defined in Route53OXhttps://edgecond.meerkat-dev.com
configMap.data.MYSQL_NAMEDatabase schema name for RDS MySQLOXedge_conductor
configMap.data.SERVER_IPEdge Conductor domain information defined in Route53OXedgecond.meerkat-dev.com
configMap.data.WORKSPACEUnique name of the installed Edge Conductor for the summary serverXXedge_conductor_meerkat_dev
configMap.data.LDAP_HOSTLDAP information (leave empty if unsupported)XX*
configMap.data.UPDATE_CENTER_URLUpdate Center URL informationXXhttps://xxxxxxxx.execute-api.ap-northeast-2.amazonaws.com/v1

The following is the values file in edge-conductor chart version 1.1.0

values.yaml

$ helm show values edge-conductor-1.1.0.tgz | tree values.yaml

# Default values for edge-conductor.
# This is a YAML-formatted file.
# Declare variables to be passed into your templates.

## Global values are values that can be used from templetes or subchart(backend/frontend)
##
global:
## Set the deployed serviceAccount name
serviceAccount:
name: "edge-conductor"

## Set the nodeSelector
nodeSelector:
nodegroup: ng-an2-edgecond-mellerikat

## If not set, backend/frontend image tag will be "appVersion" in Chart.yaml.
# tag: "2.2.1"


backend:
## Deploy backend
enabled: true

celery:
enabled: true
replicaCount: 1

flower:
enabled: false
replicaCount: 1
service:
nodePort: 31070

image:
repository: "edge-conductor/backend"
pullPolicy: IfNotPresent

## If not set, backend image tag will be .Values.global.tag.
# tag: "2.2.1"

replicaCount: 1

service:
nodePort: 31020
internal:
enabled: true


frontend:
## Deploy frontend
enabled: true

image:
repository: "edge-conductor/frontend"
pullPolicy: IfNotPresent

## If not set, backend image tag will be .Values.global.tag.
# tag: "2.2.1"

replicaCount: 1

service:
nodePort: 31010


pv:
## Use 'pv-{{ include "edge-conductor.fullname" . }}' by default
nameOverride: ""
csi:
volumeHandle: fs-00000000000000000
storageClassName: efs-sc-edgecond
storage: 30Gi

## Use 'pvc-{{ include "edge-conductor.fullname" . }}' by default
pvc:
nameOverride: ""


redis:
url: rediss://master.redis-an2-meerkat-dev-private.xxxxxx.apn2.cache.amazonaws.com:6379


secret:
## If you need additional secret data
#
data: []
# - key: "MYSQL_USER"
# objectName: "dbusername"

objects:
name: "/parameter/ap-northeast-2/mellerikat/dev/rds"

## If you need additional objects data
#
additionalObjects: []
# - objectName: "/parameter/ap-northeast-2/mellerikat/dev/rds"
# objectType: "secretsmanager"
# jmesPath:
# - path: "username"
# objectAlias: "dbusername"

## Use '{{ include "edge-conductor.fullname" . }}-secretprovider' by default
secretProvider:
nameOverride: ""


configMap:
## Use config-{release-name} by default
nameOverride: ""
additionalConfig: {}

data:
BACKEND_CORS_ORIGINS: '["https://edgecond.meerkat-dev.com"]'
BACKEND_ENDPOINT: https://edgecond.meerkat-dev.com
MYSQL_NAME: edgecond_db
SERVER_IP: edgecond.meerkat-dev.com
WORKSPACE: edgecond.meerkat-dev

## The key below is given a default value, please modify it out if you want to change it.
# CONTAINER_NAME: "edgecond" # sh-script에서 사용 -> 삭제
# DAILY_SUMMARY_SERVER_URL: "http://0.0.0.0:46599"
# HOSTGID: HOSTGID "1175"
# HOSTUID: HOSTUID "1175"
# JWT_SECRET: "edgecond@lge"
# LDAP_HOST: ""
# LOGGING_COUNT: "90"
# LOGGING_LEVEL: "INFO"
# LOGGING_ROTATE: "0:00"
# MYSQL_NAME: "edgecond_db" # config에서 사용
# PROJECT_NAME: "Mellerikat Edge Conductor"
# SQLALCHEMY_POOL_MAX_OVERFLOW: "10"
# SQLALCHEMY_POOL_SIZE: "5"
# UPDATE_CENTER_URL: ""
# VAULT_CATOZ: ""
# VAULT_NAMESPACE: ""
# VAULT_TOKEN: ""
# WEBHOOK_TEAMS: ""
#