Skip to content

Commit 29748e1

Browse files
committed
services + images
1 parent be3a5d1 commit 29748e1

15 files changed

Lines changed: 242 additions & 123 deletions
Lines changed: 5 additions & 5 deletions
Original file line numberDiff line numberDiff line change
@@ -50,14 +50,14 @@ task_definition:
5050
condition: "SUCCESS"
5151
efs_volumes:
5252
- name: dags
53-
filesystem_id: fs-09f99c6419d0c41ce
53+
filesystem_id: ${DAGS_VOLUME_ID}
5454
transit_encryption: ENABLED
5555
- name: logs
56-
filesystem_id: fs-0a8a0fea68d9270c3
56+
filesystem_id: ${LOGS_VOLUME_ID}
5757
transit_encryption: ENABLED
5858
- name: ted_sws
59-
filesystem_id: fs-0238f297aefe5a95d
59+
filesystem_id: ${TED_SWS_VOLUME_ID}
6060
transit_encryption: ENABLED
61-
- name: postgres-db
62-
filesystem_id: something
61+
- name: airflow-postgres-db
62+
filesystem_id: ${AIRFLOW_POSTGRES_DB_VOLUME_ID}
6363
transit_encryption: ENABLED

infra/aws/airflow.yml

Lines changed: 18 additions & 18 deletions
Original file line numberDiff line numberDiff line change
@@ -6,19 +6,19 @@ services:
66
environment:
77
_AIRFLOW_DB_UPGRADE: "true"
88
_AIRFLOW_WWW_USER_CREATE: "true"
9-
_AIRFLOW_WWW_USER_PASSWORD: airflow
10-
_AIRFLOW_WWW_USER_USERNAME: airflow
9+
_AIRFLOW_WWW_USER_PASSWORD: ${_AIRFLOW_WWW_USER_PASSWORD}
10+
_AIRFLOW_WWW_USER_USERNAME: ${_AIRFLOW_WWW_USER_USERNAME}
1111
AIRFLOW__API__AUTH_BACKEND: airflow.api.auth.backend.basic_auth
1212
AIRFLOW__CELERY__BROKER_URL: redis://:@redis:6379/0
1313
AIRFLOW__CELERY__RESULT_BACKEND: db+postgresql://airflow:airflow@postgres/airflow
1414
AIRFLOW__CORE__DAGS_ARE_PAUSED_AT_CREATION: "true"
1515
AIRFLOW__CORE__EXECUTOR: CeleryExecutor
1616
AIRFLOW__CORE__LOAD_EXAMPLES: "false"
1717
AIRFLOW__CORE__SQL_ALCHEMY_CONN: postgresql+psycopg2://airflow:airflow@postgres/airflow
18-
AIRFLOW_GID: "50000"
18+
AIRFLOW_GID: ${AIRFLOW_GID}
1919
AIRFLOW_HOME: /opt/airflow
2020
PYTHONPATH: /opt/airflow/
21-
AIRFLOW_UID: "50000"
21+
AIRFLOW_UID: ${AIRFLOW_UID}
2222
image: public.ecr.aws/g5y4d1v2/meaningfy:airflow-meaningfy-225
2323
links:
2424
- postgres
@@ -49,19 +49,19 @@ services:
4949
environment:
5050
_AIRFLOW_DB_UPGRADE: "true"
5151
_AIRFLOW_WWW_USER_CREATE: "true"
52-
_AIRFLOW_WWW_USER_PASSWORD: airflow
53-
_AIRFLOW_WWW_USER_USERNAME: airflow
52+
_AIRFLOW_WWW_USER_PASSWORD: ${_AIRFLOW_WWW_USER_PASSWORD}
53+
_AIRFLOW_WWW_USER_USERNAME: ${_AIRFLOW_WWW_USER_USERNAME}
5454
AIRFLOW__API__AUTH_BACKEND: airflow.api.auth.backend.basic_auth
5555
AIRFLOW__CELERY__BROKER_URL: redis://:@redis:6379/0
5656
AIRFLOW__CELERY__RESULT_BACKEND: db+postgresql://airflow:airflow@postgres/airflow
5757
AIRFLOW__CORE__DAGS_ARE_PAUSED_AT_CREATION: "true"
5858
AIRFLOW__CORE__EXECUTOR: CeleryExecutor
5959
AIRFLOW__CORE__LOAD_EXAMPLES: "false"
6060
AIRFLOW__CORE__SQL_ALCHEMY_CONN: postgresql+psycopg2://airflow:airflow@postgres/airflow
61-
AIRFLOW_GID: "50000"
61+
AIRFLOW_GID: ${AIRFLOW_GID}
6262
AIRFLOW_HOME: /opt/airflow
6363
PYTHONPATH: /opt/airflow/
64-
AIRFLOW_UID: "50000"
64+
AIRFLOW_UID: ${AIRFLOW_UID}
6565
image: public.ecr.aws/g5y4d1v2/meaningfy:airflow-meaningfy-225
6666
logging:
6767
driver: awslogs
@@ -94,7 +94,7 @@ services:
9494
awslogs-region: eu-west-3
9595
awslogs-stream-prefix: ecs
9696
volumes:
97-
- postgres-db:/var/lib/postgresql/data
97+
- airflow-postgres-db:/var/lib/postgresql/data
9898
networks:
9999
ecs-local-network: null
100100
redis:
@@ -126,9 +126,9 @@ services:
126126
AIRFLOW__CORE__EXECUTOR: CeleryExecutor
127127
AIRFLOW__CORE__LOAD_EXAMPLES: "false"
128128
AIRFLOW__CORE__SQL_ALCHEMY_CONN: postgresql+psycopg2://airflow:airflow@postgres/airflow
129-
AIRFLOW_GID: "50000"
129+
AIRFLOW_GID: ${AIRFLOW_GID}
130130
AIRFLOW_HOME: /opt/airflow
131-
AIRFLOW_UID: "50000"
131+
AIRFLOW_UID: ${AIRFLOW_UID}
132132
PYTHONPATH: /opt/airflow/
133133
RML_MAPPER_PATH: /opt/airflow/.rmlmapper/rmlmapper.jar
134134
XML_PROCESSOR_PATH: /opt/airflow/.saxon/saxon-he-10.6.jar
@@ -164,9 +164,9 @@ services:
164164
AIRFLOW__CORE__EXECUTOR: CeleryExecutor
165165
AIRFLOW__CORE__LOAD_EXAMPLES: "false"
166166
AIRFLOW__CORE__SQL_ALCHEMY_CONN: postgresql+psycopg2://airflow:airflow@postgres/airflow
167-
AIRFLOW_GID: "50000"
167+
AIRFLOW_GID: ${AIRFLOW_GID}
168168
AIRFLOW_HOME: /opt/airflow/
169-
AIRFLOW_UID: "50000"
169+
AIRFLOW_UID: ${AIRFLOW_UID}
170170
PYTHONPATH: /opt/airflow/
171171
RML_MAPPER_PATH: /opt/airflow/.rmlmapper/rmlmapper.jar
172172
XML_PROCESSOR_PATH: /opt/airflow/.saxon/saxon-he-10.6.jar
@@ -199,9 +199,9 @@ services:
199199
AIRFLOW__CORE__EXECUTOR: CeleryExecutor
200200
AIRFLOW__CORE__LOAD_EXAMPLES: "false"
201201
AIRFLOW__CORE__SQL_ALCHEMY_CONN: postgresql+psycopg2://airflow:airflow@postgres/airflow
202-
AIRFLOW_GID: "50000"
202+
AIRFLOW_GID: ${AIRFLOW_GID}
203203
AIRFLOW_HOME: /opt/airflow
204-
AIRFLOW_UID: "50000"
204+
AIRFLOW_UID: ${AIRFLOW_UID}
205205
PYTHONPATH: /opt/airflow/
206206
RML_MAPPER_PATH: /opt/airflow/.rmlmapper/rmlmapper.jar
207207
XML_PROCESSOR_PATH: /opt/airflow/.saxon/saxon-he-10.6.jar
@@ -238,9 +238,9 @@ services:
238238
AIRFLOW__CORE__EXECUTOR: CeleryExecutor
239239
AIRFLOW__CORE__LOAD_EXAMPLES: "false"
240240
AIRFLOW__CORE__SQL_ALCHEMY_CONN: postgresql+psycopg2://airflow:airflow@postgres/airflow
241-
AIRFLOW_GID: "50000"
241+
AIRFLOW_GID: ${AIRFLOW_GID}
242242
AIRFLOW_HOME: /opt/airflow
243-
AIRFLOW_UID: "50000"
243+
AIRFLOW_UID: ${AIRFLOW_UID}
244244
PYTHONPATH: /opt/airflow/
245245
RML_MAPPER_PATH: /opt/airflow/.rmlmapper/rmlmapper.jar
246246
XML_PROCESSOR_PATH: /opt/airflow/.saxon/saxon-he-10.6.jar
@@ -273,4 +273,4 @@ volumes:
273273
dags:
274274
logs:
275275
ted_sws:
276-
postgres-db:
276+
airflow-postgres-db:
Lines changed: 55 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,55 @@
1+
REGION=eu-west-3
2+
REPOSITORIES=(fuseki)
3+
MONGO_IMAGE=docker.io/mongo:5.0.10
4+
FUSEKI_IMAGE=docker.io/secoresearch/fuseki:4.5.0
5+
METABASE_IMAGE=docker.io/metabase/metabase:v0.43.4
6+
AIRFLOW_POSTGRES=docker.io/postgres:14.4-alpine
7+
8+
IMAGES_TO_BE_BUILD=(airflow digest-api )
9+
10+
touch .repositories_ids
11+
12+
create_repository(){
13+
echo "Creating repository for $1"
14+
aws ecr create-repository --repository-name $1 --image-scanning-configuration scanOnPush=true --region $2 > repo.json
15+
REPO_NAME=$1
16+
REPO_ID=`jq -r ".repository.repositoryUri" repo.json`
17+
echo ${REPO_NAME^^}_REPO_ID=$REPO_ID >> .repositories_ids
18+
rm repo.json
19+
}
20+
21+
22+
23+
build_image_and_push_to_repo(){
24+
REPO=$1
25+
REPO_NAME=${REPO^^}
26+
REPO_ID=${REPO_NAME}_REPO_ID
27+
echo ${!REPO_ID}
28+
aws ecr get-login-password --region eu-west-3 | podman login --username AWS --password-stdin ${!REPO_ID}
29+
podman build -t $1 ../$1/ --label=$1-image
30+
IMAGE=`podman images --filter label=$1-image --format {{.Repository}}:{{.Tag}}`
31+
podman tag $IMAGE ${!REPO_ID}:latest
32+
podman push ${!REPO_ID}:latest
33+
}
34+
35+
36+
37+
for REPO in "${REPOSITORIES[@]}"
38+
do
39+
# create_repository $REPO $REGION
40+
source .repositories_ids
41+
export $(cat .repositories_ids | xargs)
42+
build_image_and_push_to_repo $REPO
43+
done
44+
45+
46+
#podman images --filter label=label --format {{.Repository}}
47+
#podman images --format {{.Repository}} | grep fuseki
48+
#
49+
#
50+
#podman build -t fuseki ../fuseki/ --label=label
51+
#
52+
#docker push 013659641721.dkr.ecr.eu-west-3.amazonaws.com/fuseki:latest
53+
54+
55+
#aws ecr get-login-password --region eu-west-3 | podman login --username AWS --password-stdin 013659641721.dkr.ecr.eu-west-3.amazonaws.com
Lines changed: 14 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,14 @@
1+
version: 1
2+
task_definition:
3+
ecs_network_mode: awsvpc
4+
run_params:
5+
network_configuration:
6+
awsvpc_configuration:
7+
subnets:
8+
- ${SUBNET_1_ID}
9+
- ${SUBNET_2_ID}
10+
- ${SUBNET_3_ID}
11+
security_groups:
12+
- $SECURITY_GROUP
13+
assign_public_ip: DISABLED
14+

