рдореБрдЦреНрдп рд╕рд╛рдордЧреНрд░реА рдкрд░ рдЬрд╛рдПрдБ

рдЕрдкрдирд╛ рдкрд╣рд▓рд╛ AWS CDK рд╕реНрдЯреИрдХ рдмрдирд╛рдПрдВ: рд╢реБрд░реБрдЖрддреА-рдЕрдиреБрдХреВрд▓ рдЯреНрдпреВрдЯреЛрд░рд┐рдпрд▓

Python рдХрд╛ рдЙрдкрдпреЛрдЧ рдХрд░рдХреЗ рдЕрдкрдирд╛ рдкрд╣рд▓рд╛ AWS CDK рд╕реНрдЯреИрдХ рдмрдирд╛рдирд╛ рдФрд░ рдкрд░рд┐рдирд┐рдпреЛрдЬрд┐рдд рдХрд░рдирд╛ рд╕реАрдЦреЗрдВред рдпрд╣ рд╢реБрд░реБрдЖрддреА-рдЕрдиреБрдХреВрд▓ рдорд╛рд░реНрдЧрджрд░реНрд╢рд┐рдХрд╛ рд╕реЗрдЯрдЕрдк, рдХрдВрд╕реНрдЯреНрд░рдХреНрдЯреНрд╕, рдбрд┐рдкреНрд▓реЙрдпрдореЗрдВрдЯ, рдкрд░реАрдХреНрд╖рдг, рдФрд░ CI/CD рдХреЛ рдХрд╡рд░ рдХрд░рддреА рд╣реИред
┬╖ 15 рдорд┐ре░ рдкрдврд╝реЗрдВ

AI рдХреЗ рд╕рд╛рде рдЦреЛрдЬреЗрдВ

рдХрдЪреНрдЪреЗ JSON рдпрд╛ YAML рдЯреЗрдореНрдкрд▓реЗрдЯреНрд╕ рдХреЗ рд╕рд╛рде рдХреНрд▓рд╛рдЙрдб рдЗрдиреНрдлреНрд░рд╛рд╕реНрдЯреНрд░рдХреНрдЪрд░ рдХреЛ рдореИрдиреЗрдЬ рдХрд░рдирд╛ рдердХрд╛рдК рдФрд░ рддреНрд░реБрдЯрд┐-рдкреНрд░рдзрд╛рди рд╣реЛ рд╕рдХрддрд╛ рд╣реИред AWS Cloud Development Kit (CDK) рдЗрд╕реЗ рдмрджрд▓ рджреЗрддрд╛ рд╣реИ, рдХреНрдпреЛрдВрдХрд┐ рдпрд╣ рдЖрдкрдХреЛ Python, TypeScript, Java рдФрд░ C# рдЬреИрд╕реА рдЖрдзреБрдирд┐рдХ рдкреНрд░реЛрдЧреНрд░рд╛рдорд┐рдВрдЧ рднрд╛рд╖рд╛рдУрдВ рдХрд╛ рдЙрдкрдпреЛрдЧ рдХрд░рдХреЗ рдХреНрд▓рд╛рдЙрдб рд╕рдВрд╕рд╛рдзрди рдкрд░рд┐рднрд╛рд╖рд┐рдд рдХрд░рдиреЗ рджреЗрддрд╛ рд╣реИред

CDK рдХреЗ рд╕рд╛рде, рдЗрдиреНрдлреНрд░рд╛рд╕реНрдЯреНрд░рдХреНрдЪрд░ рдХреЛрдб рдХреЗ рд░реВрдк рдореЗрдВ рдкреБрди: рдкреНрд░рдпреЛрдЬреНрдп, рдкрд░реАрдХреНрд╖рдг рдпреЛрдЧреНрдп рдФрд░ рд╡рд░реНрд╢рди-рдХрдВрдЯреНрд░реЛрд▓реНрдб рд╣реЛ рдЬрд╛рддрд╛ рд╣реИред рдпрд╣ рдЖрдкрдХреЛ рдЬрдЯрд┐рд▓ рдХреНрд▓рд╛рдЙрдб рд╕рд┐рд╕реНрдЯрдо рдкреНрд░реЛрд╡рд┐рдЬрди рдХрд░рддреЗ рд╕рдордп рднреА рдбреЗрд╡рд▓рдкрд░ рдЬреИрд╕реА рд╕реЛрдЪ рд░рдЦрдиреЗ рдореЗрдВ рд╕рдХреНрд╖рдо рдмрдирд╛рддрд╛ рд╣реИред

рдЗрд╕ рдЯреНрдпреВрдЯреЛрд░рд┐рдпрд▓ рдореЗрдВ, рдЖрдк Python рдХрд╛ рдЙрдкрдпреЛрдЧ рдХрд░рдХреЗ рдПрдХ AWS CDK рдкреНрд░реЛрдЬреЗрдХреНрдЯ рд╕реЗрдЯ рдЕрдк рдХрд░рдирд╛ рд╕реАрдЦреЗрдВрдЧреЗред рд╣рдо рдЕрдкрдирд╛ рдкрд╣рд▓рд╛ рд╕реНрдЯреИрдХ рд▓рд┐рдЦрдиреЗ, рдПрдХ рдЖрд╡рд╢реНрдпрдХ AWS рд╕рдВрд╕рд╛рдзрди рдЬреЛрдбрд╝рдиреЗ, рдФрд░ рдЙрд╕реЗ рдЖрдкрдХреЗ AWS рдЦрд╛рддреЗ рдореЗрдВ рдкрд░рд┐рдирд┐рдпреЛрдЬрд┐рдд рдХрд░рдиреЗ рдХреА рдкреНрд░рдХреНрд░рд┐рдпрд╛ рд╕реЗ рдЧреБрдЬрд░реЗрдВрдЧреЗред рдЕрдВрдд рддрдХ, рдЖрдкрдХреЛ рд╕реНрдкрд╖реНрдЯ рд╕рдордЭ рд╣реЛрдЧреА рдХрд┐ CDK рдХреИрд╕реЗ рдХрд╛рдо рдХрд░рддрд╛ рд╣реИ рдФрд░ рдХреЛрдб рдХреЗ рд╕рд╛рде рдбреЗрд╡рд▓рдкрд░-рдлреНрд░реЗрдВрдбрд▓реА рддрд░реАрдХреЗ рд╕реЗ рдЗрдиреНрдлреНрд░рд╛рд╕реНрдЯреНрд░рдХреНрдЪрд░ рдХреИрд╕реЗ рдореИрдиреЗрдЬ рдХрд┐рдпрд╛ рдЬрд╛рдПред

AWS CDK рдЬреИрд╕реЗ рдЯреВрд▓реНрд╕ рдХреЗ рдкреАрдЫреЗ рдХреА рдкреНрд░рдерд╛рдУрдВ рдХреЛ рдмреЗрд╣рддрд░ рд╕рдордЭрдиреЗ рдХреЗ рд▓рд┐рдП, рд╣рдорд╛рд░реЗ DevOps Concepts рдХреЛрд░реНрд╕ рдХреЛ рджреЗрдЦреЗрдВред

рдкреВрд░реНрд╡рд╛рдкреЗрдХреНрд╖рд╛рдПрдБ

AWS CDK рдХреЗ рд╕рд╛рде рдХреЛрдб рд▓рд┐рдЦрдиреЗ рд╕реЗ рдкрд╣рд▓реЗ, рд╕реБрдирд┐рд╢реНрдЪрд┐рдд рдХрд░реЗрдВ рдХрд┐ рдЖрдкрдХрд╛ рд╡рд╛рддрд╛рд╡рд░рдг рд╕рд╣реА рдврдВрдЧ рд╕реЗ рд╕реЗрдЯ рд╣реИред рдЖрдкрдХреЛ рдпрд╣ рдЪрд╛рд╣рд┐рдП рд╣реЛрдЧрд╛:

рдкреНрд░рдпреЛрдЧ рдХреЗ рд▓рд┐рдП AWS рдЦрд╛рддрд╛

рдЬрд┐рд╕ рдПрдкреНрд▓рд┐рдХреЗрд╢рди рдХреЛ рд╣рдо рдмрдирд╛рдПрдВрдЧреЗ рдЙрд╕реЗ рдкрд░рд┐рдирд┐рдпреЛрдЬрд┐рдд рдХрд░рдиреЗ рдХреЗ рд▓рд┐рдП рдЖрдкрдХреЛ AWS рдЦрд╛рддреЗ рдХреА рдЖрд╡рд╢реНрдпрдХрддрд╛ рд╣реЛрдЧреАред рдпрджрд┐ рдЖрдкрдХреЗ рд╕рд┐рд╕реНрдЯрдо рдореЗрдВ рдкрд╣рд▓реЗ рд╕реЗ рдХрд┐рд╕реА рдПрдбрдорд┐рдирд┐рд╕реНрдЯреНрд░реЗрдЯрд░-рд▓реЗрд╡рд▓ рдпреВрдЬрд╝рд░ рдХреЗ рдХреНрд░реЗрдбреЗрдВрд╢рд┐рдпрд▓реНрд╕ рдХреЙрдиреНрдлрд╝рд┐рдЧрд░ рд╣реИрдВ, рддреЛ рдЖрдк рдЖрдЧреЗ рдмрдврд╝ рд╕рдХрддреЗ рд╣реИрдВред

рдпрджрд┐ рдЖрдкрдХрд╛ AWS рдЕрдХрд╛рдЙрдВрдЯ рдЕрднреА рдирд╣реАрдВ рд╣реИ, рддреЛ рдпрд╣рд╛рдБ рдмрдирд╛рдПрдВред

AWS рдХреА рдореВрд▓ рдмрд╛рддреЛрдВ рдХреЛ рдХрд╡рд░ рдХрд░рдиреЗ рд╡рд╛рд▓реЗ рдПрдХ рд╕рдВрд░рдЪрд┐рдд рд▓рд░реНрдирд┐рдВрдЧ рдкрд╛рде рдХреЗ рд▓рд┐рдП, AWS Cloud Practitioner рдЯреНрд░реИрдХ рдПрдХ рдЙрддреНрдХреГрд╖реНрдЯ рд╢реБрд░реБрдЖрдд рд╣реИред

рдПрдбрдорд┐рдирд┐рд╕реНрдЯреНрд░реЗрдЯрд░ рдпреВрдЬрд╝рд░

рдЖрдЧреЗ рдмрдврд╝рдиреЗ рдХреЗ рд▓рд┐рдП рдЖрдкрдХреЛ рдкреНрд░реЛрдЧреНрд░рд╛рдореЗрдЯрд┐рдХ рдПрдХреНрд╕реЗрд╕ рдФрд░ рдкреВрд░реНрдг рдкрд░рдорд┐рд╢рди рд╡рд╛рд▓рд╛ рдпреВрдЬрд╝рд░ рдЪрд╛рд╣рд┐рдПред

  1. рдЕрдкрдиреЗ AWS рдЦрд╛рддреЗ рдореЗрдВ рд╕рд╛рдЗрди рдЗрди рдХрд░реЗрдВред
  2. рдЦреЛрд▓реЗрдВ e IAM рдХрдВрд╕реЛрд▓ред
  3. рдПрдХ рдирдпрд╛ рдпреВрдЬрд╝рд░ рдмрдирд╛рдПрдВ тАФ рдЖрдк рдЗрд╕реЗ тАЬdatacamp-cdkтАЭ рдЬреИрд╕рд╛ рдирд╛рдо рджреЗ рд╕рдХрддреЗ рд╣реИрдВ
  4. рдЪреБрдиреЗрдВ Programmatic accessред
  5. рдХреНрд▓рд┐рдХ рдХрд░реЗрдВ Next: Permissionsред
  6. рдЪреБрдиреЗрдВ Attach existing policies directly рдФрд░ AdministratorAccess рдХреЛ рдЪреБрдиреЗрдВред
  7. рдЖрдЧреЗ рдмрдврд╝реЗрдВ Next: Tags, Next: Review рдФрд░ рдлрд┐рд░ Create User рдкрд░ рдХреНрд▓рд┐рдХ рдХрд░реЗрдВред

рдЕрдВрддрд┐рдо рд╕реНрдХреНрд░реАрди рдкрд░, рдЕрдкрдиреЗ Access key ID рдФрд░ Secret access key рдиреЛрдЯ рдХрд░ рд▓реЗрдВред рдЖрдкрдХреЛ рдЗрдирдХреА рдЬрд╝рд░реВрд░рдд рдЕрдЧрд▓реЗ рдЪрд░рдг рдореЗрдВ рдкрдбрд╝реЗрдЧреАред

рдЕрдкрдиреЗ AWS рдХреНрд░реЗрдбреЗрдВрд╢рд┐рдпрд▓реНрд╕ рдХреЙрдиреНрдлрд╝рд┐рдЧрд░ рдХрд░реЗрдВ

рдПрдХ рдЯрд░реНрдорд┐рдирд▓ рдЦреЛрд▓реЗрдВ рдФрд░ рдЪрд▓рд╛рдПрдБ:

aws configure

рдЖрдкрд╕реЗ IAM рдХрдВрд╕реЛрд▓ рд╕реЗ рдорд┐рд▓реЗ рдХреНрд░реЗрдбреЗрдВрд╢рд┐рдпрд▓ рджрд░реНрдЬ рдХрд░рдиреЗ рдХреЗ рд▓рд┐рдП рдХрд╣рд╛ рдЬрд╛рдПрдЧрд╛:

AWS Access Key ID [None]: <your access key ID>
AWS Secret Access Key [None]: <your secret access key>
Default region name [None]: us-east-1
Default output format [None]: 

рдбреЗрд╡рд▓рдкрдореЗрдВрдЯ рдХреЗ рд▓рд┐рдП IDE рдЪреБрдиреЗрдВ

AWS CDK рдбреЗрд╡рд▓рдкрд░реНрд╕ рдХреЛ YAML рдпрд╛ JSON рдЯреЗрдореНрдкрд▓реЗрдЯреНрд╕ рдХреЗ рдмрдЬрд╛рдп рдПрдХ рд╕рдВрдкреВрд░реНрдг рдкреНрд░реЛрдЧреНрд░рд╛рдорд┐рдВрдЧ рд╡рд╛рддрд╛рд╡рд░рдг рдореЗрдВ рдХрд╛рдо рдХрд░рдиреЗ рджреЗрддрд╛ рд╣реИред рдпрд╣ рдлреБрд▓-рдлреАрдЪрд░ рд╡рд╛рддрд╛рд╡рд░рдг рдЖрдкрдХреЛ рдЕрдкрдиреА рдкрд╕рдВрдж рдХрд╛ IDE рдЗрд╕реНрддреЗрдорд╛рд▓ рдХрд░рдиреЗ рдХреЗ рд╕рд╛рде-рд╕рд╛рде рдХреЛрдб рдХрдореНрдкреНрд▓реАрд╢рди, рд░реАрдпрд▓-рдЯрд╛рдЗрдо рд▓рд┐рдВрдЯрд┐рдВрдЧ рдФрд░ рд░рд┐рдлреИрдХреНрдЯрд░рд┐рдВрдЧ рдЯреВрд▓реНрд╕ рдХрд╛ рд▓рд╛рдн рджреЗрддрд╛ рд╣реИ, рдЬрд┐рд╕рд╕реЗ рдЗрдиреНрдлреНрд░рд╛рд╕реНрдЯреНрд░рдХреНрдЪрд░ рдХреЛрдб рдореИрдиреЗрдЬрдореЗрдВрдЯ рдХреБрд╢рд▓ рдмрдирддрд╛ рд╣реИред

Python CDK рдХреЗ рд╕рд╛рде рдмреЗрд╣рддрд░реАрди рдбреЗрд╡рд▓рдкрдореЗрдВрдЯ рдЕрдиреБрднрд╡ рдХреЗ рд▓рд┐рдП, рдРрд╕рд╛ IDE рдЪреБрдиреЗрдВ рдЬреЛ рдирд┐рдореНрдирд▓рд┐рдЦрд┐рдд рд╕рдкреЛрд░реНрдЯ рдХрд░рддрд╛ рд╣реЛ:

  • рд╕рд┐рдВрдЯреИрдХреНрд╕ рд╣рд╛рдЗрд▓рд╛рдЗрдЯрд┐рдВрдЧ
  • рдХреЛрдб рдХрдореНрдкреНрд▓реАрд╢рди
  • рдмреБрджреНрдзрд┐рдорд╛рди рдиреЗрд╡рд┐рдЧреЗрд╢рди рдФрд░ рд╕реБрдЭрд╛рд╡
  • рд╡рд░реНрдЪреБрдЕрд▓ рдПрдирд╡рд╛рдпрд░рдирдореЗрдВрдЯ рд╕рдкреЛрд░реНрдЯ

Python рдФрд░ pip рдЗрдВрд╕реНрдЯреЙрд▓ рдХрд░реЗрдВ

AWS CDK рдХреЛ Python рдХреЗ рд╕рд╛рде рдЙрдкрдпреЛрдЧ рдХрд░рдиреЗ рдХреЗ рд▓рд┐рдП, рдЖрдкрдХреЗ рд╕рд┐рд╕реНрдЯрдо рдореЗрдВ Python рд╕рдВрд╕реНрдХрд░рдг 3.8 рдпрд╛ рдЙрд╕рд╕реЗ рдКрдкрд░ рдЗрдВрд╕реНрдЯреЙрд▓ рд╣реЛрдирд╛ рдЪрд╛рд╣рд┐рдПред рдпрджрд┐ рдЕрднреА рддрдХ рдирд╣реАрдВ рд╣реИ, рддреЛ рдирд╡реАрдирддрдо рд╕рдВрд╕реНрдХрд░рдг рдЖрдзрд┐рдХрд╛рд░рд┐рдХ Python рд╡реЗрдмрд╕рд╛рдЗрдЯ рд╕реЗ рдбрд╛рдЙрдирд▓реЛрдб рдХрд░реЗрдВред

рдпрджрд┐ рдЖрдк Windows рдкрд░ рд╣реИрдВ, рддреЛ рд╕реБрдирд┐рд╢реНрдЪрд┐рдд рдХрд░реЗрдВ рдХрд┐ Python рдЖрдкрдХреЗ рд╕рд┐рд╕реНрдЯрдо рдХреЗ PATH рдПрдирд╡рд╛рдпрд░рдирдореЗрдВрдЯ рд╡реЗрд░рд┐рдПрдмрд▓ рдореЗрдВ рдЬреЛрдбрд╝рд╛ рдЧрдпрд╛ рд╣реИред рдЬрд╛рдВрдЪрдиреЗ рдХреЗ рд▓рд┐рдП, рдЯрд░реНрдорд┐рдирд▓ рдпрд╛ рдХрдорд╛рдВрдб рдкреНрд░реЙрдореНрдкреНрдЯ рдЦреЛрд▓реЗрдВ рдФрд░ рдЪрд▓рд╛рдПрдБ:

python --version

