Azure AI Search 지역, 계층 및 서비스 제한사항

지역별 기능 가용성, 가격 계층, Quota 및 용량 제한

Azure AI Search의 지역별 기능 지원, 서비스 계층 비교, 구독 제한, 인덱스 제한, 벡터 quota, 인덱서 제한, API 제한을 포괄적으로 정리한다. 계층 선택 가이드와 벡터 압축을 통한 최적화 방법을 다룬다.

AI
Cloud
Azure
Agent
저자

Kwangmin Kim

공개

2025년 12월 20일

1 지역별 기능 가용성

1.1 지역별 제약이 있는 기능

Azure AI Search 서비스 생성 시 특정 지역에서만 사용 가능한 기능들이 있다.

기능 설명 지역 지원
AI Enrichment Foundry Tools 호출 기반 내장 기술로 인덱싱 중 강화 및 변환 수행. Azure AI Search와 Microsoft Foundry 리소스가 동일한 물리적 지역에 공존 필요 지역별 표시
Availability Zones 지역의 데이터 센터를 서로 다른 물리적 위치 그룹으로 나누어 동일 지역 내 고가용성 제공 지역별 표시
Agentic Retrieval 대화형 검색을 위한 Agentic Retrieval 엔진 사용 지역별 표시
Confidential Computing 하드웨어 기반 신뢰 실행 환경에서 데이터를 처리하는 기밀 VM에 검색 서비스 배포. Agentic Retrieval, Semantic Ranker, Query Rewrite, Skillset 실행 비활성화 또는 제한 지역별 표시
Semantic Ranker 특정 지역의 Microsoft 호스팅 모델에 종속 지역별 표시
Query Rewrite 특정 지역의 Microsoft 호스팅 모델에 종속 지역별 표시
Extra Capacity 2024년 4월부터 일부 지역에서 더 높은 용량 파티션 제공. 일부 지역에서는 제공되지 않음 각주 표시
Capacity Constraints 일부 지역에서는 용량 부족으로 특정 계층의 새 검색 서비스 생성 불가 각주 표시
Azure Vision in Foundry Tools 4.0 텍스트 및 이미지 벡터화를 가능하게 하는 Azure Vision 멀티모달 임베딩 기술 및 벡터라이저 Azure Vision 지역 목록 먼저 확인 후 Azure AI Search 동일 지역 확인

1.2 Azure Public 지역

1.2.1 Americas

지역 Availability Zones AI Enrichment Semantic Ranker Confidential Query Rewrite Agentic Retrieval
Brazil South
Canada Central
Canada East
Central US
East US
East US 2
Mexico Central
North Central US
South Central US
West US
West US 2
West US 3
West Central US

주요 제약사항: - East US: Basic 및 S1 계층의 새 검색 서비스 생성 시 용량 제약 - West US 2: Microsoft Purview 민감도 레이블에 대한 인덱서 지원 없음

1.2.2 Europe

지역 Availability Zones AI Enrichment Semantic Ranker Confidential Query Rewrite Agentic Retrieval
France Central
Germany West Central
Italy North
Norway East
North Europe
Poland Central
Spain Central
Sweden Central
Switzerland North
Switzerland West
UK South
UK West
West Europe

주요 제약사항: - Spain Central: 더 높은 스토리지 제한 미제공

1.2.3 Middle East

지역 Availability Zones AI Enrichment Semantic Ranker Confidential Query Rewrite Agentic Retrieval
Israel Central
Qatar Central
UAE North

주요 제약사항: - Israel Central, Qatar Central: 더 높은 스토리지 제한 미제공 - UAE North: 용량 제약으로 새 검색 서비스 생성 불가

1.2.4 Africa

지역 Availability Zones AI Enrichment Semantic Ranker Confidential Query Rewrite Agentic Retrieval
South Africa North

1.2.5 Asia Pacific

지역 Availability Zones AI Enrichment Semantic Ranker Confidential Query Rewrite Agentic Retrieval
Australia East
Australia Southeast
Central India
East Asia
Indonesia Central
Jio India West
Jio India Central
Japan East
Japan West
Korea Central
Korea South
Malaysia West
New Zealand North
South India
Southeast Asia

1.3 Azure Government 지역

지역 Availability Zones AI Enrichment Semantic Ranker Confidential Query Rewrite Agentic Retrieval
Arizona
Texas
Virginia