infra/aws/digest-api.yml

Lines changed: 3 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -12,6 +12,6 @@ services:
1212
ecs-local-network: null
1313
ports:
1414
- 8000:8000
15-
networks:
16-
ecs-local-network:
17-
external: true
15+
#networks:
16+
# ecs-local-network:
17+
# external: true

infra/aws/fuseki-ecs-params.yml

Lines changed: 13 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -2,5 +2,16 @@ version: 1
22
task_definition:
33
efs_volumes:
44
- name: fuseki-data
5-
filesystem_id: fs-0e8a6fb3658affbd2
6-
transit_encryption: ENABLED
5+
filesystem_id: ${FUSEKI_DATA_VOLUME_ID}
6+
transit_encryption: ENABLED
7+
ecs_network_mode: awsvpc
8+
run_params:
9+
network_configuration:
10+
awsvpc_configuration:
11+
subnets:
12+
- $SUBNET_1_ID
13+
- $SUBNET_2_ID
14+
- $SUBNET_3_ID
15+
security_groups:
16+
- $SECURITY_GROUP
17+
assign_public_ip: DISABLED

infra/aws/fuseki.yml

Lines changed: 2 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -2,8 +2,8 @@ version: "3"
22
services:
33
fuseki:
44
environment:
5-
ADMIN_PASSWORD: admin
6-
FUSEKI_DATASET_1: mydataset
5+
ADMIN_PASSWORD: ${FUSEKI_ADMIN_PASSWORD}
6+
FUSEKI_DATASET_1: ${FUSEKI_DATASET_1}
77
image: public.ecr.aws/g5y4d1v2/meaningfy:fuseki-4.5.0
88
logging:
99
driver: awslogs

