--- version: 0.2 phases: install: commands: - curl -sS -o aws-iam-authenticator https://amazon-eks.s3-us-west-2.amazonaws.com/1.10.3/2018-07-26/bin/linux/amd64/aws-iam-authenticator - curl -sS -o kubectl https://amazon-eks.s3.us-west-2.amazonaws.com/1.17.7/2020-07-08/bin/linux/amd64/kubectl - curl --silent --location https://github.com/weaveworks/eksctl/releases/latest/download/eksctl_$(uname -s)_amd64.tar.gz | tar xz -C . - chmod +x ./kubectl ./aws-iam-authenticator - export PATH=$PWD/:$PATH - apt-get update && apt-get -y install jq - curl https://awscli.amazonaws.com/awscli-exe-linux-x86_64.zip -o awscliv2.zip && unzip awscliv2.zip && ./aws/install pre_build: commands: - export KUBECONFIG=$HOME/.kube/config build: commands: post_build: commands: - REGION=$(aws cloudformation describe-stacks --stack-name ClusterStack --query "Stacks[0].Outputs[?OutputKey=='AWSRegion'].OutputValue" --output text) - export IAM_ROLE_ARN=$IAM_ARN - export COGNITO_USER_POOL_ID=$USERPOOLID - export COGNITO_CLIENT_ID=$APPCLIENTID - CREDENTIALS=$(aws sts assume-role --role-arn $CB_ARN --role-session-name codebuild-kubectl --duration-seconds 900) - echo "${CREDENTIALS}" - export AWS_ACCESS_KEY_ID="$(echo ${CREDENTIALS} | jq -r '.Credentials.AccessKeyId')" - export AWS_SECRET_ACCESS_KEY="$(echo ${CREDENTIALS} | jq -r '.Credentials.SecretAccessKey')" - export AWS_SESSION_TOKEN="$(echo ${CREDENTIALS} | jq -r '.Credentials.SessionToken')" - export AWS_EXPIRATION=$(echo ${CREDENTIALS} | jq -r '.Credentials.Expiration') - aws eks update-kubeconfig --name eksworkshop-eksctl - kubectl version - cat $HOME/.kube/config - kubectl config view - echo "${TENANT_PATH}" # Create a new Namespace for the Tenant - kubectl create ns ${TENANT_PATH} # Create Silo Tenant Product table - echo "Create Silo Tenant Product table" - CREATE_PRODUCT_TABLE=$(aws dynamodb create-table --table-name Products-silo-$TENANT_PATH --attribute-definitions AttributeName=tenant_id,AttributeType=S AttributeName=product_id,AttributeType=S --key-schema AttributeName=tenant_id,KeyType=HASH AttributeName=product_id,KeyType=RANGE --provisioned-throughput ReadCapacityUnits=5,WriteCapacityUnits=5) - PRODUCTTABLE="$(echo ${CREATE_PRODUCT_TABLE} | jq -r '.TableDescription.TableName')" # Create Silo Tenant Order table - echo "Create Silo Tenant Order table" - CREATE_ORDER_TABLE=$(aws dynamodb create-table --table-name Orders-silo-$TENANT_PATH --attribute-definitions AttributeName=tenant_id,AttributeType=S AttributeName=order_id,AttributeType=S --key-schema AttributeName=tenant_id,KeyType=HASH AttributeName=order_id,KeyType=RANGE --provisioned-throughput ReadCapacityUnits=5,WriteCapacityUnits=5) - ORDERTABLE="$(echo ${CREATE_ORDER_TABLE} | jq -r '.TableDescription.TableName')" # Deploy Application Service - TENANTPATH=$TENANT_PATH envsubst < ./client/web/application/k8s/template.txt > ./client/web/application/k8s/manifest.yaml - kubectl apply -f client/web/application/k8s/manifest.yaml -n ${TENANT_PATH} # Deploy Order Service - TENANTPATH=$TENANT_PATH CONTAINERIMAGE=public.ecr.aws/o2b5n0j5/eks-saas-order:withtvm envsubst < services/apps/application/order/k8s/template.txt > services/apps/application/order/k8s/manifest.yaml - kubectl apply -f services/apps/application/order/k8s/manifest.yaml -n ${TENANT_PATH} # Deploy Product Service - TENANTPATH=$TENANT_PATH CONTAINERIMAGE=public.ecr.aws/o2b5n0j5/eks-saas-product:withtvm envsubst < services/apps/application/product/k8s/template.txt > services/apps/application/product/k8s/manifest.yaml - kubectl apply -f services/apps/application/product/k8s/manifest.yaml -n ${TENANT_PATH} # Update the Silo tenant stack provisioning status to complete - chmod +x update-provisioning-status.sh - ./update-provisioning-status.sh EKS-SaaS-Tenant-Stack-Mapping $TENANT_PATH