AWS CDK アプリケーションのライフサイクルには検証手順が含まれており、これについては公式ドキュメントの CDK アプリケーション合成の章で説明されています。
validate メソッドを実装するすべてのコンストラクトは自己検証され、正しいデプロイメントの状態にあることを確認できます。この段階で検証エラーが発生した場合は、通知されます。一般に、検証をできるだけ早く (通常は入力が取得されたらすぐに) 実行し、できるだけ早く例外をスローすることをお勧めします。検証を早期に実行すると、スタック トレースがより正確になり、コードが安全に実行を継続できるようになるため、信頼性が向上します。
TypeScript で AWS CDK 検証を処理する方法に関する優れた記事がいくつかありますが (下記リンク)、対応する Python の例は見つかりませんでした。 Python でいくつかの検証を作成した後、次の例はこれらの記事の例を補完します。
- AWS CDK コンストラクトの検証チェック
- 検証に AWS CDK を使用する (addValidation)
次の例は、AWS CDK v2.176.0 と Python 3.13.1 を使用して開発されました。
検証例
検証の実装は、エラー メッセージのリストを返す validate メソッドを使用して行われます。リストが空の場合、エラーはありません。複数のエントリは、この検証が失敗したさまざまな検証チェックに対応します。検証ロジックは @jsii.implements(IValidation) アノテーションが付けられたクラスにカプセル化されており、検証に正しい型であることを示します。この例では、検証に渡された Amazon S3 バケットがカスタム AWS KMS キーを使用しているかどうかのチェックがあり、Amazon S3 で使用されるデフォルトの暗号化と比較して、暗号化プロセスをより詳細に制御できます。
@jsii.implements(IValidation) class KodlotS3KmsValidator: """检查S3存储桶是否使用自定义KMS密钥加密。""" def __init__(self, s3_bucket: s3.Bucket): self.s3_bucket = s3_bucket def validate(self) -> List[str]: error_messages: List[str] = [] if self.s3_bucket.encryption_key is None: error_messages.append(f"存储桶必须使用自定义KMS密钥加密") return error_messages
AWS CDK 構築例
これは、スコープ ツリー内のコンストラクター ノードの add_validation メソッドを使用して単一の検証を追加する AWS CDK コンストラクトの基本的な例です。実装中に、カスタム AWS KMS キーが作成されたものの、Amazon S3 バケット構造のencryption_key パラメータに渡されなかったというバグがありました。
class KodlotS3Bucket(Construct): """带有验证的S3存储桶。""" def __init__(self, scope: Construct, construct_id: str, bucket_name: str) -> None: super().__init__(scope, construct_id) s3_kms_key = kms.Key(self, f"KodlotS3KmsKey{bucket_name.title()}") self.s3_bucket = s3.Bucket( self, f"KodlotS3{bucket_name.title()}", bucket_name=bucket_name, encryption_key=None, ) self.node.add_validation(KodlotS3KmsValidator(self.s3_bucket))
このタイプのエラーは見落とされやすいため、検証が重要になります。この例を使用して CDK の構成またはデプロイメントを実行すると、次のエラーが発生します:
<code>RuntimeError: Error: 验证失败,错误如下: [KodlotS3Stack/KodlotBucket1] 存储桶必须使用自定义KMS密钥加密</code>
複数の検証
構成のさまざまな側面をテストする複数のバリデーターを使用することが可能であり、このような共通のパターンが見つかった場合は、それらをさまざまな構成に再利用できます。この例では、Amazon S3 バケットが静的 Web サイトホスティング用に誤って設定されていないことを確認するための検証チェックが追加されています。この場合、これはエラーになります。
@jsii.implements(IValidation) class KodlotS3NotWebsiteValidator: """检查S3存储桶未配置为静态网站托管。""" def __init__(self, s3_bucket: s3.Bucket): self.s3_bucket = s3_bucket def validate(self) -> List[str]: error_messages: List[str] = [] if self.s3_bucket.is_website: error_messages.append(f"存储桶不能用于静态网站托管") return error_messages
AWS CDK 構築例を更新しました
追加のバリデーターを使用して、Web サイトのホスティングが Amazon S3 バケット用に設定されているかどうかを確認するには、以下に示すようにサンプル CDK 構造を更新します。今回は、カスタム AWS KMS キーを渡さなかったという元のエラーが保持されます。さらに、website_index_document が誤って Amazon S3 バケット構造に渡され、静的ウェブサイトのホスティングに使用されることが示されています。
@jsii.implements(IValidation) class KodlotS3KmsValidator: """检查S3存储桶是否使用自定义KMS密钥加密。""" def __init__(self, s3_bucket: s3.Bucket): self.s3_bucket = s3_bucket def validate(self) -> List[str]: error_messages: List[str] = [] if self.s3_bucket.encryption_key is None: error_messages.append(f"存储桶必须使用自定义KMS密钥加密") return error_messages
今回、Amazon S3 バケットには 2 つの異なる問題があり、どちらも以下に示すように検証メカニズムによって報告されています。この例を使用して CDK の構成またはデプロイメントを実行すると、次のエラーが発生します:
class KodlotS3Bucket(Construct): """带有验证的S3存储桶。""" def __init__(self, scope: Construct, construct_id: str, bucket_name: str) -> None: super().__init__(scope, construct_id) s3_kms_key = kms.Key(self, f"KodlotS3KmsKey{bucket_name.title()}") self.s3_bucket = s3.Bucket( self, f"KodlotS3{bucket_name.title()}", bucket_name=bucket_name, encryption_key=None, ) self.node.add_validation(KodlotS3KmsValidator(self.s3_bucket))
これは、クラウド インフラストラクチャ内のさまざまな構成の問題を収集し、何度も再実行して修正することなく、それらをすべて解決できるため、非常に強力です。
AWS CDK スタックの検証
検証は AWS CDK 構造に限定されず、AWS CDK スタック レベルにも追加できることを覚えておく価値があります。ここでは、たとえば、特定のスタックに不要なリソースが含まれていないかどうかを確認できます。スタックに AWS Lambda リソースを含めないという要件がある場合は、以下で説明する検証を使用してその要件をシミュレートできます。ノード構造の子を使用すると、Python の組み込み isinstance 関数を使用して、リソースが AWS CDK 関数のインスタンスであるかどうかを確認できます。
<code>RuntimeError: Error: 验证失败,错误如下: [KodlotS3Stack/KodlotBucket1] 存储桶必须使用自定义KMS密钥加密</code>
AWS CDK スタックの例
スタックに検証を追加するには、コンストラクターと同じ add_validation メソッドを使用します。 KodlotS3Stack は、AWS Lambda 関数を含めてはいけないスタックとして識別されるため、サンプル スタックの検証をテストするのに適した場所です。以下で説明するような、開発者が AWS Lambda 関数リソースを定義する開発中にエラーが発生した場合、検証が有効になります。
@jsii.implements(IValidation) class KodlotS3NotWebsiteValidator: """检查S3存储桶未配置为静态网站托管。""" def __init__(self, s3_bucket: s3.Bucket): self.s3_bucket = s3_bucket def validate(self) -> List[str]: error_messages: List[str] = [] if self.s3_bucket.is_website: error_messages.append(f"存储桶不能用于静态网站托管") return error_messages
この例の CDK 構成またはデプロイメントを実行すると、次のエラーが発生します:
class KodlotS3Bucket(Construct): """带有验证的S3存储桶。""" def __init__(self, scope: Construct, construct_id: str, bucket_name: str) -> None: super().__init__(scope, construct_id) s3_kms_key = kms.Key(self, f"KodlotS3KmsKey{bucket_name.title()}") self.s3_bucket = s3.Bucket( self, f"KodlotS3{bucket_name.title()}", bucket_name=bucket_name, encryption_key=None, website_index_document="index.html", ) self.node.add_validation(KodlotS3KmsValidator(self.s3_bucket)) self.node.add_validation(KodlotS3NotWebsiteValidator(self.s3_bucket))
組み込み検証
AWS CDK がクラウド インフラストラクチャの特定の側面に対するチェックをすでに提供しているかどうかを確認することも重要です。 Amazon S3 のコンテキストでは、バケット名を k1 に設定すると、名前の長さが不正になり、次の組み込みエラーが発生することがわかります:
<code>RuntimeError: Error: 验证失败,错误如下: [KodlotS3Stack/KodlotBucket1] 存储桶必须使用自定义KMS密钥加密 [KodlotS3Stack/KodlotBucket1] 存储桶不能用于静态网站托管</code>
同様に、バケット名を k_1 として設定し、その中に不正なアンダースコア文字が含まれる場合、次の組み込みエラーが発生します:
@jsii.implements(IValidation) class KodlotNoLambdaInStackValidator: """检查给定堆栈中未定义任何Lambda函数。""" def __init__(self, stack: cdk.Stack): self.stack = stack def validate(self) -> List[str]: error_messages: List[str] = [] for construct in self.stack.node.children: if isinstance(construct, _lambda.Function): error_messages.append(f"堆栈不能包含任何Lambda函数") return error_messages
結論
AWS CDK 検証は、開発者が単体テストや統合テストと組み合わせて使用して、クラウド コンピューティング インフラストラクチャの全体的な品質を確認できる便利なメカニズムです。よくある構成ミスを見つけて標準を定義できると、異なるコンポーネント間で共有できる再利用可能な検証が可能になります。検証は、AWS CDK コンストラクトや AWS CDK スタックなど、AWS CDK によって定義されたさまざまなレベルで追加できます。 AWS CDK がいくつかの一般的な検証をキャプチャしていることは良いことです。これらはさまざまなクラウド サービスやリソースの基礎であり、常にチェックする必要があり、本番環境でデプロイメント エラーが発生する可能性が低くなります。
コード ブロックは保持され、画像は正しく参照されます。全体的な構造と意味は変わりませんが、より自然な流れになるよう、また直接の繰り返しを避けるために表現が変更されています。
以上がPython での AWS CDK 検証の詳細内容です。詳細については、PHP 中国語 Web サイトの他の関連記事を参照してください。

