下記の別記事で書いた、terraformで構築したEKS環境をCloudformationで構築してみました。
ただ、k8sの設定は、Cloudformationで出来ないので、kubectl, helmなどのコマンドを使用しています。
私の環境
- SparkyLinux6.5(Debian系)
- Bitbucket
- ssh秘密鍵(レポジトリアクセス用)
- k8s
- kubectl1.25.4
- helm3.10.2
- aws
- aws-cli2.9.4
- eksctl0.13.0
- rain1.3.0
- cfn-lint0.73.2
- ssh秘密鍵(EC2用キーペア)
- os command
- make
- bash
- jq
- envsubst
サンプルコード
https://github.com/blue21jp/aws-sample-cfn-eks
構成
. ├── README.md ├── demo_todo.org ├── global/ │ └── variables.mk ├── stacks_base/ │ ├── 01_network/ │ │ ├── Makefile │ │ └── cfn_vpc.yml │ ├── 02_prefix_list/ │ │ ├── Makefile │ │ └── cfn_prefix_list.yml │ ├── 03_nat/ │ │ ├── Makefile │ │ └── cfn_nat.yml │ ├── Makefile │ ├── variables_all.mk │ └── variables_prd.mk └── stacks_eks/ ├── 01_vpc/ │ └── Makefile ├── 02_ssm/ │ └── Makefile ├── 10_eks_cluster/ │ ├── Makefile │ ├── cfn_eks_cluster.yml │ ├── cfn_eks_fargate_profile.yml │ └── cfn_eks_oidc.yml ├── 11_k8s_init/ │ └── Makefile ├── 20_k8s_alb_controller/ │ ├── Makefile │ └── aws_alb_policy.json ├── 20_k8s_eso/ │ ├── Makefile │ ├── aws_eso_policy.json │ └── k8s_eso_cluster_secret.yml ├── 20_k8s_metric_server/ │ └── Makefile ├── 21_k8s_argocd/ │ ├── Makefile │ └── k8s_argocd_ingress.yml ├── 21_k8s_dashboard/ │ ├── Makefile │ └── k8s_dashboard_ingress.yml ├── 40_app_argocd/ │ ├── Makefile │ ├── argocd_apps.json │ ├── argocd_apps.sh │ ├── argocd_git_repositorys.json │ ├── argocd_git_repositorys.sh │ ├── k8s_argocd_app.yml │ ├── k8s_argocd_repo.yml │ ├── k8s_external_secret.yaml │ └── k8s_ingress_app.yml ├── Makefile ├── variables_all.mk └── variables_prd.mk
この構成の説明と基本操作方法は、下記の別記事を参照。
下記の記事はterraform用なので、多少、本記事のCloudformation用とは使用方法(オプションとか)が異なりますが、考え方は同じです。
- 「awsとlocalstackを切り替えながらterraformを使いたい」
- 「Docker Desktop(k8s)+Localstackでargocdを動かす環境をterraformで作ってみる」
- 「EKS(fargate)でargocdを試す環境をterraformで作ってみた」
今回のEKS環境は、前述の別記事(terraform版)と比較して、下記を変えてます。
- appは、tf-sample-eks レポジトリを使用します。
- SecurityGrpoupの設定に、マネージドプレフィックスリストを使用しています。
- argocd画面のexecを有効にしています。(GUIからpodに入れる)
- argocd用の設定情報(レポジトリ、アプリケーション)は、40_app_argocdのjsonファイルに記述しています。
構築
準備
bitbucket
レポジトリアクセス用のSSH秘密鍵は下記のPATHを使用します。
~/.ssh/id_rsa
awscli
AWS用のprofile名は "sandbox" を使用します。us-east-1で動作確認しています。
ec2キーペア
NATインスタンスで使用するキーペアです。"sandbox"を使用します。
節約のためにNATゲートウェイでなくNATインスタンスを使ってます。
節約のためにNATゲートウェイでなくNATインスタンスを使ってます。
Cloudformation実行
下記コマンドを実行すると、rain deployやawscli,kubeclt,helm,eksctlが実行されます。
これで、AWS環境にリソース一式(vpc, eks, ssm, argocd, dashbord, etc)が構築されます。
$ make -C stacks_base deploy $ make -C stacks_eks deploy
破棄
下記コマンドを実行するとリソースを全部、破棄します。
$ make -C stacks_eks remove $ make -C stacks_base remove