# Developer for EKS GitOps & Blueprint
### EKS blueprint:
https://catalog.us-east-1.prod.workshops.aws/workshops/67bc4d75-6f22-4480-9fb1-30161069e6ff/ko-KR/eks/argocd
git : https://github.com/sykang808/my-eks-blueprints.git
```bash=
cd ~/environment
git clone https://github.com/sykang808/my-eks-blueprints.git
cd my-eks-blueprints
npm i
cdk deploy cluster-stack
```
### 필요한 툴 설치
```bash=
wget https://gist.githubusercontent.com/didhd/66ddcc71610f98a2b159b5afab650e88/raw/4d7bbb1cc0c5c13f961afe087d1f5ab6ee04e4fa/cloud9-prereq.sh
sh cloud9-prereq.sh
```
### ArgoCD CLI 설치
```bash=
sudo curl -sSL -o /usr/local/bin/argocd https://github.com/argoproj/argo-cd/releases/latest/download/argocd-linux-amd64
sudo chmod +x /usr/local/bin/argocd
```
### ArgoCD 로그인 및 클러스터 등록
ArgoCD 서버를 Load Balancer를 이용하여 외부에 노출합니다.
```bash=
## argoCD expose
kubectl patch svc blueprints-addon-argocd-server -n argocd -p '{"spec": {"type": "LoadBalancer"}}'
```
아래 입력을 통해 argocli로 ArgoCD 서버에 로그인합니다.
```bash=
## server env
export ARGOCD_SERVER=`kubectl get svc blueprints-addon-argocd-server -n argocd -o json | jq --raw-output '.status.loadBalancer.ingress[0].hostname'`
## password env
export ARGO_PWD=`kubectl -n argocd get secret argocd-initial-admin-secret -o jsonpath="{.data.password}" | base64 -d`
## argocd cli login
argocd login $ARGOCD_SERVER --username admin --password $ARGO_PWD --insecure
```
생성한 클러스터를 argocd에 등록합니다.
```bash=
## argocd cluster add
CONTEXT_NAME=`kubectl config view -o jsonpath='{.current-context}'`
argocd cluster add $CONTEXT_NAME
```
## CI/CD : github action + eks
EKS web application : https://catalog.us-east-1.prod.workshops.aws/workshops/9c0aa9ab-90a9-44a6-abe1-8dff360ae428/ko-KR/110-cicd/100-cicd
AWS Code* : https://catalog.us-east-1.prod.workshops.aws/workshops/cbcd960c-a07b-40c2-a01d-1d2e7a52b945/ko-KR
```bash=
cd ~/environment/my-eks-blueprints
cdk init app --language typescript
export ACCOUNT_ID=$(aws sts get-caller-identity --output text --query Account)
cdk bootstrap --trust=$ACCOUNT_ID \
--cloudformation-execution-policies arn:aws:iam::aws:policy/AdministratorAccess \
aws://$ACCOUNT_ID/ap-northeast-2 aws://$ACCOUNT_ID/us-west-2
```
```typescript=
#!/usr/bin/env node
import 'source-map-support/register';
import * as cdk from 'aws-cdk-lib';
import ClusterConstruct from '../lib/my-eks-blueprints-stack';
const app = new cdk.App();
const account = process.env.CDK_DEFAULT_ACCOUNT!;
const region = process.env.CDK_DEFAULT_REGION;
const env = { account, region }
new ClusterConstruct(app, 'cluster', { env });
```
```typescript=
// lib/pipeline.ts
import * as cdk from 'aws-cdk-lib';
import { Construct } from 'constructs';
import * as blueprints from '@aws-quickstart/eks-blueprints';
export default class PipelineConstruct extends Construct {
constructor(scope: Construct, id: string, props?: cdk.StackProps){
super(scope,id)
const account = props?.env?.account!;
const region = props?.env?.region!;
const blueprint = blueprints.EksBlueprint.builder()
.account(account)
.region(region)
.addOns(
new blueprints.VpcCniAddOn(),
new blueprints.CoreDnsAddOn(),
new blueprints.KubeProxyAddOn(),
// Self-managed Add-ons
new blueprints.addons.AwsForFluentBitAddOn(),
new blueprints.addons.AwsLoadBalancerControllerAddOn(),
new blueprints.addons.ClusterAutoScalerAddOn(),
new blueprints.addons.EfsCsiDriverAddOn(),
new blueprints.addons.MetricsServerAddOn()
)
.teams();
blueprints.CodePipelineStack.builder()
.name("eks-blueprints-workshop-pipeline")
.owner("sykang808")
.repository({
repoUrl: 'my-eks-blueprints',
credentialsSecretName: 'github-token',
targetRevision: 'main'
}).wave({
id: "envs",
stages: [
{ id: "dev", stackBuilder: blueprint.clone('us-west-2')},
]
})
.build(scope, id+'-stack', { env:{ account:props?.env?.account, region:props?.env?.region}});
}
}
```
## AWS Observability
https://catalog.workshops.aws/observability/ko-KR
https://catalog.workshops.aws/observability/ko-KR/rum
https://catalog.workshops.aws/observability/ko-KR/containerinsights/eks
https://catalog.workshops.aws/observability/ko-KR/amp
https://catalog.workshops.aws/observability/ko-KR/amg
### 참고자료
AWS CI/CD workshop : https://catalog.us-east-1.prod.workshops.aws/workshops/cbcd960c-a07b-40c2-a01d-1d2e7a52b945/ko-KR
survay : https://forms.gle/PTNV8eKcbYyC5qcu8