рдпрджрд┐ тАЬcommand not foundтАЭ рдпрд╛ рдЗрд╕реА рддрд░рд╣ рдХреА рддреНрд░реБрдЯрд┐ рджрд┐рдЦреЗ, рддреЛ рд╕рдВрднрд╡рддрдГ Python рдЖрдкрдХреЗ PATH рдореЗрдВ рдирд╣реАрдВ рд╣реИред рд╕рдмрд╕реЗ рдЖрд╕рд╛рди рдЙрдкрд╛рдп рдЗрдВрд╕реНрдЯреЙрд▓реЗрд╢рди рдХреЗ рджреМрд░рд╛рди тАЬAdd Python 3.x to PATHтАЭ рдмреЙрдХреНрд╕ рдХреЛ рдЪреБрдирдирд╛ рд╣реИред

рдЖрдкрдХреЛ pip рдХреА рднреА рдЖрд╡рд╢реНрдпрдХрддрд╛ рд╣реЛрдЧреА, рдЬреЛ рдХрд┐ Python рдкреИрдХреЗрдЬ рдЗрдВрд╕реНрдЯреЙрд▓рд░ рд╣реИ, рддрд╛рдХрд┐ рдЖрдЧреЗ рдЪрд▓рдХрд░ AWS CDK рдбрд┐рдкреЗрдВрдбреЗрдВрд╕реАрдЬрд╝ рдЗрдВрд╕реНрдЯреЙрд▓ рдХреА рдЬрд╛ рд╕рдХреЗрдВред рдЕрдзрд┐рдХрддрд░ рдЖрдзреБрдирд┐рдХ Python рдбрд┐рд╕реНрдЯреНрд░реАрдмреНрдпреВрд╢рдВрд╕ рдореЗрдВ pip рдкрд╣рд▓реЗ рд╕реЗ рдЖрддрд╛ рд╣реИред

pip --version

рдпрджрд┐ рдпрд╣ рдЗрдВрд╕реНрдЯреЙрд▓ рдирд╣реАрдВ рд╣реИ, рддреЛ рдЖрдзрд┐рдХрд╛рд░рд┐рдХ pip рдЗрдВрд╕реНрдЯреЙрд▓реЗрд╢рди рдЧрд╛рдЗрдб рдХрд╛ рдкрд╛рд▓рди рдХрд░реЗрдВред

AWS CDK рдХреЗ рд╕рд╛рде рд╢реБрд░реБрдЖрдд

рдХреЛрдИ рднреА рдХреЛрдб рд▓рд┐рдЦрдиреЗ рд╕реЗ рдкрд╣рд▓реЗ, рдпрд╣ рд╕рдордЭрдирд╛ рдЬрд╝рд░реВрд░реА рд╣реИ рдХрд┐ AWS CDK рдХреНрдпрд╛ рд╣реИ, рдпрд╣ рдХреНрдпреЛрдВ рдореМрдЬреВрдж рд╣реИ, рдФрд░ рдЗрдиреНрдлреНрд░рд╛рд╕реНрдЯреНрд░рдХреНрдЪрд░ рдРрдЬрд╝ рдХреЛрдб (IaC) рдХреА рд╡реНрдпрд╛рдкрдХ рджреБрдирд┐рдпрд╛ рдореЗрдВ рдпрд╣ рдХреИрд╕реЗ рдлрд┐рдЯ рдмреИрдарддрд╛ рд╣реИред рдЗрд╕ рд╕реЗрдХреНрд╢рди рдореЗрдВ рд╣рдо CDK рдХреЗ рдореБрдЦреНрдп рдХреЙрдиреНрд╕реЗрдкреНрдЯреНрд╕ рд╕реЗ рдкрд░рд┐рдЪрдп рдХрд░рд╛рдПрдВрдЧреЗ рдФрд░ рджрд┐рдЦрд╛рдПрдБрдЧреЗ рдХрд┐ рдпрд╣ рдЕрдиреНрдп рд▓реЛрдХрдкреНрд░рд┐рдп IaC рдЯреВрд▓реНрд╕ рдХреА рддреБрд▓рдирд╛ рдореЗрдВ рдХреИрд╕рд╛ рд╣реИред

AWS CDK рдХреНрдпрд╛ рд╣реИ рдФрд░ рдЗрд╕рдХрд╛ рдЙрдкрдпреЛрдЧ рдХреНрдпреЛрдВ рдХрд┐рдпрд╛ рдЬрд╛рддрд╛ рд╣реИ?

AWS Cloud Development Kit (CDK) рдПрдХ рдУрдкрди-рд╕реЛрд░реНрд╕ рдлреНрд░реЗрдорд╡рд░реНрдХ рд╣реИ рдЬреЛ рдЙрдкрдпреЛрдЧрдХрд░реНрддрд╛рдУрдВ рдХреЛ Python, TypeScript, Java рдФрд░ C# рд╕рд╣рд┐рдд рдкрд░рд┐рдЪрд┐рдд рдкреНрд░реЛрдЧреНрд░рд╛рдорд┐рдВрдЧ рднрд╛рд╖рд╛рдУрдВ рдХреЗ рдорд╛рдзреНрдпрдо рд╕реЗ рдХреНрд▓рд╛рдЙрдб рдЗрдиреНрдлреНрд░рд╛рд╕реНрдЯреНрд░рдХреНрдЪрд░ рдмрдирд╛рдиреЗ рдореЗрдВ рд╕рдХреНрд╖рдо рдмрдирд╛рддрд╛ рд╣реИред┬а

CDK рдЙрдкрдпреЛрдЧрдХрд░реНрддрд╛рдУрдВ рдХреЛ рдореИрдиреБрдЕрд▓ JSON рдпрд╛ YAML рдЯреЗрдореНрдкрд▓реЗрдЯ рд▓рд┐рдЦрдиреЗ рдХреЗ рдмрдЬрд╛рдп рд╡рд╛рд╕реНрддрд╡рд┐рдХ рдХреЛрдб рдХреЗ рдЬрд╝рд░рд┐рдП рдкреНрд░реЛрдЧреНрд░рд╛рдореЗрдЯрд┐рдХрд▓реА CloudFormation рдЯреЗрдореНрдкрд▓реЗрдЯ рдЬрдирд░реЗрдЯ рдХрд░рдиреЗ рджреЗрддрд╛ рд╣реИред

рдЗрд╕рдХрд╛ рдорддрд▓рдм рдЖрдк рдХрд░ рд╕рдХрддреЗ рд╣реИрдВ:

  • рд▓реВрдкреНрд╕ рдФрд░ рдлрд╝рдВрдХреНрд╢рдВрд╕ рдХреЗ рдорд╛рдзреНрдпрдо рд╕реЗ рд▓реЙрдЬрд┐рдХ рдХрд╛ рдкреБрди: рдЙрдкрдпреЛрдЧред
  • рдореЙрдбреНрдпреВрд▓реНрд╕ рдФрд░ рдХреНрд▓рд╛рд╕реЗрд╕ рдХрд╛ рдЙрдкрдпреЛрдЧ рдХрд░ рдЗрдиреНрдлреНрд░рд╛рд╕реНрдЯреНрд░рдХреНрдЪрд░ рдХрд╛ рд╕рдВрдЧрдардиред
  • рдЖрдкрдХрд╛ IDE рдХреЛрдб рдХрдореНрдкреНрд▓реАрд╢рди, рдПрд░рд░ рдЪреЗрдХрд┐рдВрдЧ рдФрд░ рд░рд┐рдлреИрдХреНрдЯрд░рд┐рдВрдЧ рдХреА рд╕реБрд╡рд┐рдзрд╛рдПрдБ рджреЗрддрд╛ рд╣реИред

рдореВрд▓ рд░реВрдк рд╕реЗ, CDK рддреАрди рдореБрдЦреНрдп рдЕрд╡рдзрд╛рд░рдгрд╛рдУрдВ рдХреЗ рдЗрд░реНрдж-рдЧрд┐рд░реНрдж рдХрд╛рд░реНрдп рдХрд░рддрд╛ рд╣реИ:

  • App тАУ рдЖрдкрдХреЗ CDK рдкреНрд░реЛрдЬреЗрдХреНрдЯ рдХрд╛ рдПрдВрдЯреНрд░реА рдкреЙрдЗрдВрдЯред рдЗрд╕рдореЗрдВ рдПрдХ рдпрд╛ рдПрдХ рд╕реЗ рдЕрдзрд┐рдХ рд╕реНрдЯреИрдХреНрд╕ рд╣реЛ рд╕рдХрддреЗ рд╣реИрдВред
  • Stack тАУ рдкрд░рд┐рдирд┐рдпреЛрдЬрди рдХреА рдЗрдХрд╛рдИ рдЬреЛ рдПрдХ CloudFormation рд╕реНрдЯреИрдХ рд╕реЗ рдореИрдк рд╣реЛрддреА рд╣реИред рдкреНрд░рддреНрдпреЗрдХ рд╕реНрдЯреИрдХ рдЙрди рд╕рдВрд╕рд╛рдзрдиреЛрдВ рдХрд╛ рд╕реЗрдЯ рдкрд░рд┐рднрд╛рд╖рд┐рдд рдХрд░рддрд╛ рд╣реИ рдЬрд┐рдиреНрд╣реЗрдВ рдмрдирд╛рдпрд╛ рдЬрд╛рдирд╛ рд╣реИред
  • Construct тАУ CDK рдХрд╛ рдмрд┐рд▓реНрдбрд┐рдВрдЧ рдмреНрд▓реЙрдХред рдХрдВрд╕реНрдЯреНрд░рдХреНрдЯреНрд╕ S3 рдмрдХреЗрдЯреНрд╕, Lambda рдлрд╝рдВрдХреНрд╢рдВрд╕, VPCs рдЬреИрд╕реА рдХреНрд▓рд╛рдЙрдб рдХрдВрдкреЛрдиреЗрдВрдЯреНрд╕ рдФрд░ рдХрдИ рд╕рдВрд╕рд╛рдзрдиреЛрдВ рдХреЛ рдорд┐рд▓рд╛рдХрд░ рдмрдиреЗ рдЬрдЯрд┐рд▓ рдкреИрдЯрд░реНрди рджрд░реНрд╢рд╛рддреЗ рд╣реИрдВред

AWS CDK рд╕рдВрд░рдЪрдирд╛ рдХрд╛ рдЖрд░реЗрдЦ: рдПрдХ App рдореЗрдВ рдПрдХ Stack (рдЬреИрд╕реЗ, MyStack) рд╣реЛрддрд╛ рд╣реИ, рдЬрд┐рд╕рдореЗрдВ рддреАрди рдХрдВрд╕реНрдЯреНрд░рдХреНрдЯреНрд╕тАФS3 Bucket, Lambda Function, рдФрд░ VPCтАФрдЯреЙрдк-рдбрд╛рдЙрди рд╣рд╛рдЗрд░рд╛рд░реНрдХреА рдореЗрдВ рдЬреБрдбрд╝реЗ рд╣реЛрддреЗ рд╣реИрдВред

AWS CDK рдРрдк рдХрд╛ рд╡рд┐рдЬрд╝реБрдЕрд▓ рд╣рд╛рдЗрд░рд╛рд░реНрдХреА

CDK рдмрдирд╛рдо Terraform рдмрдирд╛рдо CloudFormation

рдирд┐рдореНрди рддрд╛рд▓рд┐рдХрд╛ AWS рдореЗрдВ рдЙрдкрд▓рдмреНрдз рдЯреВрд▓реНрд╕ рдХреЗ рдмреАрдЪ рдХреЗ рдЕрдВрддрд░ рдХрд╛ рд╡рд░реНрдгрди рдХрд░рддреА рд╣реИ рдЬрд┐рдирдХрд╛ рдЙрдкрдпреЛрдЧ рдЗрдиреНрдлреНрд░рд╛рд╕реНрдЯреНрд░рдХреНрдЪрд░ рдореИрдиреЗрдЬ рдХрд░рдиреЗ рдХреЗ рд▓рд┐рдП рдХрд┐рдпрд╛ рдЬрд╛рддрд╛ рд╣реИред

рдлрд╝реАрдЪрд░

AWS CDK

Terraform

AWS CloudFormation

рднрд╛рд╖рд╛ рд╕рдкреЛрд░реНрдЯ

Python, TypeScript, Java, C#

HCL (рдбрд┐рдХреНрд▓реЗрд░реЗрдЯрд┐рд╡)

YAML / JSON

рдПрдмреНрд╕реНрдЯреНрд░реИрдХреНрд╢рди рд╕реНрддрд░

рдЙрдЪреНрдЪ (OOP + рд▓рд╛рдЗрдмреНрд░реЗрд░реАрдЬрд╝)

рдордзреНрдпрдо

рдирд┐рдореНрди

рдореЙрдбреНрдпреВрд▓реИрд░рд┐рдЯреА

рдордЬрдмреВрдд (рдХрдВрд╕реНрдЯреНрд░рдХреНрдЯреНрд╕, рдХреНрд▓рд╛рд╕реЗрд╕)

рдордЬрдмреВрдд (рдореЙрдбреНрдпреВрд▓реНрд╕)

рдХрдордЬрд╝реЛрд░ (рдиреЗрд╕реНрдЯреЗрдб рд╕реНрдЯреИрдХреНрд╕)

рд╕реНрдЯреЗрдЯ рдореИрдиреЗрдЬрдореЗрдВрдЯ

CloudFormation рджреНрд╡рд╛рд░рд╛ рд╣реИрдВрдбрд▓

Terraform рджреНрд╡рд╛рд░рд╛ рд╣реИрдВрдбрд▓ (tfstate)

CloudFormation рджреНрд╡рд╛рд░рд╛ рд╣реИрдВрдбрд▓

рдорд▓реНрдЯреА-рдХреНрд▓рд╛рдЙрдб

рдХреЗрд╡рд▓ AWS

рд╣рд╛рдБ

рдХреЗрд╡рд▓ AWS

рд╕рдорд░реНрдерд┐рдд рднрд╛рд╖рд╛рдПрдБ рдФрд░ рдкреВрд░реНрд╡рд╛рдкреЗрдХреНрд╖рд╛рдПрдБ

AWS CDK рдХрдИ рдкреНрд░реЛрдЧреНрд░рд╛рдорд┐рдВрдЧ рднрд╛рд╖рд╛рдУрдВ рдХреЛ рд╕рдкреЛрд░реНрдЯ рдХрд░рддрд╛ рд╣реИ, рдЬрд┐рд╕рд╕реЗ рдбреЗрд╡рд▓рдкрд░реНрд╕ рдЕрдкрдиреА рд╕реБрд╡рд┐рдзрд╛рдиреБрд╕рд╛рд░ рднрд╛рд╖рд╛ рдЪреБрди рд╕рдХрддреЗ рд╣реИрдВ:

  • TypeScript
  • Python
  • Java
  • C#/.NET
  • Go

рдЗрд╕ рдЯреНрдпреВрдЯреЛрд░рд┐рдпрд▓ рдореЗрдВ, рд╣рдо Python рдкрд░ рдлреЛрдХрд╕ рдХрд░реЗрдВрдЧреЗ, рд▓реЗрдХрд┐рди рдореБрдЦреНрдп рдХреЙрдиреНрд╕реЗрдкреНрдЯреНрд╕ рд╕рднреА рд╕рдорд░реНрдерд┐рдд рднрд╛рд╖рд╛рдУрдВ рдкрд░ рд╕рдорд╛рди рд░реВрдк рд╕реЗ рд▓рд╛рдЧреВ рд╣реЛрддреЗ рд╣реИрдВред

рдЗрдВрд╕реНрдЯреЙрд▓реЗрд╢рди рдФрд░ рд╕реЗрдЯрдЕрдк

рдЕрдм рдЬрдм рдЖрдкрдХрд╛ рд╡рд╛рддрд╛рд╡рд░рдг рддреИрдпрд╛рд░ рд╣реИ, рддреЛ Python рдХрд╛ рдЙрдкрдпреЛрдЧ рдХрд░рдХреЗ рдЕрдкрдирд╛ рдкрд╣рд▓рд╛ AWS CDK рдРрдк рд╕реНрдХреИрдлреЛрд▓реНрдб рдХрд░рдиреЗ рдХрд╛ рд╕рдордп рд╣реИред CDK рдХрд╛ init рдХрдорд╛рдВрдб рдкреВрд░реЗ рдкреНрд░реЛрдЬреЗрдХреНрдЯ рд╕реНрдЯреНрд░рдХреНрдЪрд░тАФрдлрд╛рдЗрд▓реНрд╕, рдбрд╛рдпрд░реЗрдХреНрдЯрд░реАрдЬрд╝ рдФрд░ рд╡рд░реНрдЪреБрдЕрд▓ рдПрдирд╡рд╛рдпрд░рдирдореЗрдВрдЯ рд╕рд╣рд┐рддтАФрд╕реЗрдЯ рдХрд░ рджреЗрддрд╛ рд╣реИ, рдЬрд┐рд╕рд╕реЗ рдЖрдк рдЬрд▓реНрджреА рд╢реБрд░реБрдЖрдд рдХрд░ рд╕рдХреЗрдВред

рдкреНрд░реЛрдЬреЗрдХреНрдЯ рдбрд╛рдпрд░реЗрдХреНрдЯрд░реА рдмрдирд╛рдПрдВ

рдЕрдкрдирд╛ рдЯрд░реНрдорд┐рдирд▓ рдЦреЛрд▓реЗрдВ рдФрд░ рдирдпрд╛ рдбрд╛рдпрд░реЗрдХреНрдЯрд░реА рдмрдирд╛рдиреЗ рддрдерд╛ рдЙрд╕рдореЗрдВ рдЬрд╛рдиреЗ рдХреЗ рд▓рд┐рдП рдпрд╣ рдХрдорд╛рдВрдб рдЪрд▓рд╛рдПрдБ:

mkdir cdk_datacamp && cd cdk_datacamp

CDK рдРрдк рдЗрдирд┐рд╢рд┐рдпрд▓рд╛рдЗрдЬрд╝ рдХрд░реЗрдВ

cdk init sample-app --language python

