Google AppEngine에서 원격 MySql로 연결
$ gcloud app deploy
터미널에서 명령을 실행하면 완벽하게 배치할 수 있습니다.오, 데이터베이스 말고는 연결할 수 없습니다.내가 졸라갈까?그것은 너의 현지 환경에서 매우 잘 일한다.방화벽에 걸렸어!!
방화벽이 없는 상황에서 MySql 데이터베이스를 위탁 관리하는 서버는 오래 지속되지 않을 것이다. 이것이 바로 응용 프로그램 붕괴의 원인이다.
만약 데이터베이스 서버에 대한 루트 접근 권한이 있다면, 포트 3306 (기본 MySql 포트) 에 연결을 허용하는 규칙을 방화벽에 추가할 수 있습니다.이 모든 것은 아주 좋습니다. 당신의 새로운 앱 Engine 서비스가 배치될 때마다 새로운 IP 주소를 얻거나, 단지 새로운 날이기 때문에 도넛이나 다른 똑같은 중요한 물건을 가지러 바쁘게 움직이고 있습니다.
Linux에서 Config Server Security &Firewall 또는 csf를 방화벽으로 실행 중일 수 있습니다.규칙은
/etc/csf/csf.allow
에서 로드되며 단일 IP 주소일 수도 있고 CIDR 주소 지정을 사용하는 일련의 주소일 수도 있습니다.또한 tcp vsudp 및 허용할 특정 포트를 지정할 수 있습니다.고정 IP에서 호스팅
애플리케이션에서 MySql 포트 3306에 정적 IP 주소를 연결해야 하는 경우 다음과 같이 하나의 IP 주소만 지정할 수 있습니다.
# My Application hosted on IP: 123.45.67.89
tcp|in|d=3306|s=123.45.67.89
tcp|out|s=3306|d=123.45.67.89
# End of My Application
이것은 간단하지만, AppEngine에서 관리할 때 정적 IP를 얻지 못한다.AppEngine 은 어떤 주소를 사용합니까?
구글은 사용할 수 있는 IP 주소의 범위를 발견하는 방법을 제공했지만 예쁘지 않았다.
dig
linux DNS 찾기 도구를 사용하면 릴리즈된 DNS 이름에서 뒤로 이동할 수 있습니다._cloud-netblocks.googleusercontent.com
다음 명령은 어떤 IP 범위의 이름을 확인해야 하는지 알려 줍니다.dig TXT _cloud-netblocks.googleusercontent.com @ns1.google.com +short
출력은 모두 한 줄에 있고, 더블 인용부호로 묶여 있다.만약 우리가 모든 도메인을 고르면, 우리는 모든 도메인이 대표하는 IP 서브넷을 얻을 수 있다.
dig TXT _cloud-netblocks4.googleusercontent.com @ns1.google.com +short
이러한 범위를 사용하면 AppEngine 서비스의 가능한 IP 주소 범위 내의 모든 IP에서 MySql 연결을 할 수 있는 규칙을 만들 수 있습니다. 아래와 같습니다.
tcp|in|d=3306|s=35.219.192.0/24
tcp|out|s=3306|d=35.219.192.0/24
이 모든 것은 다 좋은데, 아주 많다(100+!)그리고 그것들은 영원히 변하지 않기 때문에, 우리는 그것들을 갱신하는 더 좋은 방법이 필요하다.만약 우리가 그것들을 모두 파일에 넣을 수 있다면, 우리는
include
문구를 사용하여 그것들을 csf 규칙에 추가할 수 있다. 마치 우리 /etc/csf/csf.allow
파일의 맨 위에 있는 문구와 같다.Include /etc/csf/appengine.allow
설명된 dig
명령과 약간의 bash 스크립트를 사용하여 우리는 이렇게 전체 과정을 조합할 수 있다.#!/bin/bash
netblocks=$(dig TXT _cloud-netblocks.googleusercontent.com @ns1.google.com +short)
now=$(date)
printf "########################################\n"
printf "# GCP AppEngine Rules\n"
printf "# %s\n" "$now"
printf "########################################\n"
for block in $netblocks; do
if [[ $block == include:* ]]; then
printf "# ${block#include:}\n"
ipblocks=$(dig TXT ${block#include:} @ns1.google.com +short)
# Inbound rules
for ipblock in $ipblocks; do
if [[ $ipblock == ip4:* ]]; then
printf "tcp|in|d=3306|s=${ipblock:4}\n"
fi
done
printf "\n"
# Outbound rules
for ipblock in $ipblocks; do
if [[ $ipblock == ip4:* ]]; then
printf "tcp|out|s=3306|d=${ipblock:4}\n"
fi
done
printf "\n"
fi
done
printf "########################################\n"
printf "# End of GCP AppEngine Rules\n"
printf "########################################\n"
나는 위의 스크립트를 넣었다./etc/csf/appengine.sh
실행 권한을 사용하여 업데이트된 내용:chmod +x /etc/csf/appengine.sh
내 crontab 아래쪽에 추가:crontab -e
다음 줄을 추가하여 매주 오전 4시 10분에 실행할 계획이며 csf를 다시 시작합니다.모든 출력은 > /dev/null 2>&1
와 함께 버려야 한다.10 4 * * 1 /etc/csf/appengine.sh > /etc/csf/appengine.allow && csf --restart > /dev/null 2>&1
이것은 매주 나의 허용 파일을 업데이트하고 방화벽을 다시 시작해서 새로운 규칙을 사용할 것이다.현재, 내 앱 Engine 서비스가 새로운 IP 주소를 얻거나, 구글이 새로운 주소 범위를 제공한다면, 이것은 내 프로그램에 분배될 수 있으니, 나는 걱정할 필요가 없다.나는 새로운 IP가 나의 데이터베이스에 연결될 수 있다는 것을 안심할 수 있다.
AppEngine 프로젝트를 읽어주셔서 감사합니다.
Reference
이 문제에 관하여(Google AppEngine에서 원격 MySql로 연결), 우리는 이곳에서 더 많은 자료를 발견하고 링크를 클릭하여 보았다 https://dev.to/4umfreak/connecting-to-remote-mysql-from-google-appengine-3jgk텍스트를 자유롭게 공유하거나 복사할 수 있습니다.하지만 이 문서의 URL은 참조 URL로 남겨 두십시오.
우수한 개발자 콘텐츠 발견에 전념 (Collection and Share based on the CC Protocol.)