SK네트웍스 Family AI캠프 10기

SK네트웍스 AI캠프 115~116일차 - DNS설정(route53)__AWS-CICD(청년정책 상담 챗봇)

netsma 2025. 6. 30. 12:45

 

https://app.diagrams.net/?src=about#

 

Flowchart Maker & Online Diagram Software

Flowchart Maker and Online Diagram Software draw.io is free online diagram software. You can use it as a flowchart maker, network diagram software, to create UML online, as an ER diagram tool, to design database schema, to build BPMN online, as a circuit d

app.diagrams.net

 

https://app.diagrams.net/?src=about

 

Flowchart Maker & Online Diagram Software

Flowchart Maker and Online Diagram Software draw.io is free online diagram software. You can use it as a flowchart maker, network diagram software, to create UML online, as an ER diagram tool, to design database schema, to build BPMN online, as a circuit d

app.diagrams.net

 

from diagrams import Diagram, Edge
from diagrams.aws.devtools import Codepipeline, Codebuild
from diagrams.aws.compute import ECS
from diagrams.aws.general import User
from diagrams.aws.storage import S3
from diagrams.onprem.vcs import Github

with Diagram("AWS Django CI/CD Architecture (with S3)", show=False, direction="TB"):
    user = User("User")
    github = Github("GitHub\n(Repo)")
    pipeline = Codepipeline("CodePipeline")
    build = Codebuild("CodeBuild")
    s3 = S3("S3 (Artifact)")
    ecs = ECS("ECS/Fargate")

    github >> Edge(label="Push/PR") >> pipeline
    pipeline >> Edge(label="Trigger") >> build
    build >> Edge(label="Artifact upload") >> s3
    s3 >> Edge(label="Deploy") >> ecs
    ecs >> Edge(label="Web Access") >> user

 

from diagrams import Diagram, Edge
from diagrams.aws.devtools import Codepipeline, Codebuild
from diagrams.aws.compute import ECS, ECR
from diagrams.aws.general import User
from diagrams.onprem.vcs import Github

with Diagram("AWS Django CI/CD Architecture", show=False, direction="TB"):
    user = User("User")
    github = Github("GitHub\n(Repo)")
    pipeline = Codepipeline("CodePipeline")
    build = Codebuild("CodeBuild")
    ecr = ECR("ECR")
    ecs = ECS("ECS/Fargate")

    github >> Edge(label="Push/PR") >> pipeline
    pipeline >> Edge(label="Trigger") >> build
    build >> Edge(label="Docker build/push") >> ecr
    ecr >> Edge(label="Deploy") >> ecs
    ecs >> Edge(label="Web Access") >> user
from diagrams import Diagram, Edge
from diagrams.aws.devtools import Codepipeline, Codebuild
from diagrams.aws.compute import ECS, ECR
from diagrams.aws.general import User
from diagrams.aws.management import SystemsManagerParameterStore
from diagrams.onprem.vcs import Github

# 설명은 주석으로!
# 1. 개발자가 GitHub에 코드 Push
# 2. CodePipeline이 변경 감지 후 파이프라인 실행
# 3. CodeBuild가 소스 체크아웃 → Docker 이미지 빌드 → ECR에 푸시
# 4. ECS가 새 이미지를 감지, 서비스에 배포
# 5. ECS Task가 SSM Parameter Store에서 환경변수(비밀키 등) 로드
# 6. 사용자는 새 버전의 웹서비스에 접속

with Diagram(
    "aws_cicd_architecture",  # 파일명으로 사용될 짧은 제목
    show=False,
    direction="LR"
):
    github = Github("GitHub\n(Repo)")
    pipeline = Codepipeline("CodePipeline")
    build = Codebuild("CodeBuild")
    ecr = ECR("ECR")
    ecs = ECS("ECS/Fargate")
    ssm = SystemsManagerParameterStore("SSM\nParameter Store")
    user = User("User")

    github >> Edge(label="1. Push") >> pipeline
    pipeline >> Edge(label="2. Trigger") >> build
    build >> Edge(label="3. Docker build/push") >> ecr
    ecr >> Edge(label="4. Deploy") >> ecs
    ecs >> Edge(label="5. 환경변수 로드") >> ssm
    ecs >> Edge(label="6. Web Access") >> user

