

기계 번역으로 제공되는 번역입니다. 제공된 번역과 원본 영어의 내용이 상충하는 경우에는 영어 버전이 우선합니다.

# Envoy 1.17로 업데이트/마이그레이션
<a name="1.17-migration"></a>

**중요**  
지원 종료 공지: 2026년 9월 30일에 AWS 는에 대한 지원을 중단합니다 AWS App Mesh. 2026년 9월 30일 이후에는 AWS App Mesh 콘솔 또는 AWS App Mesh 리소스에 더 이상 액세스할 수 없습니다. 자세한 내용은이 블로그 게시물 [Migrating from to Amazon ECS Service Connect를 참조 AWS App Mesh 하세요](https://aws.amazon.com/blogs/containers/migrating-from-aws-app-mesh-to-amazon-ecs-service-connect).

## SPIRE를 사용한 보안 암호 검색 서비스
<a name="spire-update"></a>

App Mesh에서 SPIRE(SPIFE Runtime Environment)를 사용하여 서비스에 신뢰 인증서를 배포하는 경우 [SPIRE 에이전트](https://github.com/spiffe/spire/releases/tag/v0.12.0) 버전 `0.12.0`(2020년 12월 출시)을 사용하고 있는지 확인합니다. 이 버전은 `1.16` 이후 Envoy 버전을 지원할 수 있는 첫 번째 버전입니다.

## 정규식 변경 사항
<a name="regular-expressions"></a>

Envoy `1.17`부터 App Mesh는 Envoy가 기본적으로 [RE2](https://github.com/google/re2) 정규 표현식 엔진을 사용하도록 구성합니다. 대부분의 사용자에게는 이러한 변경이 명확하게 보이지만 Routes 또는 Gateway Routes의 일치 항목이 더 이상 정규 표현식에서 미리 보기 또는 역참조를 허용하지 않습니다.

### 긍정 및 부정 미리 보기
<a name="positive-look-ahead"></a>

**긍정 -** 긍정 미리 보기는 `?=`로 시작하는 괄호로 묶인 표현식입니다.

```
(?=example)
```

이러한 방법은 문자를 일치의 일부로 사용하지 않고도 문자열을 일치시킬 수 있기 때문에 문자열 대체 시 가장 유용합니다. App Mesh는 정규식 문자열 대체를 지원하지 않으므로 정규식 문자열 대체를 일반 일치로 바꾸는 것이 좋습니다.

```
(example)
```

**부정 -** 부정 미리 보기는 `?!`로 시작하는 괄호로 묶인 표현식입니다.

```
ex(?!amp)le
```

괄호로 묶인 표현식은 표현식의 일부가 주어진 입력과 일치하지 않음을 어셜선하는 데 사용됩니다. 대부분의 경우에 이를 0 한정사로 바꿀 수 있습니다.

```
ex(amp){0}le
```

표현식 자체가 문자 클래스인 경우 전체 클래스를 부정하고 `?`를 사용하여 선택 사항으로 표시할 수 있습니다.

```
prefix(?![0-9])suffix => prefix[^0-9]?suffix
```

사용 사례에 따라 경로를 변경하여 이를 처리할 수도 있습니다.

```
{
    "routeSpec": {
        "priority": 0,
        "httpRoute": {
            "match": {
                "headers": [
                    {
                        "name": "x-my-example-header",
                        "match": {
                            "regex": "^prefix(?!suffix)"
                        }
                    }
                ]
            }
        }
    }
}

{
    "routeSpec": {
        "priority": 1,
        "httpRoute": {
            "match": {
                "headers": [
                    {
                        "name": "x-my-example-header",
                        "match": {
                            "regex": "^prefix"
                        }
                    }
                ]
            }
        }
    }
}
```

첫 번째 경로 일치에서는 “prefix”로 시작하지만 뒤에 “suffix”가 없는 헤더를 찾습니다. 두 번째 경로는 “suffix”로 끝나는 헤더를 포함하여 “prefix”로 시작하는 다른 모든 헤더를 일치시키는 역할을 합니다. 대신 부정 미리 보기를 없애기 위한 방법으로 이러한 방식을 거꾸로 진행할 수도 있습니다.

```
{
    "routeSpec": {
        "priority": 0,
        "httpRoute": {
            "match": {
                "headers": [
                    {
                        "name": "x-my-example-header",
                        "match": {
                            "regex": "^prefix.*?suffix"
                        }
                    }
                ]
            }
        }
    }
}

{
    "routeSpec": {
        "priority": 1,
        "httpRoute": {
            "match": {
                "headers": [
                    {
                        "name": "x-my-example-header",
                        "match": {
                            "regex": "^prefix"
                        }
                    }
                ]
            }
        }
    }
}
```

이 예제는 경로를 반대로 진행하여 “suffix”로 끝나는 헤더에 더 높은 우선 순위를 부여하고, “prefix”로 시작하는 다른 모든 헤더는 우선 순위가 낮은 경로에서 일치시킵니다.

## 역참조
<a name="back-references"></a>

역참조는 괄호로 묶인 이전 그룹을 반복하여 더 짧은 식을 작성하는 방법입니다. 형식은 다음과 같습니다.

```
(group1)(group2)\1
```

백슬래시 `\` 뒤에 숫자가 오는 것은 표현식에서 괄호로 묶인 n번째 그룹의 자리 표시자 역할을 합니다. 이 예제에서는 `\1`이 `(group1)`을 한 번 더 쓰기 위한 대체 방법으로 사용됩니다. 

```
(group1)(group2)(group1)
```

예제와 같이 역참조를 참조 대상 그룹으로 바꾸면 이러한 문제를 간단히 제거할 수 있습니다.