{"id":27351892,"url":"https://github.com/eehwan/ec2-duckdns-control","last_synced_at":"2025-04-12T20:54:04.957Z","repository":{"id":287028557,"uuid":"963320305","full_name":"eehwan/ec2-duckdns-control","owner":"eehwan","description":"간단한 셸 스크립트로 EC2 인스턴스를 시작/종료하고, 현재 IP를 DuckDNS에 자동 등록할 수 있습니다. 도메인 매핑 자동화용 도구입니다.","archived":false,"fork":false,"pushed_at":"2025-04-09T15:39:54.000Z","size":8,"stargazers_count":1,"open_issues_count":0,"forks_count":0,"subscribers_count":1,"default_branch":"main","last_synced_at":"2025-04-12T20:54:02.202Z","etag":null,"topics":["automation","aws","cloud-tools","devops","duckdns","dynamic-dns","ec2","shell-script"],"latest_commit_sha":null,"homepage":"","language":"Shell","has_issues":true,"has_wiki":null,"has_pages":null,"mirror_url":null,"source_name":null,"license":null,"status":null,"scm":"git","pull_requests_enabled":true,"icon_url":"https://github.com/eehwan.png","metadata":{"files":{"readme":"README.md","changelog":null,"contributing":null,"funding":null,"license":null,"code_of_conduct":null,"threat_model":null,"audit":null,"citation":null,"codeowners":null,"security":null,"support":null,"governance":null,"roadmap":null,"authors":null,"dei":null,"publiccode":null,"codemeta":null}},"created_at":"2025-04-09T13:54:09.000Z","updated_at":"2025-04-09T15:39:58.000Z","dependencies_parsed_at":"2025-04-09T16:31:33.287Z","dependency_job_id":"0542b56d-52a6-428c-b8f8-d908a4af860a","html_url":"https://github.com/eehwan/ec2-duckdns-control","commit_stats":null,"previous_names":["eehwan/ec2-duckdns-control"],"tags_count":0,"template":false,"template_full_name":null,"repository_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/eehwan%2Fec2-duckdns-control","tags_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/eehwan%2Fec2-duckdns-control/tags","releases_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/eehwan%2Fec2-duckdns-control/releases","manifests_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/eehwan%2Fec2-duckdns-control/manifests","owner_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/owners/eehwan","download_url":"https://codeload.github.com/eehwan/ec2-duckdns-control/tar.gz/refs/heads/main","host":{"name":"GitHub","url":"https://github.com","kind":"github","repositories_count":248631719,"owners_count":21136560,"icon_url":"https://github.com/github.png","version":null,"created_at":"2022-05-30T11:31:42.601Z","updated_at":"2022-07-04T15:15:14.044Z","host_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub","repositories_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories","repository_names_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repository_names","owners_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/owners"}},"keywords":["automation","aws","cloud-tools","devops","duckdns","dynamic-dns","ec2","shell-script"],"created_at":"2025-04-12T20:54:04.396Z","updated_at":"2025-04-12T20:54:04.946Z","avatar_url":"https://github.com/eehwan.png","language":"Shell","funding_links":[],"categories":[],"sub_categories":[],"readme":"# EC2 \u0026 DuckDNS Control Scripts\n\nAWS EC2 인스턴스를 시작하고 일정 시간 후 자동으로 종료하며,  \n현재 퍼블릭 IP를 DuckDNS에 자동 등록하는 셸 스크립트 기반 자동화 도구입니다.\n\n---\n\n## 디렉토리 구조\n\n```\nec2-duckdns-control/\n├── envs/\n│   ├── dev.env\n│   ├── prod.env\n│   └── .env.example      ← 템플릿만 깃에 포함\n├── scripts/\n│   ├── start_instance.sh\n│   ├── stop_instance.sh\n│   ├── update_dns.sh\n│   └── wait_and_shutdown.sh\n├── open.sh\n├── close.sh\n├── shutdown.log          ← nohup 로그\n├── README.md\n└── .gitignore\n```\n\n## 주요 스크립트 설명\n\n| 파일명 | 역할 |\n|--------|------|\n| `open.sh` | `.env`를 로드하고 전체 자동화 흐름을 실행 (시작 → DNS 등록 → 자동 종료 예약) |\n| `close.sh` | `.env`를 로드하고 인스턴스 종료 |\n| `scripts/start_instance.sh` | EC2 인스턴스를 시작하고 시작 요청 완료 메시지를 출력 |\n| `scripts/update_dns.sh` | EC2 인스턴스의 퍼블릭 IP를 DuckDNS에 매핑 |\n| `scripts/wait_and_shutdown.sh` | 설정된 시간 후 EC2 인스턴스를 자동 종료 |\n| `scripts/stop_instance.sh` | EC2 인스턴스를 수동으로 즉시 종료 |\n\n---\n\n## ⚙️ 사용 방법\n\n### 1. AWS CLI 설치 및 설정\n\n\u003e 💡 AWS CLI가 반드시 설치되어 있어야 하며, 적절한 자격 증명이 필요합니다.\n\n#### AWS CLI 설치 (Ubuntu 기준) :\n\n```bash\nsudo apt update \u0026\u0026 sudo apt install -y awscli\n```\n\n```bash\naws configure\n```\n\n입력 항목:\n\n- AWS Access Key ID: IAM 사용자용 키\n\n- AWS Secret Access Key: 위 키의 비밀 키\n\n- Default region name: 예: ap-northeast-2 (서울 리전)\n\n- Default output format: json 또는 text\n\n\u003e ⚠️ 해당 키는 EC2 인스턴스에 대해 start, stop, describe-instances 권한을 반드시 가져야 합니다.\n권한이 부족하면 스크립트가 실패합니다.\n\n### 2. DuckDNS 계정 생성 및 .env 설정\n\n\u003e 💡 이 스크립트를 사용하려면 DuckDNS 계정을 생성하고, 서브도메인과 토큰을 발급받아야 합니다.\n\n1. https://www.duckdns.org에 접속하여 GitHub/Google 등으로 로그인\n\n2. 원하는 서브도메인 등록 (예: myproject.duckdns.org)\n\n3. 상단에 표시되는 토큰 복사\n\n#### .env 파일 예시 (envs/dev.env):\n\n```env\nINSTANCE_ID=i-xxxxxxxxxxxxxxxxx     # EC2 인스턴스 ID\nDUCKDNS_DOMAIN=your-subdomain       # DuckDNS 서브도메인 (예: myproject)\nDUCKDNS_TOKEN=your-duckdns-token    # DuckDNS API 토큰\n```\n\n### 3. 실행 권한 부여\n\n```bash\nchmod +x start_and_shutdown.sh\nchmod +x scripts/*.sh\n```\n\n### 4. 스크립트 실행 예시\n\n```bash\n# 2시간 후 종료 (기본값)\n./open.sh --env dev.env\n\n# 30분 후 종료\n./open.sh --env dev.env --wait 1800\n```\n\n### 5. 종료하고 싶을 경우\n\n```bash\nclose.sh --env dev.env\n```","project_url":"https://awesome.ecosyste.ms/api/v1/projects/github.com%2Feehwan%2Fec2-duckdns-control","html_url":"https://awesome.ecosyste.ms/projects/github.com%2Feehwan%2Fec2-duckdns-control","lists_url":"https://awesome.ecosyste.ms/api/v1/projects/github.com%2Feehwan%2Fec2-duckdns-control/lists"}