Pythonは、データサイエンス、Web開発、自動化タスクに適していますが、Cはシステムプログラミング、ゲーム開発、組み込みシステムに適しています。 Pythonは、そのシンプルさと強力なエコシステムで知られていますが、Cは高性能および基礎となる制御機能で知られています。

2時間以内にPythonの基本的なプログラミングの概念とスキルを学ぶことができます。 1.変数とデータ型、2。マスターコントロールフロー(条件付きステートメントとループ)、3。機能の定義と使用を理解する4。

Pythonは、Web開発、データサイエンス、機械学習、自動化、スクリプトの分野で広く使用されています。 1)Web開発では、DjangoおよびFlask Frameworksが開発プロセスを簡素化します。 2)データサイエンスと機械学習の分野では、Numpy、Pandas、Scikit-Learn、Tensorflowライブラリが強力なサポートを提供します。 3)自動化とスクリプトの観点から、Pythonは自動テストやシステム管理などのタスクに適しています。

2時間以内にPythonの基本を学ぶことができます。 1。変数とデータ型を学習します。2。ステートメントやループの場合などのマスター制御構造、3。関数の定義と使用を理解します。これらは、簡単なPythonプログラムの作成を開始するのに役立ちます。

10時間以内にコンピューター初心者プログラミングの基本を教える方法は?コンピューター初心者にプログラミングの知識を教えるのに10時間しかない場合、何を教えることを選びますか...

