json data on gcs to bigquery (2)
이전에 권한 문제로 고생한 경험이 있기 때문에 실습에서 사용한 서비스계정의 권한을 그대로 가져가보기로 했다. 우선 퀵랩에서의 권한은 다음과 같음을 확인했다.
기본 compute engine의 서비스 계정의 권한은 다음과 같다.
gcloud services disable dataflow.googleapis.com --force
gcloud services enable dataflow.googleapis.com
cloud shell에 위 명령어를 입력해 dataflow api 가 정상적으로 활성화되는지 확인하였다.
퀵랩에서 이미 설치되어 있던 vm의 옵션도 확인하였다. 내가 임의로 만든 vm은 cloud storage와 연동이 안되는 경우가 계속해서 발생했기 때문에 무엇이 달랐는지 궁금했다.
우선 서비스계정의 경우 vm의 기본 compute engine 서비스 계정인 사용됐다. 이것은 내가 이전에 개별적으로 vm을 만들었을 때도 선택지가 기본 서비스계정밖에는 없었기 때문에 차별성이 없었다. 하지만 cloud api에 대한 액세스 범위는 모든 cloud api에 대한 전체 액세스 허용으로 내가 선택했던 기본 액세스 적용과 차별성이 있었다.
네트워크의 경우 특정 네트워크(trainingaccess)에 연결태그를 걸어놨는데 이 네트워크도 뜯어봐야할 것 같다.
추가로 특별해보였던 것은 아래와 같지만 어떤 내용인지 더 살펴봐야할 것이다.
미리 생성돼있던 vm에 걸려있는 방화벽은 다음과 같다.
미리 생성된 vm의 region은 다음과 같다.
그리고 공부를 하면서 알게된 새로운 사실이 있다.
기존에 나는 vm에 쉘 명령어 pip install apache-beam 을 통해 아파치 빔을 설치햇는데 의존성 패치를 위해
pip install apache-beam[gcp]으로 설치해야한다는 것이였다. (이것 때문에 아파치빔과 gcp 사이에 통로가 만들어지지 않았을 것 같다.)
pip install apache-beam[gcp]
function transform(jsonString) {
var obj = JSON.parse(jsonString);
var output = {
"FILE_NAME": obj.IMAGE_INFO.FILE_NAME,
"DATE": obj.IMAGE_INFO.DATE,
"RESOLUTION": obj.IMAGE_INFO.RESOLUTION,
"IMAGE_PHOTOGRAPHER": obj.IMAGE_INFO.IMAGE_PHOTOGRAPHER,
"FOCUS_DISTANCE": obj.IMAGE_INFO.FOCUS_DISTANCE,
"EXPOSURE_TIME": obj.IMAGE_INFO.EXPOSURE_TIME,
"SENSITIVITY_ISO": obj.IMAGE_INFO.SENSITIVITY_ISO,
"PLACE": obj.IMAGE_INFO.PLACE,
"REGION_NAME": obj.IMAGE_INFO.REGION_NAME,
"Direction": obj.IMAGE_INFO.Direction,
"HEIGHT": obj.IMAGE_INFO.HEIGHT,
"DAY/NIGHT": obj.IMAGE_INFO["DAY/NIGHT"],
"WEATHER": obj.IMAGE_INFO.WEATHER,
"IMAGE_HEIGHT": obj.IMAGE_INFO.IMAGE_HEIGHT,
"IMAGE_WIDTH": obj.IMAGE_INFO.IMAGE_WIDTH,
"IMAGE_SIZE": obj.IMAGE_INFO.IMAGE_SIZE,
"ANNOTATION_ID": obj.ANNOTATION_INFO[0].ID,
"CLASS": obj.ANNOTATION_INFO[0].CLASS,
"DETAILS": obj.ANNOTATION_INFO[0].DETAILS,
"DAMAGE": obj.ANNOTATION_INFO[0].DAMAGE,
"DIRTINESS": obj.ANNOTATION_INFO[0].DIRTINESS,
"COVER": obj.ANNOTATION_INFO[0].COVER,
"TRANSPARENCY": obj.ANNOTATION_INFO[0].TRANSPARENCY,
"SHAPE": obj.ANNOTATION_INFO[0].SHAPE,
"SHAPE_TYPE": obj.ANNOTATION_INFO[0].SHAPE_TYPE,
"POINTS": obj.ANNOTATION_INFO[0].POINTS
};
var jsonString = JSON.stringify(output);
return jsonString;
autoscaling api설치해야 autoscaling 옵션 선택이 가능해짐