1.4 Azure operated by 21Vianet (중국)

지역 Availability Zones AI Enrichment Semantic Ranker Confidential Query Rewrite Agentic Retrieval
China East
China East 2
China East 3
China North
China North 2
China North 3

참고: - China East 2만 AI Enrichment 완전 지원 - 다른 21Vianet 지역: Azure OpenAI Embedding 기술을 사용한 Skillset만 지원 (Azure OpenAI 및 Azure AI Search 가용성에 따름) - China East 2, China North 2: 더 높은 스토리지 제한 미제공

2 서비스 계층 (Pricing Tier)

2.1 계층 설명

Azure AI Search는 여러 가격 계층으로 제공된다:

  • Free: 무료
  • Basic: 기본
  • Standard: 표준 (S1, S2, S3)
  • Storage Optimized: 스토리지 최적화 (L1, L2)

2.1.1 Free 계층

  • 제한된 검색 서비스 생성
  • 튜토리얼 및 코드 샘플 실행 등 소규모 프로젝트용
  • 시스템 리소스는 여러 구독자 간 공유됨
  • Free 서비스 확장 불가, 대규모 워크로드 실행 불가
  • 일부 프리미엄 기능 사용 불가
  • Azure 구독당 하나의 Free 검색 서비스만 보유 가능
  • 중요: 장기간 비활성 상태인 경우 서비스 삭제 가능 (특히 지역 용량 제약 시)

2.1.2 청구 가능 계층

가장 일반적으로 사용되는 청구 가능 계층:

  • Basic
    • 3개의 복제본 지원으로 SLA 충족 가능
    • 소규모 프로덕션 워크로드용 전용 컴퓨팅 리소스
  • Standard (S1, S2, S3)
    • 기본 계층
    • 워크로드 확장을 위한 더 많은 유연성 제공
    • 파티션과 복제본 모두 확장 가능
    • 전용 리소스로 더 큰 프로젝트 배포, 성능 최적화, 용량 증가 가능

2.1.3 특수 목적 계층

  • Standard 3 High Density (S3 HD)
    • S3의 호스팅 모드
    • 대량의 소규모 인덱스에 최적화된 하드웨어
    • 멀티테넌시 시나리오 대상
    • S3과 동일한 단위당 요금
    • 대량의 소규모 인덱스에 대한 빠른 파일 읽기에 최적화된 하드웨어
  • Storage Optimized (L1, L2)
    • Standard 계층보다 TB당 낮은 가격으로 더 큰 스토리지 용량 제공
    • 자주 변경되지 않는 대규모 인덱스용 설계
    • 주요 트레이드오프: 더 높은 쿼리 지연 시간 (특정 애플리케이션 요구사항에 대해 검증 필요)

2.2 계층별 지역 가용성

지역 목록은 Azure AI Search가 제공되는 위치를 나타낸다.

  • 일부 지역은 특정 계층에 대한 용량 제약이 있어 해당 계층의 새 검색 서비스 생성 불가
  • 목록의 각주로 제약된 지역 및 계층 표시
  • Azure Portal에서 서비스 생성 시 사용 불가능한 지역-계층 조합은 자동으로 제외됨

2.3 계층별 기능 가용성

대부분의 기능은 Free 계층을 포함한 모든 계층에서 사용 가능하다. 일부 경우 계층에 따라 기능 가용성이 결정된다.

기능 제약사항
Indexers S3 HD에서 사용 불가. Free 계층에서는 더 많은 제한 있음
Indexer executionEnvironment 구성 매개변수 검색 서비스에 할당된 검색 클러스터로만 모든 인덱서 처리를 고정하려면 S2 이상 필요
AI Enrichment Free 계층에서 실행되지만 대규모 워크로드에는 권장되지 않음
Managed 또는 Trusted Identities (아웃바운드 인덱서 액세스) Free 계층에서 사용 불가
Customer-managed Encryption Keys Free 계층에서 사용 불가
IP Firewall Access Free 계층에서 사용 불가
Private Endpoint (Azure Private Link 통합) 검색 서비스에 대한 인바운드 연결: Free 계층에서 사용 불가
인덱서가 다른 Azure 리소스로의 아웃바운드 연결: Free 또는 S3 HD에서 사용 불가
Skillset을 사용하는 인덱서: Free, Basic, S1, S3 HD에서 사용 불가
Availability Zones Free 계층에서 사용 불가
Semantic Ranker Free 계층에서 실행되지만 대규모 워크로드에는 권장되지 않음

