완성 아키텍처
아래 Cludformation 템플릿으로 스택 생성
https://github.com/yuran777/k8s-aws-book/blob/master/eks-env/01_base_resources_cfn.yaml
eksctl create cluster \
--vpc-public-subnets <subnet ID> \ #subnet-0a43a15d4c3f2db30 형태의 subnet id 3개
--name eks-work-cluster \ #eks cluster 이름
--region ap-northeast-2 \ #cluster 만들 리전
--version 1.19 \
--nodegroup-name eks-work-nodegroup \ #nodegroup 이름
--node-type t2.medium \ #노드 크기
--nodes 2 \ #노드 갯수
--nodes-min 2 \ #노드 최소 갯수
--nodes-max 5 #노드 최대 갯수
참고) 파일 저장 경로: 맥 /home/USER명/.kube/config
kubectl config get-contexts
kubectl get ndoes
NAME STATUS ROLES AGE VERSION
ip-주소.ap-northeast-2.compute.internal Ready <none> 2d23h v1.19.15-eks-9c63c4
ip-주소.ap-northeast-2.compute.internal Ready <none> 2d23h v1.19.15-eks-9c63c4
https://github.com/yuran777/k8s-aws-book/blob/master/eks-env/10_rds_ope_cfn.yaml
위 Cludformation 템플릿으로 스택 생성
sudo yum install git -y
sudo amazon-linux-extras install -y postgresql11
cd /home/ssm-user
git clone https://github.com/yuran777/k8s-aws-book.git
CloudFormation 템플릿 중 아래 부분을 통해 만들어 짐.
EksWorkDB:
Type: "AWS::RDS::DBInstance"
Properties:
DBInstanceIdentifier: eks-work-db
Engine: postgres # https://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/aws-properties-rds-database-instance.html#aws-properties-rds-database-instance-properties
EngineVersion: 11 # https://docs.aws.amazon.com/AmazonRDS/latest/UserGuide/CHAP_MySQL.html#MySQL.Concepts.VersionMgmt
DBInstanceClass: db.t2.micro
AllocatedStorage: 30
StorageType: gp2
DBName: eksworkdb
MasterUsername: !Join ['', ['{{resolve:secretsmanager:', !Ref RdsMasterSecret, ':SecretString:username}}' ]]
MasterUserPassword: !Join ['', ['{{resolve:secretsmanager:', !Ref RdsMasterSecret, ':SecretString:password}}' ]]
DBSubnetGroupName: !Ref EksWorkDBSubnetGroup
PubliclyAccessible: false
MultiAZ: false
PreferredBackupWindow: 18:00-18:30
PreferredMaintenanceWindow: sat:19:00-sat:19:30
AutoMinorVersionUpgrade: false
DBParameterGroupName: !Ref EksWorkDBParameterGroup
VPCSecurityGroups:
- !Ref RdsSecurityGroup
CopyTagsToSnapshot: true
BackupRetentionPeriod: 7
DeletionProtection: false
RdsMasterSecret:
Type: AWS::SecretsManager::Secret
Properties:
GenerateSecretString:
SecretStringTemplate: '{"username": "eksdbadmin"}'
GenerateStringKey: 'password'
PasswordLength: 16
ExcludeCharacters: '"@/\'''
Name: RdsMasterSecret
RdsUserSecret:
Type: AWS::SecretsManager::Secret
Properties:
GenerateSecretString:
SecretStringTemplate: '{"username": "mywork"}'
GenerateStringKey: 'password'
PasswordLength: 16
ExcludeCharacters: '"@/\''{}#%&*<>[]^`|'
Name: RdsUserSecret
RdsSecretAttachment:
Type: AWS::SecretsManager::SecretTargetAttachment
Properties:
SecretId: !Ref RdsMasterSecret
TargetId: !Ref EksWorkDB
TargetType: AWS::RDS::DBInstance
AWS Secrets Manager > 보안 암호 > RdsMasterSecret 클릭 후, 보안 암호 값 > 보안 암호 검색
AWS Secrets Manager > 보안 암호 > RdsUserSecret 클릭 후, 보안 암호 값 > 보안 암호 검색
createuser -d -U eksdbadmin -P -h <rds 엔드포인트> mywork
#앞에 두번 mywork사용자으 비밀번호 입력 : 위에서 찾은 RdsUserSecret 비밀 번호 사용하면 됨
#마지막은 eksadmin으 비밀번호를 입력 : 위에서 찾은 RdsMasterSecret 비밀번호 사용하면 됨
참고: postgresql createuser 명령어 옵션
https://postgresql.kr/docs/11/app-createuser.html
createdb -U mywork -h <rds 엔드포인트> -E UTF8 myworkdb
#password는 앞에서 만든 mywork 사용자의 비밀 번호
참고: postgresql createdb 명령어 옵션
https://postgresql.kr/docs/11/app-createdb.html
psql -U mywork -h <rds 엔드포인트 주소> mywork
myworkdb=> \i k8s-aws-book/backend-app/scripts/10_ddl.sql
myworkdb=> \i k8s-aws-book/backend-app/scripts/20_insert_sample_data.sql
myworkdb=> \q