рдпрд╣ рдПрдХ рд╕реНрдЯрд╛рд░реНрдЯрд░ рдкреНрд░реЛрдЬреЗрдХреНрдЯ рдмрдирд╛рддрд╛ рд╣реИ рдЬреЛ рдПрдХ рдмреЗрд╕рд┐рдХ рдЙрджрд╛рд╣рд░рдг рдХреЗ рд╕рд╛рде рдкреНрд░реА-рдХреЙрдиреНрдлрд╝рд┐рдЧрд░реНрдб рдЖрддрд╛ рд╣реИ, рдЬрд┐рд╕рдореЗрдВ рд╢рд╛рдорд┐рд▓ рд╣реИрдВ:

  • рдПрдХ рд╕реИрдВрдкрд▓ рд╕реНрдЯреИрдХ (cdk_datacamp_stack)
  • SQS рдХреНрдпреВ рдЬреЛ рдПрдХ SNS рдЯреЙрдкрд┐рдХ рд╕реЗ рд╕рдмреНрд╕рдХреНрд░рд╛рдЗрдм рд╣реИ
  • рдПрдХ cdk.json рдлрд╛рдЗрд▓ рдЬреЛ рдмрддрд╛рддреА рд╣реИ рдЖрдкрдХрд╛ CDK рдРрдк рдХреИрд╕реЗ рдЪрд▓рддрд╛ рд╣реИ
  • Python рдбрд┐рдкреЗрдВрдбреЗрдВрд╕реАрдЬрд╝ рдХреЗ рд▓рд┐рдП рдПрдХ рд╡рд░реНрдЪреБрдЕрд▓ рдПрдирд╡рд╛рдпрд░рдирдореЗрдВрдЯ (.venv рдореЗрдВ)

рдХрдорд╛рдВрдб рдкреВрд░рд╛ рд╣реЛрдиреЗ рдкрд░, рдЖрдкрдХреЛ рдХреБрдЫ рдРрд╕рд╛ рдЖрдЙрдЯрдкреБрдЯ рджрд┐рдЦреЗрдЧрд╛:

Python рдкреНрд░реЛрдЬреЗрдХреНрдЯ рдХреЛ рдЗрдирд┐рд╢рд┐рдпрд▓рд╛рдЗрдЬрд╝ рдХрд░рддреЗ рд╕рдордп AWS CDK рдЯрд░реНрдорд┐рдирд▓ рдЖрдЙрдЯрдкреБрдЯ, рдЬрд┐рд╕рдореЗрдВ рд╡рд░реНрдЪреБрдЕрд▓ рдПрдирд╡рд╛рдпрд░рдирдореЗрдВрдЯ рдмрдирд╛рдиреЗ рдФрд░ рдПрдХреНрдЯрд┐рд╡реЗрдЯ рдХрд░рдиреЗ, рд░рд┐рдХреНрд╡рд╛рдпрд░рдореЗрдВрдЯреНрд╕ рдЗрдВрд╕реНрдЯреЙрд▓ рдХрд░рдиреЗ, рдФрд░ cdk synth рдЪрд▓рд╛рдиреЗ рдХреЗ рд╕реНрдЯреЗрдкреНрд╕ рд╢рд╛рдорд┐рд▓ рд╣реИрдВред

CDK Python рдкреНрд░реЛрдЬреЗрдХреНрдЯ рд╕реНрдХреИрдлреЛрд▓реНрдб

рд╡рд░реНрдЪреБрдЕрд▓ рдПрдирд╡рд╛рдпрд░рдирдореЗрдВрдЯ рд╕реЗрдЯрдЕрдк

рдпрджрд┐ cdk init рдкреНрд░рдХреНрд░рд┐рдпрд╛ рд╕реНрд╡рддрдГ рд╡рд░реНрдЪреБрдЕрд▓ рдПрдирд╡рд╛рдпрд░рдирдореЗрдВрдЯ рдирд╣реАрдВ рдмрдирд╛рддреА, рддреЛ рдЖрдк рдЗрд╕реЗ рдореИрдиреНрдпреБрдЕрд▓реА рдХрд░ рд╕рдХрддреЗ рд╣реИрдВ:

python3 -m venv .venv
source .venv/bin/activate

рдПрдХреНрдЯрд┐рд╡реЗрдЯ рд╣реЛрдиреЗ рдХреЗ рдмрд╛рдж, рдЖрд╡рд╢реНрдпрдХ рдбрд┐рдкреЗрдВрдбреЗрдВрд╕реАрдЬрд╝ рдЗрдВрд╕реНрдЯреЙрд▓ рдХрд░реЗрдВ:

pip install -r requirements.txt

CDK рдХреЙрдиреНрд╕реЗрдкреНрдЯреНрд╕ рдХреЛ рд╕рдордЭрдирд╛

рдХреЛрдб рдореЗрдВ рдЧрд╣рд░рд╛рдИ рддрдХ рдЬрд╛рдиреЗ рд╕реЗ рдкрд╣рд▓реЗ, рдЖрдЗрдП рджреЗрдЦреЗрдВ рдХрд┐ AWS CDK рдХреЗ рдореВрд▓ рдШрдЯрдХтАФрдРрдкреНрд╕, рд╕реНрдЯреИрдХреНрд╕ рдФрд░ рдХрдВрд╕реНрдЯреНрд░рдХреНрдЯреНрд╕тАФрд╡реНрдпрд╡рд╣рд╛рд░ рдореЗрдВ рдПрдХ рд╕рд╛рде рдХреИрд╕реЗ рдХрд╛рдо рдХрд░рддреЗ рд╣реИрдВред рдЕрдм рдЬрдм рдЖрдк рдЬрд╛рдирддреЗ рд╣реИрдВ рдХрд┐ рдкреНрд░рддреНрдпреЗрдХ рдХреНрдпрд╛ рджрд░реНрд╢рд╛рддрд╛ рд╣реИ, рддреЛ рдпрд╣ рд╕рдордЭрдирд╛ рдЬрд╝рд░реВрд░реА рд╣реИ рдХрд┐ рд╡реЗ рдорд┐рд▓рдХрд░ рд╕реНрдХреЗрд▓реЗрдмрд▓, рдореЙрдбреНрдпреВрд▓рд░ рдЗрдиреНрдлреНрд░рд╛рд╕реНрдЯреНрд░рдХреНрдЪрд░ рдХреИрд╕реЗ рдмрдирд╛рддреЗ рд╣реИрдВред┬а

рд╣рдо рдХрдВрд╕реНрдЯреНрд░рдХреНрдЯреНрд╕ рдХреЗ рд╡рд┐рднрд┐рдиреНрди рд╕реНрддрд░реЛрдВ (L1, L2, L3) рдХреЛ рднреА рддреЛрдбрд╝рдХрд░ рд╕рдордЭреЗрдВрдЧреЗ рдФрд░ рдЙрди CDK рд▓рд╛рдЗрдмреНрд░реЗрд░реАрдЬрд╝ рдХреА рдЬрд╛рдБрдЪ рдХрд░реЗрдВрдЧреЗ рдЬреЛ рдпрд╣ рд╕рдВрднрд╡ рдмрдирд╛рддреА рд╣реИрдВред

рдРрдкреНрд╕, рд╕реНрдЯреИрдХреНрд╕ рдФрд░ рдХрдВрд╕реНрдЯреНрд░рдХреНрдЯреНрд╕

рдкрд┐рдЫрд▓реЗ рд╕реЗрдХреНрд╢рдиреЛрдВ рд╕реЗ рдЖрдк App, Stack рдФрд░ Construct рдХреЗ рдмрд╛рд░реЗ рдореЗрдВ рдЬрд╛рди рдЪреБрдХреЗ рд╣реИрдВ, рдЕрдм рд╕рдордЭрддреЗ рд╣реИрдВ рдХрд┐ рдпреЗ CDK рдПрдкреНрд▓рд┐рдХреЗрд╢рди рдореЗрдВ рдПрдХ рд╕рд╛рде рдХреИрд╕реЗ рдХрд╛рдо рдХрд░рддреЗ рд╣реИрдВред

рдЗрд╕реЗ рдШрд░ рдмрдирд╛рдиреЗ рдЬреИрд╕рд╛ рд╕рдордЭреЗрдВ:

  • App рд╕рдордЧреНрд░ рдирд┐рд░реНрдорд╛рдг рдкрд░рд┐рдпреЛрдЬрдирд╛ рд╣реИред
  • рдкреНрд░рддреНрдпреЗрдХ Stack рдЙрд╕ рдкрд░рд┐рдпреЛрдЬрдирд╛ рдореЗрдВ рдПрдХ рдЕрд▓рдЧ рдЗрдорд╛рд░рдд рдпрд╛ рд╕рдВрд░рдЪрдирд╛ рдЬреИрд╕рд╛ рд╣реИред
  • рдкреНрд░рддреНрдпреЗрдХ Construct рдПрдХ рдХрдВрдкреЛрдиреЗрдВрдЯ рд╣реИ, рдЬреИрд╕реЗ рджреАрд╡рд╛рд░реЗрдВ, рджрд░рд╡рд╛рдЬреЗ, рдпрд╛ рдкреНрд▓рдВрдмрд┐рдВрдЧ, рдЬреЛ рд╕реНрдЯреИрдХ рдореЗрдВ рдЬрд╛рддрд╛ рд╣реИред

рдХреЛрдб рдореЗрдВ, рд╕рдВрдмрдВрдз рдХреБрдЫ рдЗрд╕ рддрд░рд╣ рджрд┐рдЦрддрд╛ рд╣реИ:

# app.py

from aws_cdk import App
from my_project.my_stack import MyStack

# Initialize the CDK application
app = App()

# Instantiate the stack and add it to the app
MyStack(app, "MyFirstStack")

# Synthesize the CloudFormation template
app.synth()
# my_stack.py

from aws_cdk import Stack
from aws_cdk import aws_s3 as s3
from constructs import Construct

class MyStack(Stack):
    def __init__(self, scope: Construct, id: str, **kwargs) -> None:
        super().__init__(scope, id, **kwargs)

        # Define an Amazon S3 bucket with default settings
        s3.Bucket(self, "MyBucket")

рдпрд╣рд╛рдБ, App рдПрдХ Stack рдХреЛ рдЗрдВрд╕реНрдЯреИрдВрд╢рд┐рдПрдЯ рдХрд░рддрд╛ рд╣реИ, рдЬрд┐рд╕рдореЗрдВ S3 рдмрдХреЗрдЯ рдЬреИрд╕реЗ рдХрдВрд╕реНрдЯреНрд░рдХреНрдЯреНрд╕ рд╢рд╛рдорд┐рд▓ рд╣реЛрддреЗ рд╣реИрдВред

рдХрдВрд╕реНрдЯреНрд░рдХреНрдЯ рд╕реНрддрд░реЛрдВ рдХреЛ рд╕рдордЭрдирд╛: L1, L2, рдФрд░ L3

AWS CDK рдореЗрдВ, рдХрдВрд╕реНрдЯреНрд░рдХреНрдЯреНрд╕ рддреАрди рдПрдмреНрд╕реНрдЯреНрд░реИрдХреНрд╢рди рд╕реНрддрд░реЛрдВ рдореЗрдВ рдЖрддреЗ рд╣реИрдВ, рдЬреЛ рдЖрдкрдХреЛ рдирд┐рдпрдВрддреНрд░рдг рдпрд╛ рд╕рд╛рджрдЧреА рдХреА рдЬрд░реВрд░рдд рдХреЗ рд╣рд┐рд╕рд╛рдм рд╕реЗ рд▓рдЪреАрд▓рд╛рдкрди рджреЗрддреЗ рд╣реИрдВред

рд▓реЗрд╡рд▓ 1 (L1) тАУ CloudFormation рдХрдВрд╕реНрдЯреНрд░рдХреНрдЯреНрд╕

рдпреЗ рдХрдЪреНрдЪреЗ рдмрд┐рд▓реНрдбрд┐рдВрдЧ рдмреНрд▓реЙрдХреНрд╕ рд╣реИрдВ рдЬреЛ рд╕реАрдзреЗ AWS CloudFormation рд╕реНрдкреЗрд╕рд┐рдлрд┐рдХреЗрд╢рди рд╕реЗ рдЬреЗрдирд░реЗрдЯ рд╣реЛрддреЗ рд╣реИрдВред CloudFormation рдореЗрдВ рд╣рд░ AWS рд╕рдВрд╕рд╛рдзрди рдХрд╛ CDK рдореЗрдВ рд╕рдордХрдХреНрд╖ L1 рдХрдВрд╕реНрдЯреНрд░рдХреНрдЯ рд╣реЛрддрд╛ рд╣реИ; рдЙрдирдХреЗ рдирд╛рдо рд╣рдореЗрд╢рд╛ тАЬCfnтАЭ рд╕реЗ рд╢реБрд░реВ рд╣реЛрддреЗ рд╣реИрдВред

L1 рдХрдВрд╕реНрдЯреНрд░рдХреНрдЯреНрд╕ рд╕рднреА рд╕рдВрднрд╛рд╡рд┐рдд рдХреЙрдиреНрдлрд╝рд┐рдЧрд░реЗрд╢рди рд╡рд┐рдХрд▓реНрдк рдЙрдЬрд╛рдЧрд░ рдХрд░рддреЗ рд╣реИрдВ рд▓реЗрдХрд┐рди рдХреЛрдИ рдПрдмреНрд╕реНрдЯреНрд░реИрдХреНрд╢рди рдпрд╛ рдбрд┐рдлрд╝реЙрд▓реНрдЯ рдирд╣реАрдВ рджреЗрддреЗред рдЬрдм рдЖрдкрдХреЛ рдкреВрд░реНрдг рдирд┐рдпрдВрддреНрд░рдг рдЪрд╛рд╣рд┐рдП рдпрд╛ рдирдП AWS рдлреАрдЪрд░реНрд╕ рдХрд╛ рдЙрдкрдпреЛрдЧ рдХрд░рдирд╛ рд╣реЛ рдЬрд┐рдиреНрд╣реЗрдВ рдЕрднреА рдЙрдЪреНрдЪ-рд╕реНрддрд░реАрдп рдХрдВрд╕реНрдЯреНрд░рдХреНрдЯреНрд╕ рдиреЗ рдирд╣реАрдВ рд▓рдкреЗрдЯрд╛, рддрдм рдпреЗ рдЖрджрд░реНрд╢ рд╣реИрдВред

  • рдЙрджрд╛рд╣рд░рдг: s3.CfnBucket

рд▓реЗрд╡рд▓ 2 (L2) тАУ AWS CDK-рдиреЗрдЯрд┐рд╡ рдХрдВрд╕реНрдЯреНрд░рдХреНрдЯреНрд╕

L2 рдХрдВрд╕реНрдЯреНрд░рдХреНрдЯреНрд╕ L1 рдХрдВрд╕реНрдЯреНрд░рдХреНрдЯреНрд╕ рдкрд░ рдЙрдЪреНрдЪ-рд╕реНрддрд░реАрдп, рдбреЗрд╡рд▓рдкрд░-рдлреНрд░реЗрдВрдбрд▓реА рдПрдмреНрд╕реНрдЯреНрд░реИрдХреНрд╢рди рдкреНрд░рджрд╛рди рдХрд░рддреЗ рд╣реИрдВред рдпреЗ рд╕реЛрдЪреЗ-рд╕рдордЭреЗ рдбрд┐рдлрд╝реЙрд▓реНрдЯреНрд╕ рдФрд░ рдмрд┐рд▓реНрдЯ-рдЗрди рдореЗрдердбреНрд╕ рдХреЗ рд╕рд╛рде рдЖрддреЗ рд╣реИрдВ рдЬреЛ рд░реЛрдЬрд╝рдорд░реНрд░рд╛ рдХреЗ рдХрд╛рдо рд╕рд░рд▓ рдмрдирд╛ рджреЗрддреЗ рд╣реИрдВред рдпреЗ рджрд┐рди-рдкреНрд░рддрд┐рджрд┐рди рдХреЗ рдЙрдкрдпреЛрдЧ рдХреЗ рд▓рд┐рдП рдбрд┐рдЬрд╝рд╛рдЗрди рдХрд┐рдП рдЧрдП рд╣реИрдВ рдФрд░ рдмреЛрдпрд▓рд░рдкреНрд▓реЗрдЯ рдХрдо рдХрд░рддреЗ рд╣реИрдВ, рдлрд┐рд░ рднреА рдЕрдЪреНрдЫреА рдХрд╕реНрдЯрдорд╛рдЗрдЬрд╝реЗрд╢рди рдХреНрд╖рдорддрд╛ рджреЗрддреЗ рд╣реИрдВред

  • рдЙрджрд╛рд╣рд░рдг: s3.Bucket тАУ рдЖрдк рдХреЗрд╡рд▓ рдПрдХ рдкрдВрдХреНрддрд┐ рдореЗрдВ рд╡рд░реНрдЬрд╝рдиреНрдб рдмрдХреЗрдЯ рдмрдирд╛ рд╕рдХрддреЗ рд╣реИрдВред

рд▓реЗрд╡рд▓ 3 (L3) тАУ рдкреИрдЯрд░реНрди рдХрдВрд╕реНрдЯреНрд░рдХреНрдЯреНрд╕

L3 рдХрдВрд╕реНрдЯреНрд░рдХреНрдЯреНрд╕ рдХрдИ AWS рд╕рдВрд╕рд╛рдзрдиреЛрдВ рдХреЛ рд╕рд╛рдорд╛рдиреНрдп рдЖрд░реНрдХрд┐рдЯреЗрдХреНрдЪрд░рд▓ рдкреИрдЯрд░реНрдиреНрд╕ рдореЗрдВ рд╕рдореЗрдЯрддреЗ рд╣реИрдВред рдЗрдиреНрд╣реЗрдВ AWS, рд╕рдореБрджрд╛рдп рдпрд╛ рдЖрдк рдЦреБрдж рднреА рдмрдирд╛ рд╕рдХрддреЗ рд╣реИрдВред L3 рдХрдВрд╕реНрдЯреНрд░рдХреНрдЯреНрд╕ рдХрд╛ рдЙрдкрдпреЛрдЧ рдЬрдЯрд┐рд▓рддрд╛ рд╕рдореЗрдЯрдиреЗ рдФрд░ рдкреНрд░реЛрдЬреЗрдХреНрдЯреНрд╕/рдЯреАрдореЛрдВ рдореЗрдВ рдЗрдиреНрдлреНрд░рд╛рд╕реНрдЯреНрд░рдХреНрдЪрд░ рдкреИрдЯрд░реНрдиреНрд╕ рдХреЛ рдкреБрди: рдЙрдкрдпреЛрдЧ рдХрд░рдиреЗ рдХреЗ рд▓рд┐рдП рдХрд░реЗрдВред

  • рдЙрджрд╛рд╣рд░рдг: aws_s3_deployment.BucketDeployment тАУ рдПрдХ S3 рдмрдХреЗрдЯ рдФрд░ рдбрд┐рдкреНрд▓реЙрдпрдореЗрдВрдЯ рд╕реНрдЯреНрд░реИрдЯреЗрдЬреА рдХреЛ рдорд┐рд▓рд╛рдХрд░ рдПрд╕реЗрдЯ рдЕрдкрд▓реЛрдбреНрд╕ рдХреЛ рд╕реНрд╡рдЪрд╛рд▓рд┐рдд рдХрд░рддрд╛ рд╣реИред