infra/aws/install-cli.sh

Lines changed: 86 additions & 61 deletions
Original file line numberDiff line numberDiff line change
@@ -1,63 +1,88 @@
1-
curl "https://awscli.amazonaws.com/awscli-exe-linux-x86_64.zip" -o "awscliv2.zip"
2-
unzip awscliv2.zip
3-
sudo ./aws/install
1+
#!/bin/bash
2+
#curl "https://awscli.amazonaws.com/awscli-exe-linux-x86_64.zip" -o "awscliv2.zip"
3+
#unzip awscliv2.zip
4+
#sudo ./aws/install
5+
AWS_SECRETS_MANAGER_NAME=ted_sws_2
6+
SERVICES=(mongo digest-api airflow fuseki metabase mongo-express)
7+
8+
EFS_VOLUMES=(metabase_postgres_db fuseki_data ted_sws logs dags airflow_postgres_db mongo_db)
9+
echo "Creating env file ..."
10+
aws secretsmanager create-secret --secret-string file://s.json --name $AWS_SECRETS_MANAGER_NAME
11+
aws secretsmanager get-secret-value --secret-id $AWS_SECRETS_MANAGER_NAME | jq -r '.SecretString' | jq -r 'to_entries|map("\(.key)=\(.value|tostring)")|.[]' > .env
12+
source .env
13+
export $(cat .env | xargs)
14+
15+
16+
create_volume(){
17+
echo "Creating volume $1"
18+
aws efs create-file-system --performance-mode generalPurpose --encrypted --tags Key=Name,Value=$1 > $1-file-system.json
19+
FILE_SYSTEM_ID=`jq -r ".FileSystemId" $1-file-system.json`
20+
FILE_SYSTEM_ARN=`jq -r ".FileSystemArn" $1-file-system.json`
21+
EFS_VOLUME_NAME=$1
22+
echo ${EFS_VOLUME_NAME^^}_VOLUME_ID=$FILE_SYSTEM_ID >> .env
23+
rm $1-file-system.json
24+
echo "Volume system id = $FILE_SYSTEM_ID"
25+
sleep 5
26+
aws efs create-mount-target --file-system-id $FILE_SYSTEM_ID --subnet-id $SUBNET_1_ID
27+
aws efs create-mount-target --file-system-id $FILE_SYSTEM_ID --subnet-id $SUBNET_2_ID
28+
aws efs create-mount-target --file-system-id $FILE_SYSTEM_ID --subnet-id $SUBNET_3_ID
29+
}
30+
31+
32+
echo "Creating volumes ..."
33+
for EFS_VOLUME in "${EFS_VOLUMES[@]}"
34+
do
35+
create_volume $EFS_VOLUME
36+
done
37+
38+
source .env
39+
export $(cat .env | xargs)
40+
41+
create_cluster_config_and_profiles() {
42+
ecs-cli configure --cluster $1-cluster --default-launch-type EC2 --config-name $1-cluster --region eu-west-3
43+
ecs-cli configure profile --access-key $ACCESS_KEY --secret-key $SECRET_KEY --profile-name $1-cluster-profile
44+
}
45+
46+
for SERVICE in "${SERVICES[@]}"
47+
do
48+
create_cluster_config_and_profiles $SERVICE
49+
done
50+
51+
create_cluster() {
52+
ecs-cli up --force --keypair amazon --capability-iam --size 1 --instance-type $1 --cluster-config $2 --ecs-profile $3 --vpc $VPC_ID --subnets $SUBNET_1_ID,$SUBNET_2_ID,$SUBNET_3_ID --security-group $SECURITY_GROUP
53+
}
54+
55+
create_cluster $MONGO_INSTANCE_TYPE mongo-cluster mongo-cluster-profile
56+
create_cluster $DIGEST_API_INSTANCE_TYPE digest-api-cluster digest-api-cluster-profile
57+
create_cluster $AIRFLOW_INSTANCE_TYPE airflow-cluster airflow-cluster-profile
58+
create_cluster $FUSEKI_INSTANCE_TYPE fuseki-cluster fuseki-cluster-profile
59+
create_cluster $METABASE_INSTANCE_TYPE metabase-cluster metabase-cluster-profile
60+
create_cluster $MONGO_EXPRESS_INSTANCE_TYPE mongo-express-cluster mongo-express-cluster-profile
61+
62+
63+
64+
start_service_with_service_discovery(){
65+
ecs-cli compose --project-name $1-service --file $1.yml --ecs-params $1-ecs-params.yml --debug service up --region eu-west-3 --ecs-profile $1-cluster-profile --cluster-config $1-cluster --private-dns-namespace ted_sws --vpc $VPC_ID --dns-type A --enable-service-discovery --create-log-groups
66+
}
67+
68+
start_service_without_service_discovery(){
69+
ecs-cli compose --project-name $1-service --file $1.yml --ecs-params $1-ecs-params.yml --debug service up --region eu-west-3 --ecs-profile $1-cluster-profile --cluster-config $1-cluster --create-log-groups
70+
}
71+
72+
73+
SERVICES_WITH_DNS_CREATION=(mongo digest-api fuseki)
74+
SERVICES_WITHOUT_DNS=(airflow metabase mongo-express)
75+
76+
for SERVICE in "${SERVICES_WITH_DNS_CREATION[@]}"
77+
do
78+
echo "Starting $SERVICE service"
79+
start_service_with_service_discovery $SERVICE
80+
done
81+
82+
for SERVICE in "${SERVICES_WITHOUT_DNS[@]}"
83+
do
84+
echo "Starting $SERVICE service"
85+
start_service_without_service_discovery $SERVICE
86+
done
487

