이 문서에서는 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또는tenant_id및tenant_project_id를 사용할 수 있습니다.project_number이 필드는 올바른 Google Cloud 프로젝트 내에서 리소스를 만들고 관리하는 데 필요합니다.프로젝트 ID는 Google Cloud 콘솔의 대시보드 페이지에서 확인할 수 있습니다. 클라우드 개요 섹션의 프로젝트 정보 카드에서 프로젝트 ID 필드를 찾습니다.
project_number또는tenant_project_number:project_id와 마찬가지로 이 변수는 Google Cloud 프로젝트 번호를 나타냅니다.project_number또는tenant_project_number를 상호 교환적으로 사용할 수 있습니다.프로젝트 번호는 프로젝트 정보 카드에서 the Google Cloud console 대시보드 페이지의 클라우드 개요 섹션에 있는 프로젝트 ID와 함께 확인할 수 있습니다.
actuation_sa: 이 변수는 작동 서비스 계정의 이메일 주소를 나타냅니다. 이 서비스 계정은 SaaS 런타임이 단위 프로비저닝, 업데이트 또는 프로비저닝 해제 시 Terraform 구성을 실행하는 데 사용하는 (Infrastructure Manager를 통해) 사용자 관리 서비스 계정입니다.최소 권한 원칙을 구현하려면 테넌트 (또는 단위)당 전용 작동 서비스 계정을 사용하는 것이 좋습니다. 이렇게 하면 보안 침해의 잠재적 영향을 제한하고 배포 간에 더 나은 격리를 제공할 수 있습니다.
작동 서비스 계정의 권한 구성 및 부여에 관한 자세한 내용은 제품 개요를 참고하세요.
단위 변수 계층 구조
단위 변수는 여러 위치에서 정의하고 가져올 수 있습니다. 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 클러스터를 재사용하려면 ignore_for_lookup이 false로 설정된 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 런타임의 청사진을 참고하세요.