рдЬрд╝реНрдпрд╛рджрд╛рддрд░ рдбреЗрд╡рд▓рдкрд░реНрд╕ L2 рдХрдВрд╕реНрдЯреНрд░рдХреНрдЯреНрд╕ рд╕реЗ рд╢реБрд░реВ рдХрд░рддреЗ рд╣реИрдВ рдФрд░ рдЬрд╝рд░реВрд░рдд рдкрдбрд╝рдиреЗ рдкрд░ рд╣реА L1 рд▓рд╛рддреЗ рд╣реИрдВред рдкреНрд░реЛрдЬреЗрдХреНрдЯ рдмрдврд╝рдиреЗ рдкрд░ рдФрд░ рджреЛрд╣рд░рд╛рдП рдЬрд╛рдиреЗ рд╡рд╛рд▓реЗ рдкреИрдЯрд░реНрдиреНрд╕ рдХреЛ рдкреБрди: рдкреНрд░рдпреЛрдЬреНрдп рдХрдВрдкреЛрдиреЗрдВрдЯреНрд╕ рдореЗрдВ рдПрдмреНрд╕реНрдЯреНрд░реИрдХреНрдЯ рдХрд░рдирд╛ рдЪрд╛рд╣реЗрдВ, рддрдм L3 рдЙрдкрдпреЛрдЧреА рд╣реЛрддрд╛ рд╣реИред

CDK рд▓рд╛рдЗрдмреНрд░реЗрд░реАрдЬрд╝ рдФрд░ рдореЙрдбреНрдпреВрд▓реНрд╕

AWS CDK рдХреЗ рд╕рд╛рде рдмрд┐рд▓реНрдб рдХрд░рддреЗ рд╕рдордп рдЖрдк рд╕реАрдзреЗ рдХрдЪреНрдЪреЗ CloudFormation рдХреЗ рд╕рд╛рде рдЗрдВрдЯрд░реИрдХреНрдЯ рдирд╣реАрдВ рдХрд░рддреЗред рдЗрд╕рдХреЗ рдмрдЬрд╛рдп, рдЖрдк CDK рдХреА рдореЙрдбреНрдпреВрд▓рд░ рд▓рд╛рдЗрдмреНрд░реЗрд░реАрдЬрд╝ рдХрд╛ рдЙрдкрдпреЛрдЧ рдХрд░рддреЗ рд╣реИрдВ, рдЬреЛ S3, Lambda, IAM рдЬреИрд╕реА AWS рд╕реЗрд╡рд╛рдУрдВ рдХреЗ рд▓рд┐рдП рдХрдВрд╕реНрдЯреНрд░рдХреНрдЯреНрд╕ рдкреНрд░рджрд╛рди рдХрд░рддреА рд╣реИрдВред рд╕рднреА AWS рд╕рд░реНрд╡рд┐рд╕ рдореЙрдбреНрдпреВрд▓реНрд╕ aws-cdk-lib рдирд╛рдордХ рдХреЛрд░ рдкреИрдХреЗрдЬ рдХреЗ рдЕрдВрддрд░реНрдЧрдд рдмрдВрдбрд▓ рд╣реЛрддреЗ рд╣реИрдВ, рдФрд░ рд╕реЗрд╡рд╛ рдХреЗ рдЕрдиреБрд╕рд╛рд░ рдЖрдЧреЗ рд╡реНрдпрд╡рд╕реНрдерд┐рдд рд╣реЛрддреЗ рд╣реИрдВред

Python рдореЗрдВ рд╕рд╛рдорд╛рдиреНрдпрддрдГ рдЙрдкрдпреЛрдЧ рд╣реЛрдиреЗ рд╡рд╛рд▓реА рд▓рд╛рдЗрдмреНрд░реЗрд░реАрдЬрд╝

рдиреАрдЪреЗ aws-cdk-lib рд╕реЗ рдХреБрдЫ рд╕рдмрд╕реЗ рдЕрдзрд┐рдХ рдЙрдкрдпреЛрдЧ рд╣реЛрдиреЗ рд╡рд╛рд▓реА рд▓рд╛рдЗрдмреНрд░реЗрд░реАрдЬрд╝ (рдпрд╛ рдореЙрдбреНрдпреВрд▓реНрд╕) рджреА рдЧрдИ рд╣реИрдВ, рдЬреЛ Python рдкреНрд░реЛрдЬреЗрдХреНрдЯреНрд╕ рдореЗрдВ рдХрд╛рдо рдЖрддреА рд╣реИрдВ:

  • aws_cdk.aws_s3 тАУ S3 рдмрдХреЗрдЯреНрд╕ рдмрдирд╛рдиреЗ рдХреЗ рд▓рд┐рдП
  • aws_cdk.aws_lambda тАУ Lambda рдлрд╝рдВрдХреНрд╢рдВрд╕ рдкрд░рд┐рднрд╛рд╖рд┐рдд рдХрд░рдиреЗ рдХреЗ рд▓рд┐рдП
  • aws_cdk.aws_iam тАУ рд░реЛрд▓реНрд╕ рдФрд░ рдкрд░рдорд┐рд╢рди рдореИрдиреЗрдЬ рдХрд░рдиреЗ рдХреЗ рд▓рд┐рдП
  • aws_cdk.aws_dynamodb тАУ DynamoDB рдЯреЗрдмрд▓реНрд╕ рдХреЗ рд╕рд╛рде рдХрд╛рдо рдХрд░рдиреЗ рдХреЗ рд▓рд┐рдП
  • aws_cdk.aws_ec2 тАУ VPCs рдФрд░ рд╕рд┐рдХреНрдпреЛрд░рд┐рдЯреА рдЧреНрд░реБрдкреНрд╕ рдЬреИрд╕реЗ рдиреЗрдЯрд╡рд░реНрдХрд┐рдВрдЧ рдХрдВрдкреЛрдиреЗрдВрдЯреНрд╕ рдХреЗ рд▓рд┐рдП
  • aws_cdk.aws_sns / aws_cdk.aws_sns_subscriptions тАУ SNS рдЯреЙрдкрд┐рдХреНрд╕ рдФрд░ рдЙрдирдХреЗ рд╕рдмреНрд╕рдХреНрд░рд╛рдЗрдмрд░реНрд╕ рдХреЗ рд▓рд┐рдП

рдпреЗ рдореЙрдбреНрдпреВрд▓реНрд╕ рд╕рд┐рд░реНрдлрд╝ рдЖрд╡рд╢реНрдпрдХрддрд╛ рдкрдбрд╝рдиреЗ рдкрд░ рдЗрдореНрдкреЛрд░реНрдЯ рдХрд┐рдП рдЬрд╛рддреЗ рд╣реИрдВ, рдЬрд┐рд╕рд╕реЗ рдЖрдкрдХрд╛ рдкреНрд░реЛрдЬреЗрдХреНрдЯ рд╣рд▓реНрдХрд╛ рдФрд░ рдореЙрдбреНрдпреВрд▓рд░ рд░рд╣рддрд╛ рд╣реИред

CDK рдореЙрдбреНрдпреВрд▓ рдХреЛ рдХреИрд╕реЗ рдЗрдореНрдкреЛрд░реНрдЯ рдФрд░ рдЙрдкрдпреЛрдЧ рдХрд░реЗрдВ

рдХрд┐рд╕реА рд╡рд┐рд╢рд┐рд╖реНрдЯ AWS рд╕реЗрд╡рд╛ рдХрд╛ рдЙрдкрдпреЛрдЧ рдХрд░рдиреЗ рдХреЗ рд▓рд┐рдП, рдЙрд╕рдХреЗ рдореЙрдбреНрдпреВрд▓ рдХреЛ рдЗрдореНрдкреЛрд░реНрдЯ рдХрд░реЗрдВ рдФрд░ рдЙрд╕рдХреЗ рдХрдВрд╕реНрдЯреНрд░рдХреНрдЯ рдХреНрд▓рд╛рд╕реЗрдЬрд╝ рдХреЛ рдХреЙрд▓ рдХрд░реЗрдВред рдЙрджрд╛рд╣рд░рдг рдХреЗ рд▓рд┐рдП, рдПрдХ S3 рдмрдХреЗрдЯ рдмрдирд╛рдиреЗ рдХреЗ рд▓рд┐рдП:

from aws_cdk import aws_s3 as s3

# Inside your stack
bucket = s3.Bucket(self, "MyBucket")

рдпрд╣ рдЙрджрд╛рд╣рд░рдг L2 рдХрдВрд╕реНрдЯреНрд░рдХреНрдЯ s3.Bucket рдХрд╛ рдЙрдкрдпреЛрдЧ рдХрд░рддрд╛ рд╣реИ, рдЬрд┐рд╕рдореЗрдВ рдПрдиреНрдХреНрд░рд┐рдкреНрд╢рди рдФрд░ рд╡рд░реНрдЬрд╝рдирд┐рдВрдЧ рд╡рд┐рдХрд▓реНрдк рдЬреИрд╕реЗ рдмрд┐рд▓реНрдЯ-рдЗрди рдбрд┐рдлрд╝реЙрд▓реНрдЯ рд╢рд╛рдорд┐рд▓ рд╣реЛрддреЗ рд╣реИрдВред

рдпрджрд┐ рдЖрдкрдХреЛ рдХреЛрдИ рджреВрд╕рд░реА рд╕реЗрд╡рд╛ рдЙрдкрдпреЛрдЧ рдХрд░рдиреА рд╣реЛ, рддреЛ рдЙрд╕реА рддрд░рд╣ рдЙрд╕рдХрд╛ рдореЙрдбреНрдпреВрд▓ рдЗрдореНрдкреЛрд░реНрдЯ рдХрд░реЗрдВ:

from aws_cdk import aws_lambda as lambda_
from aws_cdk import aws_iam as iam

рдиреЛрдЯ: рдЕрдкрдиреЗ requirements.txt рдореЗрдВ рд╕рд╛рдорд╛рдиреНрдпрддрдГ рдЖрдкрдХреЛ рд╕рд┐рд░реНрдлрд╝ рдпрд╣ рдЪрд╛рд╣рд┐рдП рд╣реЛрддрд╛ рд╣реИ:

aws-cdk-lib==2.179.0
constructs>=10.0.0,<11.0.0

рдпреЗ рджреЛ рдкреИрдХреЗрдЬ рдЖрдкрдХреЛ рд╕рднреА AWS CDK рдХрдВрд╕реНрдЯреНрд░рдХреНрдЯреНрд╕ рдФрд░ рдХреЛрд░ рдлреНрд░реЗрдорд╡рд░реНрдХ рдлрдВрдХреНрд╢рдиреИрд▓рд┐рдЯреА рддрдХ рдкрд╣реБрдБрдЪ рджреЗрддреЗ рд╣реИрдВред

рдЕрдкрдирд╛ рдкрд╣рд▓рд╛ CDK рд╕реНрдЯреИрдХ рдмрдирд╛рдирд╛

AWS CDK рдХреЗ рдЖрдВрддрд░рд┐рдХ рд╕рдВрдЪрд╛рд▓рди рдХреЗ рдмрд╛рд░реЗ рдореЗрдВ рдЬрд╛рди рд▓реЗрдиреЗ рдХреЗ рдмрд╛рдж, рдЕрдм рдЖрдк рдЗрд╕реЗ рд▓рд╛рдЧреВ рдХрд░ рд╕рдХрддреЗ рд╣реИрдВред рдирд┐рдореНрди рд╕реЗрдХреНрд╢рди Python рдХрд╛ рдЙрдкрдпреЛрдЧ рдХрд░рдХреЗ рдПрдХ рдСрдкрд░реЗрд╢рдирд▓ CDK рд╕реНрдЯреИрдХ рдмрдирд╛рдиреЗ рдХреЗ рд▓рд┐рдП рдорд╛рд░реНрдЧрджрд░реНрд╢рди рдХрд░рддрд╛ рд╣реИред рдЖрдк рдХреЛрдб рдХреЗ рдорд╛рдзреНрдпрдо рд╕реЗ рдкреНрд░реЛрдЬреЗрдХреНрдЯ рд╕реНрдЯреНрд░рдХреНрдЪрд░ рдмрдирд╛рдПрдБрдЧреЗ рдФрд░ S3 рдмрдХреЗрдЯреНрд╕ рд╡ Lambda рдлрд╝рдВрдХреНрд╢рдВрд╕ рдЬреИрд╕реЗ рд╡рд╛рд╕реНрддрд╡рд┐рдХ AWS рд╕рдВрд╕рд╛рдзрди рд▓рд╛рдЧреВ рдХрд░реЗрдВрдЧреЗ, рдФрд░ рдлрд┐рд░ рдЙрдиреНрд╣реЗрдВ рдЕрдкрдиреЗ AWS рдЦрд╛рддреЗ рдореЗрдВ рдкрд░рд┐рдирд┐рдпреЛрдЬрд┐рдд рдХрд░реЗрдВрдЧреЗред

рдирдП рдкреНрд░реЛрдЬреЗрдХреНрдЯ рдХрд╛ рд╕реНрдХреИрдлреЛрд▓реНрдбрд┐рдВрдЧ

рдЬрдм рдЖрдк --language python рдлрд╝реНрд▓реИрдЧ рдХреЗ рд╕рд╛рде cdk init рдХрдорд╛рдВрдб рдЪрд▓рд╛рддреЗ рд╣реИрдВ, рддреЛ рдпрд╣ рдПрдХ рдкреВрд░реНрдг рдкреНрд░реЛрдЬреЗрдХреНрдЯ рд╕реНрдЯреНрд░рдХреНрдЪрд░ рд╕реЗрдЯ рдХрд░рддрд╛ рд╣реИ рдЬреЛ рдХреБрдЫ рдЗрд╕ рддрд░рд╣ рджрд┐рдЦрддрд╛ рд╣реИ:

AWS CDK рдкреНрд░реЛрдЬреЗрдХреНрдЯ рдбрд╛рдпрд░реЗрдХреНрдЯрд░реА рдХрд╛ рдЯреНрд░реА рд╡реНрдпреВ, рдЬрд┐рд╕рдореЗрдВ app.py, cdk.json, requirements.txt рдЬреИрд╕реА рдкреНрд░рдореБрдЦ рдлрд╛рдЗрд▓реЗрдВ рдФрд░ cdk_datacamp рд╕реЛрд░реНрд╕ рдХреЛрдб рд╡ tests/unit/test_cdk_datacamp_stack.py рдЬреИрд╕реА рдлреЛрд▓реНрдбрд░реНрд╕ рд╢рд╛рдорд┐рд▓ рд╣реИрдВред

AWS CDK Python рдкреНрд░реЛрдЬреЗрдХреНрдЯ рдХреА рдлреЛрд▓реНрдбрд░ рд╕рдВрд░рдЪрдирд╛

app.py рдлрд╛рдЗрд▓ рд╡рд╣ рдЬрдЧрд╣ рд╣реИ рдЬрд╣рд╛рдБ App рдкрд░рд┐рднрд╛рд╖рд┐рдд рд╣реЛрддрд╛ рд╣реИ, рдФрд░ cdk_datacamp_stack.py рдлрд╛рдЗрд▓ рд╡рд╣ рд╣реИ рдЬрд╣рд╛рдБ рдЖрдк рдЕрдкрдиреЗ Stack рдФрд░ Constructs рдХрд╛ рдХреЛрдб рд▓рд┐рдЦрддреЗ рд╣реИрдВред

рдЯрд┐рдк: рдЖрдк рд╕реНрдЯреИрдХ рдлрд╛рдЗрд▓ рдпрд╛ рдХреНрд▓рд╛рд╕ рдХрд╛ рдирд╛рдо рдЕрдкрдиреЗ рдРрдк рдХреЗ рдЙрджреНрджреЗрд╢реНрдп рдХреЗ рдореБрддрд╛рдмрд┐рдХ рдмрджрд▓ рд╕рдХрддреЗ рд╣реИрдВ, рдЬреИрд╕реЗ storage_stack.py рдпрд╛ monitoring_stack.pyред

AWS рд╕рдВрд╕рд╛рдзрди рдЬреЛрдбрд╝рдирд╛

рдЕрдм рдЕрдкрдиреЗ CDK рд╕реНрдЯреИрдХ рдореЗрдВ рдХреБрдЫ AWS рд╕рдВрд╕рд╛рдзрди рдЬреЛрдбрд╝рддреЗ рд╣реИрдВред рдЖрдк рдЗрд╕реЗ Stack рдХреНрд▓рд╛рд╕ рдХреЗ __init__() рдореЗрдердб рдХреЗ рдЕрдВрджрд░ cdk_datacamp_stack.py рдлрд╛рдЗрд▓ рдореЗрдВ рд▓рд┐рдЦреЗрдВрдЧреЗред

S3 рдмрдХреЗрдЯ

from aws_cdk import aws_s3 as s3

# Create an S3 bucket with versioning and managed encryption
bucket = s3.Bucket(
    self,
    "MyBucket",
    versioned=True,
    encryption=s3.BucketEncryption.S3_MANAGED
)

Lambda рдлрд╝рдВрдХреНрд╢рди

from aws_cdk import aws_lambda as lambda_

# Define a Lambda function using Python 3.9 runtime
lambda_function = lambda_.Function(
    self,
    "MyFunction",
    runtime=lambda_.Runtime.PYTHON_3_9,
    handler="index.handler",
    code=lambda_.Code.from_asset("lambda")  # Load code from local folder named 'lambda'
)

рд╕реНрдЯреИрдХ рдкрд░рд┐рдирд┐рдпреЛрдЬрд┐рдд рдХрд░рдирд╛

рдПрдХ рдмрд╛рд░ рдЬрдм рдЖрдкрдиреЗ рдЕрдкрдиреЗ рд╕рдВрд╕рд╛рдзрди рдЬреЛрдбрд╝ рд▓рд┐рдП, рддреЛ рдЙрдиреНрд╣реЗрдВ AWS рдкрд░ рдкрд░рд┐рдирд┐рдпреЛрдЬрд┐рдд рдХрд░рдиреЗ рдХрд╛ рд╕рдордп рд╣реИред

рдЕрдкрдиреЗ рдЯрд░реНрдорд┐рдирд▓ рдореЗрдВ, рд╡рд░реНрдЪреБрдЕрд▓ рдПрдирд╡рд╛рдпрд░рдирдореЗрдВрдЯ рдПрдХреНрдЯрд┐рд╡реЗрдЯ рдХрд░реЗрдВ рдФрд░ рдЪрд▓рд╛рдПрдБ:

cdk deploy

рдпрд╣ рдХрд░реЗрдЧрд╛:

  1. рдЖрдкрдХреЗ рд╕реНрдЯреИрдХ рдХреЛ рдПрдХ CloudFormation рдЯреЗрдореНрдкрд▓реЗрдЯ рдореЗрдВ рд╕рд┐рдВрдереЗрд╕рд╛рдЗрдЬрд╝
  2. рдЙрд╕ рдЯреЗрдореНрдкрд▓реЗрдЯ рдХреЛ AWS рдкрд░ рдЕрдкрд▓реЛрдб
  3. рдЖрдкрдХреЗ рдЦрд╛рддреЗ рдореЗрдВ рд╕рдВрд╕рд╛рдзрдиреЛрдВ рдХрд╛ рдкреНрд░реЛрд╡рд┐рдЬрд╝рди

