코드스테이츠_Devops_4기/final project

final) IaC terraform 코드 작성

불여우의 길 2023. 6. 27. 13:13

이것저것 작은 실수나 오타 빼고

리얼 개빡치는 오류나 설정을 작성해 보겠숩니다.

 

 

1. rds가 자꾸 default vpc에 맨들어지고 난리

 

보안그룹은 새로 만든 vpc에서 사용하는 보안그룹인디 rds는 default vpc에 만들어져서 안맞는다고 ㅈㄹ..

그래서 rds의 vpc설정을 찾아보았다..

콘솔에서는 vpc를 고르면 알아서 프라이빗 서브넷에 rds가 만들어졌는데, 테라폼은 뭐 서브넷 그룹으로 설정해줘야하는 것 같아서 서브넷 그룹일 만들어보았다

 

https://docs.aws.amazon.com/ko_kr/AmazonElastiCache/latest/mem-ug/SubnetGroups.html

 

서브넷 및 서브넷 그룹 - Amazon ElastiCache

이 페이지에 작업이 필요하다는 점을 알려 주셔서 감사합니다. 실망시켜 드려 죄송합니다. 잠깐 시간을 내어 설명서를 향상시킬 수 있는 방법에 대해 말씀해 주십시오.

docs.aws.amazon.com

프라이빗 서브넷을 모아줘야하나봉가

 

근데 클러스터 만들려면 서브넷 그룹 지정해야한다구..?

그냥 만들어 지던데여? 암튼..

 

요로코롬 서브넷 그룹 설정

이렇게 서브넷 그룹을 rds 에 달아주면 만든 vpc에 들어갑니당

 

직접 연결도 안되는걸 보니 프라이빗 서브넷에 잘 들어간듯

 

퍼블릭 서브넷에 만든 ec2 를 통해 ssh 접속을 하니 잘 접속된다 꺄르룩

 

2. ec2에 user_data에 있는 명령어가 실행되지 않는 오류

sudo 붙여서 명령어를 바꿔줘도 안된댜

 

보니까 eof 부분을 들여쓰기를 해야되더라궁?

암튼 해결했숩니당

그라파나 접속까지 완료했습니당

 

근데 이것저것하다가 중간에 같은이름으로 vpc가 하나더 만들어졌다

뭔가 수정하면서 apply가 새로운 vpc를 만들어준것같았다

그래서 최근에 만들어진 애는 terraform destroy로 삭제가 됐는데 이전에 만들어진 애는 안지워져서 하나하나 콘솔로 지우느라 힘들었다

 

그덕에 뭐가 vpc안에 존재하고 뭐랑 뭐랑 이어져있고.,

이런거 배웠다. 좋은건가..?

좋은거라고 생각하자..

 

3. ecr에 이미지 빌드, 푸시

 

ecr 은 수월하게 만들었는데 테라폼으로 이미지를 만들어서 ecr에 올리는게 어려웠다.

이미지를 빌드하는 서비스가 없으므로 null resource를 만들어서 이미지를 빌드할 수 있도록 명령어를 작성했다

근데 이미지 빌드까지는 되는데 

 

aws ecr get-login-password --region region | docker login --username AWS --password-stdin aws_account_id.dkr.ecr.region.amazonaws.com

이게 자꾸만 failed with status: 400 Bad Request 에러가 났당

 

aws ecr get-login-password --region ap-northeast-2 이거는 되는데

docker login --username AWS --password-stdin aacount_id.dkr.ecr.ap-northeast-2.amazonaws.com 이게 안되더라고용?

 

--password-stdin 이게 뭔가했더니만 환경변수를 전달해주는 거였당

환경변수로 access_key 랑 secret_key를 입력해야하나보다

 

뭘해도 안됐다

 

1. aws configure 로 계정 변경

2. access_key, secret_key 환경변수로 등록

 

눈물을 머금고 헤매다가 이 글을 보았다

https://velog.io/@tyufjvbn2/AWS-ECR-Docker-%EC%97%B0%EA%B2%B0

 

AWS ECR, Docker login 연결

개인 docker hub에서 벗어나 공동으로 관리하는 cloud docker image hub 구성이 목표ECR repository 생성해당 repository 접근 위한 IAM생성/권한 부여로컬 docker 로그인 수정 및 IAM 계정 정보 등록docker image

velog.io

 

cli를 업데이트하라는 글,,

$ sudo apt install awscli (aws 서비스에 대한 명령어 사용을 위해 설치)
$ sudo apt install amazon-ecr-credential-helper (ecr 인증을 위한 모듈)
msiexec.exe /i https://awscli.amazonaws.com/AWSCLIV2.msi
msiexec.exe /i https://amazon-ecr-credential-helper-releases.s3.us-west-2.amazonaws.com/0.6.3/AmazonECRCredentialHelper-0.6.3.msi

psh 기준으로 변경해서 적용했다

어쩌구 저쩌구..

 

다 안돼서 그냥 도커랑 cli 다 지우고 다시 설치했다

그래도 안됐다 그래서 너무너무 힘들어서 잠을 잤다

 

이 오류만 4시간은 찾은듯

 

근데 다음날 바로 해결해버렸습니다.

 

소스코드 형식만 바꿔줌

왜 됐는지는 나도 몰라요

 

4. 레포지토리에 올라간 이미지로 만든 테스크 정의가 서비스에 배포가 안되는 문제

원래는 valueForm에 secret arn 까지 달아줬는데 이름만 써봤다.

바보같이 이것저것 해보다가 결국 답을 찾아서정확하게 넣어줌

ResourceInitializationError: unable to pull secrets or registry auth: execution resource retrieval failed: unable to retrieve secret from asm: service call has been retried 5 time(s): failed to fetch secret arn:aws:secretsmanager:ap-northeast-2:account_id:secret:access_key-GOTkWJ from secrets manager: RequestCanceled: request context canceled caused by: context deadline exceeded. Please check your task network configuration.

그리고 배포중에 이런 오류가 나길래 찾아보니까 secretmanager 환경변수를 가지고 올 수 있게 역할에 정책을 추가해야하더라고용?

고래서 추가

그래도 안됨

https://repost.aws/ko/knowledge-center/ecs-unable-to-pull-secrets

 

Amazon ECS에서 “unable to pull secrets or registry auth” 오류 문제 해결

Amazon Elastic Container Service(Amazon ECS) 작업을 시작할 때 다음 오류 중 하나가 발생했습니다. "ResourceInitializationError: unable to pull secrets or registry auth: pull command failed: : signal: killed" 또는 "Resource...

repost.aws

뭐 런북하라는데 그건 하기 싫었당

 

secret manager 접근 권한같은디.. 다 햤누ㅡㄴ디,..

 

 

아직 해결즁...

해결해서 포스팅을 다시해겠어요

 

 

5. terraform destroy를 하면 인터넷게이트웨이가 rds 와 종속성의 문제로 지워지지 않는 경우

둘다 terraform apply로 만들었는데 이상하게 인터넷게이트웨이가 지워지지 않고 오류가 계속났다.

 

방법을 찾아본 결과..

1. rds와 인터넷 게이트웨이가 애초에 연결되지 않도록 rds의 인터넷 연결을 비활성화

2. rds와 인터넷 게이트와의 종속되는 부분을 코드로 추가하여 apply와 destroy 모두 실행가능하게 만들어짐

 

rds는 어차피 프라이빗 서브넷에 들어가기 때문에 직접적으로 인터넷 게이트웨이랑 연결될 필요가 없다.

따라서 1번의 방법을 택해서 코드를 수정하였다.

publicly_accessible = false로 바꿔주면 된다고한당