마짱짱의 지식창고
[GCP] Apigee X Environment 및 Group 추가 설정 본문
Apigee User 및 Role
Apigee에 대한 엑세스권한은 GCP를 따라간다.
User는 Environment 및 API Proxy와 같은 Apigee 조직 및 조직 내의 항목에 엑세스 할 수 있는 인증된 계정을 나타낸다. Role은 사용자에게 할당된 Role에 따라 다름
Apigee 조직에 새 사용자를 추가하려면 먼저 Cloud 프로젝트에서 사용자 계정에 대한 엑세스 권한을 부여한 다음 선택적으로 Apigee UI 에서 엑세스 권한을 부여함
GCP User에게 Apigee Role이 할당된 경우 User는 해당 역할에서 조직 내의 모든 Apigee 리소스에 엑세스 할 수 있다. Apigee UI내에서 특정 환경의 사용자에게 Apigee 역할을 할당할 수있다. 이 권한은 프로젝트 수준에서 설정된 역할이 추가됨
목표
기존 Apigee 조직에서 환경 및 그룹 추가하는 방법
- Apigee X 조직에 두 번째 환경 추가
- Apigee X 조직에 두 번째 환경 그룹을 추가하여 환경 및 호스트 이름 할당
- 런타임 인스턴스에 환경 배포
- 각 환경에서 API 프록시 배포 및 호출
작업 1. 환경, 그룹 확인
- Admin - Environment - Groups 현재 ‘eval-group’ 이라는 단일 환경만 구성되어 있음
작업 2. 새로운환경(Prod) 구성하기
- Admin - Environment - Overview 에서 ‘환경’ 생성하기
Pending → Provisioning 확인
시간이 지나면 안내메시지나오고 없어짐
Admin - Environment - Group 에서 환경그룹 이동 시 prod환경에는 현재 group이 없다는 안내문이 있음
‘prod-group’ 환경그룹 생성
‘prod-group’에서 prod 환경 설정
할당되지 않았다는 안내문이 없어짐
작업 3. 새로운 환경이 완료될 때까지 대기
- 모니터링
# 프로젝트 변수선언
export GOOGLE_CLOUD_PROJECT={project}
# 모니터링 명령어
export INSTANCE_NAME=eval-instance; export ENV_NAME=eval; export PREV_INSTANCE_STATE=; echo "waiting for runtime instance ${INSTANCE_NAME} to be active"; while : ; do export INSTANCE_STATE=$(curl -s -H "Authorization: Bearer $(gcloud auth print-access-token)" -X GET "https://apigee.googleapis.com/v1/organizations/${GOOGLE_CLOUD_PROJECT}/instances/${INSTANCE_NAME}" | jq "select(.state != null) | .state" --raw-output); [[ "${INSTANCE_STATE}" == "${PREV_INSTANCE_STATE}" ]] || (echo; echo "INSTANCE_STATE=${INSTANCE_STATE}"); export PREV_INSTANCE_STATE=${INSTANCE_STATE}; [[ "${INSTANCE_STATE}" != "ACTIVE" ]] || break; echo -n "."; sleep 5; done; echo; echo "instance created, waiting for environment ${ENV_NAME} to be attached to instance"; while : ; do export ATTACHMENT_DONE=$(curl -s -H "Authorization: Bearer $(gcloud auth print-access-token)" -X GET "https://apigee.googleapis.com/v1/organizations/${GOOGLE_CLOUD_PROJECT}/instances/${INSTANCE_NAME}/attachments" | jq "select(.attachments != null) | .attachments[] | select(.environment == \"${ENV_NAME}\") | .environment" --join-output); [[ "${ATTACHMENT_DONE}" != "${ENV_NAME}" ]] || break; echo -n "."; sleep 5; done; echo; echo "${ENV_NAME} environment attached"; echo "***ORG IS READY TO USE***";
# 완료시
**ORG IS READY TO USE***
작업 4. Runtime Instance에 Prod 환경 추가
# Prod 환경을 Runtime Instance에 연결
export INSTANCE_NAME=eval-instance; curl -s -H "Authorization: Bearer $(gcloud auth print-access-token)" -H "Content-Type: application/json" -X POST "https://apigee.googleapis.com/v1/organizations/${GOOGLE_CLOUD_PROJECT}/instances/${INSTANCE_NAME}/attachments" -d '{ "environment": "prod" }' | jq
# Prod 환경에서 배포된 Proxy가 트래픽을 받을준비가 됏는지 확인
export ATTACHING_ENV=prod; export INSTANCE_NAME=eval-instance; echo "waiting for ${ATTACHING_ENV} attachment"; while : ; do export ATTACHMENT_DONE=$(curl -s -H "Authorization: Bearer $(gcloud auth print-access-token)" -X GET "https://apigee.googleapis.com/v1/organizations/${GOOGLE_CLOUD_PROJECT}/instances/${INSTANCE_NAME}/attachments" | jq "select(.attachments != null) | .attachments[] | select(.environment == \"${ATTACHING_ENV}\") | .environment" --join-output); [[ "${ATTACHMENT_DONE}" != "${ATTACHING_ENV}" ]] || break; echo -n "."; sleep 5; done; echo; echo "***${ATTACHING_ENV} ENVIRONMENT ATTACHED***";
# ***prod ENVIRONMENT ATTACHED** 떴다면 트래픽 수락 가능
작업 5. API Proxy 만들기
흐름변수를 사용하여 API 호출에 대한 호스트 이름과 환경을 반환하는 API 프록시 만들기
https://cloud.google.com/apigee/docs/api-platform/reference/variables-reference
Develop - API Proxies 이동 후 create new 클릭
‘No Target’ 클릭
Use OpenAPI Spec 클릭X
‘test-env’ 입력
그 외에는 Default로 next 클릭 후 create
완성되면 ‘Edit Proxy’ 클릭
‘Switch to Classic’ 클릭
‘Develop’ Tab 클릭
좌측 ‘PreFlow’ 클릭 후 ‘+Step’ 클릭
Assign Message 클릭 후 ‘AM-SelfResponse’ 입
AM-SelfResponse 안의 내용 바꾸기
<AssignMessage continueOnError="false" enabled="true" name="AM-SetResponse">
<Set>
<Payload contentType="application/json">{
"environment": "{environment.name}",
"hostname": "{request.header.Host}"
}
</Payload>
</Set>
<IgnoreUnresolvedVariables>true</IgnoreUnresolvedVariables>
<AssignTo createNew="true" transport="http" type="response"/>
</AssignMessage>
변경 후 Save
‘Deploy to: eval’ 클릭 후 eval, prod 환경에 배포
‘Overview’ 탭에서 eval, prod 각각 배포 확인
Prod 및 Eval 환경 테스트
- 자동생성된 ‘apigeex-test-vm’에 ssh로 접근
export VM_NAME=apigeex-test-vm
export VM_ZONE=us-west1-b
gcloud compute ssh ${VM_NAME} --zone=${VM_ZONE} --force-key-file-overwrite
테스트에 필요한 변수 선언
export PROJECT_NAME=$(gcloud config get-value project)
export ORG=${PROJECT_NAME}
export INSTANCE_NAME=eval-instance
export INTERNAL_LB_IP=$(curl -s -H "Authorization: Bearer $(gcloud auth print-access-token)" -X GET "https://apigee.googleapis.com/v1/organizations/${ORG}/instances/${INSTANCE_NAME}" | jq ".host" --raw-output)
export EVAL_ENVGROUP_HOSTNAME=$(curl -s -H "Authorization: Bearer $(gcloud auth print-access-token)" -X GET "https://apigee.googleapis.com/v1/organizations/${ORG}/envgroups/eval-group" | jq ".hostnames[0]" --raw-output)
export PROD_ENVGROUP_HOSTNAME=$(curl -s -H "Authorization: Bearer $(gcloud auth print-access-token)" -X GET "https://apigee.googleapis.com/v1/organizations/${ORG}/envgroups/prod-group" | jq ".hostnames[0]" --raw-output)
echo "INTERNAL_LB_IP=${INTERNAL_LB_IP}"
echo "EVAL_ENVGROUP_HOSTNAME=${EVAL_ENVGROUP_HOSTNAME}"
echo "PROD_ENVGROUP_HOSTNAME=${PROD_ENVGROUP_HOSTNAME}"
eval 환경 API Proxy 호출
curl -i -k --resolve "${EVAL_ENVGROUP_HOSTNAME}:443:${INTERNAL_LB_IP}" \
"https://${EVAL_ENVGROUP_HOSTNAME}/test-env"
## Result
TTP/2 200
content-type: application/json
x-request-id: e44e2e37-e5d9-4954-8ef8-60ef4be44e39
content-length: 66
date: Mon, 16 Jan 2023 09:06:04 GMT
{
"environment": "eval",
"hostname": "eval.example.com"
}
prod 환경 API Proxy 호출
curl -i -k --resolve "${PROD_ENVGROUP_HOSTNAME}:443:${INTERNAL_LB_IP}" \
"https://${PROD_ENVGROUP_HOSTNAME}/test-env"
## Result
HTTP/2 200
content-type: application/json
x-request-id: 57156395-ce8e-48f0-b9ff-5f97c0e1d20c
content-length: 66
date: Mon, 16 Jan 2023 09:07:02 GMT
{
"environment": "prod",
"hostname": "prod.example.com"
}
출처
GCP SkillBoost - Adding an Apigee X Environment and Group
https://partner.cloudskillsboost.google/focuses/20283?parent=catalog
'Cloud > GCP' 카테고리의 다른 글
[GCP] Apigee, Cloud Armor 이용하여 API 보호 (0) | 2023.01.17 |
---|---|
[GCP] NAT를 이용하여 Apigee Backend Service (0) | 2023.01.17 |
[GCP] Apigee X 기본개념 및 환경구성 (0) | 2023.01.17 |
Cloud Code, Cloud Build, Google Cloud Deploy, GKE를 사용한 앱 개발 및 제공 (0) | 2022.07.04 |
[GCP] 리전별 현재 사용 가능한 서비스 목록 및 에러 상황 확인 (0) | 2022.06.28 |