https://yenpa.tistory.com/2

 

[네이버 개발자센터 API] API 이용신청 및 Application 등록방법

네이버 개발자센터에서 API 이용신청 및 Application을 등록하는 방법을 알아보겠습니다. 1. 사이트접속 2. 로그인 3. API 이용신청 및 Application 등록 4. 등록정보확인 1. 사이트 접속 아래의 네이버 개

yenpa.tistory.com

https://developers.naver.com/docs/login/api/api.md

 

네이버 로그인 API 명세 - LOGIN

네이버 로그인 API 명세 네이버 로그인 API는 네이버 로그인 인증 요청 API, 접근 토큰 발급/갱신/삭제 요청API로 구성되어 있습니다. 네이버 로그인 인증 요청 API는 여러분의 웹 또는 앱에 네이버

developers.naver.com

https://www.dnszi.com/

 

DNSZi - 무료 네임서버(dns) 관리 서비스! 무료파킹서비스! 무료포워딩서비스!

<!-- --> 도메인 DNS관리를 웹에서 쉽게 하세요! - DNS를 관리하는데 시간과 비용이 드시나요?- 번거롭게 도메인 등록업체에 매번 DNS정보 수정을 요청하시나요?- DNS관리자에게 DNS정보 수정을 요청하

www.dnszi.com

https://www.websiteplanet.com/ko/blog/%EB%AC%B4%EB%A3%8C-%EB%8F%84%EB%A9%94%EC%9D%B8-%EB%84%A4%EC%9E%84-%EC%9D%B4%EC%9A%A9-%EB%B0%A9%EB%B2%95/

 

무료 도메인 네임 이용 방법: 2025년도 가이드

도메인 네임을 무료로 이용할 수 있습니다. 최종 가이드를 읽고 최저가로 도메인 네임을 이용할 수 있는 방법을 알아보세요.

www.websiteplanet.com

https://www.dothome.co.kr/homepage/free_builder_index.php

 

무료홈페이지 | 무료호스팅 | 닷홈

닷홈은 도메인, 무료호스팅, 무료홈페이지, 웹호스팅, 웹메일, SSL보안인증서, 서버호스팅 등 호스팅 서비스를 제공하고 있습니다.

www.dothome.co.kr

https://www.infinityfree.com/

 

Free Web Hosting with PHP and MySQL

Completely free website hosting with PHP, MySQL and no ads on your site!

www.infinityfree.com

https://www.freenom.com/en/index.html?lang=en

 

Freenom - A Name for Everyone

Sorry, is not available. IMPORTANT NOTICE: Because of technical issues the Freenom application for new registrations is temporarily out-of-order. Please accept our apologies for the inconvenience. We are working on a solution and hope to resume operations

www.freenom.com

 

국가번호를 082가 아니라 82로 입력해야함. 

기존에 도메인 이름을 보유한 것이 있다면 도메인 이름 만들 필요 없이 아래와 같이 진행한다.(도메인 이름이 없어서 방금 만든 사람은 생략할 것)

위와 같이 이름 서버가 업데이트된 내역이 조회됨.

 

IP주소에서 :8000 은 지워야 함.

ECS 퍼블릭 IP 변경 시 Route53 자동 업데이트 방법

ECS(Elastic Container Service) 인스턴스의 퍼블릭 IP가 변경될 때 Route53 레코드를 자동으로 업데이트하려면 다음 방법 중 하나를 사용할 수 있습니다:

1. 부트 스크립트 사용 (EC2 런치 타입)

EC2 인스턴스에서 ECS를 실행하는 경우, 인스턴스 시작 시 스크립트를 실행하여 Route53을 업데이트합니다.