рдпрджрд┐ рдЖрдк рдкрд╣рд▓реА рдмрд╛рд░ рд╕реНрдЯреИрдХ рдкрд░рд┐рдирд┐рдпреЛрдЬрд┐рдд рдХрд░ рд░рд╣реЗ рд╣реИрдВ, рддреЛ рдЖрдкрд╕реЗ рдкрд░рд┐рд╡рд░реНрддрдиреЛрдВ рдХреЛ рдЕрдиреБрдореЛрджрд┐рдд рдХрд░рдиреЗ рдХреЗ рд▓рд┐рдП рдХрд╣рд╛ рдЬрд╛рдПрдЧрд╛ред

рдбрд┐рдкреНрд▓реЙрдпрдореЗрдВрдЯ рдХреЗ рдмрд╛рдж, рдЖрдк рдпрд╣ рдХрд░ рд╕рдХрддреЗ рд╣реИрдВ:

  1. AWS рдХрдВрд╕реЛрд▓ рдЦреЛрд▓реЗрдВ
  2. рд╕рдВрдмрдВрдзрд┐рдд рд╕реЗрд╡рд╛ рдкрд░ рдЬрд╛рдПрдБ (рдЬреИрд╕реЗ, S3, Lambda)
  3. рд╡реЗ рд╕рдВрд╕рд╛рдзрди рджреЗрдЦреЗрдВ рдЬрд┐рдиреНрд╣реЗрдВ CDK рдиреЗ рдЕрднреА рдмрдирд╛рдпрд╛ рд╣реИ

CDK рдХрдВрд╕реНрдЯреНрд░рдХреНрдЯреНрд╕ рдХреЗ рд╕рд╛рде рдХрд╛рдо рдХрд░рдирд╛

AWS CDK рдРрдкреНрд╕ рдЕрдкрдиреЗ рдЖрд╡рд╢реНрдпрдХ рд╕реНрдЯреНрд░рдХреНрдЪрд░рд▓ рдПрд▓рд┐рдореЗрдВрдЯреНрд╕ рдХреЗ рд░реВрдк рдореЗрдВ рдХрдВрд╕реНрдЯреНрд░рдХреНрдЯреНрд╕ рдкрд░ рдирд┐рд░реНрднрд░ рд╣реЛрддреЗ рд╣реИрдВред рдЪрд╛рд╣реЗ рдЖрдк рдмрд┐рд▓реНрдЯ-рдЗрди рд╕рд░реНрд╡рд┐рд╕ рдХрдВрд╕реНрдЯреНрд░рдХреНрдЯреНрд╕ рдХрд╛ рдЙрдкрдпреЛрдЧ рдХрд░реЗрдВ рдпрд╛ рдЕрдкрдиреЗ рдкреБрди: рдкреНрд░рдпреЛрдЬреНрдп рдкреИрдЯрд░реНрди рдмрдирд╛рдПрдВ, рдХрдВрд╕реНрдЯреНрд░рдХреНрдЯреНрд╕ рдореЗрдВ рдорд╣рд╛рд░рдд рд╣рд╛рд╕рд┐рд▓ рдХрд░рдиреЗ рд╕реЗ рдЖрдкрдХрд╛ рдЗрдиреНрдлреНрд░рд╛рд╕реНрдЯреНрд░рдХреНрдЪрд░ рдХреЛрдб рдЕрдзрд┐рдХ рдореЙрдбреНрдпреВрд▓рд░, рдореЗрдВрдЯреЗрдирдмрд▓ рдФрд░ рдкрдардиреАрдп рдмрдирддрд╛ рд╣реИред

рдпрд╣ рд╕реЗрдХреНрд╢рди рдЖрдкрдХреЛ L2 (рд╣рд╛рдИ-рд▓реЗрд╡рд▓) рдХрдВрд╕реНрдЯреНрд░рдХреНрдЯреНрд╕ рдХрд╛ рдЙрдкрдпреЛрдЧ рдФрд░ рдХрд╕реНрдЯрдо рдХрдВрд╕реНрдЯреНрд░рдХреНрдЯреНрд╕ рд╡рд┐рдХрд╕рд┐рдд рдХрд░рдирд╛ рд╕рд┐рдЦрд╛рддрд╛ рд╣реИ, рдЬреЛ рджреЛрд╣рд░рд╛рдП рдЬрд╛рдиреЗ рд╡рд╛рд▓реЗ рдкреИрдЯрд░реНрдиреНрд╕ рдХреЛ рдХрдо рдХрд░рддреЗ рд╣реИрдВред

L2 рдХрдВрд╕реНрдЯреНрд░рдХреНрдЯреНрд╕ рдХрд╛ рдЙрдкрдпреЛрдЧ

L2 рдХрдВрд╕реНрдЯреНрд░рдХреНрдЯреНрд╕ CDK-рдиреЗрдЯрд┐рд╡ рдПрдмреНрд╕реНрдЯреНрд░реИрдХреНрд╢рди рд╣реИрдВ рдЬреЛ рдХрдЪреНрдЪреЗ CloudFormation (L1) рдХреА рддреБрд▓рдирд╛ рдореЗрдВ рдЙрдкрдпреЛрдЧ рдореЗрдВ рдЖрд╕рд╛рди рд╣реЛрддреЗ рд╣реИрдВред рдЗрдирдореЗрдВ рд╕рдордЭрджрд╛рд░реА рднрд░реЗ рдбрд┐рдлрд╝реЙрд▓реНрдЯреНрд╕ рдФрд░ рдЯрд╛рдЗрдк рд╕реЗрдлреНрдЯреА рд╣реЛрддреА рд╣реИ, рдЬрд┐рд╕рд╕реЗ рдХрд┐рд╕реА AWS рд╕рдВрд╕рд╛рдзрди рдХреЛ рд╕реЗрдЯ рдЕрдк рдХрд░рдиреЗ рдХреЗ рд▓рд┐рдП рдЕрдХреНрд╕рд░ рдХрдо рдкрдВрдХреНрддрд┐рдпреЛрдВ рдХреЗ рдХреЛрдб рдХреА рдЖрд╡рд╢реНрдпрдХрддрд╛ рд╣реЛрддреА рд╣реИред

L2 рдХрдВрд╕реНрдЯреНрд░рдХреНрдЯреНрд╕ рдХреНрдпреЛрдВ рдЙрдкрдпреЛрдЧ рдХрд░реЗрдВ?

  • рдХрдо рдмреЛрдпрд▓рд░рдкреНрд▓реЗрдЯ тАФ L1 рдХреА рддреБрд▓рдирд╛ рдореЗрдВ рдХрдо рдЖрд╡рд╢реНрдпрдХ рдлрд╝реАрд▓реНрдбреНрд╕
  • рдЕрдзрд┐рдХ рдкрдардиреАрдп рдФрд░ рдЖрдЗрдбрд┐рдпреЛрдореИрдЯрд┐рдХ Python рдХреЛрдб
  • рдЙрдкрдпреЛрдЧрд┐рддрд╛ рдореЗрдердбреНрд╕ рд╢рд╛рдорд┐рд▓, рдЬреИрд╕реЗ .add_to_role_policy() рдпрд╛ .add_event_notification()
  • рд╕рдВрд╕рд╛рдзрдиреЛрдВ рдХреЗ рдмреАрдЪ рдирд┐рд░реНрднрд░рддрд╛ рдХреЛ рд╕реНрд╡рддрдГ рдореИрдиреЗрдЬ рдХрд░рддрд╛ рд╣реИ

рдЙрджрд╛рд╣рд░рдг: L2 рдХрд╛ рдЙрдкрдпреЛрдЧ рдХрд░ S3 рдмрдХреЗрдЯ рдмрдирд╛рдирд╛

from aws_cdk import aws_s3 as s3
# Create a versioned and encrypted S3 bucket
bucket = s3.Bucket(
    self,
    "MyBucket",
    versioned=True,
    encryption=s3.BucketEncryption.S3_MANAGED
)

рд╕рдорддреБрд▓реНрдп L1 рдХрдВрд╕реНрдЯреНрд░рдХреНрдЯ, s3.CfnBucket, рдореЗрдВ рд╕рднреА рдкреНрд░реЙрдкрд░реНрдЯреАрдЬрд╝ рдореИрдиреНрдпреБрдЕрд▓реА рд╕реЗрдЯ рдХрд░рдиреА рдкрдбрд╝рддреАрдВ рдФрд░ рдХреЙрдиреНрдлрд╝рд┐рдЧрд░реЗрд╢рди рдХрдЪреНрдЪреЗ dicts рдХреЗ рд░реВрдк рдореЗрдВ рдкрд░рд┐рднрд╛рд╖рд┐рдд рдХрд░рдирд╛ рдкрдбрд╝рддрд╛тАФрдХрд╛рдлрд╝реА рдХрдо рд╕рд╣рдЬред

рдЕрдиреНрдп рд╕рд╛рдорд╛рдиреНрдп L2 рдХрдВрд╕реНрдЯреНрд░рдХреНрдЯреНрд╕ рдореЗрдВ рд╢рд╛рдорд┐рд▓ рд╣реИрдВ:

  • lambda_.Function() AWS Lambda рдХреЗ рд▓рд┐рдП
  • dynamodb.Table() DynamoDB рдХреЗ рд▓рд┐рдП
  • sqs.Queue() SQS рдХреЗ рд▓рд┐рдП
  • sns.Topic() SNS рдХреЗ рд▓рд┐рдП

рдХрд╕реНрдЯрдо рдХрдВрд╕реНрдЯреНрд░рдХреНрдЯреНрд╕ рдмрдирд╛рдирд╛

рдЖрдкрдХрд╛ рдЗрдиреНрдлреНрд░рд╛рд╕реНрдЯреНрд░рдХреНрдЪрд░ рд╕рдордп рдХреЗ рд╕рд╛рде рдмрдврд╝реЗрдЧрд╛ рдФрд░ рдмрд╛рд░-рдмрд╛рд░ рдЖрдиреЗ рд╡рд╛рд▓реЗ рдкреИрдЯрд░реНрдиреНрд╕ рд╕рд╛рдордиреЗ рдЖрдПрдБрдЧреЗ, рдЬреИрд╕реЗ рд╡рд┐рд╢реЗрд╖ рдкрд░рдорд┐рд╢рди рд╡рд╛рд▓реЗ Lambda рдлрд╝рдВрдХреНрд╢рдВрд╕ рдФрд░ S3 рдмрдХреЗрдЯреНрд╕ рдмрдирд╛рдирд╛ред рдЗрд╕ рд╕реНрдерд┐рддрд┐ рдХреЗ рд▓рд┐рдП рдХрд╕реНрдЯрдо рдХрдВрд╕реНрдЯреНрд░рдХреНрдЯреНрд╕ рдЖрджрд░реНрд╢ рд╕рдорд╛рдзрд╛рди рд╣реИрдВред

рдХрд╕реНрдЯрдо рдХрдВрд╕реНрдЯреНрд░рдХреНрдЯреНрд╕ рд╕рдВрдмрдВрдзрд┐рдд рд╕рдВрд╕рд╛рдзрдиреЛрдВ рдХреЛ рдПрдХрд▓ рд▓реЙрдЬрд┐рдХрд▓ рдпреВрдирд┐рдЯ рдореЗрдВ рд╕рдВрдпреЛрдЬрд┐рдд рдХрд░рдиреЗ рджреЗрддреЗ рд╣реИрдВ, рдЬрд┐рдиреНрд╣реЗрдВ рд╕реНрдЯреИрдХреНрд╕ рдпрд╛ рдкреНрд░реЛрдЬреЗрдХреНрдЯреНрд╕ рдореЗрдВ рдкреБрди: рдЙрдкрдпреЛрдЧ рдХрд┐рдпрд╛ рдЬрд╛ рд╕рдХрддрд╛ рд╣реИред

рдХрдм рдХрд╕реНрдЯрдо рдХрдВрд╕реНрдЯреНрд░рдХреНрдЯ рдмрдирд╛рдПрдВ:

  • рдЬрдм рдЖрдкрдХреЗ рдкрд╛рд╕ 3+ рд╕рдВрд╕рд╛рдзрди рд╣реЛрдВ рдЬреЛ рд╣рдореЗрд╢рд╛ рд╕рд╛рде рдореЗрдВ рдкреНрд░реЛрд╡рд┐рдЬрд╝рди рд╣реЛрддреЗ рд╣реИрдВ
  • рдЬрдм рдЖрдк рдкреБрди: рдкреНрд░рдпреЛрдЬреНрдп рд▓реЙрдЬрд┐рдХ рд╕рдореЗрдЯрдирд╛ рдЪрд╛рд╣реЗрдВ
  • рдЬрдм рдЖрдк рд╕реНрдЯреИрдХреНрд╕ рдореЗрдВ рдХреЛрдб рдбреБрдкреНрд▓реАрдХреЗрд╢рди рдХрдо рдХрд░рдирд╛ рдЪрд╛рд╣реЗрдВ

рдЙрджрд╛рд╣рд░рдг: рдПрдХ рдкреБрди: рдкреНрд░рдпреЛрдЬреНрдп S3 + Lambda рдкреИрдЯрд░реНрди

from constructs import Construct
from aws_cdk import aws_s3 as s3, aws_lambda as lambda_
class StorageWithLambda(Construct):
    def __init__(self, scope: Construct, id: str) -> None:
        super().__init__(scope, id)
        # S3 bucket
        self.bucket = s3.Bucket(self, "MyBucket")

        # Lambda function
        self.function = lambda_.Function(
            self,
            "MyFunction",
            runtime=lambda_.Runtime.PYTHON_3_9,
            handler="index.handler",
            code=lambda_.Code.from_asset("lambda")
        )
        # Grant Lambda access to the S3 bucket
        self.bucket.grant_read_write(self.function)

рдЕрдм рдЖрдк рдЗрд╕ рдХрдВрд╕реНрдЯреНрд░рдХреНрдЯ рдХрд╛ рдЙрдкрдпреЛрдЧ рдХрд┐рд╕реА рднреА рд╕реНрдЯреИрдХ рдХреЗ рдЕрдВрджрд░ рдРрд╕реЗ рдХрд░ рд╕рдХрддреЗ рд╣реИрдВ:

from my_project.storage_with_lambda import StorageWithLambda
storage = StorageWithLambda(self, "ReusableComponent")

рдЙрдкрд░реЛрдХреНрдд рдЪрд▓рд╛рдиреЗ рд╕реЗ рдкрд╣рд▓реЗ, рдкреНрд░реЛрдЬреЗрдХреНрдЯ рд░реВрдЯ рдореЗрдВ lambda рдирд╛рдо рдХрд╛ рдлреЛрд▓реНрдбрд░ рдмрдирд╛рдПрдВ рдФрд░ index.py рдлрд╛рдЗрд▓ рдирд┐рдореНрди рд╕рд╛рдордЧреНрд░реА рдХреЗ рд╕рд╛рде рдмрдирд╛рдПрдБ:

def handler(event, context):
    return {
        "statusCode": 200,
        "body": "Hello from Lambda!"
    }

рд░рд┐рдпреВрдЬрд╝рдмрд┐рд▓рд┐рдЯреА рдЯрд┐рдкреНрд╕

  • рдлрд╛рдЗрд▓реЛрдВ рдХреЛ construct_ рд╕реЗ рдкреНрд░реАрдлрд╝рд┐рдХреНрд╕ рдХрд░реЗрдВ рдпрд╛ constructs/ рдлреЛрд▓реНрдбрд░ рдореЗрдВ рд░рдЦреЗрдВ
  • рд▓рдЪреАрд▓реЗрдкрди рдХреЗ рд▓рд┐рдП self.bucket рдпрд╛ self.function рдЬреИрд╕реЗ рдЖрдЙрдЯрдкреБрдЯреНрд╕ рдПрдХреНрд╕рдкреЛрдЬрд╝ рдХрд░реЗрдВ
  • рдкреНрд░рддреНрдпреЗрдХ рдХрдВрд╕реНрдЯреНрд░рдХреНрдЯ рдХреЛ рдПрдХ рдЬрд┐рдореНрдореЗрджрд╛рд░реА рдкрд░ рдХреЗрдВрджреНрд░рд┐рдд рд░рдЦреЗрдВ

CDK рдРрдкреНрд╕ рдХрд╛ рдкрд░реАрдХреНрд╖рдг рдФрд░ рд╕рд┐рдВрдереЗрд╕рд╛рдЗрдЬрд╝ рдХрд░рдирд╛

рдЕрдкрдирд╛ рдЗрдиреНрдлреНрд░рд╛рд╕реНрдЯреНрд░рдХреНрдЪрд░ рдХреЛрдб рд▓рд┐рдЦрдиреЗ рдХреЗ рдмрд╛рдж, рдпрд╣ рджреЗрдЦрдирд╛ рдЖрд╡рд╢реНрдпрдХ рд╣реИ рдХрд┐ CDK рдХреНрдпрд╛ рдкрд░рд┐рдирд┐рдпреЛрдЬрд┐рдд рдХрд░реЗрдЧрд╛, рдФрд░ рдЖрджрд░реНрд╢ рд░реВрдк рд╕реЗ рдпрд╣ рднреА рдЯреЗрд╕реНрдЯ рдХрд░рдирд╛ рдХрд┐ рдЖрдкрдХреЗ рд╕реНрдЯреИрдХреНрд╕ рдЕрдкреЗрдХреНрд╖рд╛ рдХреЗ рдЕрдиреБрд╕рд╛рд░ рд╡реНрдпрд╡рд╣рд╛рд░ рдХрд░рддреЗ рд╣реИрдВред AWS CDK CloudFormation рдЯреЗрдореНрдкрд▓реЗрдЯреНрд╕ рд╕рд┐рдВрдереЗрд╕рд╛рдЗрдЬрд╝ рдХрд░рдиреЗ рдФрд░ рдСрдЯреЛрдореЗрдЯреЗрдб рдЯреЗрд╕реНрдЯ рд▓рд┐рдЦрдиреЗ рдХреЗ рдЯреВрд▓реНрд╕ рдкреНрд░рджрд╛рди рдХрд░рддрд╛ рд╣реИ, рдЬрд┐рд╕рд╕реЗ рдбрд┐рдкреНрд▓реЙрдпрдореЗрдВрдЯ рд╕реЗ рдкрд╣рд▓реЗ рдорд┐рд╕рдХрдиреНрдлрд╝рд┐рдЧрд░реЗрд╢рди рдкрдХрдбрд╝реА рдЬрд╛ рд╕рдХреЗрдВред

рдЯреЗрдореНрдкрд▓реЗрдЯреНрд╕ рд╕рд┐рдВрдереЗрд╕рд╛рдЗрдЬрд╝ рдХрд░рдирд╛

