Jadual Kandungan
Contoh pengesahan
Contoh Pembinaan CDK AWS
Berbilang pengesahan
Contoh pembinaan AWS CDK yang dikemas kini
Pengesahan Tindanan CDK AWS
Contoh Timbunan CDK AWS
Pengesahan terbina dalam
Kesimpulan
Rumah pembangunan bahagian belakang Tutorial Python Pengesahan CDK AWS dalam Python

Pengesahan CDK AWS dalam Python

Jan 20, 2025 pm 04:25 PM

AWS CDK Validation in Python

Kitaran hayat aplikasi CDK AWS termasuk langkah pengesahan, yang diterangkan dalam bab sintesis aplikasi CDK dalam dokumentasi rasmi:

Semua konstruk yang melaksanakan kaedah pengesahan boleh disahkan sendiri untuk memastikan ia berada dalam keadaan untuk penggunaan yang betul. Sebarang kegagalan pengesahan yang berlaku pada peringkat ini akan dimaklumkan kepada anda. Secara umum, kami mengesyorkan agar anda melakukan pengesahan secepat mungkin (biasanya sebaik sahaja beberapa input diperoleh) dan membuang pengecualian secepat mungkin. Melakukan pengesahan awal meningkatkan kebolehpercayaan kerana surih tindanan akan menjadi lebih tepat dan memastikan kod anda boleh meneruskan pelaksanaan dengan selamat.

Walaupun terdapat beberapa artikel hebat tentang cara mengendalikan pengesahan AWS CDK dalam TypeScript (dipautkan di bawah), saya tidak menemui contoh Python yang sepadan. Selepas mencipta beberapa pengesahan dalam Python, contoh berikut melengkapkan contoh dalam artikel ini.

  • Semakan pengesahan dalam binaan AWS CDK
  • Gunakan AWS CDK untuk pengesahan (addValidation)

Contoh berikut telah dibangunkan menggunakan AWS CDK v2.176.0 dan Python 3.13.1.

Contoh pengesahan

Pelaksanaan pengesahan dilakukan menggunakan kaedah pengesahan yang mengembalikan senarai mesej ralat. Jika senarai kosong, tiada ralat berbilang entri sepadan dengan semakan pengesahan berbeza yang mana pengesahan ini gagal. Logik pengesahan dirangkumkan dalam kelas beranotasi dengan @jsii.implements(IValidation), menunjukkan bahawa ia adalah jenis yang betul untuk pengesahan. Dalam contoh ini, terdapat semakan bahawa baldi Amazon S3 diluluskan untuk mengesahkan menggunakan kunci AWS KMS tersuai, yang memberikan lebih kawalan ke atas proses penyulitan berbanding dengan penyulitan lalai yang digunakan oleh 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
Salin selepas log masuk
Salin selepas log masuk

Contoh Pembinaan CDK AWS

Ini ialah contoh asas binaan AWS CDK yang menambahkan pengesahan tunggal menggunakan kaedah add_validation nod pembina dalam pokok skop. Terdapat pepijat semasa pelaksanaan di mana kunci AWS KMS tersuai telah dibuat tetapi tidak dihantar ke parameter encryption_key bagi binaan baldi Amazon S3.

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))
Salin selepas log masuk
Salin selepas log masuk

Ralat jenis ini mudah diabaikan, di mana pengesahan berlaku. Menjalankan komposisi atau penggunaan CDK menggunakan contoh ini akan mengakibatkan ralat berikut:

<code>RuntimeError: Error: 验证失败,错误如下:
  [KodlotS3Stack/KodlotBucket1] 存储桶必须使用自定义KMS密钥加密</code>
Salin selepas log masuk
Salin selepas log masuk

Berbilang pengesahan

Ada kemungkinan untuk mempunyai beberapa pengesah yang menguji aspek konfigurasi kami yang berbeza, dan mereka boleh digunakan semula untuk binaan yang berbeza jika kami menemui corak biasa seperti ini. Dalam contoh ini, semakan pengesahan ditambahkan untuk memastikan baldi Amazon S3 tidak dikonfigurasikan secara tidak sengaja untuk pengehosan tapak web statik, yang mana ini akan menjadi ralat.