588

6-
SUBNET_1_ID=subnet-0633b255adc732d3f
7-
SUBNET_2_ID=subnet-0088e8035626e7ab5
8-
SUBNET_3_ID=subnet-04ad482119216e427
9-
VPC_ID=vpc-093d2f650f90a4dac
10-
SECURITY_GROUP=sg-03850090ad599ebc6
11-
ACCESS_KEY={$ACCESS_KEY}
12-
SECRET_KEY={$SECRET_KEY}
13-
14-
15-
#aws ec2 describe-subnets --filters "Name=vpc-id,Values=vpc-093d2f650f90a4dac"
16-
#aws ec2 describe-vpcs --filters Name=tag:Name,Values=Meaningfy
17-
18-
19-
#login
20-
21-
22-
#efs
23-
aws efs create-file-system --performance-mode generalPurpose --tags Key=Name,Value=mongo-db > create-file-system.json
24-
FILE_SYSTEM_ID=`jq -r ".FileSystemId" create-file-system.json`
25-
FILE_SYSTEM_ARN=`jq -r ".FileSystemArn" create-file-system.json`
26-
27-
#find how to get file-system id and subnets ids
28-
aws efs create-mount-target --file-system-id $FILE_SYSTEM_ID --subnet-id $SUBNET_1_ID
29-
aws efs create-mount-target --file-system-id $FILE_SYSTEM_ID --subnet-id $SUBNET_2_ID
30-
aws efs create-mount-target --file-system-id $FILE_SYSTEM_ID --subnet-id $SUBNET_3_ID
31-
32-
33-
#Cluster with ec2 instance and using ecs-cli
34-
35-
ecs-cli configure --cluster mongo-cluster --default-launch-type EC2 --config-name mongo-cluster --region eu-west-3
36-
ecs-cli configure --cluster airflow-cluster --default-launch-type EC2 --config-name airflow-cluster --region eu-west-3
37-
ecs-cli configure --cluster fuseki-cluster --default-launch-type EC2 --config-name fuseki-cluster --region eu-west-3
38-
ecs-cli configure --cluster metabase-cluster --default-launch-type EC2 --config-name metabase-cluster --region eu-west-3
39-
ecs-cli configure --cluster digest-api-cluster --default-launch-type EC2 --config-name digest-api-cluster --region eu-west-3
40-
41-
ecs-cli configure profile --access-key $ACCESS_KEY --secret-key $SECRET_KEY --profile-name mongo-cluster-profile
42-
ecs-cli configure profile --access-key $ACCESS_KEY --secret-key $SECRET_KEY --profile-name airflow-cluster-profile
43-
ecs-cli configure profile --access-key $ACCESS_KEY --secret-key $SECRET_KEY --profile-name fuseki-cluster-profile
44-
ecs-cli configure profile --access-key $ACCESS_KEY --secret-key $SECRET_KEY --profile-name metabase-cluster-profile
45-
46-
ecs-cli configure profile --access-key $ACCESS_KEY --secret-key $SECRET_KEY --profile-name cli-cluster-profile
47-
48-
ecs-cli up --force --keypair amazon --capability-iam --size 1 --instance-type t2.medium --cluster-config mongo-cluster --ecs-profile mongo-cluster-profile --vpc $VPC_ID --subnets $SUBNET_1_ID,$SUBNET_2_ID,$SUBNET_3_ID --security-group $SECURITY_GROUP
49-
ecs-cli up --force --keypair amazon --capability-iam --size 1 --instance-type t2.medium --cluster-config fuseki-cluster --ecs-profile fuseki-cluster-profile --vpc $VPC_ID --subnets $SUBNET_1_ID,$SUBNET_2_ID,$SUBNET_3_ID --security-group $SECURITY_GROUP
50-
ecs-cli up --force --keypair amazon --capability-iam --size 1 --instance-type t3.medium --cluster-config airflow-cluster --ecs-profile airflow-cluster-profile --vpc $VPC_ID --subnets $SUBNET_1_ID,$SUBNET_2_ID,$SUBNET_3_ID --security-group $SECURITY_GROUP
51-
ecs-cli up --force --keypair amazon --capability-iam --size 1 --instance-type t2.medium --cluster-config metabase-cluster --ecs-profile metabase-cluster-profile --vpc $VPC_ID --subnets $SUBNET_1_ID,$SUBNET_2_ID,$SUBNET_3_ID --security-group $SECURITY_GROUP
52-
53-
ecs-cli up --force --keypair amazon --capability-iam --size 1 --instance-type t2.micro --cluster-config digest-api-cluster --ecs-profile cli-cluster-profile --vpc $VPC_ID --subnets $SUBNET_1_ID,$SUBNET_2_ID,$SUBNET_3_ID --security-group $SECURITY_GROUP
54-
55-
56-
ecs-cli compose --project-name mongo-service --file mongo.yml --ecs-params mongo-ecs-params.yml --debug service up --region eu-west-3 --ecs-profile mongo-cluster-profile --cluster-config mongo-cluster --create-log-groups
57-
58-
ecs-cli compose --project-name airflow-service --file airflow.yml --ecs-params airflow-ecs-param.yml --debug service up --region eu-west-3 --ecs-profile airflow-cluster-profile --cluster-config airflow-cluster --create-log-groups
59-
60-
ecs-cli compose --project-name fuseki-service --file fuseki.yml --ecs-params fuseki-ecs-params.yml --debug service up --region eu-west-3 --ecs-profile fuseki-cluster-profile --cluster-config fuseki-cluster --create-log-groups
61-
62-
ecs-cli compose --project-name metabase-service --file fuseki.yml --ecs-params metabase-ecs-params.yml --debug service up --region eu-west-3 --ecs-profile metabase-cluster-profile --cluster-config metabase-cluster --create-log-groups
63-

0 commit comments

Comments
 (0)