참고: 충분한 용량을 제공하지 않으면 리소스 집약적 기능이 제대로 작동하지 않을 수 있다. 예: AI Enrichment는 데이터셋이 작지 않으면 Free 서비스에서 시간 초과되는 장기 실행 기술을 가짐.

2.4 상한선

계층은 서비스 자체의 최대 스토리지와 생성 가능한 인덱스, 인덱서, 데이터 소스, Skillset, 동의어 맵의 최대 수를 결정한다.

모든 제한의 전체 분석은 Azure AI Search의 서비스 제한 참조.

2.5 파티션 크기 및 속도

계층 가격에는 파티션당 스토리지에 대한 세부 정보가 포함된다: - Basic: 15GB - Storage Optimized (L2): 최대 2TB

하드웨어 특성: - 작업 속도, 지연 시간, 전송 속도와 같은 기타 하드웨어 특성은 공개되지 않음 - 특정 솔루션 아키텍처를 위해 설계된 계층은 해당 시나리오를 지원하는 기능을 갖춘 하드웨어에 구축됨

참고: 2024년 4월 일부 지역에서 더 높은 용량 파티션 제공 시작. 2024년 5월 두 번째 웨이브 출시. 기존 검색 서비스가 있는 경우 동일한 청구 요금으로 더 많은 용량의 혜택을 받기 위해 서비스 업그레이드 가능.

2.6 청구 요금

계층마다 청구 요금이 다르다: - 더 비싼 하드웨어에서 실행되는 계층: 더 높은 요금 - 더 비싼 기능을 제공하는 계층: 더 높은 요금 - 계층 청구 요금: Azure 가격 페이지 확인

2.6.1 청구 모델

서비스 생성 후 청구 요금은: - 고정 비용: 서비스를 24시간 실행하는 비용 - 증분 비용: 용량 추가 시 발생하는 비용

리소스 할당: - 검색 서비스는 파티션(스토리지용) 및 복제본(쿼리 엔진 인스턴스) 형태로 컴퓨팅 리소스 할당 - 초기: 각각 하나씩 생성, 청구 요금은 두 리소스 모두 포함 - 용량 확장: 비용은 청구 가능 요금의 증분만큼 증가 또는 감소

2.6.2 청구 예시

가정: 월 청구 요금 $100 - 기본 구성 (1 파티션, 1 복제본): 월말 $100 예상 - 2개 복제본 추가 (총 3개 복제본): 월 청구 $300 ($100 첫 번째 복제본-파티션 쌍 + $200 두 복제본)

2.6.3 Search Units (SU)

청구 모델은 검색 서비스에서 사용하는 Search Unit (SU) 수에 청구 요금을 적용하는 개념 기반: - 모든 서비스는 초기에 1 SU로 프로비저닝됨 - 파티션 또는 복제본을 추가하여 더 큰 워크로드를 처리하기 위해 SU 증가 가능 - Azure AI Search는 인덱스의 모든 부하 분산 및 복제를 관리 - 언제든지 서비스에 할당된 복제본 수 변경 가능

자세한 정보: 검색 서비스 비용 추정 방법

2.7 계층 변경

2.7.1 지원되는 변경

참고: 기존 검색 서비스는 Basic과 Standard (S1, S2, S3) 계층 간 전환 가능.

조건: - 현재 서비스 구성이 대상 계층의 제한을 초과하지 않아야 함 - 지역에 대상 계층에 대한 용량 제약이 없어야 함

자세한 정보: 가격 계층 변경

2.7.2 다른 계층으로 전환

위에 나열된 것 이외의 계층으로 전환하려면:

  1. 새 계층에 검색 서비스 생성
  2. 새 서비스에 검색 콘텐츠 배포 (체크리스트 따라 모든 콘텐츠 확보)
  3. 더 이상 필요하지 않은 경우 이전 서비스 삭제

2.7.3 대규모 인덱스 백업 및 복원

처음부터 다시 빌드하고 싶지 않은 대규모 인덱스의 경우 다음 백업 및 복원 샘플 사용:

2.8 계층 선택 가이드