cdk synth рдХрдорд╛рдВрдб рдЖрдкрдХреЗ CDK рдХреЛрдб рд╕реЗ CloudFormation рдЯреЗрдореНрдкрд▓реЗрдЯ рдЬреЗрдирд░реЗрдЯ рдХрд░рддрд╛ рд╣реИред

cdk synth

рдЬрдм рдЖрдк рдЗрд╕реЗ рдЪрд▓рд╛рддреЗ рд╣реИрдВ, CDK:

  • app.py рдХреЗ рдорд╛рдзреНрдпрдо рд╕реЗ рдЖрдкрдХрд╛ рдРрдк рд▓реЛрдб рдХрд░рддрд╛ рд╣реИ
  • рд╕рднреА рдХрдВрд╕реНрдЯреНрд░рдХреНрдЯреНрд╕ рдФрд░ рд╕реНрдЯреИрдХреНрд╕ рд░рд┐рдЬрд╝реЙрд▓реНрд╡ рдХрд░рддрд╛ рд╣реИ
  • рдХрдЪреНрдЪреЗ YAML/JSON CloudFormation рдЯреЗрдореНрдкрд▓реЗрдЯреНрд╕ рдЖрдЙрдЯрдкреБрдЯ рдХрд░рддрд╛ рд╣реИ

рд╕рд┐рдВрдереЗрд╕рд╛рдЗрдЬрд╝ рдХрд┐рдпрд╛ рдЧрдпрд╛ AWS CloudFormation рдЯреЗрдореНрдкрд▓реЗрдЯ, рдЬрд┐рд╕рдореЗрдВ SQS рдХреНрдпреВ, SNS рдХреЛ рд╕рдВрджреЗрд╢ рднреЗрдЬрдиреЗ рдХреА рдЕрдиреБрдорддрд┐ рджреЗрдиреЗ рд╡рд╛рд▓реА рдХреНрдпреВ рдкреЙрд▓рд┐рд╕реА, рдФрд░ рдХреНрдпреВ рдХреЛ рд╕рдВрджрд░реНрднрд┐рдд рдХрд░рддрд╛ SNS рд╕рдмреНрд╕рдХреНрд░рд┐рдкреНрд╢рди рд╕рдВрд╕рд╛рдзрди рд╢рд╛рдорд┐рд▓ рд╣реИрдВред

рд╕рд┐рдВрдереЗрд╕рд╛рдЗрдЬрд╝реНрдб CloudFormation рдЯреЗрдореНрдкрд▓реЗрдЯ

рдбрд┐рдлрд╝реЙрд▓реНрдЯ рд░реВрдк рд╕реЗ рдЖрдЙрдЯрдкреБрдЯ рдЖрдкрдХреЗ рдЯрд░реНрдорд┐рдирд▓ рдореЗрдВ рдЬрд╛рддрд╛ рд╣реИ, рдкрд░ рдЖрд╡рд╢реНрдпрдХрддрд╛ рд╣реЛ рддреЛ рдЖрдк рдлрд╛рдЗрд▓ рдореЗрдВ рднреА рдЖрдЙрдЯрдкреБрдЯ рдХрд░ рд╕рдХрддреЗ рд╣реИрдВ:

cdk synth > template.yaml

рдпрд╣ рддрдм рдЙрдкрдпреЛрдЧреА рд╣реИ рдЬрдм:

  • рдЖрдк рдкрд░рд┐рдирд┐рдпреЛрдЬрди рд╕реЗ рдкрд╣рд▓реЗ рд╡рд╛рд╕реНрддрд╡рд┐рдХ рдЯреЗрдореНрдкрд▓реЗрдЯ рдХрд╛ рдирд┐рд░реАрдХреНрд╖рдг рдХрд░рдирд╛ рдЪрд╛рд╣рддреЗ рд╣реИрдВ
  • рдЖрдк рдХрд┐рд╕реА рд╕реНрдЯреИрдХ рдХреА рд╕рдВрд░рдЪрдирд╛ рдбреАрдмрдЧ рдХрд░ рд░рд╣реЗ рд╣реИрдВ
  • рдЖрдк рдЯреЗрдореНрдкрд▓реЗрдЯ рдЙрди рдЯреАрдореЛрдВ рдХреЗ рд╕рд╛рде рд╕рд╛рдЭрд╛ рдХрд░ рд░рд╣реЗ рд╣реИрдВ рдЬреЛ CDK рдЙрдкрдпреЛрдЧ рдирд╣реАрдВ рдХрд░рддреАрдВ

рдЗрдиреНрдлреНрд░рд╛рд╕реНрдЯреНрд░рдХреНрдЪрд░ рдХрд╛ рдкрд░реАрдХреНрд╖рдг

рд╣рд╛рд▓рд╛рдБрдХрд┐ рдЗрдиреНрдлреНрд░рд╛рд╕реНрдЯреНрд░рдХреНрдЪрд░ рдРрдЬрд╝ рдХреЛрдб рдХрд╛ рдкрд░реАрдХреНрд╖рдг рдЕрд╕рд╛рдорд╛рдиреНрдп рд▓рдЧ рд╕рдХрддрд╛ рд╣реИ, рдпрд╣ рд▓рд╛рднрджрд╛рдпрдХ рд╣реИтАФрдЦрд╛рд╕рдХрд░ рдЬрдм рдЖрдкрдХреЗ рд╕реНрдЯреИрдХреНрд╕ рдмрдбрд╝реЗ рд╣реЛ рдЬрд╛рдПрдБ рдпрд╛ рдХрдВрдбреАрд╢рдирд▓ рд▓реЙрдЬрд┐рдХ, рд▓реВрдкреНрд╕, рдпрд╛ рдкреБрди: рдкреНрд░рдпреЛрдЬреНрдп рдХрдВрд╕реНрдЯреНрд░рдХреНрдЯреНрд╕ рд╢рд╛рдорд┐рд▓ рд╣реЛрдВред

AWS CDK рд╕рд┐рдВрдереЗрд╕рд╛рдЗрдЬрд╝реНрдб рд╕реНрдЯреИрдХреНрд╕ рдХреЛ рдЯреЗрд╕реНрдЯ рдХрд░рдиреЗ рдХреЗ рд▓рд┐рдП assertions рдореЙрдбреНрдпреВрд▓ рдкреНрд░рджрд╛рди рдХрд░рддрд╛ рд╣реИред

pytest рдХреЗ рд╕рд╛рде рдПрдХ рд╕рд░рд▓ рдЯреЗрд╕реНрдЯ рд▓рд┐рдЦрдирд╛

рдпрд╣рд╛рдБ рдПрдХ рдЙрджрд╛рд╣рд░рдг рдЯреЗрд╕реНрдЯ рд╣реИ рдЬреЛ рдЬрд╛рдБрдЪрддрд╛ рд╣реИ рдХрд┐ рдХреЛрдИ рд╡рд┐рд╢рд┐рд╖реНрдЯ рд╕рдВрд╕рд╛рдзрди (рдЬреИрд╕реЗ, S3 рдмрдХреЗрдЯ) рд╕реНрдЯреИрдХ рдореЗрдВ рд╢рд╛рдорд┐рд▓ рд╣реИ рдпрд╛ рдирд╣реАрдВ:

# test/test_cdk_datacamp_stack.py
import aws_cdk as cdk
from aws_cdk.assertions import Template
from cdk_datacamp.cdk_datacamp_stack import CdkDatacampStack
def test_s3_bucket_created():
    app = cdk.App()
    stack = CdkDatacampStack(app, "TestStack")
    template = Template.from_stack(stack)
    # Assert that an S3 bucket exists
    template.resource_count_is("AWS::S3::Bucket", 1)

рдЯреЗрд╕реНрдЯ рдЪрд▓рд╛рдиреЗ рдХреЗ рд▓рд┐рдП, рд╕реБрдирд┐рд╢реНрдЪрд┐рдд рдХрд░реЗрдВ рдХрд┐ pytest рдЗрдВрд╕реНрдЯреЙрд▓ рд╣реИ:

pip install -U pytest

рдлрд┐рд░ рдЪрд▓рд╛рдПрдБ:

pytest

рдпрджрд┐ рд╕рдм рдареАрдХ рд░рд╣рд╛, рддреЛ рдЖрдкрдХреЛ рд╣рд░рд╛ рдЪреЗрдХрдорд╛рд░реНрдХ рджрд┐рдЦреЗрдЧрд╛ред рдпрджрд┐ рдирд╣реАрдВ, рддреЛ рдЯреЗрд╕реНрдЯ рдЖрдЙрдЯрдкреБрдЯ рдмрддрд╛рдПрдЧрд╛ рдХрд┐ рдХреНрдпрд╛ рдХрдореА рд╣реИред

Linux рд╡рд╛рддрд╛рд╡рд░рдг рдкрд░ Python 3.11.11 рдФрд░ pytest 8.3.5 рдХреЗ рд╕рд╛рде pytest рдЖрдЙрдЯрдкреБрдЯ, рдЬрд┐рд╕рдореЗрдВ рд╕рднреА рддреАрди рдЯреЗрд╕реНрдЯ рдХреЗрд╕ рд╣рд░реЗ рд╕рдВрдХреЗрддрдХреЛрдВ рдХреЗ рд╕рд╛рде рдкрд╛рд╕ рджрд┐рдЦ рд░рд╣реЗ рд╣реИрдВ рдФрд░ 2.89 рд╕реЗрдХрдВрдб рдХрд╛ рдирд┐рд╖реНрдкрд╛рджрди рд╕рдордпред ┬а ┬а ┬а

AWS CDK рд╕реНрдЯреИрдХ рдХреЗ рд╕рднреА рдЯреЗрд╕реНрдЯ рдХреЗрд╕реЛрдВ рдХреЗ рд╕рдлрд▓ рдирд┐рд╖реНрдкрд╛рджрди рдХреЛ рджрд░реНрд╢рд╛рддрд╛ Pytest рдЖрдЙрдЯрдкреБрдЯ

рдЖрдк рдЕрдкрдиреЗ CDK рд╕реНрдЯреИрдХ рдореЗрдВ рд╡реИрд▓рд┐рдбреЗрд╢рди рднреА рд╢рд╛рдорд┐рд▓ рдХрд░ рд╕рдХрддреЗ рд╣реИрдВред рд╡реИрд▓рд┐рдбреЗрд╢рди рдЯреЗрд╕реНрдЯ рдЖрдкрдХреЗ рдХрдВрд╕реНрдЯреНрд░рдХреНрдЯ рдпрд╛ рд╕реНрдЯреИрдХ рдХреЛрдб рдХреЗ рдЕрдВрджрд░ рд░рдирдЯрд╛рдЗрдо рдЪреЗрдХ рд╣реЛрддреЗ рд╣реИрдВ рдЬреЛ рдбрд┐рдкреНрд▓реЙрдпрдореЗрдВрдЯ рд╕реЗ рдкрд╣рд▓реЗ рдЗрдирдкреБрдЯреНрд╕ рдХреЛ рд╡реИрд▓рд┐рдбреЗрдЯ рдХрд░рддреЗ рд╣реИрдВред рдпреЗ рдорд┐рд╕рдХрдиреНрдлрд╝рд┐рдЧрд░реЗрд╢рди рдкрдХрдбрд╝рдиреЗ рдпрд╛ рд╡рд┐рдХрд╛рд╕ рдЪрдХреНрд░ рдХреЗ рд╢реБрд░реБрдЖрддреА рдЪрд░рдг рдореЗрдВ рдмрд╛рдзреНрдпрддрд╛рдПрдБ рд▓рд╛рдЧреВ рдХрд░рдиреЗ рдореЗрдВ рдорджрдж рдХрд░рддреЗ рд╣реИрдВред

рдорд╛рди рд▓реАрдЬрд┐рдП рд╣рдо bucket_name рдХреЛ рдПрдХ рдХреЙрдиреНрдЯреЗрдХреНрд╕реНрдЯ рд╡реЗрд░рд┐рдПрдмрд▓ рдХреЗ рд░реВрдк рдореЗрдВ рдкрд╛рд╕ рдХрд░рдирд╛ рдЪрд╛рд╣рддреЗ рд╣реИрдВ, рдкрд░ рд╣рдо рд╡реИрд▓рд┐рдбреЗрдЯ рдХрд░рдирд╛ рдЪрд╛рд╣рддреЗ рд╣реИрдВ рдХрд┐:

  • рдмрдХреЗрдЯ рдирд╛рдо рдЦрд╝рд╛рд▓реА рди рд╣реЛ
  • рдпрд╣ S3 рдиреЗрдорд┐рдВрдЧ рдирд┐рдпрдореЛрдВ рдХрд╛ рдкрд╛рд▓рди рдХрд░реЗ (рдЬреИрд╕реЗ, рдХреЗрд╡рд▓ рд▓реЛрдЕрд░рдХреЗрд╕)

test/test_storage_with_lambda.py рдирд╛рдо рдХреА рдлрд╛рдЗрд▓ рдмрдирд╛рдПрдБ рдФрд░ рдЗрд╕рдореЗрдВ рдирд┐рдореНрди рдЬреЛрдбрд╝реЗрдВ:

import pytest
from aws_cdk import App, Stack
from cdk_datacamp.storage_with_lambda import StorageWithLambda

def test_missing_bucket_name():
    app = App()
    stack = Stack(app, "TestStack")

    with pytest.raises(ValueError, match="bucket_name is required"):
        StorageWithLambda(stack, "FailingConstruct", bucket_name=None)

def test_bucket_name_uppercase():
    app = App()
    stack = Stack(app, "TestStack")

    with pytest.raises(ValueError, match="must be lowercase"):
        StorageWithLambda(stack, "FailingConstruct", bucket_name="InvalidName")

┬ард╡реИрд▓рд┐рдбреЗрд╢рди рдЯреЗрд╕реНрдЯ рдХрд░рдиреЗ рдХреЗ рд▓рд┐рдП, рдиреАрдЪреЗ рджрд┐рдпрд╛ рдХрдорд╛рдВрдб рдЪрд▓рд╛рдПрдБ:

test/test_storage_with_lambda.py

Linux рд╡рд╛рддрд╛рд╡рд░рдг рдкрд░ Python 3.11.11 рдФрд░ pytest 8.3.5 рдХреЗ рд╕рд╛рде pytest рдЖрдЙрдЯрдкреБрдЯ, рдЬрд┐рд╕рдореЗрдВ рд╕рднреА рддреАрди рдЯреЗрд╕реНрдЯ рдХреЗрд╕ рд╣рд░реЗ рд╕рдВрдХреЗрддрдХреЛрдВ рдХреЗ рд╕рд╛рде рдкрд╛рд╕ рджрд┐рдЦ рд░рд╣реЗ рд╣реИрдВред ┬а ┬а ┬а ┬а

AWS CDK рд╕реНрдЯреИрдХ рдХреЗ рд╕рднреА рдЯреЗрд╕реНрдЯ рдХреЗрд╕реЛрдВ рдХреЗ рд╕рдлрд▓ рдирд┐рд╖реНрдкрд╛рджрди рдХреЛ рджрд░реНрд╢рд╛рддрд╛ Pytest рдЖрдЙрдЯрдкреБрдЯ

рдХрдм рдкрд░реАрдХреНрд╖рдг рдХрд░реЗрдВ:

  • рдЬрдм рдЖрдк рдкреБрди: рдкреНрд░рдпреЛрдЬреНрдп рдХрдВрд╕реНрдЯреНрд░рдХреНрдЯреНрд╕ рдпрд╛ рдкреИрдЯрд░реНрдиреНрд╕ рдмрдирд╛ рд░рд╣реЗ рд╣реЛрдВред
  • рдЬрдм рдкрд░реАрдХреНрд╖рдг рдХрд╛ рдХрд╛рд░реНрдпрд╛рдиреНрд╡рдпрди рдЯреАрдо рд╕рджрд╕реНрдпреЛрдВ рдХреЗ рдмреАрдЪ рдорд╛рдирдХ рддрдХрдиреАрдХреА рдЖрд╡рд╢реНрдпрдХрддрд╛рдПрдБ рд╕реНрдерд╛рдкрд┐рдд рдХрд░рдиреЗ рдХрд╛ рдХрд╛рд░реНрдп рдХрд░реЗред
  • рдЬрдм рдЖрдк CI/CD рдХреЗ рджреМрд░рд╛рди рд░рд┐рдЧреНрд░реЗрд╢рдиреНрд╕ рдпрд╛ рдЕрдирдЪрд╛рд╣реЗ рдмрджрд▓рд╛рд╡ рдкрдХрдбрд╝рдирд╛ рдЪрд╛рд╣реЗрдВред

рдЗрдВрдЯрд░рд╡реНрдпреВ рд╕реЗрдЯрд┐рдВрдЧ рдореЗрдВ рдЕрдкрдиреА CDK рдЬрд╛рдирдХрд╛рд░реА рдХреЛ рдордЬрд╝рдмреВрдд рдХрд░рдирд╛ рдЪрд╛рд╣рддреЗ рд╣реИрдВ? рдпреЗ рд╢реАрд░реНрд╖ AWS DevOps рдЗрдВрдЯрд░рд╡реНрдпреВ рдкреНрд░рд╢реНрди рдЖрдкрдХреА рддреИрдпрд╛рд░реА рдореЗрдВ рдорджрдж рдХрд░ рд╕рдХрддреЗ рд╣реИрдВред

AWS CDK рдХреЗ рд╕рд╛рде рдХрд╛рдо рдХрд░рдиреЗ рдХреЗ рд▓рд┐рдП рд╕рд░реНрд╡реЛрддреНрддрдо рдкреНрд░рдерд╛рдПрдБ рдФрд░ рдЯрд┐рдкреНрд╕

CDK рд╕реНрдЯреИрдХ рдмрдирд╛рдирд╛ рдФрд░ рдбрд┐рдкреНрд▓реЙрдп рдХрд░рдирд╛ рд╕реАрдЦ рд▓реЗрдиреЗ рдХреЗ рдмрд╛рдж, рдЖрдкрдХреЛ рд╕рд░реНрд╡реЛрддреНрддрдо рдкреНрд░рдерд╛рдУрдВ рдХрд╛ рдкрд╛рд▓рди рдХрд░рдирд╛ рдЪрд╛рд╣рд┐рдП рддрд╛рдХрд┐ рдЖрдкрдХрд╛ рдЗрдиреНрдлреНрд░рд╛рд╕реНрдЯреНрд░рдХреНрдЪрд░ рдХреЛрдб рд╕рд╛рдлрд╝, рд╕реБрд░рдХреНрд╖рд┐рдд рдФрд░ рд╕реНрдХреЗрд▓реЗрдмрд▓ рд░рд╣реЗред рдЗрд╕ рд╕реЗрдХреНрд╢рди рдореЗрдВ рд╣рдо рдмрдбрд╝реЗ рдкреНрд░реЛрдЬреЗрдХреНрдЯреНрд╕ рдХреЛ рд╕реНрдЯреНрд░рдХреНрдЪрд░ рдХрд░рдиреЗ, рд╕реБрд░рдХреНрд╖рд╛ рдХреЛ рд╕рд╣реА рддрд░рд╣ рд╕реЗ рд╣реИрдВрдбрд▓ рдХрд░рдиреЗ, рдФрд░ CDK рдХреЛ CI/CD рдкрд╛рдЗрдкрд▓рд╛рдЗрдиреНрд╕ рдореЗрдВ рдЗрдВрдЯреАрдЧреНрд░реЗрдЯ рдХрд░рдиреЗ рдкрд░ рдЪрд░реНрдЪрд╛ рдХрд░реЗрдВрдЧреЗред