@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
Salin selepas log masuk
Salin selepas log masuk

Contoh pembinaan AWS CDK yang dikemas kini

Untuk menggunakan pengesah tambahan untuk menyemak sama ada pengehosan tapak web dikonfigurasikan untuk baldi Amazon S3, kemas kini contoh binaan CDK seperti yang ditunjukkan di bawah. Kali ini, ralat asal untuk tidak menghantar kunci AWS KMS tersuai dikekalkan. Kini, sebagai tambahan, website_index_document tersilap dihantar ke binaan baldi Amazon S3, menunjukkan bahawa ia akan digunakan untuk pengehosan tapak web statik.

@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
Salin selepas log masuk
Salin selepas log masuk

Kali ini, kami mempunyai dua isu berbeza dengan baldi Amazon S3 kami, yang kedua-duanya dilaporkan oleh mekanisme pengesahan seperti yang ditunjukkan di bawah. Menjalankan komposisi atau penggunaan CDK menggunakan contoh ini akan mengakibatkan ralat berikut:

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))
Salin selepas log masuk
Salin selepas log masuk

Ini sangat berkuasa kerana kami boleh mengumpul isu konfigurasi yang berbeza dalam infrastruktur awan dan menyelesaikannya tanpa perlu menjalankan semula dan membetulkannya berulang kali.

Pengesahan Tindanan CDK AWS

Perlu diingat bahawa pengesahan tidak terhad kepada binaan AWS CDK dan boleh ditambah pada tahap tindanan AWS CDK juga. Di sini kita boleh sebagai contoh menyemak sama ada timbunan yang diberikan tidak mengandungi sumber yang tidak diingini. Jika keperluan kami ialah tindanan tidak boleh mengandungi sebarang sumber AWS Lambda, maka kami boleh mensimulasikan keperluan tersebut menggunakan pengesahan yang diterangkan di bawah. Menggunakan anak binaan nod, anda boleh menggunakan fungsi isinstance terbina dalam Python untuk menyemak sama ada sebarang sumber ialah tika fungsi AWS CDK.

<code>RuntimeError: Error: 验证失败,错误如下:
  [KodlotS3Stack/KodlotBucket1] 存储桶必须使用自定义KMS密钥加密</code>
Salin selepas log masuk
Salin selepas log masuk

Contoh Timbunan CDK AWS

Untuk menambah pengesahan pada tindanan kami menggunakan kaedah add_validation yang sama seperti pembina. Memandangkan KodlotS3Stack dikenal pasti sebagai tindanan yang tidak boleh mengandungi sebarang fungsi AWS Lambda, ia adalah tempat yang baik untuk menguji pengesahan tindanan contoh. Jika ralat berlaku semasa pembangunan, seperti yang diterangkan di bawah, di mana pembangun mentakrifkan sumber fungsi AWS Lambda, pengesahan akan berkuat kuasa.

@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
Salin selepas log masuk
Salin selepas log masuk

Menjalankan komposisi CDK atau penggunaan contoh ini akan mengakibatkan ralat berikut:

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))
Salin selepas log masuk

Pengesahan terbina dalam

Anda juga patut menyemak sama ada AWS CDK sudah menyediakan semakan untuk aspek tertentu infrastruktur awan kami. Dalam konteks Amazon S3, ternyata jika kami mengkonfigurasi nama baldi kepada k1, menghasilkan panjang nama yang tidak sah, kami mendapat ralat terbina dalam berikut:

<code>RuntimeError: Error: 验证失败,错误如下:
  [KodlotS3Stack/KodlotBucket1] 存储桶必须使用自定义KMS密钥加密
  [KodlotS3Stack/KodlotBucket1] 存储桶不能用于静态网站托管</code>
Salin selepas log masuk

Begitu juga, jika kami mengkonfigurasi nama baldi sebagai k_1, menghasilkan aksara garis bawah yang tidak sah di dalamnya, ralat terbina dalam berikut akan berlaku:

@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
Salin selepas log masuk

Kesimpulan

