Global IP를 모니터링하여 Route53 업데이트
7613 단어 ShellScriptroute53awscliAWS
배경
자사 개발 서버를 세운 것은 좋았습니다만, 실은 Office의 Global IP가 고정되어 있지 않은 것을 알았습니다. 이제는 다소 귀찮은 일과 ISP씨에게 전화해 고정 IP의 계약을 하면 좋은 이야기입니다만, 인프라의 소프트웨어 해결의 문화를 계몽하고 싶은 생각도 있어, 트위터 Route53를 자동 갱신하는 Shell Script를 Cron 에 등록해 두자는 것입니다.
이런 Shell Script를 썼습니다.
구조로서는 Global IP를 gip.txt
라는 텍스트 파일에 기록해 두고, 지금의 Global IP와 비교해 갱신이 있으면 aws-cli로 Route53의 Record의 갱신을 한다고 하는 것입니다.
ip_watch.sh#!/usr/bin/env bash
gip=`curl inet-ip.info` # Global IPを取得
r53_hosted_id="********" # AWS Route53のHosted ID
r53_target_domain="my.host.domain.com" # 更新するドメイン(今回はA record)
gipfile="/path/to/gip.txt" # gip.txt出力先
outfile="/path/to/update.json" # JSON出力先
env_gip=`cat $gipfile` # 旧Global IP
# 以前環境変数に登録していた旧Global IPと現Global IPを比較
if [ "${gip}" != "${env_gip}" ]; then
# aws-cli route53で渡すJSONファイル(update.json)を作成
json="{\"Comment\" : \"\", \"Changes\" : [{\"Action\" : \"UPSERT\", \"ResourceRecordSet\" : {\"Name\" : \"${r53_target_domain}\", \"Type\" : \"A\", \"TTL\" : 300, \"ResourceRecords\" : [{\"Value\": \"${gip}\"}]}}]}"
echo $json > $outfile
# aws-cliでroute53のrecord set更新
aws route53 change-resource-record-sets --hosted-zone-id $r53_hosted_id --change-batch file://$outfile
# Slackにお知らせ。Incoming Webhook URLをご用意ください。
curl -X POST --data-urlencode "payload={
\"channel\": \"#infra\",
\"username\": \"ip監視さん\",
\"text\": \"updating global IP ${env_gip} -> ${gip}!!\",
\"icon_emoji\": \":elevennines:\"
}" https://hooks.slack.com/services/******/*******/***************
echo "${gip}" > $gipfile # Global IPをセット
fi
실행 결과
커맨드 라인에서는 다음과 같습니다.
[tokifuji@office ip_watch]$ ./ip_watch.sh
% Total % Received % Xferd Average Speed Time Time Time Current
Dload Upload Total Spent Left Speed
100 15 100 15 0 0 36 0 --:--:-- --:--:-- --:--:-- 36
{
"ChangeInfo": {
"Status": "PENDING",
"Comment": "",
"SubmittedAt": "2017-01-30T12:22:21.799Z",
"Id": "/change/***********"
}
}
[tokifuji@office ip_watch]$
이후의 상태 확인은 다음과 같습니다. Status가 INSYNC
가 되면 OK입니다.
[tokifuji@office ip_watch]$ aws route53 get-change --id /change/***********
{
"ChangeInfo": {
"Status": "INSYNC",
"SubmittedAt": "2017-01-30T12:22:21.799Z",
"Id": "/change/***********"
}
}
Slack에는 이런 메시지가 날아갑니다.
CRONTAB로 설정
자신은 5 분 두고 설정하고 있지만, 기호로 ...
[tokifuji@office ip_watch]$ crontab -l
*/5 * * * * /path/to/ip_watch.sh
이제 당신도 편안 Route53 라이프 (??)를 즐기십시오. 그럼 다시
Reference
이 문제에 관하여(Global IP를 모니터링하여 Route53 업데이트), 우리는 이곳에서 더 많은 자료를 발견하고 링크를 클릭하여 보았다
https://qiita.com/tokifuji/items/49e1fb98a991af51a505
텍스트를 자유롭게 공유하거나 복사할 수 있습니다.하지만 이 문서의 URL은 참조 URL로 남겨 두십시오.
우수한 개발자 콘텐츠 발견에 전념
(Collection and Share based on the CC Protocol.)
구조로서는 Global IP를
gip.txt
라는 텍스트 파일에 기록해 두고, 지금의 Global IP와 비교해 갱신이 있으면 aws-cli로 Route53의 Record의 갱신을 한다고 하는 것입니다.ip_watch.sh
#!/usr/bin/env bash
gip=`curl inet-ip.info` # Global IPを取得
r53_hosted_id="********" # AWS Route53のHosted ID
r53_target_domain="my.host.domain.com" # 更新するドメイン(今回はA record)
gipfile="/path/to/gip.txt" # gip.txt出力先
outfile="/path/to/update.json" # JSON出力先
env_gip=`cat $gipfile` # 旧Global IP
# 以前環境変数に登録していた旧Global IPと現Global IPを比較
if [ "${gip}" != "${env_gip}" ]; then
# aws-cli route53で渡すJSONファイル(update.json)を作成
json="{\"Comment\" : \"\", \"Changes\" : [{\"Action\" : \"UPSERT\", \"ResourceRecordSet\" : {\"Name\" : \"${r53_target_domain}\", \"Type\" : \"A\", \"TTL\" : 300, \"ResourceRecords\" : [{\"Value\": \"${gip}\"}]}}]}"
echo $json > $outfile
# aws-cliでroute53のrecord set更新
aws route53 change-resource-record-sets --hosted-zone-id $r53_hosted_id --change-batch file://$outfile
# Slackにお知らせ。Incoming Webhook URLをご用意ください。
curl -X POST --data-urlencode "payload={
\"channel\": \"#infra\",
\"username\": \"ip監視さん\",
\"text\": \"updating global IP ${env_gip} -> ${gip}!!\",
\"icon_emoji\": \":elevennines:\"
}" https://hooks.slack.com/services/******/*******/***************
echo "${gip}" > $gipfile # Global IPをセット
fi
실행 결과
커맨드 라인에서는 다음과 같습니다.
[tokifuji@office ip_watch]$ ./ip_watch.sh
% Total % Received % Xferd Average Speed Time Time Time Current
Dload Upload Total Spent Left Speed
100 15 100 15 0 0 36 0 --:--:-- --:--:-- --:--:-- 36
{
"ChangeInfo": {
"Status": "PENDING",
"Comment": "",
"SubmittedAt": "2017-01-30T12:22:21.799Z",
"Id": "/change/***********"
}
}
[tokifuji@office ip_watch]$
이후의 상태 확인은 다음과 같습니다. Status가 INSYNC
가 되면 OK입니다.
[tokifuji@office ip_watch]$ aws route53 get-change --id /change/***********
{
"ChangeInfo": {
"Status": "INSYNC",
"SubmittedAt": "2017-01-30T12:22:21.799Z",
"Id": "/change/***********"
}
}
Slack에는 이런 메시지가 날아갑니다.
CRONTAB로 설정
자신은 5 분 두고 설정하고 있지만, 기호로 ...
[tokifuji@office ip_watch]$ crontab -l
*/5 * * * * /path/to/ip_watch.sh
이제 당신도 편안 Route53 라이프 (??)를 즐기십시오. 그럼 다시
Reference
이 문제에 관하여(Global IP를 모니터링하여 Route53 업데이트), 우리는 이곳에서 더 많은 자료를 발견하고 링크를 클릭하여 보았다
https://qiita.com/tokifuji/items/49e1fb98a991af51a505
텍스트를 자유롭게 공유하거나 복사할 수 있습니다.하지만 이 문서의 URL은 참조 URL로 남겨 두십시오.
우수한 개발자 콘텐츠 발견에 전념
(Collection and Share based on the CC Protocol.)
[tokifuji@office ip_watch]$ ./ip_watch.sh
% Total % Received % Xferd Average Speed Time Time Time Current
Dload Upload Total Spent Left Speed
100 15 100 15 0 0 36 0 --:--:-- --:--:-- --:--:-- 36
{
"ChangeInfo": {
"Status": "PENDING",
"Comment": "",
"SubmittedAt": "2017-01-30T12:22:21.799Z",
"Id": "/change/***********"
}
}
[tokifuji@office ip_watch]$
[tokifuji@office ip_watch]$ aws route53 get-change --id /change/***********
{
"ChangeInfo": {
"Status": "INSYNC",
"SubmittedAt": "2017-01-30T12:22:21.799Z",
"Id": "/change/***********"
}
}
자신은 5 분 두고 설정하고 있지만, 기호로 ...
[tokifuji@office ip_watch]$ crontab -l
*/5 * * * * /path/to/ip_watch.sh
이제 당신도 편안 Route53 라이프 (??)를 즐기십시오. 그럼 다시
Reference
이 문제에 관하여(Global IP를 모니터링하여 Route53 업데이트), 우리는 이곳에서 더 많은 자료를 발견하고 링크를 클릭하여 보았다 https://qiita.com/tokifuji/items/49e1fb98a991af51a505텍스트를 자유롭게 공유하거나 복사할 수 있습니다.하지만 이 문서의 URL은 참조 URL로 남겨 두십시오.
우수한 개발자 콘텐츠 발견에 전념 (Collection and Share based on the CC Protocol.)