рдмрдбрд╝реЗ рдкреНрд░реЛрдЬреЗрдХреНрдЯреНрд╕ рдХрд╛ рдЖрдпреЛрдЬрди

рдЬреИрд╕реЗ-рдЬреИрд╕реЗ рдЖрдкрдХрд╛ CDK рдРрдк рдмрдврд╝рддрд╛ рд╣реИ, рдХреЛрдб рдХреЛ рдкреНрд░рдмрдВрдзрдиреАрдп рдЗрдХрд╛рдЗрдпреЛрдВ рдореЗрдВ рд╕рдВрдЧрдард┐рдд рдХрд░рдирд╛ рдЖрд╡рд╢реНрдпрдХ рд╣реЛ рдЬрд╛рддрд╛ рд╣реИред

рдПрдХрд╛рдзрд┐рдХ рд╕реНрдЯреИрдХреНрд╕ рдХрд╛ рдЙрдкрдпреЛрдЧ рдХрд░реЗрдВ

рдЕрдкрдиреА рдЗрдиреНрдлреНрд░рд╛рд╕реНрдЯреНрд░рдХреНрдЪрд░ рдХреЛ рдЪрд┐рдВрддрд╛-рдХреНрд╖реЗрддреНрд░реЛрдВ рдХреЗ рдЕрдиреБрд╕рд╛рд░ рдмрд╛рдБрдЯреЗрдВред рдЙрджрд╛рд╣рд░рдг рдХреЗ рд▓рд┐рдП:

  • NetworkingStack: VPCs, рд╕рдмрдиреЗрдЯреНрд╕, рд╕рд┐рдХреНрдпреЛрд░рд┐рдЯреА рдЧреНрд░реБрдкреНрд╕
  • ComputeStack: EC2, Lambda
  • StorageStack: S3, DynamoDB

рдЗрд╕рд╕реЗ рдЖрдк рдЕрдкрдиреА рдЗрдиреНрдлреНрд░рд╛рд╕реНрдЯреНрд░рдХреНрдЪрд░ рдХреЗ рд╣рд┐рд╕реНрд╕реЛрдВ рдХреЛ рд╕реНрд╡рддрдВрддреНрд░ рд░реВрдк рд╕реЗ рдбрд┐рдкреНрд▓реЙрдп, рдЯреЗрд╕реНрдЯ рдпрд╛ рдирд╖реНрдЯ рдХрд░ рд╕рдХрддреЗ рд╣реИрдВред рдЗрд╕реЗ app.py рдореЗрдВ рдРрд╕реЗ рд╢рд╛рдорд┐рд▓ рдХрд┐рдпрд╛ рдЬрд╛ рд╕рдХрддрд╛ рд╣реИ:

network_stack = NetworkingStack(app, "NetworkingStack")
compute_stack = ComputeStack(app, "ComputeStack")

рдЖрдк рдЖрдЙрдЯрдкреБрдЯреНрд╕ рдпрд╛ рд░реЗрдлрд░реЗрдВрд╕реЗрдЬрд╝ рдХрд╛ рдЙрдкрдпреЛрдЧ рдХрд░ рд╕реНрдЯреИрдХреНрд╕ рдХреЗ рдмреАрдЪ рд╕рдВрд╕рд╛рдзрди рднреА рдкрд╛рд╕ рдХрд░ рд╕рдХрддреЗ рд╣реИрдВред

рдкреБрди: рдкреНрд░рдпреЛрдЬреНрдп рдиреЗрд╕реНрдЯреЗрдб рдХрдВрд╕реНрдЯреНрд░рдХреНрдЯреНрд╕ рдмрдирд╛рдПрдВ

рд╕рдВрдмрдВрдзрд┐рдд рд╕рдВрд╕рд╛рдзрдиреЛрдВ (рдЬреИрд╕реЗ Lambda рдФрд░ рдЙрд╕рдХреА рдкрд░рдорд┐рд╢рди) рдХреЛ StorageWithLambda рдХреА рддрд░рд╣ рдХрд┐рд╕реА рдХрд╕реНрдЯрдо рдХрдВрд╕реНрдЯреНрд░рдХреНрдЯ рдореЗрдВ рд╕рдорд╛рд╣рд┐рдд рдХрд░реЗрдВред рдЗрд╕рд╕реЗ рд╕реНрдЯреИрдХреНрд╕ рдпрд╛ рдРрдкреНрд╕ рдореЗрдВ рдкрдардиреАрдпрддрд╛ рдФрд░ рдкреБрди: рдкреНрд░рдпреЛрдЬреНрдпрддрд╛ рдмрдврд╝рддреА рд╣реИред

рдПрдирд╡рд╛рдпрд░рдирдореЗрдВрдЯ-рд╡рд┐рд╢рд┐рд╖реНрдЯ рдХреЙрдиреНрдлрд╝рд┐рдЧрд░реЗрд╢рди рдХрд╛ рдЙрдкрдпреЛрдЧ рдХрд░реЗрдВ

рдХрдИ рдПрдирд╡рд╛рдпрд░рдирдореЗрдВрдЯреНрд╕ (dev, staging, prod) рдХреЛ рд╕рдкреЛрд░реНрдЯ рдХрд░реЗрдВ, рдЗрдирд╕реЗ:

  • cdk.json рдХреЗ рд╕рд╛рде рдХреЙрдиреНрдЯреЗрдХреНрд╕реНрдЯ рд╡реИрд▓реНрдпреВрдЬрд╝
  • CLI рдУрд╡рд░рд░рд╛рдЗрдбреНрд╕: cdk deploy -c env=prod
  • рдЕрдкрдиреЗ рд╕реНрдЯреИрдХреНрд╕ рдореЗрдВ рдХрдВрдбреАрд╢рдирд▓ рд▓реЙрдЬрд┐рдХ
env = app.node.try_get_context("env")
if env == "prod":
    bucket_name = "mycompany-prod-logs"

рд╕реБрд░рдХреНрд╖рд╛ рдФрд░ рдкрд░рдорд┐рд╢рди

рдХрд┐рд╕реА рднреА рдЗрдиреНрдлреНрд░рд╛рд╕реНрдЯреНрд░рдХреНрдЪрд░ рдкреНрд░реЛрдЬреЗрдХреНрдЯ рдореЗрдВ AWS CDK рдХреЗ рд╕реНрд╡рдЪрд╛рд▓рд┐рдд рдкрд░рд┐рдирд┐рдпреЛрдЬрди рдкреНрд░рдХреНрд░рд┐рдпрд╛рдУрдВ рдХреЗ рджреМрд░рд╛рди рд╕реБрд░рдХреНрд╖рд╛ рдХреЛ рдкреНрд░рд╛рдердорд┐рдХрддрд╛ рджреЗрдиреА рдЪрд╛рд╣рд┐рдПред рдирд┐рдореНрди рд╕реЗрдХреНрд╢рди рдиреНрдпреВрдирддрдо рд╡рд┐рд╢реЗрд╖рд╛рдзрд┐рдХрд╛рд░ рд╕рд┐рджреНрдзрд╛рдВрддреЛрдВ рдХреЗ рдорд╛рдзреНрдпрдо рд╕реЗ рд╕реБрд░рдХреНрд╖рд┐рдд IAM рд╕рдВрд╕рд╛рдзрди рдкреНрд░рдмрдВрдзрди рдХреЛ рджрд░реНрд╢рд╛рддрд╛ рд╣реИред

рдбрд┐рдлрд╝реЙрд▓реНрдЯреНрд╕ рдХрд╛ рдЙрдкрдпреЛрдЧ рдХрд░рдиреЗ рдХреЗ рдмрдЬрд╛рдп IAM рд░реЛрд▓реНрд╕ рдкрд░рд┐рднрд╛рд╖рд┐рдд рдХрд░реЗрдВ

Lambda рдпрд╛ ECS рдЯрд╛рд╕реНрдХ рд╕рд╣рд┐рдд CDK рдХрдВрд╕реНрдЯреНрд░рдХреНрдЯреНрд╕ рд╕реНрд╡рдЪрд╛рд▓рд┐рдд рд░реВрдк рд╕реЗ IAM рд░реЛрд▓реНрд╕ рдмрдирд╛ рджреЗрдВрдЧреЗред рд╣рд╛рд▓рд╛рдБрдХрд┐ рдпрд╣ рд╕реБрд╡рд┐рдзрд╛рдЬрдирдХ рд╣реИ, рд▓реЗрдХрд┐рди рдпрд╣ рдкрд░рдорд┐рд╢рди рдФрд░ рдиреЗрдорд┐рдВрдЧ рдкрд░ рдЖрдкрдХреЗ рдирд┐рдпрдВрддреНрд░рдг рдХреЛ рд╕реАрдорд┐рдд рдХрд░ рд╕рдХрддрд╛ рд╣реИред

рдЗрд╕рдХреЗ рдмрдЬрд╛рдп, рд░реЛрд▓реНрд╕ рдХреЛ рд╕реНрдкрд╖реНрдЯ рд░реВрдк рд╕реЗ рдкрд░рд┐рднрд╛рд╖рд┐рдд рдХрд░реЗрдВ:

from aws_cdk import aws_iam as iam

execution_role = iam.Role(
    self,
    "LambdaExecutionRole",
    assumed_by=iam.ServicePrincipal("lambda.amazonaws.com"),
    description="Custom role for Lambda with least privilege",
    managed_policies=[
        iam.ManagedPolicy.from_aws_managed_policy_name("service-role/AWSLambdaBasicExecutionRole")
    ]
)

рдпрд╣ рд░реЛрд▓ рдбрд┐рдлрд╝реЙрд▓реНрдЯ рд░реВрдк рд╕реЗ рдХреЗрд╡рд▓ рд▓реЙрдЧрд┐рдВрдЧ рдХреА рдЕрдиреБрдорддрд┐ рджреЗрддрд╛ рд╣реИ рдФрд░ рдХреБрдЫ рдирд╣реАрдВред

рдиреНрдпреВрдирддрдо рд╡рд┐рд╢реЗрд╖рд╛рдзрд┐рдХрд╛рд░ рд╕рд┐рджреНрдзрд╛рдВрдд рд▓рд╛рдЧреВ рдХрд░реЗрдВ

"*" рдХрд╛ рдЙрдкрдпреЛрдЧ actions рдпрд╛ resources рдореЗрдВ рддрднреА рдХрд░реЗрдВ рдЬрдм рдмрд┐рд▓реНрдХреБрд▓ рдЖрд╡рд╢реНрдпрдХ рд╣реЛред

рдЙрджрд╛рд╣рд░рдг:

lambda_fn.add_to_role_policy(
    iam.PolicyStatement(
        actions=["*"],
        resources=["*"]
    )
)

рдЖрдк рдЙрдкрд▓рдмреНрдз рд╣реЛрдиреЗ рдкрд░ рд╕рдВрд╕рд╛рдзрди-рд╡рд┐рд╢рд┐рд╖реНрдЯ рдЧреНрд░рд╛рдВрдЯреНрд╕ рдХрд╛ рднреА рдЙрдкрдпреЛрдЧ рдХрд░ рд╕рдХрддреЗ рд╣реИрдВ:

bucket.grant_read(lambda_fn)

рдпрд╣ рд╕реНрд╡рддрдГ рдЖрд╡рд╢реНрдпрдХ рдкреЙрд▓рд┐рд╕реА рдЬреЗрдирд░реЗрдЯ рдХрд░рддрд╛ рд╣реИ рдЬреЛ S3 рдмрдХреЗрдЯ рддрдХ рд╕реНрдХреЛрдкреНрдб рдПрдХреНрд╕реЗрд╕ рджреЗрддрд╛ рд╣реИред

рд╕рдВрднрд╡ рд╣реЛ рддреЛ рдореИрдиреЗрдЬреНрдб рдкреЙрд▓рд┐рд╕реАрдЬрд╝ рдХрд╛ рдЙрдкрдпреЛрдЧ рдХрд░реЗрдВ

AWS-рдореИрдиреЗрдЬреНрдб рдкреЙрд▓рд┐рд╕реАрдЬрд╝ рдореЗрдВрдЯреЗрдиреЗрдВрд╕ рдХреЛ рд╕рд░рд▓ рдХрд░рддреА рд╣реИрдВ рдФрд░ рддреНрд░реБрдЯрд┐рдпреЛрдВ рдХреА рд╕рдВрднрд╛рд╡рдирд╛ рдХрдо рдХрд░рддреА рд╣реИрдВред

iam.ManagedPolicy.from_aws_managed_policy_name("AmazonSQSReadOnlyAccess")

рдЖрдк рдЗрдиреНрд╣реЗрдВ ECS, Batch рдпрд╛ Step Functions рдЬреИрд╕реА рд╕реЗрд╡рд╛рдУрдВ рдХреЗ рдХрд╕реНрдЯрдо рд░реЛрд▓реНрд╕ рд╕реЗ рдЕрдЯреИрдЪ рдХрд░ рд╕рдХрддреЗ рд╣реИрдВред

CI/CD рдЗрдВрдЯреАрдЧреНрд░реЗрд╢рди

AWS CDK рдЖрдзреБрдирд┐рдХ CI/CD рдкрд╛рдЗрдкрд▓рд╛рдЗрдиреНрд╕ рдХреЗ рд╕рд╛рде рдПрдХреАрдХреГрдд рд╣реЛрдиреЗ рдХреА рдЕрдкрдиреА рдХреНрд╖рдорддрд╛ рдХреЗ рдорд╛рдзреНрдпрдо рд╕реЗ рдЕрд╕рд╛рдзрд╛рд░рдг рд╢рдХреНрддрд┐ рдкреНрд░рджрд╛рди рдХрд░рддрд╛ рд╣реИред CDK рд╡рд░реНрд╢рди-рдХрдВрдЯреНрд░реЛрд▓реНрдб рдХреЛрдб рдбрд┐рдкреНрд▓реЙрдпрдореЗрдВрдЯ рдХреЗ рдЬрд╝рд░рд┐рдП рд╕реНрд╡рдЪрд╛рд▓рд┐рдд рдЗрдиреНрдлреНрд░рд╛рд╕реНрдЯреНрд░рдХреНрдЪрд░ рдбрд┐рд▓реАрд╡рд░реА рдХреЛ рд╕рдкреЛрд░реНрдЯ рдХрд░рддрд╛ рд╣реИ, рдЬреЛ GitHub, GitLab рдФрд░ AWS-рдиреЗрдЯрд┐рд╡ рд╕реЗрд╡рд╛рдУрдВ рдЬреИрд╕реЗ CodePipeline рдХреЗ рд╕рд╛рде рдХрд╛рдо рдХрд░рддрд╛ рд╣реИред рдпрд╣ рдкреНрд░рдгрд╛рд▓реА рдорд╛рдирд╡ рддреНрд░реБрдЯрд┐рдпреЛрдВ рдХреЛ рдХрдо рдХрд░рддреА рд╣реИ, рдлрд╝реАрдбрдмреИрдХ рдЪрдХреНрд░реЛрдВ рдХреЛ рдЫреЛрдЯрд╛ рдХрд░рддреА рд╣реИ, рдФрд░ рдХрдИ рдПрдирд╡рд╛рдпрд░рдирдореЗрдВрдЯреНрд╕ рдореЗрдВ рдбрд┐рдкреНрд▓реЙрдпрдореЗрдВрдЯ рд╕рдХреНрд╖рдо рдХрд░рддреА рд╣реИред

GitHub Actions: CDK рдбрд┐рдкреНрд▓реЙрдпрдореЗрдВрдЯреНрд╕ рдХреЛ рдСрдЯреЛрдореЗрдЯ рдХрд░рдирд╛

рдЖрдк GitHub Actions рдХрд╛ рдЙрдкрдпреЛрдЧ рд╣рд░ рдкреБрд╢ рдпрд╛ рдкреБрд▓ рд░рд┐рдХреНрд╡реЗрд╕реНрдЯ рдкрд░ CDK рд╕реНрдЯреИрдХреНрд╕ рдХреЛ synthesize, diff, test рдФрд░ deploy рдХрд░рдиреЗ рдХреЗ рд▓рд┐рдП рдХрд░ рд╕рдХрддреЗ рд╣реИрдВред

рдпрд╣ .github/workflows/deploy.yml рджреЗрдЦреЗрдВ:

name: Deploy CDK App

on:
  push:
    branches:
      - main

jobs:
  deploy:
    runs-on: ubuntu-latest

    steps:
      - uses: actions/checkout@v3

      - uses: actions/setup-python@v4
        with:
          python-version: 3.11

      - name: Install dependencies
        run: |
          pip install -r requirements.txt
          npm install -g aws-cdk

      - name: Run unit tests
        run: pytest

      - name: CDK Synth
        run: cdk synth -c environment=prod

      - name: Deploy to AWS
        run: cdk deploy --require-approval never
        env:
          AWS_ACCESS_KEY_ID: ${{ secrets.AWS_ACCESS_KEY_ID }}
          AWS_SECRET_ACCESS_KEY: ${{ secrets.AWS_SECRET_ACCESS_KEY }}

PRs рдореЗрдВ рдмрджрд▓рд╛рд╡реЛрдВ рдХрд╛ рдкреВрд░реНрд╡рд╛рд╡рд▓реЛрдХрди рдХрд░рдиреЗ рдХреЗ рд▓рд┐рдП cdk diff рдХрд╛ рдЙрдкрдпреЛрдЧ рдХрд░реЗрдВред

CDK рдкрд╛рдЗрдкрд▓рд╛рдЗрдиреНрд╕: CodePipeline рдХреЗ рд╕рд╛рде рдиреЗрдЯрд┐рд╡ CDK CI/CD

AWS рдХреЗ рднреАрддрд░ рдкреВрд░реНрдг-рдкреНрд░рдмрдВрдзрд┐рдд рдбрд┐рдкреНрд▓реЙрдпрдореЗрдВрдЯреНрд╕ рдХреЗ рд▓рд┐рдП, CDK aws_cdk.pipelines рдирд╛рдордХ рдореЙрдбреНрдпреВрд▓ рдкреНрд░рджрд╛рди рдХрд░рддрд╛ рд╣реИ, рдЬреЛ рдЖрдкрдХреЛ рдЕрдкрдиреА рдкреВрд░реА CI/CD рдкрд╛рдЗрдкрд▓рд╛рдЗрди рдХреЛ рднреА рдЗрдиреНрдлреНрд░рд╛рд╕реНрдЯреНрд░рдХреНрдЪрд░ рдХреА рддрд░рд╣ рдХреЛрдб рдХреЗ рд░реВрдк рдореЗрдВ рдкрд░рд┐рднрд╛рд╖рд┐рдд рдХрд░рдиреЗ рджреЗрддрд╛ рд╣реИред