최선의 방법은 최소 비용 계층으로 시작한 다음 경험과 테스트를 통해 서비스를 유지하거나 더 높은 계층으로 전환할지 결정하는 것이다.

2.8.1 권장 사항

제안하는 테스트 수준을 수용할 수 있는 계층에서 검색 서비스를 생성한 후 다음 가이드를 검토:

3 구독 제한 (Subscription Limits)

3.1 지역당 계층당 최대 서비스 수

각 Azure 구독은 특정 지역 내의 각 계층에서 제한된 수의 검색 서비스를 생성할 수 있다.

계층 지역당 최대 서비스 수
Free 1
Basic 16
Standard (S1, S2, S3, S3 HD) 각 계층당 16
Storage Optimized (L1, L2) 각 계층당 6

주요 사항: - Free 계층: Azure 구독당 한 개의 무료 서비스만 허용 - 청구 가능 계층: 제한은 계층별로 적용됨 (예: 동일 지역에 S1 16개와 S2 16개 모두 가능) - 제한 초과 시: “You have exceeded the maximum number of services allowed for the given subscription and location for a tier. Please use another location or tier, or request a quota increase by contacting Azure support” 오류 발생 - 제한 증가 요청: Azure 지원에 문의하여 구독당 서비스 수 제한 증가 가능

참고: - 거의 없지만 일부 지역은 용량 제약으로 새 검색 서비스 추가가 일시적으로 차단될 수 있음 - 지역별 제약사항: 지역 지원 문서 참조

4 서비스 제한 (Service Limits)

서비스 제한은 검색 서비스 자체에 적용되는 제약사항이다.

4.1 스토리지 제한

계층 2024년 4월 3일 이전 2024년 5월 17일 이후
Free 50 MB 50 MB
Basic 2 GB 15 GB
S1 25 GB per partition 160 GB per partition
S2 100 GB per partition 512 GB per partition
S3 200 GB per partition 1 TB per partition
S3 HD 200 GB per partition 200 GB per partition
L1 1 TB per partition 2 TB per partition
L2 2 TB per partition 4 TB per partition

주요 사항: - 2024년 4월부터 새로운 검색 서비스는 더 큰 파티션 크기로 프로비저닝됨 - 기존 서비스: 일회성 무료 업그레이드 가능 - 스토리지는 명시적 제한이거나 인덱스당 최대 문서 수에 의해 암시적으로 제한될 수 있음 (둘 중 먼저 도달하는 것)

4.2 워크로드 제한 (인덱스, 인덱서, 데이터 소스)

리소스 Free Basic S1 S2 S3 S3 HD L1 L2
Indexes (인덱스) 3 5 (2017년 12월 이전 생성 서비스)
15 (2024년 4월 3일 이후 생성 서비스)
50 200 200 파티션당 1000
서비스당 최대 3000
10 10
Indexers (인덱서) 3 5 (2017년 12월 이전 생성 서비스)
15 (2024년 4월 3일 이후 생성 서비스)
50 200 200 N/A 10 10
Data Sources (데이터 소스) 3 5 (2017년 12월 이전 생성 서비스)
15 (2024년 4월 3일 이후 생성 서비스)
50 200 200 N/A 10 10
Skillsets 3 5 (2017년 12월 이전 생성 서비스)
15 (2024년 4월 3일 이후 생성 서비스)
50 200 200 N/A 10 10
Synonym Maps (동의어 맵) 3 3 50 200 200 200 10 10

참고: - S3 HD: 인덱서, 데이터 소스, Skillset 미지원 - Basic 계층: 2017년 12월 이전 생성 서비스는 더 낮은 제한 (5개) - Basic 계층: 2024년 4월 3일 이후 생성 서비스는 더 높은 제한 (15개)

5 인덱스 제한 (Index Limits)

5.1 인덱스당 필드 수

리소스 제한 비고
Simple Fields 1000 단순 필드 (String, Integer, Boolean 등)
Complex Fields 40 복합 필드 (객체 배열 등)
Complex Collections 40 복합 컬렉션
All Fields (Simple + Complex) 1000 총 필드 수

주요 사항: - 단순 필드: Edm.String, Edm.Boolean, Edm.Int32, Edm.Int64, Edm.Double, Edm.DateTimeOffset, Edm.GeographyPoint 등 - 복합 필드: Edm.ComplexType의 최상위 필드 또는 중첩 필드 - 복합 컬렉션: Collection(Edm.ComplexType) 필드