Pengesahan CDK AWS ialah mekanisme berguna yang boleh digunakan oleh pembangun bersama-sama dengan ujian unit dan penyepaduan untuk memastikan kualiti keseluruhan infrastruktur pengkomputeran awan. Dapat menangkap salah konfigurasi biasa dan mentakrifkan piawaian akan membawa kepada pengesahan boleh guna semula yang boleh dikongsi antara komponen yang berbeza. Pengesahan boleh ditambah pada tahap berbeza yang ditakrifkan oleh AWS CDK, termasuk binaan AWS CDK dan tindanan AWS CDK. Adalah baik untuk melihat bahawa AWS CDK telah menangkap beberapa pengesahan biasa, kerana ia adalah asas kepada pelbagai perkhidmatan dan sumber awan dan harus sentiasa diperiksa, mengurangkan kemungkinan menghadapi ralat penggunaan dalam persekitaran pengeluaran.

Blok kod dikekalkan dan imej dirujuk dengan betul Struktur dan makna keseluruhan tetap sama, manakala perkataan diubah untuk aliran yang lebih semula jadi dan untuk mengelakkan pengulangan langsung.

Atas ialah kandungan terperinci Pengesahan CDK AWS dalam Python. Untuk maklumat lanjut, sila ikut artikel berkaitan lain di laman web China PHP!

Kenyataan Laman Web ini
Kandungan artikel ini disumbangkan secara sukarela oleh netizen, dan hak cipta adalah milik pengarang asal. Laman web ini tidak memikul tanggungjawab undang-undang yang sepadan. Jika anda menemui sebarang kandungan yang disyaki plagiarisme atau pelanggaran, sila hubungi admin@php.cn

Alat AI Hot

Undresser.AI Undress

Undresser.AI Undress

Apl berkuasa AI untuk mencipta foto bogel yang realistik

AI Clothes Remover

AI Clothes Remover

Alat AI dalam talian untuk mengeluarkan pakaian daripada foto.

Undress AI Tool

Undress AI Tool

Gambar buka pakaian secara percuma

Clothoff.io

Clothoff.io

Penyingkiran pakaian AI

Video Face Swap

Video Face Swap

Tukar muka dalam mana-mana video dengan mudah menggunakan alat tukar muka AI percuma kami!

Artikel Panas

<🎜>: Bubble Gum Simulator Infinity - Cara Mendapatkan dan Menggunakan Kekunci Diraja
3 minggu yang lalu By 尊渡假赌尊渡假赌尊渡假赌
Nordhold: Sistem Fusion, dijelaskan
3 minggu yang lalu By 尊渡假赌尊渡假赌尊渡假赌
Mandragora: Whispers of the Witch Tree - Cara Membuka Kunci Cangkuk Bergelut
3 minggu yang lalu By 尊渡假赌尊渡假赌尊渡假赌

Alat panas

Notepad++7.3.1

Notepad++7.3.1

Editor kod yang mudah digunakan dan percuma

SublimeText3 versi Cina

SublimeText3 versi Cina

Versi Cina, sangat mudah digunakan

Hantar Studio 13.0.1

Hantar Studio 13.0.1

Persekitaran pembangunan bersepadu PHP yang berkuasa

Dreamweaver CS6

Dreamweaver CS6

Alat pembangunan web visual

SublimeText3 versi Mac

SublimeText3 versi Mac

Perisian penyuntingan kod peringkat Tuhan (SublimeText3)

Topik panas

Tutorial Java
1666
14
Tutorial PHP
1273
29
Tutorial C#
1254
24
Python: Permainan, GUI, dan banyak lagi Python: Permainan, GUI, dan banyak lagi Apr 13, 2025 am 12:14 AM

Python cemerlang dalam permainan dan pembangunan GUI. 1) Pembangunan permainan menggunakan pygame, menyediakan lukisan, audio dan fungsi lain, yang sesuai untuk membuat permainan 2D. 2) Pembangunan GUI boleh memilih tkinter atau pyqt. TKInter adalah mudah dan mudah digunakan, PYQT mempunyai fungsi yang kaya dan sesuai untuk pembangunan profesional.