рдпрд╣рд╛рдБ рдПрдХ рд╕рд░рд▓реАрдХреГрдд рдЙрджрд╛рд╣рд░рдг рд╣реИ:

from aws_cdk import pipelines, SecretValue, Stack
from constructs import Construct
from my_app_stage import MyAppStage  # replace with your actual stage import

class PipelineStack(Stack):
    def __init__(
        self,
        scope: Construct,
        construct_id: str,
        **kwargs
    ) -> None:
        super().__init__(scope, construct_id, **kwargs)

        # Define the source of the pipeline from a GitHub repository
        source = pipelines.CodePipelineSource.git_hub(
            repo_string="your-org/your-repo",  # GitHub org/repo
            branch="main",
            authentication=SecretValue.secrets_manager("GITHUB_TOKEN")
        )

        # Define the CodePipeline and its synthesis step
        pipeline = pipelines.CodePipeline(
            self,
            "MyAppPipeline",
            synth=pipelines.ShellStep(
                "Synth",
                input=source,
                commands=[
                    "pip install -r requirements.txt",
                    "npm install -g aws-cdk",
                    "cdk synth"
                ]
            )
        )

        # Add an application stage (e.g., production deployment)
        pipeline.add_stage(
            MyAppStage(self, "ProdStage")
        )

рдКрдкрд░ рджрд┐рдП рдХреЛрдб рдореЗрдВ:

  • SecretValue.secrets_manager("GITHUB_TOKEN") рдЖрдкрдХреЗ GitHub рдЯреЛрдХрди рдХреЛ Secrets Manager рд╕реЗ рд╕реБрд░рдХреНрд╖рд┐рдд рд░реВрдк рд╕реЗ рдкреНрд░рд╛рдкреНрдд рдХрд░рддрд╛ рд╣реИред
  • MyAppStage рдПрдХ рдХреНрд▓рд╛рд╕ рд╣реЛрдирд╛ рдЪрд╛рд╣рд┐рдП рдЬреЛ Stage рдХреЛ рдПрдХреНрд╕рдЯреЗрдВрдб рдХрд░рддрд╛ рд╣реИ рдФрд░ рдЖрдкрдХреЗ рд╡рд╛рд╕реНрддрд╡рд┐рдХ CDK рд╕реНрдЯреИрдХреНрд╕ рдХреЛ рд░реИрдк рдХрд░рддрд╛ рд╣реИред

рдпрджрд┐ рдЖрдк рдорд╢реАрди рд▓рд░реНрдирд┐рдВрдЧ рд╕рд┐рд╕реНрдЯрдореНрд╕ рдкрд░рд┐рдирд┐рдпреЛрдЬрд┐рдд рдХрд░ рд░рд╣реЗ рд╣реИрдВ, рддреЛ CDK рдХреЛ рдирд┐рд░рдВрддрд░ рдкрд░рд┐рдирд┐рдпреЛрдЬрди рдкреНрд░рдерд╛рдУрдВ рдХреЗ рд╕рд╛рде рдХреИрд╕реЗ рдЗрдВрдЯреАрдЧреНрд░реЗрдЯ рдХрд░реЗрдВ, рдпрд╣ рд╣рдорд╛рд░реЗ CI/CD for Machine Learning рдХреЛрд░реНрд╕ рдореЗрдВ рдХрд╡рд░ рдХрд┐рдпрд╛ рдЧрдпрд╛ рд╣реИред

рдирд┐рд╖реНрдХрд░реНрд╖

рдЗрд╕ рдЯреНрдпреВрдЯреЛрд░рд┐рдпрд▓ рдиреЗ рдЖрдкрдХреЛ AWS Cloud Development Kit (CDK) рдСрдкрд░реЗрд╢рдиреНрд╕ рдХреЗ рдорд╛рдзреНрдпрдо рд╕реЗ Python рдореЗрдВ рдХреНрд▓рд╛рдЙрдб рдЗрдиреНрдлреНрд░рд╛рд╕реНрдЯреНрд░рдХреНрдЪрд░ рдмрдирд╛рдирд╛ рдФрд░ рдкрд░рд┐рдирд┐рдпреЛрдЬрд┐рдд рдХрд░рдирд╛ рд╕рд┐рдЦрд╛рдпрд╛ред рдЖрдкрдиреЗ рд╕реАрдЦрд╛ рдХреИрд╕реЗ:

  • рдЕрдкрдирд╛ рдкрд╣рд▓рд╛ CDK рд╕реНрдЯреИрдХ рдмрдирд╛рдПрдБред
  • S3 рдмрдХреЗрдЯреНрд╕ рдФрд░ Lambda рдлрд╝рдВрдХреНрд╢рдВрд╕ рдХреЛ рд╕рдВрд╕рд╛рдзрди рдХреЗ рд░реВрдк рдореЗрдВ рдкрд░рд┐рднрд╛рд╖рд┐рдд рдФрд░ рд╡реИрд▓рд┐рдбреЗрдЯ рдХрд░реЗрдВред
  • рдХрд╕реНрдЯрдо рдХрдВрд╕реНрдЯреНрд░рдХреНрдЯреНрд╕ рдФрд░ рдорд▓реНрдЯреА-рд╕реНрдЯреИрдХ рдкреИрдЯрд░реНрдиреНрд╕ рдХреЗ рдорд╛рдзреНрдпрдо рд╕реЗ рдкреНрд░реЛрдЬреЗрдХреНрдЯ рдХреЛ рд╡реНрдпрд╡рд╕реНрдерд┐рдд рдХрд░реЗрдВред
  • рдиреНрдпреВрдирддрдо рд╡рд┐рд╢реЗрд╖рд╛рдзрд┐рдХрд╛рд░ рд╕рд┐рджреНрдзрд╛рдВрдд рдХреЗ рдЬрд╝рд░рд┐рдП рд╕реБрд░рдХреНрд╖рд╛ рд╕рд░реНрд╡реЛрддреНрддрдо рдкреНрд░рдерд╛рдПрдБ рд▓рд╛рдЧреВ рдХрд░реЗрдВред
  • GitHub Actions рдХреЛ CDK Pipelines рдХреЗ рд╕рд╛рде рдорд┐рд▓рд╛рдХрд░ рдбрд┐рдкреНрд▓реЙрдпрдореЗрдВрдЯреНрд╕ рдСрдЯреЛрдореЗрдЯ рдХрд░реЗрдВред
  • рдЕрдкрдиреА рдЗрдиреНрдлреНрд░рд╛рд╕реНрдЯреНрд░рдХреНрдЪрд░ рд▓реЙрдЬрд┐рдХ рдХреЛ рд╡реИрд▓рд┐рдбреЗрдЯ рдХрд░рдиреЗ рдХреЗ рд▓рд┐рдП рдЯреЗрд╕реНрдЯ рд▓рд┐рдЦреЗрдВред

рдЕрдм рдЬрдм рдЖрдкрдиреЗ рдЕрдкрдирд╛ рдкрд╣рд▓рд╛ CDK рдРрдк рдкрд░рд┐рдирд┐рдпреЛрдЬрд┐рдд рдХрд░ рд▓рд┐рдпрд╛ рд╣реИ, рддреЛ рдЖрдЧреЗ рдмрдврд╝рдиреЗ рдХреЗ рдХреБрдЫ рддрд░реАрдХреЗ рдпреЗ рд╣реИрдВ:

  • dev/staging/prod рдХреЗ рд▓рд┐рдП рдкреИрд░рд╛рдореАрдЯрд░рд╛рдЗрдЬрд╝реНрдб рдПрдирд╡рд╛рдпрд░рдирдореЗрдВрдЯреНрд╕ рдХрд╛ рдЙрдкрдпреЛрдЧ рдХрд░реЗрдВ
  • CloudWatch рдЕрд▓рд╛рд░реНрдореНрд╕, API Gateway, рдпрд╛ Step Functions рдЬреЛрдбрд╝реЗрдВ
  • aws_s3_deployment, aws_ecs_patterns, рдФрд░ cdk.pipelines рдЬреИрд╕реЗ CDK рдХрдВрд╕реНрдЯреНрд░рдХреНрдЯреНрд╕ рдХреЛ рдПрдХреНрд╕рдкреНрд▓реЛрд░ рдХрд░реЗрдВ
  • рдЕрдкрдиреЗ рдХрдВрд╕реНрдЯреНрд░рдХреНрдЯреНрд╕ рдХреЛ рдкреБрди: рдкреНрд░рдпреЛрдЬреНрдпрддрд╛ рдХреЗ рд▓рд┐рдП рдПрдХ рдЖрдВрддрд░рд┐рдХ Python рд▓рд╛рдЗрдмреНрд░реЗрд░реА рдореЗрдВ рдмрджрд▓реЗрдВ

рд╕реАрдЦрдирд╛ рдФрд░ рдмрд┐рд▓реНрдб рдХрд░рдирд╛ рдЬрд╛рд░реА рд░рдЦрдиреЗ рдХреЗ рд▓рд┐рдП, рдпрд╣ рдХреЛрд░реНрд╕ рджреЗрдЦреЗрдВ: Introduction to AWS Boto in Python!

FAQs

AWS CDK рдХреНрдпрд╛ рд╣реИ, рдФрд░ рдпрд╣ CloudFormation рдпрд╛ Terraform рд╕реЗ рдХреИрд╕реЗ рдЕрд▓рдЧ рд╣реИ?

AWS CDK рдЖрдкрдХреЛ Python рдЬреИрд╕реА рдкреНрд░реЛрдЧреНрд░рд╛рдорд┐рдВрдЧ рднрд╛рд╖рд╛рдУрдВ рдХрд╛ рдЙрдкрдпреЛрдЧ рдХрд░рдХреЗ рдХреНрд▓рд╛рдЙрдб рдЗрдиреНрдлреНрд░рд╛рд╕реНрдЯреНрд░рдХреНрдЪрд░ рдкрд░рд┐рднрд╛рд╖рд┐рдд рдХрд░рдиреЗ рджреЗрддрд╛ рд╣реИ, рдЬрдмрдХрд┐ CloudFormation рдФрд░ Terraform JSON/YAML рдпрд╛ HCL рдкрд░ рдирд┐рд░реНрднрд░ рд╣реИрдВред CDK рдХрдВрд╕реНрдЯреНрд░рдХреНрдЯреНрд╕ рдХреЗ рдорд╛рдзреНрдпрдо рд╕реЗ рдЙрдЪреНрдЪ рдПрдмреНрд╕реНрдЯреНрд░реИрдХреНрд╢рди рдФрд░ рдкреБрди: рдкреНрд░рдпреЛрдЬреНрдпрддрд╛ рдкреНрд░рджрд╛рди рдХрд░рддрд╛ рд╣реИред

рдХреНрдпрд╛ AWS CDK рдХрд╛ рдЙрдкрдпреЛрдЧ рдХрд░рдиреЗ рдХреЗ рд▓рд┐рдП рдореБрдЭреЗ CloudFormation рдЬрд╛рдирдирд╛ рдЬрд╝рд░реВрд░реА рд╣реИ?

рдирд╣реАрдВ, CDK CloudFormation рдХреА рдЕрдзрд┐рдХрд╛рдВрд╢ рдЬрдЯрд┐рд▓рддрд╛ рдХреЛ рдПрдмреНрд╕реНрдЯреНрд░реИрдХреНрдЯ рдХрд░ рджреЗрддрд╛ рд╣реИред рд╣рд╛рд▓рд╛рдБрдХрд┐, CloudFormation рдЬрд╛рдирдирд╛ рддрдм рдорджрджрдЧрд╛рд░ рд╣реЛрддрд╛ рд╣реИ рдЬрдм рдЖрдк рд▓реЛрдЕрд░-рд▓реЗрд╡рд▓ рдХрдВрд╕реНрдЯреНрд░рдХреНрдЯреНрд╕ рдХрд╛ рдЙрдкрдпреЛрдЧ рдХрд░рддреЗ рд╣реИрдВ рдпрд╛ рдбрд┐рдкреНрд▓реЙрдпрдореЗрдВрдЯреНрд╕ рдХреЛ рдЯреНрд░рдмрд▓рд╢реВрдЯ рдХрд░рддреЗ рд╣реИрдВред

рдХреНрдпрд╛ рдореИрдВ AWS CDK рдХреЗ рд╕рд╛рде рдХрдИ рдПрдирд╡рд╛рдпрд░рдирдореЗрдВрдЯреНрд╕ (рдЬреИрд╕реЗ, dev, prod) рдкрд░рд┐рдирд┐рдпреЛрдЬрд┐рдд рдХрд░ рд╕рдХрддрд╛/рд╕рдХрддреА рд╣реВрдБ?

рд╣рд╛рдБ! CDK рдХреЙрдиреНрдЯреЗрдХреНрд╕реНрдЯ рд╡реИрд▓реНрдпреВрдЬрд╝ рдФрд░ CLI рдлреНрд▓реИрдЧреНрд╕ рдЬреИрд╕реЗ cdk deploy -c env=prod рдХрд╛ рдЙрдкрдпреЛрдЧ рдХрд░ рдПрдирд╡рд╛рдпрд░рдирдореЗрдВрдЯ-рд╡рд┐рд╢рд┐рд╖реНрдЯ рдХреЙрдиреНрдлрд╝рд┐рдЧрд░реЗрд╢рди рд╕рдкреЛрд░реНрдЯ рдХрд░рддрд╛ рд╣реИред

рдореИрдВ рдЕрдкрдиреЗ CDK рдЗрдиреНрдлреНрд░рд╛рд╕реНрдЯреНрд░рдХреНрдЪрд░ рдХреЛрдб рдХрд╛ рдкрд░реАрдХреНрд╖рдг рдХреИрд╕реЗ рдХрд░реВрдБ?

рдЖрдк pytest рдХреЗ рд╕рд╛рде CDK рдХреЗ assertions рдФрд░ template рдореЙрдбреНрдпреВрд▓ рдХрд╛ рдЙрдкрдпреЛрдЧ рдХрд░ рдпреВрдирд┐рдЯ рдЯреЗрд╕реНрдЯ рд▓рд┐рдЦ рд╕рдХрддреЗ рд╣реИрдВ, рдЬреЛ рдкрд░рд┐рдирд┐рдпреЛрдЬрди рд╕реЗ рдкрд╣рд▓реЗ рдЖрдкрдХреЗ рд╕реНрдЯреИрдХ рдХреЗ рд╕рдВрд╕рд╛рдзрдиреЛрдВ рдФрд░ рдХреЙрдиреНрдлрд╝рд┐рдЧрд░реЗрд╢рди рдХреЛ рд╡реЗрд░рд┐рдлрд╝рд╛рдИ рдХрд░рддреЗ рд╣реИрдВред

рдЬрдм рдореИрдВ cdk deploy рдЪрд▓рд╛рддрд╛/рдЪрд▓рд╛рддреА рд╣реВрдБ, рддреЛ рдЕрдВрджрд░ рдХреНрдпрд╛ рд╣реЛрддрд╛ рд╣реИ?

cdk deploy рдЖрдкрдХрд╛ Python рдХреЛрдб CloudFormation рдЯреЗрдореНрдкрд▓реЗрдЯ рдореЗрдВ рд╕рд┐рдВрдереЗрд╕рд╛рдЗрдЬрд╝ рдХрд░рддрд╛ рд╣реИ, рдЙрд╕реЗ AWS рдкрд░ рдЕрдкрд▓реЛрдб рдХрд░рддрд╛ рд╣реИ, рдФрд░ рдЖрдкрдХреЗ рдЦрд╛рддреЗ рдореЗрдВ рдкрд░рд┐рднрд╛рд╖рд┐рдд рд╕рдВрд╕рд╛рдзрди рдкреНрд░реЛрд╡рд┐рдЬрд╝рди рдХрд░рддрд╛ рд╣реИред

Rahul Sharma

рд▓реЗрдЦрдХ

Rahul Sharma

рд░рд╛рд╣реБрд▓ рд╢рд░реНрдорд╛ AWS рдПрдВрдмреЗрд╕рдбрд░, DevOps рдЖрд░реНрдХрд┐рдЯреЗрдХреНрдЯ, рдФрд░ рддрдХрдиреАрдХреА рдмреНрд▓реЙрдЧрд░ рд╣реИрдВ, рдЬреЛ рдХреНрд▓рд╛рдЙрдб рдХрдВрдкреНрдпреВрдЯрд┐рдВрдЧ, DevOps рдкреНрд░рдерд╛рдУрдВ рдФрд░ рдУрдкрдитАСрд╕реЛрд░реНрд╕ рддрдХрдиреАрдХреЛрдВ рдореЗрдВ рд╡рд┐рд╢реЗрд╖рдЬреНрдЮрддрд╛ рд░рдЦрддреЗ рд╣реИрдВред AWS, Kubernetes, рдФрд░ Terraform рдореЗрдВ рдЙрдирдХреА рд╡рд┐рд╢реЗрд╖рдЬреНрдЮрддрд╛ рдХреЗ рд╕рд╛рде, рд╡реЗ рд░реЛрдЪрдХ рд▓реЗрдЦреЛрдВ рдФрд░ рдЯреНрдпреВрдЯреЛрд░рд┐рдпрд▓реНрд╕ рдХреЗ рдорд╛рдзреНрдпрдо рд╕реЗ рдЬрдЯрд┐рд▓ рдЕрд╡рдзрд╛рд░рдгрд╛рдУрдВ рдХреЛ рд╕реАрдЦрдиреЗ рд╡рд╛рд▓реЛрдВ рдФрд░ рдкреЗрд╢реЗрд╡рд░реЛрдВ рдХреЗ рд▓рд┐рдП рд╕рд░рд▓ рдмрдирд╛рддреЗ рд╣реИрдВред рд░рд╛рд╣реБрд▓ DevOps рд╕реЗ рдЬреБрдбрд╝реА рдЪреБрдиреМрддрд┐рдпреЛрдВ рдХреЛ рд╕реБрд▓рдЭрд╛рдиреЗ рдФрд░ рддрдХрдиреАрдХреА рд╕рдореБрджрд╛рдп рдХреЛ рд╕рд╢рдХреНрдд рдмрдирд╛рдиреЗ рдХреЗ рд▓рд┐рдП рдЕрдкрдиреА рдЕрдВрддрд░реНрджреГрд╖реНрдЯрд┐рдпрд╛рдБ рд╕рд╛рдЭрд╛ рдХрд░рдиреЗ рдХреЗ рдкреНрд░рддрд┐ рдЙрддреНрд╕рд╛рд╣реА рд╣реИрдВред

рд╡рд┐рд╖рдп