Route53의 DNS 레코드를 GitHub의 JSON 파일에서 관리 할 수 ​​있습니다.

나는 Wacker 이라는 커뮤니티에서 활동하고 있었고, 최근에 그 커뮤니티에서 몇개의 프로젝트를 시작해, 그에 대한 서브 도메인을 GitHub Pages 등으로 발행하는 상황이 있었습니다.

그래서 커뮤니티 중심의 느낌으로 좋을 것 DNS 서버상의 서브 도메인의 관리를 자동화할 수 없을까라고 생각해, GitHub 상에 있는 JSON 에 근거해 DNS 레코드를 갱신하려고 해 보았습니다.

위의 리포지토리를 포크하고 다음과 같이 적절하게 사용자 정의하십시오.

메커니즘



GitHub에서 다음과 같은 JSON을 커밋합니다.
{
  "records": [
    {
      "Name": "wacker.io",
      "Type": "A",
      "TTL": "300",
      "ResourceRecords": [
        {
          "Value": "192.30.252.153"
        },
        {
          "Value": "192.30.252.154"
        }
      ]
    },
    {
      "Name": "wmap.wacker.io",
      "Type": "CNAME",
      "TTL": "300",
      "ResourceRecords": [
        {
          "Value": "wakayama-hacker.github.io"
        }
      ]
    },
    {
      "Name": "latlng.wacker.io",
      "Type": "CNAME",
      "TTL": "300",
      "ResourceRecords": [
        {
          "Value": "wakayama-hacker.github.io"
        }
      ]
    },
    {
      "Name": "kushimap.wacker.io",
      "Type": "CNAME",
      "TTL": "300",
      "ResourceRecords": [
        {
          "Value": "miya0001.github.io"
        }
      ]
    }
  ]
}
records 배열에 DNS 레코드를 저장한다는 것을 알 수 있습니다.

그리고는, 이것을 node 로 만든 스크립트로 읽어들여, Route53 의 API 를 걷어차는 느낌.
$ npm install
$ npm run deploy

스크립트의 소스는 다음 URL에 있습니다.

Travis CI로 자동 발화



그리고는 Travis CI 로 master 에 병합될 때마다 발화하도록 합니다.

IAM으로 사용자 만들기



Travis CI에서 Route53 API를 걷어차도록 정책을 만듭니다.
{
    "Version": "2012-10-17",
    "Statement": [
        {
            "Sid": "Stmt1490535720000",
            "Effect": "Allow",
            "Action": [
                "route53:ChangeResourceRecordSets",
                "route53:ListResourceRecordSets"
            ],
            "Resource": [
                "arn:aws:route53:::hostedzone/<Your Hosted Zone ID>"
            ]
        }
    ]
}

만일의 때를 위해, 대상의 존을 한정하고 있습니다.

Travis CI에서 리포지토리 사용



Travis CI에서 대상 GitHub 리포지토리를 활성화하고 다음과 같이 IAM 용 액세스 키 등을 환경 변수로 등록합니다.



등록해야 할 환경 변수는 다음과 같습니다.
  • AWS_ACCESS_KEY_ID
  • AWS_SECRET_ACCESS_KEY
  • HOSTED_ZONE_ID
  • HOSTED_ZONE_ID는 Route53의 DNS 영역에 할당된 ID입니다.

    AWS CLI를 설정한 경우 다음 명령으로 검색할 수 있습니다.
    $ aws route53 list-hosted-zones
    

    .travis.yaml


    .travis.yml 에는 다음과 같이 기술합니다.
    language: node_js
    node_js:
    - '7.6'
    
    branches:
      only:
        - master
    
    before_script:
    - npm install
    
    script:
    - npm run deploy
    

    로컬로 시도



    로컬 환경에서 사용하려면 direnv가 유용합니다.
    $ brew install direnv
    

    그리고 프로젝트의 디렉토리에 다음과 같은 내용의 파일을 .envrc 라는 파일명으로 설치해 주세요.
    .envrc 는 절대로 GitHub에 올리면 안됩니다.
    export HOSTED_ZONE_ID=xxxx
    export AWS_ACCESS_KEY_ID=xxxx
    export AWS_SECRET_ACCESS_KEY=xxxx
    

    좋은 웹페이지 즐겨찾기