Python vs C: Lengkung pembelajaran dan kemudahan penggunaan Python vs C: Lengkung pembelajaran dan kemudahan penggunaan Apr 19, 2025 am 12:20 AM

Python lebih mudah dipelajari dan digunakan, manakala C lebih kuat tetapi kompleks. 1. Sintaks Python adalah ringkas dan sesuai untuk pemula. Penaipan dinamik dan pengurusan memori automatik menjadikannya mudah digunakan, tetapi boleh menyebabkan kesilapan runtime. 2.C menyediakan kawalan peringkat rendah dan ciri-ciri canggih, sesuai untuk aplikasi berprestasi tinggi, tetapi mempunyai ambang pembelajaran yang tinggi dan memerlukan memori manual dan pengurusan keselamatan jenis.

Python dan Masa: Memanfaatkan masa belajar anda Python dan Masa: Memanfaatkan masa belajar anda Apr 14, 2025 am 12:02 AM

Untuk memaksimumkan kecekapan pembelajaran Python dalam masa yang terhad, anda boleh menggunakan modul, masa, dan modul Python. 1. Modul DateTime digunakan untuk merakam dan merancang masa pembelajaran. 2. Modul Masa membantu menetapkan kajian dan masa rehat. 3. Modul Jadual secara automatik mengatur tugas pembelajaran mingguan.

Python vs C: Meneroka Prestasi dan Kecekapan Python vs C: Meneroka Prestasi dan Kecekapan Apr 18, 2025 am 12:20 AM

Python lebih baik daripada C dalam kecekapan pembangunan, tetapi C lebih tinggi dalam prestasi pelaksanaan. 1. Sintaks ringkas Python dan perpustakaan yang kaya meningkatkan kecekapan pembangunan. 2. Ciri-ciri jenis kompilasi dan kawalan perkakasan meningkatkan prestasi pelaksanaan. Apabila membuat pilihan, anda perlu menimbang kelajuan pembangunan dan kecekapan pelaksanaan berdasarkan keperluan projek.

Yang merupakan sebahagian daripada Perpustakaan Standard Python: Senarai atau Array? Yang merupakan sebahagian daripada Perpustakaan Standard Python: Senarai atau Array? Apr 27, 2025 am 12:03 AM

Pythonlistsarepartofthestandardlibrary, sementara

Python: Automasi, skrip, dan pengurusan tugas Python: Automasi, skrip, dan pengurusan tugas Apr 16, 2025 am 12:14 AM

Python cemerlang dalam automasi, skrip, dan pengurusan tugas. 1) Automasi: Sandaran fail direalisasikan melalui perpustakaan standard seperti OS dan Shutil. 2) Penulisan Skrip: Gunakan Perpustakaan Psutil untuk memantau sumber sistem. 3) Pengurusan Tugas: Gunakan perpustakaan jadual untuk menjadualkan tugas. Kemudahan penggunaan Python dan sokongan perpustakaan yang kaya menjadikannya alat pilihan di kawasan ini.

Pembelajaran Python: Adakah 2 jam kajian harian mencukupi? Pembelajaran Python: Adakah 2 jam kajian harian mencukupi? Apr 18, 2025 am 12:22 AM

Adakah cukup untuk belajar Python selama dua jam sehari? Ia bergantung pada matlamat dan kaedah pembelajaran anda. 1) Membangunkan pelan pembelajaran yang jelas, 2) Pilih sumber dan kaedah pembelajaran yang sesuai, 3) mengamalkan dan mengkaji semula dan menyatukan amalan tangan dan mengkaji semula dan menyatukan, dan anda secara beransur-ansur boleh menguasai pengetahuan asas dan fungsi lanjutan Python dalam tempoh ini.

Python vs C: Memahami perbezaan utama Python vs C: Memahami perbezaan utama Apr 21, 2025 am 12:18 AM

Python dan C masing -masing mempunyai kelebihan sendiri, dan pilihannya harus berdasarkan keperluan projek. 1) Python sesuai untuk pembangunan pesat dan pemprosesan data kerana sintaks ringkas dan menaip dinamik. 2) C sesuai untuk prestasi tinggi dan pengaturcaraan sistem kerana menaip statik dan pengurusan memori manual.

See all articles