5.2 인덱스당 벡터 검색 제한

리소스 제한
Vector Fields (벡터 필드) 인덱스당 최대 50개
Vector Profiles (벡터 프로필) 인덱스당 최대 100개
Vector Algorithms (벡터 알고리즘) 인덱스당 최대 100개
Vectorizers (벡터화기) 인덱스당 최대 100개

5.3 인덱스 크기 제한

인덱스 크기는 다음에 의해 제한된다: 1. 업로드하는 문서 수 2. 문서의 복잡성 (필드 수, 필드 속성) 3. 전체 인덱스 구성 (인덱스 스키마, 스코어링 프로필, CORS 옵션 등)

5.3.1 최대 문서 수

계층 인덱스당 최대 문서 수
Free 10,000
Basic 24,000,000,000 (240억)
S1 24,000,000,000 (240억)
S2 24,000,000,000 (240억)
S3 24,000,000,000 (240억)
S3 HD 2,000,000,000 (20억, 파티션당)
L1 288,000,000,000 (2880억)
L2 576,000,000,000 (5760억)

참고: - S3 HD는 파티션당 제한 적용 - 실제 문서 수는 인덱스 복잡성, 벡터 quota, 스토리지 제한에 따라 달라질 수 있음

6 벡터 인덱스 크기 제한 (Vector Index Size Limits)

6.1 벡터 Quota 진화

벡터 인덱스의 크기는 벡터 quota에 의해 제한된다.

6.1.1 2023년 7월 1일 이전 생성 서비스

계층 파티션당 벡터 quota
Basic 0.5 GB
S1 1 GB
S2 6 GB
S3 12 GB

6.1.2 2023년 7월 1일 ~ 2024년 5월 17일 생성 서비스

계층 파티션당 벡터 quota
Basic 1 GB
S1 3 GB
S2 12 GB
S3 36 GB
L1 12 GB
L2 36 GB

6.1.3 2024년 5월 17일 이후 생성 서비스

계층 파티션당 벡터 quota
Basic 1 GB → 35 GB
S1 3 GB → 150 GB
S2 12 GB → 300 GB
S3 36 GB → 300 GB
L1 12 GB → 150 GB
L2 36 GB → 300 GB

주요 사항: - 2024년 5월 17일 이후 생성된 서비스는 자동으로 더 높은 벡터 quota 적용 - 기존 서비스: 일회성 무료 업그레이드 가능 - 벡터 quota 초과 시: 문서 업로드 실패

6.2 벡터 인덱스 크기 계산

벡터 인덱스 크기는 다음 요소에 의해 결정된다: - 차원 수 (dimensions): 벡터의 차원 - 알고리즘 유형: HNSW (메모리 집약적) vs Exhaustive KNN (메모리 효율적) - 문서 수 - 벡터 필드 수

6.2.1 HNSW 알고리즘 크기 추정

HNSW 알고리즘의 벡터 인덱스 크기는 다음과 같이 계산된다:

벡터 인덱스 크기 (bytes) = 
  dimensions × 4 bytes × 1.2 (오버헤드 팩터) × number of documents

예시: - 차원: 1536 (OpenAI text-embedding-ada-002) - 문서 수: 1,000,000 - 계산: 1536 × 4 × 1.2 × 1,000,000 = 7,372,800,000 bytes ≈ 7.37 GB

결론: - Basic 계층 (35 GB quota): 약 470만 문서 저장 가능 - S1 계층 (150 GB quota): 약 2030만 문서 저장 가능

6.2.2 Exhaustive KNN 알고리즘 크기 추정

Exhaustive KNN은 HNSW보다 메모리 효율적이다:

벡터 인덱스 크기 (bytes) = 
  dimensions × 4 bytes × number of documents

예시: - 차원: 1536 - 문서 수: 1,000,000 - 계산: 1536 × 4 × 1,000,000 = 6,144,000,000 bytes ≈ 6.14 GB

6.3 압축을 통한 크기 최적화

벡터 압축을 사용하면 벡터 인덱스 크기를 크게 줄일 수 있다.

