

翻訳は機械翻訳により提供されています。提供された翻訳内容と英語版の間で齟齬、不一致または矛盾がある場合、英語版が優先します。

# 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 リソースにアクセスできなくなります。詳細については、このブログ記事[「 から Amazon ECS Service Connect AWS App Mesh への移行](https://aws.amazon.com/blogs/containers/migrating-from-aws-app-mesh-to-amazon-ecs-service-connect)」を参照してください。

## SPIRE でのSecret Discovery Service (SDS)
<a name="spire-update"></a>

App Mesh で SPIRE (SPIFFE ランタイム環境) を使用して信頼証明書をサービスに配布する場合は、少なくともバージョン `0.12.0` の [SPIRE エージェント](https://github.com/spiffe/spire/releases/tag/v0.12.0) (2020 年 12 月にリリース) を使用していることを確認してください。これは、Envoy バージョン `1.16` 以降をサポートできる最初のバージョンです。

## 正規表現の変更
<a name="regular-expressions"></a>

Envoy `1.17` 以降、App Mesh は Envoy を [RE2](https://github.com/google/re2) 正規表現エンジンを使用して設定します。この変更は、ほとんどのユーザーに対して明白ですが、ルートまたはゲートウェイルートでの一致では、正規表現での先読みまたは後方参照は許可されなくなります。

### 正と負の先読み取り
<a name="positive-look-ahead"></a>

**正 -** 正の先読みは、`?=` で始まる括弧で囲まれた式です。

```
(?=example)
```

これらは、文字列置換を行うときに最も有用です。なぜなら、文字を一致の一部として消費することなく、文字列を一致させることができるからです。App Mesh では、正規表現による文字列置換がサポートされていないため、これらを通常の一致に置き換えることをお勧めします。

```
(example)
```

**負 - **負の先読みは、`?!` で始まる括弧で囲まれた式です。

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

括弧で囲まれた式は、式の一部が特定の入力と一致しないことを表明するために使用されます。ほとんどの場合、これらはゼロ数値に置き換えることができます。

```
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"
                        }
                    }
                ]
            }
        }
    }
}
```

最初のルート一致は、「プレフィックス」で始まり、その後に「サフィックス」が続かないヘッダーを探します。2番目のルートは、「サフィックス」で終わるヘッダーを含め、「プレフィックス」で始まる他のすべてのヘッダーと一致するように機能します。代わりに、負の先読みを削除する方法として、これらを逆にすることができます。

```
{
    "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` は、2回目の `(group1)` 書き込みの代替方法として使用されています。

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

上記の例のように、後方参照を参照するグループに置き換えるだけで、これらを削除することができます。