마짱짱의 지식창고

[GCP] Apigee X Environment 및 Group 추가 설정 본문

Cloud/GCP

[GCP] Apigee X Environment 및 Group 추가 설정

마짱짱 2023. 1. 17. 09:33
반응형

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

 

흐름 변수 참조  |  Apigee X  |  Google Cloud

projects.locations.connections.runtimeEntitySchemas

cloud.google.com

반응형

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

반응형