6.3.1 Scalar Quantization (스칼라 양자화)

  • 압축률: 벡터 크기를 75% 감소 (4배 압축)
  • 작동 원리: Float32 (4 bytes) → Int8 (1 byte) 변환
  • 트레이드오프: 약간의 정확도 감소 (일반적으로 무시 가능)

예시 (HNSW + Scalar Quantization): - 원본 크기: 7.37 GB - 압축 후: 1.84 GB (75% 감소) - Basic 계층으로 약 1900만 문서 저장 가능

6.3.2 Binary Quantization (이진 양자화)

  • 압축률: 벡터 크기를 96% 감소 (32배 압축)
  • 작동 원리: Float32 (4 bytes) → 1 bit 변환
  • 트레이드오фф: 더 큰 정확도 감소 가능
  • 적용 대상: text-embedding-3-small, text-embedding-3-large 등 특정 모델

예시 (HNSW + Binary Quantization): - 원본 크기: 7.37 GB - 압축 후: 0.29 GB (96% 감소) - Basic 계층으로 약 1억 2000만 문서 저장 가능

7 인덱서 제한 (Indexer Limits)

7.1 인덱서 실행 시간 제한

계층 최대 실행 시간 (일반 인덱서) Skillset 포함 인덱서
Free 3분 3~10분 (Skillset 복잡도에 따라)
Basic, S1 24시간 2시간
S2 24시간 2시간
S3, L1, L2 24시간 2시간

주요 사항: - 인덱서가 최대 시간 내 완료되지 않으면: 자동으로 중지됨 - 재시작 시: 마지막으로 중단된 지점부터 재개 - Skillset 포함 인덱서: AI Enrichment 작업으로 인해 더 짧은 시간 제한

7.2 Blob 크기 제한

계층 최대 Blob 크기 최대 추출 문자 수
Free 16 MB 256,000
Basic 16 MB 512,000
S1 128 MB 4,000,000
S2 256 MB 8,000,000
S3, L1, L2 256 MB 16,000,000

참고: - Blob 크기 초과 시: 인덱서가 해당 문서를 건너뛰고 경고 생성 - 추출 문자 수 제한: 텍스트 추출 시 최대 문자 수

7.3 인덱서 동시 실행 제한

참고: Azure AI Search는 인덱서 실행 수를 명시적으로 제한하지 않지만, 리소스 사용 가능 여부에 따라 인덱서가 동시에 실행될 수 있다.

8 API 제한 (API Request Limits)

8.1 HTTP 요청 제한

제한 항목 최대 값
요청당 최대 URL 길이 (REST APIs) 8 KB
요청당 최대 페이로드 크기 16 MB

8.2 쿼리 제한

제한 항목 최대 값 기본값
반환 가능한 최대 문서 수 (페이지당) 1,000 50
벡터 쿼리에 포함 가능한 벡터 필드 수 10 -

주요 사항: - 페이지네이션: $top$skip 매개변수 사용 - 기본값: 쿼리당 50개 문서 반환 - 최대값: $top=1000으로 설정 가능

8.3 인덱스 업로드 제한

제한 항목 최대 값
배치당 최대 문서 수 1,000
배치당 최대 페이로드 크기 16 MB

권장 사항: - 대량 업로드: 배치로 나누어 업로드 - 최적 배치 크기: 1,000개 미만 (네트워크 안정성 고려)

9 Semantic Ranker 제한 (Semantic Ranker Limits)

9.1 동시 요청 제한

Semantic Ranker는 동시 요청 수를 제한한다:

계층 Search Unit (SU)당 동시 요청 수 SU당 큐 크기
Free 2 4
Basic 3 6
Standard (S1, S2, S3) 4 8

주요 사항: - 동시 요청 제한 초과 시: 요청이 큐에 대기 - 큐 크기 초과 시: HTTP 429 (Too Many Requests) 오류 반환 - SU 추가: 동시 요청 용량 증가 (예: 2 SU = 8 동시 요청, Basic 계층)

9.2 처리 제한

제한 항목 최대 값
쿼리당 처리되는 최대 문서 수 50
재순위 매겨지는 최대 문서 수 50

참고: - Semantic Ranker는 검색 결과의 상위 50개 문서만 재순위 매김 - 전체 검색 결과가 50개 초과 시: 상위 50개만 semantic reranking 적용

10 참고 자료

Subscribe

Enjoy this blog? Get notified of new posts by email: