GCE 임시 IP를 정기적으로 변경하는 방법 (클롤링, 캡처 방지)
특정 웹사이트에 대해 정기적으로 크롤링할 때 캡처 회피책으로서 글로벌 IP 정기적으로 변경하는 방법을 했으므로, 일반화해 비망한다.
구성 이미지
크롤러 인스턴스와는 다른 인스턴스에서 GCE 인스턴스에서 cron으로 gcloud 명령의 IP 변경하는 명령을 두드리는 형태로 한 OK. gcloud의 실행 사용자는 서비스 사용자를 이용했다.
crontab에서 실행할 쉘
$HOME/scripts/change-crawler-global-ip.sh
#!/bin/sh
logDir=/var/tmp/change-ip-log/`date +"%Y%m%d"`
logFile=${logDir}/`date +"%Y%m%d_%H%M%S"`.log
mkdir -p $logDir
PROJECT="<GCP-PROJECT-ID>"
ZONE="<ZONE>" # 例: asia-northeast1-b
INSTANCE="<INSTANCE-NAME>" # 例: instance-1
NETWORK_INTERFACE="External NAT" # デフォルトではこの名前だった。
# STEP1: 変更前にインスタンス構成情報を出力
echo -e "----- BEFORE -----\n" >> $logFile
gcloud compute instances describe --project="$PROJECT" --zone="$ZONE" "$INSTANCE" >> $logFile
# STEP2: ネットワークインターフェースを削除する。
gcloud compute instances delete-access-config --project="$PROJECT" --zone="$ZONE" $INSTANCE --access-config-name="$NETWORK_INTERFACE" >> $logFile
# STEP3: ネットワークインターフェースを新規作成する。
gcloud compute instances add-access-config --project="$PROJECT" --zone="$ZONE" "$INSTANCE" --access-config-name="$NETWORK_INTERFACE" >> $logFile
echo -e "----- AFTER -----\n" >> $logFile
# STEP4: 変更前にインスタンス構成情報を出力
gcloud compute instances describe --project="$PROJECT" --zone="$ZONE" "$INSTANCE" >> $logFile
STEP2의 네트워크 인터페이스 삭제 처리 실행 중 ~ STEP3의 새로운 네트워크 인터페이스 추가 처리 완료까지
해당 인스턴스는 인터넷에 연결되지 않으므로 주의.
crontab 예
$ crontab -l
# 15分おきにIPを変更 (cron処理時間と被らないように要調整)
3-58/5 * * * * sh $HOME/scripts/change-crawler-global-ip.sh
실행 로그 예
$ less /var/tmp/change-ip-log/20190124/20190124_115201.log
canIpForward: false
cpuPlatform: Intel Broadwell
creationTimestamp: '2019-01-18T05:51:59.021-08:00'
deletionProtection: false
description: ''
disks:
- autoDelete: true
boot: true
deviceName: instance-1
index: 0
interface: SCSI
kind: compute#attachedDisk
licenses:
- https://www.googleapis.com/compute/v1/projects/centos-cloud/global/licenses/centos-7
mode: READ_WRITE
source: https://www.googleapis.com/compute/v1/projects/...
er1
type: PERSISTENT
id: 'xxx'
kind: compute#instance
labelFingerprint: xxx
machineType: https://www.googleapis.com/compute/v1/projects/...
metadata:
fingerprint: xxx
kind: compute#metadata
name: instance-1
networkInterfaces:
- accessConfigs:
- kind: compute#accessConfig
name: External NAT
natIP: 34.85.25.113
networkTier: PREMIUM
type: ONE_TO_ONE_NAT
fingerprint: xxx
(略)
----- AFTER -----
canIpForward: false
cpuPlatform: Intel Broadwell
creationTimestamp: '2019-01-18T05:51:59.021-08:00'
deletionProtection: false
description: ''
disks:
- autoDelete: true
boot: true
deviceName: instance-1
index: 0
interface: SCSI
kind: compute#attachedDisk
licenses:
- https://www.googleapis.com/compute/v1/projects/centos-cloud/global/licenses/centos-7
mode: READ_WRITE
source: https://www.googleapis.com/compute/v1/projects/...
type: PERSISTENT
id: 'xxx'
kind: compute#instance
labelFingerprint: xxx
machineType: https://www.googleapis.com/compute/v1/projects/...
metadata:
fingerprint: xxx
kind: compute#metadata
name: instance-1
networkInterfaces:
- accessConfigs:
- kind: compute#accessConfig
name: External NAT
natIP: 34.85.46.233
networkTier: PREMIUM
type: ONE_TO_ONE_NAT
fingerprint: xxx
(略)
34.85.25.113
에서 34.85.46.233
로 바뀐 것을 알 수 있다.참고
인스턴스의 IP 주소 설정
Reference
이 문제에 관하여(GCE 임시 IP를 정기적으로 변경하는 방법 (클롤링, 캡처 방지)), 우리는 이곳에서 더 많은 자료를 발견하고 링크를 클릭하여 보았다 https://qiita.com/koshilife/items/3c2fce0b4157453375fd텍스트를 자유롭게 공유하거나 복사할 수 있습니다.하지만 이 문서의 URL은 참조 URL로 남겨 두십시오.
우수한 개발자 콘텐츠 발견에 전념 (Collection and Share based on the CC Protocol.)