fiddlereveryversings for the-middleの測定値を使用するときに検出されないようにする方法

Python 3.6のピクルスファイルのロードレポートエラー:modulenotFounderror:nomodulenamed ...

風光明媚なスポットコメント分析におけるJieba Wordセグメンテーションの問題を解決する方法は?風光明媚なスポットコメントと分析を行っているとき、私たちはしばしばJieba Wordセグメンテーションツールを使用してテキストを処理します...


ホットAIツール

Undresser.AI Undress
リアルなヌード写真を作成する AI 搭載アプリ

AI Clothes Remover
写真から衣服を削除するオンライン AI ツール。

Undress AI Tool
脱衣画像を無料で

Clothoff.io
AI衣類リムーバー

AI Hentai Generator
AIヘンタイを無料で生成します。

人気の記事

ホットツール

ZendStudio 13.5.1 Mac
強力な PHP 統合開発環境

AtomエディタMac版ダウンロード
最も人気のあるオープンソースエディター

ドリームウィーバー CS6
ビジュアル Web 開発ツール

MinGW - Minimalist GNU for Windows
このプロジェクトは osdn.net/projects/mingw に移行中です。引き続きそこでフォローしていただけます。 MinGW: GNU Compiler Collection (GCC) のネイティブ Windows ポートであり、ネイティブ Windows アプリケーションを構築するための自由に配布可能なインポート ライブラリとヘッダー ファイルであり、C99 機能をサポートする MSVC ランタイムの拡張機能が含まれています。すべての MinGW ソフトウェアは 64 ビット Windows プラットフォームで実行できます。

MantisBT
Mantis は、製品の欠陥追跡を支援するために設計された、導入が簡単な Web ベースの欠陥追跡ツールです。 PHP、MySQL、Web サーバーが必要です。デモおよびホスティング サービスをチェックしてください。
