이 문서에서는 SaaS 런타임 내에서 변수, 변수 매핑, 종속 항목이 작동하는 방식을 설명합니다.
SaaS 런타임을 사용하면 복잡한 SaaS 애플리케이션을 모듈식 단위로 구성하여 배포하고 관리할 수 있습니다. 청사진 내에서 Terraform 구성으로 정의된 이러한 단위는 종속 항목을 통해 상호 연결될 수 있으므로 정교한 오케스트레이션과 자동 프로비저닝이 가능합니다. 이러한 단위와 상호작용을 관리하는 핵심 측면은 변수와 변수 매핑을 사용하는 것입니다.
자동 프로비저닝, 단위 간 통신, 유연한 구성 옵션을 사용하여 복잡하고 모듈화된 확장 가능한 배포를 빌드할 수 있습니다. SaaS 런타임 내에서 SaaS 아키텍처와 관리 워크플로를 최적화하려면 변수 계층 구조, 종속성 관계, 변수 매핑을 신중하게 고려하세요.
단위 및 변수
SaaS 런타임의 핵심은 단위입니다. 단위는 변수를 사용하여 배포와 동작을 맞춤설정합니다. 이러한 변수는 기본적으로 청사진의 variables.tf 파일에서 정의할 수 있는 Terraform 변수입니다. 이를 통해 Terraform 구성을 매개변수화하여 다양한 환경과 배포에서 재사용하고 적용할 수 있습니다.
단위 프로비저닝의 필수 변수
단위에 맞춤 변수를 정의할 수 있지만 SaaS 런타임은 일련의 필수 변수도 사용합니다. 이러한 변수는 Terraform 구성에 명시적으로 정의되지 않은 경우에도 SaaS 런타임에서 자동으로 인식하고 처리합니다.
필수 변수는 다음과 같습니다.
project_id및project_number(또는tenant_project_id및tenant_project_id): 이 변수는 단위의 리소스가 배포될 Google Cloud 프로젝트 ID를 지정합니다.project_id및project_number또는tenant_id및tenant_project_id를 사용할 수 있습니다. 이 필드는 올바른 Google Cloud 프로젝트 내에서 리소스를 만들고 관리하는 데 필요합니다.프로젝트 ID는 Google Cloud 콘솔의 대시보드 페이지에서 확인할 수 있습니다. Cloud 개요 섹션의 프로젝트 정보 카드에서 프로젝트 ID 필드를 찾습니다.
project_number또는tenant_project_number:project_id와 유사하며 Google Cloud 프로젝트 번호를 나타냅니다.project_number또는tenant_project_number를 번갈아 사용할 수 있습니다.프로젝트 번호는 Google Cloud 콘솔 대시보드 페이지의 Cloud 개요 섹션에 있는 프로젝트 정보 카드에서 프로젝트 ID와 함께 확인할 수 있습니다.
actuation_sa: 이 변수는 작동 서비스 계정의 이메일 주소를 나타냅니다. 이 서비스 계정은 프로비저닝, 업데이트 또는 단위 프로비저닝 해제 시 SaaS 런타임이 Infrastructure Manager를 통해 Terraform 구성을 실행하는 데 사용하는 사용자 관리형 서비스 계정입니다.최소 권한 원칙을 구현하려면 테넌트 (또는 단위)별로 전용 작동 서비스 계정을 사용하는 것이 좋습니다. 이렇게 하면 보안 침해의 잠재적 영향이 제한되고 배포 간 격리가 개선됩니다.
작동 서비스 계정의 권한을 구성하고 부여하는 방법에 관한 자세한 내용은 제품 개요를 참고하세요.
단위 변수 계층 구조
단위 변수는 여러 위치에서 정의하고 가져올 수 있습니다. SaaS 런타임을 사용하는 경우 단위 작업 중에 사용되는 변수 값의 계층 구조를 이해하는 것이 중요합니다.
순서는 다음과 같습니다 (가장 낮은 우선순위에서 가장 높은 우선순위 순).
SaaS 런타임은 다음과 같은 순서로 변수 값을 확인합니다.
단위의 기존 입력 변수: 변수가 이전 작업이나 구성 등에서 단위 리소스 자체에 이미 정의되어 있는 경우 이 값은 가장 낮은 우선순위를 갖습니다. 변수 값이 단위에 직접 설정된 경우 계층 구조에서 더 높은 소스에서 값이 발견되면 재정의됩니다.
출시 기본값: 변수가 아직 단위에 설정되지 않은 경우 출시 기본값이 적용되지만 기존 단위 변수를 재정의합니다.
단위 작업:
provision또는upgrade과 같은 단위 작업을 실행할 때 작업 요청의 일부로 입력 변수를 명시적으로 제공할 수 있습니다. 단위 작업에 제공된 변수는 출시 기본값과 기존 단위 변수를 재정의합니다.종속 항목의 입력 변수 매핑: 단위가 다른 단위에 종속된 경우 단위 종류에 정의된 변수 매핑은 종속 항목 단위의 출력 변수에서 변수 값을 가져올 수 있습니다. 이 소스는 우선순위가 가장 높습니다. 종속 항목 매핑을 통해 획득한 변수는 단위 작업, 출시 기본값, 기존 단위 변수의 값을 재정의합니다.
이 계층적 접근 방식을 사용하면 변수 관리를 유연하게 제어할 수 있습니다. 단위에서 직접 지속적인 구성을 설정하고(가장 낮은 우선순위) 버전을 사용하여 기준 기본값을 정의하고, 특정 작업에 맞게 맞춤설정하고, 단위 종속 항목에서 가장 중요하고 재정의하는 값을 동적으로 가져올 수 있습니다 (가장 높은 우선순위).
단위 종속 항목
SaaS 런타임을 사용하면 단위 간의 종속 항목을 정의할 수 있습니다. 이는 서로 의존하는 다양한 구성요소가 있는 복잡한 SaaS 애플리케이션을 빌드하는 데 중요합니다. 종속 항목을 사용하면 관련 단위가 조정된 방식으로 프로비저닝되고 관리됩니다.
단위 종류 내에서 종속 항목을 정의합니다. 특정 단위 종류의 단위를 만들면 SaaS 런타임이 종속 항목을 자동으로 관리합니다.
단위 종류의 종속 항목 정의
UnitKind 정의에서 종속 항목 목록을 지정합니다. 각 종속 항목은 다른 UnitKind를 참조하고 별칭을 할당합니다. 이 별칭은 변수 매핑에서 종속 항목을 참조하는 데 사용됩니다.
message UnitKind {
// ... other fields ...
// List of other unit kinds that this release will depend on.
repeated Dependency dependencies = 4
[(.google.api.field_behavior) = OPTIONAL];
// ...
}
message Dependency {
// The unit kind of the dependency.
string unit_kind = 1 [
(.google.api.field_behavior) = REQUIRED,
(.google.api.field_behavior) = IMMUTABLE,
(.google.api.resource_reference) = {
type: "saasservicemgmt.googleapis.com/UnitKind"
}
];
// An alias for the dependency. Used for input variable mapping.
string alias = 2 [(.google.api.field_behavior) = REQUIRED];
}
자동 종속 항목 프로비저닝
UnitKind에 종속 항목이 정의된 단위를 프로비저닝하도록 요청하면 SaaS 런타임이 해당 종속 항목 단위의 존재 여부를 자동으로 확인합니다.
종속 단위가 없으면 SaaS 런타임이 종속 단위를 프로비저닝하기 전에 자동으로 프로비저닝합니다.
SaaS 런타임은 종속 단위 이전에 종속 항목 단위가 프로비저닝되도록 하여 올바른 작업 순서를 유지합니다.
변수 매핑
변수 매핑은 종속 단위와 종속 항목 간에 데이터 (변수 값)를 전달하는 메커니즘입니다. 이는 종속 항목의 출력을 기반으로 종속 단위를 구성하는 데 필수적입니다.
변수 매핑은 종속 단위 종류 내에서 정의되며 FromMapping 및 ToMapping를 사용합니다.
FromMapping:FromMapping는 종속 항목 단위에서 출력 변수를 가져와 종속 단위의 입력 변수에 매핑하는 데 사용됩니다. 이 방법을 통해 종속 단위는 연결 엔드포인트나 리소스 ID와 같은 종속 항목에서 정보를 가져올 수 있습니다.message VariableMapping { // ... oneof mapping_type { // Output variables which will get their values from dependencies FromMapping from = 2 [(.google.api.field_behavior) = OPTIONAL]; // ... } } message FromMapping { // Alias of the dependency that the outputVariable will pass its value to string dependency = 1 [(.google.api.field_behavior) = REQUIRED]; // Name of the outputVariable on the dependency string output_variable = 2 [(.google.api.field_behavior) = REQUIRED]; }제공된 Codelab 예에서
App UnitKind에는Cluster UnitKind종속 항목에서cluster_endpoint출력 변수를 가져오는FromMapping이 있습니다. 이렇게 하면 애플리케이션이 새로 프로비저닝된 Kubernetes 클러스터에 연결할 수 있습니다.ToMapping:ToMapping는 종속 단위에서 종속 항목 단위의 입력 변수로 입력 변수를 전달하는 데 사용됩니다. 이렇게 하면 종속 단위에 제공된 매개변수를 기반으로 종속성 단위를 구성할 수 있습니다.message VariableMapping { // ... oneof mapping_type { // ... // Input variables whose values will be passed on to dependencies. ToMapping to = 3 [(.google.api.field_behavior) = OPTIONAL]; } } message ToMapping { // Alias of the dependency that the inputVariable will pass its value to string dependency = 1 [(.google.api.field_behavior) = REQUIRED]; // Name of the inputVariable on the dependency string input_variable = 2 [(.google.api.field_behavior) = REQUIRED]; // Tells EasySaaS if this mapping should be used during lookup or not bool ignore_for_lookup = 3 [(.google.api.field_behavior) = OPTIONAL]; }Codelab에서
App UnitKind는ToMapping를 사용하여tenant_project_id및tenant_project_number입력 변수를Cluster UnitKind종속 항목에 전달합니다. 이렇게 하면 Kubernetes 클러스터가 올바른 프로젝트 내에 생성됩니다.ToMapping의ignore_for_lookup:ToMapping의ignore_for_lookup필드는 종속 항목 조회 동작을 제어합니다. 불리언 값입니다.false(또는 지정되지 않음):false로 설정되면 SaaS 런타임은ToMapping에 지정된 입력 변수를 조회 키로 사용하여 기존 종속 항목 단위를 찾습니다. 일치하는 입력 변수가 있는 단위를 찾으면 종속 항목으로 재사용됩니다. 일치하는 단위가 없으면 새 종속 항목 단위가 프로비저닝됩니다. 이는 클러스터와 같은 공유 리소스를 재사용하는 데 유용합니다.true:true로 설정하면ToMapping의 입력 변수가 종속 항목 조회에 사용되지 않습니다. 즉, 동일한 입력 변수가 있는 단위가 이미 있더라도 항상 새 종속 항목 단위가 프로비저닝됩니다. 이는 각 종속 단위에 전용의 공유되지 않는 종속 항목이 필요한 경우에 유용합니다.
예: 공유 Kubernetes 클러스터
동일한 프로젝트 내에서 여러 애플리케이션 단위에 Kubernetes 클러스터를 재사용하려면 false로 설정된 ignore_for_lookup와 함께 ToMapping를 사용하고 tenant_project_id 및 region와 같은 변수를 클러스터 단위 종류에 매핑합니다. 그러면 동일한 프로젝트 및 리전의 단위가 동일한 클러스터를 재사용합니다.
예: 애플리케이션별 전용 Kubernetes 클러스터
각 애플리케이션 단위에 전용 Kubernetes 클러스터가 필요한 경우 ignore_for_lookup이 true로 설정된 ToMapping를 사용하거나 ToMapping 조회 변수를 완전히 피합니다. 그러면 각 애플리케이션 단위가 격리된 새 Kubernetes 클러스터의 프로비저닝을 트리거합니다.
보안 비밀 관리
SaaS 런타임 변수는 비밀번호, API 키, 인증서와 같은 민감한 정보를 저장하기 위한 것이 아닙니다. 변수에 보안 비밀을 직접 저장하면 보안 위험이 발생합니다. 변수 값을 로깅하고 시스템 출력을 통해 노출할 수 있으므로 무단 액세스 가능성이 높아집니다.
SaaS 런타임 애플리케이션에서 보안 비밀을 안전하게 관리하려면 Secret Manager를 사용하는 것이 좋습니다.
다음 단계
- SaaS 런타임에 대해 자세히 알아보려면 SaaS 런타임 개요를 참고하세요.
- 튜토리얼을 사용해 보려면 SaaS 런타임으로 VM 배포를 참고하세요.
- Terraform 구성으로 SaaS 제품을 정의하는 방법에 관한 자세한 내용은 SaaS 런타임의 청사진을 참고하세요.