翻訳は機械翻訳により提供されています。提供された翻訳内容と英語版の間で齟齬、不一致または矛盾がある場合、英語版が優先します。
HyperPod Inference のカスタム証明書と Route 53 DNS 管理
次の手順では、HyperPod 推論エンドポイントに独自の ACM 証明書を使用し、オプションでカスタムドメインの Route 53 DNS レコードを管理するように演算子を設定する方法を示します。
カスタム証明書では、ACM 証明書 ARN を指定すると、オペレーターはそれを Application Load Balancer (ALB) にアタッチし、その状態をモニタリングし、自動更新検出をサポートします。演算子は、パブリックに信頼された ACM 証明書、 AWS プライベート CA 証明書、および外部 CAs からインポートされた証明書をサポートします。
カスタム証明書は、単独で使用することも、Route 53 DNS 管理と組み合わせることもできます。Route 53 DNS 管理にはカスタム証明書が必要であり、証明書設定のドメイン名を使用して DNS レコードを作成および管理します。
前提条件
開始する前に、以下が整っていることを検証します。
-
Amazon SageMaker HyperPod クラスターでの推論機能の設定。詳細については、「モデルデプロイ用の HyperPod クラスターの設定」を参照してください。
-
ターミナルに kubectl
をインストールしました。 -
HyperPod クラスターと同じ AWS リージョンの ACM で TLS 証明書をプロビジョニングまたはインポートしました。証明書は発行済み状態であり、証明書チェーン (中間 CA とルート CA) が含まれている必要があります。ACM にインポートされた自己署名証明書は、証明書チェーンがないため、カスタム証明書としてサポートされていません。
-
(Route 53 DNS 管理用) ドメインの Route 53 ホストゾーンを作成しました。パブリックホストゾーンが推奨されます。プライベートホストゾーンはレコード作成に使用できますが、オペレーターは VPC DNS リゾルバーに依存するポッドの DNS リゾルバーを使用して DNS 解決を検証します。プライベートホストゾーンの場合、VPC は DNS 解決と DNS ホスト名を有効にし、プライベートホストゾーンをクラスターの VPC に関連付ける必要があります。
IAM 許可を設定する
推論演算子の実行ロールには、カスタム証明書と Route 53 DNS 管理のための追加のアクセス許可が必要です。HyperPod 推論実行ロールに次のポリシーを追加します。
カスタム証明書の ACM および Amazon S3 アクセス許可
{ "Version": "2012-10-17", "Statement": [ { "Sid": "ACMCustomCertificateAccess", "Effect": "Allow", "Action": [ "acm:DescribeCertificate", "acm:GetCertificate" ], "Resource": "arn:aws:acm:<region>:<account-id>:certificate/*" }, { "Sid": "S3CertificateUpload", "Effect": "Allow", "Action": [ "s3:PutObject", "s3:PutObjectTagging" ], "Resource": "arn:aws:s3:::<tls-certificate-bucket>/*", "Condition": { "StringEquals": { "s3:RequestObjectTag/CreatedBy": "HyperPodInference" } } } ] }
注記
Amazon S3 バケット名が で始まる場合hyperpod-tls、Amazon S3 アクセス許可はすでに AmazonSageMakerHyperPodInferenceAccess 管理ポリシーに含まれており、ACM ステートメントを追加するだけで済みます。
DNS 管理のための Route 53 アクセス許可
{ "Version": "2012-10-17", "Statement": [ { "Sid": "Route53DNSManagement", "Effect": "Allow", "Action": [ "route53:GetHostedZone", "route53:ListResourceRecordSets", "route53:ChangeResourceRecordSets" ], "Resource": "arn:aws:route53:::hostedzone/<hosted-zone-id>" } ] }
<region>、<account-id>、<tls-certificate-bucket>、 を実際の値<hosted-zone-id>に置き換えます。ACM リソース ARN を特定の証明書にスコープして、セキュリティを強化できます。
カスタム証明書を設定する
カスタム証明書を使用するには、 InferenceEndpointConfig または JumpStartModel仕様tlsConfigの に customCertificateConfigセクションを追加します。フィールドtlsConfigと dnsConfigフィールドは両方の CRDs。
customCertificateConfig および では、次のフィールドを使用できますtlsConfig。
tlsConfig.customCertificateConfig.acmArn(必須、文字列)-
ACM 証明書の ARN。発行済み状態である必要があります。
tlsConfig.customCertificateConfig.domainName(必須、文字列)-
証明書から使用するドメイン名。
-
ワイルドカードではなく、特定のドメインである必要があります。ワイルドカード証明書 ( など
*.example.com) には、特定のサブドメイン ( など) を指定しますapi.example.com。 -
小文字にする必要があります。
-
証明書に記載されているドメイン名のいずれかと一致する必要があります。
-
tlsConfig.tlsCertificateOutputS3Uri(条件付き、文字列)-
オペレーターがパブリック証明書をアップロードする Amazon S3 URI。
TLS_CERTIFICATE_OUTPUT_S3URI環境変数が設定された状態で演算子がインストールされていない限り必須です。これが設定されたかどうか不明な場合は、明示的に指定します。
カスタム証明書を使用してエンドポイントを作成するための YAML ファイルの例を次に示します。
apiVersion: inference.sagemaker.aws.amazon.com/v1 kind: InferenceEndpointConfig metadata: name: my-model namespace: my-namespace spec: modelName: my-llm instanceType: ml.g5.24xlarge invocationEndpoint: v1/chat/completions replicas: 2 modelSourceConfig: modelSourceType: s3 s3Storage: bucketName: my-model-bucket region: us-west-2 modelLocation: models/my-llm tlsConfig: customCertificateConfig: acmArn: arn:aws:acm:us-west-2:123456789012:certificate/abc12345-1234-1234-1234-abc123456789 domainName: api.example.com tlsCertificateOutputS3Uri: s3://my-tls-bucket worker: image: my-inference-image:latest modelInvocationPort: containerPort: 8000 name: http modelVolumeMount: name: model-weights mountPath: /opt/ml/model resources: limits: nvidia.com/gpu: "4" requests: cpu: "6" memory: 30Gi nvidia.com/gpu: "4"
すでに実行中のデプロイcustomCertificateConfigに を追加できます。オペレーターは、次の調整で変更を検出し、証明書を検証して ALB にアタッチし、パブリック証明書を Amazon S3 にアップロードします。ダウンタイムや再デプロイは必要ありません。
重要
実行中のデプロイから customCertificateConfigセクションを削除すると、オペレーターは新しい自己署名証明書の生成にフォールバックします。これにより、ALB の CA 署名証明書が置き換えられます。
Route 53 DNS 管理を設定する
Route 53 DNS 管理では、カスタム証明書を設定し、 のドメイン名を使用する必要がありますtlsConfig.customCertificateConfig.domainName。カスタム証明書を設定していない場合は、カスタム証明書を設定するまず「」を参照してください。
Route 53 DNS 管理を有効にするには、仕様に dnsConfigセクションを追加します。
spec: tlsConfig: customCertificateConfig: acmArn: arn:aws:acm:us-west-2:123456789012:certificate/abc12345-1234-1234-1234-abc123456789 domainName: api.example.com tlsCertificateOutputS3Uri: s3://my-tls-bucket dnsConfig: hostedZoneId: Z1234567890ABC
dnsConfig セクションは、 と同時に追加することもcustomCertificateConfig、後で既存のデプロイに追加することもできます。オペレーターは、ポッドを再起動せずに、次の調整時に DNS レコードを作成します。
を使用してデプロイするとdnsConfig、 演算子は次のようになります。
-
ホストゾーンが存在し、ドメインがホストゾーンに属していることを検証します (たとえば、 にはホストゾーン
api.example.comが必要ですexample.com)。 -
ターゲットドメインの既存の A レコードをチェックして、誤って上書きされないようにします。
-
ドメインが ALB を指す A レコード (エイリアス) と、エンドポイント間の競合を防ぐために所有権マーカー (
hyperpod-inference/owner=<namespace>/<name>) を持つ TXT レコードを作成します。TXT レコードを手動で変更または削除しないでください。 -
ドメインが解決されるまで 30 秒ごとに DNS 解決をポーリングし、ステータスを としてマークします
Active。レコードが 10 分以内に解決されない場合、ステータスは に移行しますError。
注記
Route 53 DNS 管理はノンブロッキングです。DNS レコードの作成または伝播のエラーは、推論エンドポイントが Ready状態に達するのを妨げません。エンドポイントは、ALB のデフォルトのホスト名から引き続きアクセスできます。リソースステータスの dnsStatusセクションで DNS 固有のエラーを確認します。
Route 53 DNS 管理なしでカスタム証明書を使用する
Route 53 DNS 管理はオプションです。独自の DNS レコードを管理する場合は、 dnsConfigセクションを省略し、ドメインを手動で設定します。
デプロイの ALB ホスト名を見つけるには、入力名はインテリジェントルーティングが有効になっているかどうかによって異なります。
インテリジェントルーティングなし: Ingress は名前空間alb-<deployment-name>に名前が付けられます。
kubectl get ingress alb-<deployment-name> -n <namespace> \ -o jsonpath='{.status.loadBalancer.ingress[0].hostname}'
インテリジェントルーティングの場合: Ingress は hyperpod-inference-system名前空間alb-<deployment-name>-<namespace>に名前が付けられます。
kubectl get ingress alb-<deployment-name>-<namespace> -n hyperpod-inference-system \ -o jsonpath='{.status.loadBalancer.ingress[0].hostname}'
ドメインがこの ALB ホスト名を指す DNS プロバイダーに DNS レコードを作成します。
-
Route 53 — ALB を指すエイリアスを有効にして A レコードを作成します。
-
その他の DNS プロバイダー — ドメインを ALB DNS 名を指す CNAME レコードを作成します。CNAME レコードはルートドメイン ( など
example.com) では使用できません。 のようなサブドメインを使用しますapi.example.com。
注記
ALB が再作成された場合 (エンドポイントを削除して再デプロイした後など)、ALB ホスト名が変更されます。DNS レコードを手動で更新する必要があります。Route 53 DNS 管理はこれを自動的に処理します。
デプロイのステータスを検証する
カスタム証明書のステータスを確認する
kubectl describe InferenceEndpointConfig my-model -n my-namespace
ステータスで tlsCertificateセクションを探します。
Status: Tls Certificate: Certificate ARN: arn:aws:acm:us-west-2:123456789012:certificate/abc12345-... Certificate Health: Valid Certificate Domain Names: api.example.com Last Cert Expiry Time: 2027-04-23T00:00:00Z
証明書のヘルス値:
-
有効 — 証明書の有効期限は 60 日以上です。
-
有効期限切れ — 証明書は 60 日以内に期限切れになります。Kubernetes 警告イベント (
CertificateExpiring) が出力されます。 -
有効期限切れ — 証明書の有効期限が切れています。Kubernetes 警告イベント (
CertificateExpired) が出力されます。
オペレーターは 24 時間ごとに証明書の有効期限を確認します。ACM で証明書が更新されたこと (NotAfter日付の変更) を検出すると、パブリック証明書が自動的に Amazon S3 に再アップロードされ、CertificateRenewedイベントが出力されます。
DNS ステータスを確認する
dnsStatus セクションを探します。
Status: Dns Status: Managed By Operator: true Record Name: api.example.com Hosted Zone Id: Z1234567890ABC Dns Health: Active Message: DNS record resolves successfully
DNS ヘルス値:
-
アクティブ — DNS レコードは正常に解決されます。カスタムドメインを使用する準備ができました。
-
保留中 — DNS レコードは Route 53 で作成されていますが、まだ伝播されていません。オペレーターは 30 秒ごとに再チェックします。
-
エラー — DNS レコードの作成または伝播に失敗しました。詳細については、
Messageフィールドを確認してください。
デプロイされたエンドポイントをテストする
Route 53 DNS 管理を設定した場合は、DNS ステータスが と表示された後に、カスタムドメインを使用してエンドポイントを呼び出しますActive。DNS 管理なしでカスタム証明書のみを設定した場合は、進入から ALB ホスト名を使用します (「」を参照Route 53 DNS 管理なしでカスタム証明書を使用する)。
curl -X POST https://api.example.com/v1/chat/completions \ -H "Content-Type: application/json" \ -d '{"model": "my-llm", "messages": [{"role": "user", "content": "Hello"}]}'
注記
SageMaker AI エンドポイントを介して を呼び出すには、 InferenceEndpointConfigまたは sageMakerEndpoint.name JumpStartModel 仕様endpointNameで を設定します。が設定されendpointNameていない場合、SageMaker AI エンドポイントは作成されず、直接 ALB 呼び出しのみを使用できます。
aws sagemaker-runtime invoke-endpoint \ --endpoint-name my-model \ --content-type "application/json" \ --body '{"model": "my-llm", "messages": [{"role": "user", "content": "Hello"}]}' \ --region us-west-2 \ --cli-binary-format raw-in-base64-out \ /dev/stdout
カスタム証明書と DNS レコードを管理する
ドメインまたはホストゾーンの変更
実行中のデプロイで domainName ( の場合customCertificateConfig) または hostedZoneId ( の場合dnsConfig) を更新できます。ドメイン名を変更すると、証明書の再検証と DNS カットオーバーの両方がトリガーされます。新しいドメインは ACM 証明書で有効である必要があります (SAN またはワイルドカード一致として)。
オペレーターは安全なカットオーバーを実行します。
-
新しいゾーンまたは新しいドメインの新しい DNS レコードを作成します。
-
新しいレコードが解決されることを確認します。
-
新しいレコードがアクティブになった後にのみ、古い DNS レコードを削除します。
移行中、古いドメインと新しいドメインの両方が ALB に解決されます。TXT 所有権レコードの TTL は 300 秒 (5 分) であるため、DNS クライアントはクリーンアップ後最大 5 分間古いレコードをキャッシュできます。
クリーンアップ
を削除するInferenceEndpointConfigか、 dnsConfigセクションを削除すると、オペレータは作成した Route 53 A および TXT レコードを自動的に削除します。演算子は、所有しているレコードのみを削除します (所有権 TXT レコードによって検証されます)。
トラブルシューティング
カスタム証明書または DNS 設定が期待どおりに動作しない場合は、これらのデバッグステップを使用します。
-
Amazon S3 アクセスエラーでデプロイが失敗します。で指定された Amazon S3 バケット
tlsCertificateOutputS3Uriが存在し、同じリージョンにあることを確認します。オペレーターの実行ロールにバケットに対するs3:PutObjectおよび アクセスs3:PutObjectTagging許可があることを確認します。オペレーターは、初期デプロイ中にゼロバイトのテストオブジェクトをアップロードして Amazon S3 書き込みアクセスを検証します。 -
証明書の検証に失敗しました。ACM 証明書が
ISSUED状態であることを確認しますaws acm describe-certificate --certificate-arn <arn> --region <region>。が証明書のドメインまたは SANdomainNameと一致することを確認します。ワイルドカード証明書 (*.example.com) には、 のような特定のサブドメインを使用しますapi.example.com。 -
DNS レコードの作成が失敗します。ホストゾーン ID が正しく、オペレーターの実行ロールに Route 53 アクセス許可があることを確認します。ドメインがホストゾーンに属していることを確認します (たとえば、 にはホストゾーン
api.example.comが必要ですexample.com)。NS 委任の競合が発生した場合は、代わりに委任ゾーンのホストゾーン ID を使用します。レコードの競合が発生した場合、別のエンドポイントまたは外部プロセスがそのドメインの A レコードを所有します。 -
DNS レコードには、長期間保留中と表示されます。ホストゾーンの NS レコードが親ドメインレジストラから適切に委任されていることを確認します。演算子はポッドの DNS リゾルバー (通常は CoreDNS) を使用します。これにより、結果がキャッシュされる可能性があります。解決せずに 10 分経過すると、ステータスは に移行します
Error。 -
証明書の有効期限に関する警告。ACM で証明書を更新または置き換えます。ACM が発行した証明書の場合、ACM は自動的に更新を処理します。インポートされた証明書の場合は、新しい証明書をインポートします。オペレーターは更新を自動的に検出し、パブリック証明書を Amazon S3 に再アップロードします。