구현 단계:

  1. IAM 역할 설정
    EC2 인스턴스에 Route53 업데이트 권한이 있는 IAM 역할 할당:
  2.  
    json
    { "Version": "2012-10-17", "Statement": [ { "Effect": "Allow", "Action": "route53:ChangeResourceRecordSets", "Resource": "arn:aws:route53:::hostedzone/YOUR_HOSTED_ZONE_ID" } ] }
  3. 스크립트 작성
    /var/lib/cloud/scripts/per-boot/update_route53.sh에 다음 스크립트 추가:
    • YOUR_HOSTED_ZONE_ID: Route53 호스팅 영역 ID
    • your.domain.com.: 업데이트할 도메인
  4.  
    bash
    #!/bin/bash PUBLIC_IP=$(curl -s http://169.254.169.254/latest/meta-data/public-ipv4) aws route53 change-resource-record-sets --hosted-zone-id YOUR_HOSTED_ZONE_ID \ --change-batch '{ "Changes": [{ "Action": "UPSERT", "ResourceRecordSet": { "Name": "your.domain.com.", "Type": "A", "TTL": 300, "ResourceRecords": [{"Value": "'$PUBLIC_IP'"}] }}] }'
  5. 스크립트 실행 권한 부여
  6.  
    bash
    chmod +x /var/lib/cloud/scripts/per-boot/update_route53.sh

2. 사이드카 컨테이너 사용 (Fargate)

Fargate 작업의 경우, 메인 컨테이너와 함께 Route53 업데이트 전용 컨테이너를 실행합니다.

구현 단계:

  1. IAM 작업 역할 설정
    ECS 작업에 Route53 업데이트 권한 추가.
  2. 사이드카 컨테이너 Dockerfile
  3.  
    text
    FROM amazonlinux:2 RUN yum install -y awscli jq curl COPY update_route53.sh /update_route53.sh CMD ["/bin/bash", "/update_route53.sh"]
  4. 업데이트 스크립트
    update_route53.sh:
  5.  
    bash
    #!/bin/bash PUBLIC_IP=$(curl -s http://checkip.amazonaws.com) aws route53 change-resource-record-sets --hosted-zone-id YOUR_HOSTED_ZONE_ID \ --change-batch '{ "Changes": [{ "Action": "UPSERT", "ResourceRecordSet": { "Name": "your.domain.com.", "Type": "A", "TTL": 60, "ResourceRecords": [{"Value": "'$PUBLIC_IP'"}] }}] }'
  6. 작업 정의에 컨테이너 추가
    메인 컨테이너와 함께 사이드카 컨테이너를 정의합니다.

3. Lambda 함수 활용 (이벤트 기반)

ECS 이벤트를 트리거로 Lambda 함수 실행:

  1. CloudWatch 이벤트 설정
    ECS Task State Change 이벤트 캡처.
  2. Lambda 함수 작성
    Python 예시:
  3.  
    python
    import boto3 def lambda_handler(event, context): task_arn = event['detail']['taskArn'] ecs = boto3.client('ecs') route53 = boto3.client('route53') # 퍼블릭 IP 조회 (ENI 정보 사용) # ... (생략: IP 추출 로직) route53.change_resource_record_sets( HostedZoneId='YOUR_HOSTED_ZONE_ID', ChangeBatch={...} # 스크립트와 동일한 구조 )

주의사항

  1. 퍼블릭 IP 할당 확인
    • ECS 인스턴스/작업이 퍼블릭 서브넷에 배포되었는지 확인
    • 퍼블릭 IP 할당이 활성화되었는지 확인
  2. 보안 고려사항
    • IAM 역할은 최소 권한 원칙 적용
    • 민감한 정보(호스팅 영역 ID)는 환경 변수 또는 AWS Systems Manager Parameter Store 사용
  3. DNS TTL 설정
    TTL(Time-To-Live)을 60초로 설정해 변경 사항이 빠르게 전파되도록 함.

최적의 방법 선택 가이드

  • EC2 런치 타입: 부트 스크립트 방식이 간단
  • Fargate: 사이드카 컨테이너 방식 권장
  • 다중 인스턴스 환경: Lambda + CloudWatch 이벤트 조합이 확장성 우수

이 방법들을 통해 ECS 인스턴스의 IP 변경 시 Route53 레코드가 자동으로 업데이트됩니다.