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 рдЯреЗрдореНрдкрд▓реЗрдЯреНрд╕ рдЖрдЙрдЯрдкреБрдЯ рдХрд░рддрд╛ рд╣реИ

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

рдХрдЪреНрдЪреЗ 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 рдЯреНрд░реИрдХ рдПрдХ рдЙрддреНрдХреГрд╖реНрдЯ рд╢реБрд░реБрдЖрдд рд╣реИред
рдПрдбрдорд┐рдирд┐рд╕реНрдЯреНрд░реЗрдЯрд░ рдпреВрдЬрд╝рд░
рдЖрдЧреЗ рдмрдврд╝рдиреЗ рдХреЗ рд▓рд┐рдП рдЖрдкрдХреЛ рдкреНрд░реЛрдЧреНрд░рд╛рдореЗрдЯрд┐рдХ рдПрдХреНрд╕реЗрд╕ рдФрд░ рдкреВрд░реНрдг рдкрд░рдорд┐рд╢рди рд╡рд╛рд▓рд╛ рдпреВрдЬрд╝рд░ рдЪрд╛рд╣рд┐рдПред
рдЕрдВрддрд┐рдо рд╕реНрдХреНрд░реАрди рдкрд░, рдЕрдкрдиреЗ Access key ID рдФрд░ Secret access key рдиреЛрдЯ рдХрд░ рд▓реЗрдВред рдЖрдкрдХреЛ рдЗрдирдХреА рдЬрд╝рд░реВрд░рдд рдЕрдЧрд▓реЗ рдЪрд░рдг рдореЗрдВ рдкрдбрд╝реЗрдЧреАред
рдЕрдкрдиреЗ AWS рдХреНрд░реЗрдбреЗрдВрд╢рд┐рдпрд▓реНрд╕ рдХреЙрдиреНрдлрд╝рд┐рдЧрд░ рдХрд░реЗрдВ
рдПрдХ рдЯрд░реНрдорд┐рдирд▓ рдЦреЛрд▓реЗрдВ рдФрд░ рдЪрд▓рд╛рдПрдБ:
рдЖрдкрд╕реЗ IAM рдХрдВрд╕реЛрд▓ рд╕реЗ рдорд┐рд▓реЗ рдХреНрд░реЗрдбреЗрдВрд╢рд┐рдпрд▓ рджрд░реНрдЬ рдХрд░рдиреЗ рдХреЗ рд▓рд┐рдП рдХрд╣рд╛ рдЬрд╛рдПрдЧрд╛:
рдбреЗрд╡рд▓рдкрдореЗрдВрдЯ рдХреЗ рд▓рд┐рдП IDE рдЪреБрдиреЗрдВ
AWS CDK рдбреЗрд╡рд▓рдкрд░реНрд╕ рдХреЛ YAML рдпрд╛ JSON рдЯреЗрдореНрдкрд▓реЗрдЯреНрд╕ рдХреЗ рдмрдЬрд╛рдп рдПрдХ рд╕рдВрдкреВрд░реНрдг рдкреНрд░реЛрдЧреНрд░рд╛рдорд┐рдВрдЧ рд╡рд╛рддрд╛рд╡рд░рдг рдореЗрдВ рдХрд╛рдо рдХрд░рдиреЗ рджреЗрддрд╛ рд╣реИред рдпрд╣ рдлреБрд▓-рдлреАрдЪрд░ рд╡рд╛рддрд╛рд╡рд░рдг рдЖрдкрдХреЛ рдЕрдкрдиреА рдкрд╕рдВрдж рдХрд╛ IDE рдЗрд╕реНрддреЗрдорд╛рд▓ рдХрд░рдиреЗ рдХреЗ рд╕рд╛рде-рд╕рд╛рде рдХреЛрдб рдХрдореНрдкреНрд▓реАрд╢рди, рд░реАрдпрд▓-рдЯрд╛рдЗрдо рд▓рд┐рдВрдЯрд┐рдВрдЧ рдФрд░ рд░рд┐рдлреИрдХреНрдЯрд░рд┐рдВрдЧ рдЯреВрд▓реНрд╕ рдХрд╛ рд▓рд╛рдн рджреЗрддрд╛ рд╣реИ, рдЬрд┐рд╕рд╕реЗ рдЗрдиреНрдлреНрд░рд╛рд╕реНрдЯреНрд░рдХреНрдЪрд░ рдХреЛрдб рдореИрдиреЗрдЬрдореЗрдВрдЯ рдХреБрд╢рд▓ рдмрдирддрд╛ рд╣реИред
Python CDK рдХреЗ рд╕рд╛рде рдмреЗрд╣рддрд░реАрди рдбреЗрд╡рд▓рдкрдореЗрдВрдЯ рдЕрдиреБрднрд╡ рдХреЗ рд▓рд┐рдП, рдРрд╕рд╛ IDE рдЪреБрдиреЗрдВ рдЬреЛ рдирд┐рдореНрдирд▓рд┐рдЦрд┐рдд рд╕рдкреЛрд░реНрдЯ рдХрд░рддрд╛ рд╣реЛ:
Python рдФрд░ pip рдЗрдВрд╕реНрдЯреЙрд▓ рдХрд░реЗрдВ
AWS CDK рдХреЛ Python рдХреЗ рд╕рд╛рде рдЙрдкрдпреЛрдЧ рдХрд░рдиреЗ рдХреЗ рд▓рд┐рдП, рдЖрдкрдХреЗ рд╕рд┐рд╕реНрдЯрдо рдореЗрдВ Python рд╕рдВрд╕реНрдХрд░рдг 3.8 рдпрд╛ рдЙрд╕рд╕реЗ рдКрдкрд░ рдЗрдВрд╕реНрдЯреЙрд▓ рд╣реЛрдирд╛ рдЪрд╛рд╣рд┐рдПред рдпрджрд┐ рдЕрднреА рддрдХ рдирд╣реАрдВ рд╣реИ, рддреЛ рдирд╡реАрдирддрдо рд╕рдВрд╕реНрдХрд░рдг рдЖрдзрд┐рдХрд╛рд░рд┐рдХ Python рд╡реЗрдмрд╕рд╛рдЗрдЯ рд╕реЗ рдбрд╛рдЙрдирд▓реЛрдб рдХрд░реЗрдВред
рдпрджрд┐ рдЖрдк Windows рдкрд░ рд╣реИрдВ, рддреЛ рд╕реБрдирд┐рд╢реНрдЪрд┐рдд рдХрд░реЗрдВ рдХрд┐ Python рдЖрдкрдХреЗ рд╕рд┐рд╕реНрдЯрдо рдХреЗ
PATHрдПрдирд╡рд╛рдпрд░рдирдореЗрдВрдЯ рд╡реЗрд░рд┐рдПрдмрд▓ рдореЗрдВ рдЬреЛрдбрд╝рд╛ рдЧрдпрд╛ рд╣реИред рдЬрд╛рдВрдЪрдиреЗ рдХреЗ рд▓рд┐рдП, рдЯрд░реНрдорд┐рдирд▓ рдпрд╛ рдХрдорд╛рдВрдб рдкреНрд░реЙрдореНрдкреНрдЯ рдЦреЛрд▓реЗрдВ рдФрд░ рдЪрд▓рд╛рдПрдБ:рдпрджрд┐ тАЬcommand not foundтАЭ рдпрд╛ рдЗрд╕реА рддрд░рд╣ рдХреА рддреНрд░реБрдЯрд┐ рджрд┐рдЦреЗ, рддреЛ рд╕рдВрднрд╡рддрдГ Python рдЖрдкрдХреЗ
PATHрдореЗрдВ рдирд╣реАрдВ рд╣реИред рд╕рдмрд╕реЗ рдЖрд╕рд╛рди рдЙрдкрд╛рдп рдЗрдВрд╕реНрдЯреЙрд▓реЗрд╢рди рдХреЗ рджреМрд░рд╛рди тАЬAdd Python 3.x to PATHтАЭ рдмреЙрдХреНрд╕ рдХреЛ рдЪреБрдирдирд╛ рд╣реИредрдЖрдкрдХреЛ pip рдХреА рднреА рдЖрд╡рд╢реНрдпрдХрддрд╛ рд╣реЛрдЧреА, рдЬреЛ рдХрд┐ Python рдкреИрдХреЗрдЬ рдЗрдВрд╕реНрдЯреЙрд▓рд░ рд╣реИ, рддрд╛рдХрд┐ рдЖрдЧреЗ рдЪрд▓рдХрд░ AWS CDK рдбрд┐рдкреЗрдВрдбреЗрдВрд╕реАрдЬрд╝ рдЗрдВрд╕реНрдЯреЙрд▓ рдХреА рдЬрд╛ рд╕рдХреЗрдВред рдЕрдзрд┐рдХрддрд░ рдЖрдзреБрдирд┐рдХ Python рдбрд┐рд╕реНрдЯреНрд░реАрдмреНрдпреВрд╢рдВрд╕ рдореЗрдВ pip рдкрд╣рд▓реЗ рд╕реЗ рдЖрддрд╛ рд╣реИред
рдпрджрд┐ рдпрд╣ рдЗрдВрд╕реНрдЯреЙрд▓ рдирд╣реАрдВ рд╣реИ, рддреЛ рдЖрдзрд┐рдХрд╛рд░рд┐рдХ pip рдЗрдВрд╕реНрдЯреЙрд▓реЗрд╢рди рдЧрд╛рдЗрдб рдХрд╛ рдкрд╛рд▓рди рдХрд░реЗрдВред
AWS CDK рдХреЗ рд╕рд╛рде рд╢реБрд░реБрдЖрдд
рдХреЛрдИ рднреА рдХреЛрдб рд▓рд┐рдЦрдиреЗ рд╕реЗ рдкрд╣рд▓реЗ, рдпрд╣ рд╕рдордЭрдирд╛ рдЬрд╝рд░реВрд░реА рд╣реИ рдХрд┐ AWS CDK рдХреНрдпрд╛ рд╣реИ, рдпрд╣ рдХреНрдпреЛрдВ рдореМрдЬреВрдж рд╣реИ, рдФрд░ рдЗрдиреНрдлреНрд░рд╛рд╕реНрдЯреНрд░рдХреНрдЪрд░ рдРрдЬрд╝ рдХреЛрдб (IaC) рдХреА рд╡реНрдпрд╛рдкрдХ рджреБрдирд┐рдпрд╛ рдореЗрдВ рдпрд╣ рдХреИрд╕реЗ рдлрд┐рдЯ рдмреИрдарддрд╛ рд╣реИред рдЗрд╕ рд╕реЗрдХреНрд╢рди рдореЗрдВ рд╣рдо CDK рдХреЗ рдореБрдЦреНрдп рдХреЙрдиреНрд╕реЗрдкреНрдЯреНрд╕ рд╕реЗ рдкрд░рд┐рдЪрдп рдХрд░рд╛рдПрдВрдЧреЗ рдФрд░ рджрд┐рдЦрд╛рдПрдБрдЧреЗ рдХрд┐ рдпрд╣ рдЕрдиреНрдп рд▓реЛрдХрдкреНрд░рд┐рдп IaC рдЯреВрд▓реНрд╕ рдХреА рддреБрд▓рдирд╛ рдореЗрдВ рдХреИрд╕рд╛ рд╣реИред
AWS CDK рдХреНрдпрд╛ рд╣реИ рдФрд░ рдЗрд╕рдХрд╛ рдЙрдкрдпреЛрдЧ рдХреНрдпреЛрдВ рдХрд┐рдпрд╛ рдЬрд╛рддрд╛ рд╣реИ?
AWS Cloud Development Kit (CDK) рдПрдХ рдУрдкрди-рд╕реЛрд░реНрд╕ рдлреНрд░реЗрдорд╡рд░реНрдХ рд╣реИ рдЬреЛ рдЙрдкрдпреЛрдЧрдХрд░реНрддрд╛рдУрдВ рдХреЛ Python, TypeScript, Java рдФрд░ C# рд╕рд╣рд┐рдд рдкрд░рд┐рдЪрд┐рдд рдкреНрд░реЛрдЧреНрд░рд╛рдорд┐рдВрдЧ рднрд╛рд╖рд╛рдУрдВ рдХреЗ рдорд╛рдзреНрдпрдо рд╕реЗ рдХреНрд▓рд╛рдЙрдб рдЗрдиреНрдлреНрд░рд╛рд╕реНрдЯреНрд░рдХреНрдЪрд░ рдмрдирд╛рдиреЗ рдореЗрдВ рд╕рдХреНрд╖рдо рдмрдирд╛рддрд╛ рд╣реИред┬а
CDK рдЙрдкрдпреЛрдЧрдХрд░реНрддрд╛рдУрдВ рдХреЛ рдореИрдиреБрдЕрд▓ JSON рдпрд╛ YAML рдЯреЗрдореНрдкрд▓реЗрдЯ рд▓рд┐рдЦрдиреЗ рдХреЗ рдмрдЬрд╛рдп рд╡рд╛рд╕реНрддрд╡рд┐рдХ рдХреЛрдб рдХреЗ рдЬрд╝рд░рд┐рдП рдкреНрд░реЛрдЧреНрд░рд╛рдореЗрдЯрд┐рдХрд▓реА CloudFormation рдЯреЗрдореНрдкрд▓реЗрдЯ рдЬрдирд░реЗрдЯ рдХрд░рдиреЗ рджреЗрддрд╛ рд╣реИред
рдЗрд╕рдХрд╛ рдорддрд▓рдм рдЖрдк рдХрд░ рд╕рдХрддреЗ рд╣реИрдВ:
рдореВрд▓ рд░реВрдк рд╕реЗ, CDK рддреАрди рдореБрдЦреНрдп рдЕрд╡рдзрд╛рд░рдгрд╛рдУрдВ рдХреЗ рдЗрд░реНрдж-рдЧрд┐рд░реНрдж рдХрд╛рд░реНрдп рдХрд░рддрд╛ рд╣реИ:
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 рдХрдИ рдкреНрд░реЛрдЧреНрд░рд╛рдорд┐рдВрдЧ рднрд╛рд╖рд╛рдУрдВ рдХреЛ рд╕рдкреЛрд░реНрдЯ рдХрд░рддрд╛ рд╣реИ, рдЬрд┐рд╕рд╕реЗ рдбреЗрд╡рд▓рдкрд░реНрд╕ рдЕрдкрдиреА рд╕реБрд╡рд┐рдзрд╛рдиреБрд╕рд╛рд░ рднрд╛рд╖рд╛ рдЪреБрди рд╕рдХрддреЗ рд╣реИрдВ:
рдЗрд╕ рдЯреНрдпреВрдЯреЛрд░рд┐рдпрд▓ рдореЗрдВ, рд╣рдо Python рдкрд░ рдлреЛрдХрд╕ рдХрд░реЗрдВрдЧреЗ, рд▓реЗрдХрд┐рди рдореБрдЦреНрдп рдХреЙрдиреНрд╕реЗрдкреНрдЯреНрд╕ рд╕рднреА рд╕рдорд░реНрдерд┐рдд рднрд╛рд╖рд╛рдУрдВ рдкрд░ рд╕рдорд╛рди рд░реВрдк рд╕реЗ рд▓рд╛рдЧреВ рд╣реЛрддреЗ рд╣реИрдВред
рдЗрдВрд╕реНрдЯреЙрд▓реЗрд╢рди рдФрд░ рд╕реЗрдЯрдЕрдк
рдЕрдм рдЬрдм рдЖрдкрдХрд╛ рд╡рд╛рддрд╛рд╡рд░рдг рддреИрдпрд╛рд░ рд╣реИ, рддреЛ Python рдХрд╛ рдЙрдкрдпреЛрдЧ рдХрд░рдХреЗ рдЕрдкрдирд╛ рдкрд╣рд▓рд╛ AWS CDK рдРрдк рд╕реНрдХреИрдлреЛрд▓реНрдб рдХрд░рдиреЗ рдХрд╛ рд╕рдордп рд╣реИред CDK рдХрд╛
initрдХрдорд╛рдВрдб рдкреВрд░реЗ рдкреНрд░реЛрдЬреЗрдХреНрдЯ рд╕реНрдЯреНрд░рдХреНрдЪрд░тАФрдлрд╛рдЗрд▓реНрд╕, рдбрд╛рдпрд░реЗрдХреНрдЯрд░реАрдЬрд╝ рдФрд░ рд╡рд░реНрдЪреБрдЕрд▓ рдПрдирд╡рд╛рдпрд░рдирдореЗрдВрдЯ рд╕рд╣рд┐рддтАФрд╕реЗрдЯ рдХрд░ рджреЗрддрд╛ рд╣реИ, рдЬрд┐рд╕рд╕реЗ рдЖрдк рдЬрд▓реНрджреА рд╢реБрд░реБрдЖрдд рдХрд░ рд╕рдХреЗрдВредрдкреНрд░реЛрдЬреЗрдХреНрдЯ рдбрд╛рдпрд░реЗрдХреНрдЯрд░реА рдмрдирд╛рдПрдВ
рдЕрдкрдирд╛ рдЯрд░реНрдорд┐рдирд▓ рдЦреЛрд▓реЗрдВ рдФрд░ рдирдпрд╛ рдбрд╛рдпрд░реЗрдХреНрдЯрд░реА рдмрдирд╛рдиреЗ рддрдерд╛ рдЙрд╕рдореЗрдВ рдЬрд╛рдиреЗ рдХреЗ рд▓рд┐рдП рдпрд╣ рдХрдорд╛рдВрдб рдЪрд▓рд╛рдПрдБ:
CDK рдРрдк рдЗрдирд┐рд╢рд┐рдпрд▓рд╛рдЗрдЬрд╝ рдХрд░реЗрдВ
рдпрд╣ рдПрдХ рд╕реНрдЯрд╛рд░реНрдЯрд░ рдкреНрд░реЛрдЬреЗрдХреНрдЯ рдмрдирд╛рддрд╛ рд╣реИ рдЬреЛ рдПрдХ рдмреЗрд╕рд┐рдХ рдЙрджрд╛рд╣рд░рдг рдХреЗ рд╕рд╛рде рдкреНрд░реА-рдХреЙрдиреНрдлрд╝рд┐рдЧрд░реНрдб рдЖрддрд╛ рд╣реИ, рдЬрд┐рд╕рдореЗрдВ рд╢рд╛рдорд┐рд▓ рд╣реИрдВ:
cdk_datacamp_stack)cdk.jsonрдлрд╛рдЗрд▓ рдЬреЛ рдмрддрд╛рддреА рд╣реИ рдЖрдкрдХрд╛ CDK рдРрдк рдХреИрд╕реЗ рдЪрд▓рддрд╛ рд╣реИ.venvрдореЗрдВ)рдХрдорд╛рдВрдб рдкреВрд░рд╛ рд╣реЛрдиреЗ рдкрд░, рдЖрдкрдХреЛ рдХреБрдЫ рдРрд╕рд╛ рдЖрдЙрдЯрдкреБрдЯ рджрд┐рдЦреЗрдЧрд╛:
CDK Python рдкреНрд░реЛрдЬреЗрдХреНрдЯ рд╕реНрдХреИрдлреЛрд▓реНрдб
рд╡рд░реНрдЪреБрдЕрд▓ рдПрдирд╡рд╛рдпрд░рдирдореЗрдВрдЯ рд╕реЗрдЯрдЕрдк
рдпрджрд┐
cdk initрдкреНрд░рдХреНрд░рд┐рдпрд╛ рд╕реНрд╡рддрдГ рд╡рд░реНрдЪреБрдЕрд▓ рдПрдирд╡рд╛рдпрд░рдирдореЗрдВрдЯ рдирд╣реАрдВ рдмрдирд╛рддреА, рддреЛ рдЖрдк рдЗрд╕реЗ рдореИрдиреНрдпреБрдЕрд▓реА рдХрд░ рд╕рдХрддреЗ рд╣реИрдВ:рдПрдХреНрдЯрд┐рд╡реЗрдЯ рд╣реЛрдиреЗ рдХреЗ рдмрд╛рдж, рдЖрд╡рд╢реНрдпрдХ рдбрд┐рдкреЗрдВрдбреЗрдВрд╕реАрдЬрд╝ рдЗрдВрд╕реНрдЯреЙрд▓ рдХрд░реЗрдВ:
CDK рдХреЙрдиреНрд╕реЗрдкреНрдЯреНрд╕ рдХреЛ рд╕рдордЭрдирд╛
рдХреЛрдб рдореЗрдВ рдЧрд╣рд░рд╛рдИ рддрдХ рдЬрд╛рдиреЗ рд╕реЗ рдкрд╣рд▓реЗ, рдЖрдЗрдП рджреЗрдЦреЗрдВ рдХрд┐ AWS CDK рдХреЗ рдореВрд▓ рдШрдЯрдХтАФрдРрдкреНрд╕, рд╕реНрдЯреИрдХреНрд╕ рдФрд░ рдХрдВрд╕реНрдЯреНрд░рдХреНрдЯреНрд╕тАФрд╡реНрдпрд╡рд╣рд╛рд░ рдореЗрдВ рдПрдХ рд╕рд╛рде рдХреИрд╕реЗ рдХрд╛рдо рдХрд░рддреЗ рд╣реИрдВред рдЕрдм рдЬрдм рдЖрдк рдЬрд╛рдирддреЗ рд╣реИрдВ рдХрд┐ рдкреНрд░рддреНрдпреЗрдХ рдХреНрдпрд╛ рджрд░реНрд╢рд╛рддрд╛ рд╣реИ, рддреЛ рдпрд╣ рд╕рдордЭрдирд╛ рдЬрд╝рд░реВрд░реА рд╣реИ рдХрд┐ рд╡реЗ рдорд┐рд▓рдХрд░ рд╕реНрдХреЗрд▓реЗрдмрд▓, рдореЙрдбреНрдпреВрд▓рд░ рдЗрдиреНрдлреНрд░рд╛рд╕реНрдЯреНрд░рдХреНрдЪрд░ рдХреИрд╕реЗ рдмрдирд╛рддреЗ рд╣реИрдВред┬а
рд╣рдо рдХрдВрд╕реНрдЯреНрд░рдХреНрдЯреНрд╕ рдХреЗ рд╡рд┐рднрд┐рдиреНрди рд╕реНрддрд░реЛрдВ (L1, L2, L3) рдХреЛ рднреА рддреЛрдбрд╝рдХрд░ рд╕рдордЭреЗрдВрдЧреЗ рдФрд░ рдЙрди CDK рд▓рд╛рдЗрдмреНрд░реЗрд░реАрдЬрд╝ рдХреА рдЬрд╛рдБрдЪ рдХрд░реЗрдВрдЧреЗ рдЬреЛ рдпрд╣ рд╕рдВрднрд╡ рдмрдирд╛рддреА рд╣реИрдВред
рдРрдкреНрд╕, рд╕реНрдЯреИрдХреНрд╕ рдФрд░ рдХрдВрд╕реНрдЯреНрд░рдХреНрдЯреНрд╕
рдкрд┐рдЫрд▓реЗ рд╕реЗрдХреНрд╢рдиреЛрдВ рд╕реЗ рдЖрдк App, Stack рдФрд░ Construct рдХреЗ рдмрд╛рд░реЗ рдореЗрдВ рдЬрд╛рди рдЪреБрдХреЗ рд╣реИрдВ, рдЕрдм рд╕рдордЭрддреЗ рд╣реИрдВ рдХрд┐ рдпреЗ CDK рдПрдкреНрд▓рд┐рдХреЗрд╢рди рдореЗрдВ рдПрдХ рд╕рд╛рде рдХреИрд╕реЗ рдХрд╛рдо рдХрд░рддреЗ рд╣реИрдВред
рдЗрд╕реЗ рдШрд░ рдмрдирд╛рдиреЗ рдЬреИрд╕рд╛ рд╕рдордЭреЗрдВ:
рдХреЛрдб рдореЗрдВ, рд╕рдВрдмрдВрдз рдХреБрдЫ рдЗрд╕ рддрд░рд╣ рджрд┐рдЦрддрд╛ рд╣реИ:
рдпрд╣рд╛рдБ, 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 рдмрдХреЗрдЯ рдмрдирд╛рдиреЗ рдХреЗ рд▓рд┐рдП:
рдпрд╣ рдЙрджрд╛рд╣рд░рдг L2 рдХрдВрд╕реНрдЯреНрд░рдХреНрдЯ
s3.BucketрдХрд╛ рдЙрдкрдпреЛрдЧ рдХрд░рддрд╛ рд╣реИ, рдЬрд┐рд╕рдореЗрдВ рдПрдиреНрдХреНрд░рд┐рдкреНрд╢рди рдФрд░ рд╡рд░реНрдЬрд╝рдирд┐рдВрдЧ рд╡рд┐рдХрд▓реНрдк рдЬреИрд╕реЗ рдмрд┐рд▓реНрдЯ-рдЗрди рдбрд┐рдлрд╝реЙрд▓реНрдЯ рд╢рд╛рдорд┐рд▓ рд╣реЛрддреЗ рд╣реИрдВредрдпрджрд┐ рдЖрдкрдХреЛ рдХреЛрдИ рджреВрд╕рд░реА рд╕реЗрд╡рд╛ рдЙрдкрдпреЛрдЧ рдХрд░рдиреА рд╣реЛ, рддреЛ рдЙрд╕реА рддрд░рд╣ рдЙрд╕рдХрд╛ рдореЙрдбреНрдпреВрд▓ рдЗрдореНрдкреЛрд░реНрдЯ рдХрд░реЗрдВ:
рдиреЛрдЯ: рдЕрдкрдиреЗ
requirements.txtрдореЗрдВ рд╕рд╛рдорд╛рдиреНрдпрддрдГ рдЖрдкрдХреЛ рд╕рд┐рд░реНрдлрд╝ рдпрд╣ рдЪрд╛рд╣рд┐рдП рд╣реЛрддрд╛ рд╣реИ:рдпреЗ рджреЛ рдкреИрдХреЗрдЬ рдЖрдкрдХреЛ рд╕рднреА AWS CDK рдХрдВрд╕реНрдЯреНрд░рдХреНрдЯреНрд╕ рдФрд░ рдХреЛрд░ рдлреНрд░реЗрдорд╡рд░реНрдХ рдлрдВрдХреНрд╢рдиреИрд▓рд┐рдЯреА рддрдХ рдкрд╣реБрдБрдЪ рджреЗрддреЗ рд╣реИрдВред
рдЕрдкрдирд╛ рдкрд╣рд▓рд╛ CDK рд╕реНрдЯреИрдХ рдмрдирд╛рдирд╛
AWS CDK рдХреЗ рдЖрдВрддрд░рд┐рдХ рд╕рдВрдЪрд╛рд▓рди рдХреЗ рдмрд╛рд░реЗ рдореЗрдВ рдЬрд╛рди рд▓реЗрдиреЗ рдХреЗ рдмрд╛рдж, рдЕрдм рдЖрдк рдЗрд╕реЗ рд▓рд╛рдЧреВ рдХрд░ рд╕рдХрддреЗ рд╣реИрдВред рдирд┐рдореНрди рд╕реЗрдХреНрд╢рди Python рдХрд╛ рдЙрдкрдпреЛрдЧ рдХрд░рдХреЗ рдПрдХ рдСрдкрд░реЗрд╢рдирд▓ CDK рд╕реНрдЯреИрдХ рдмрдирд╛рдиреЗ рдХреЗ рд▓рд┐рдП рдорд╛рд░реНрдЧрджрд░реНрд╢рди рдХрд░рддрд╛ рд╣реИред рдЖрдк рдХреЛрдб рдХреЗ рдорд╛рдзреНрдпрдо рд╕реЗ рдкреНрд░реЛрдЬреЗрдХреНрдЯ рд╕реНрдЯреНрд░рдХреНрдЪрд░ рдмрдирд╛рдПрдБрдЧреЗ рдФрд░ S3 рдмрдХреЗрдЯреНрд╕ рд╡ Lambda рдлрд╝рдВрдХреНрд╢рдВрд╕ рдЬреИрд╕реЗ рд╡рд╛рд╕реНрддрд╡рд┐рдХ AWS рд╕рдВрд╕рд╛рдзрди рд▓рд╛рдЧреВ рдХрд░реЗрдВрдЧреЗ, рдФрд░ рдлрд┐рд░ рдЙрдиреНрд╣реЗрдВ рдЕрдкрдиреЗ AWS рдЦрд╛рддреЗ рдореЗрдВ рдкрд░рд┐рдирд┐рдпреЛрдЬрд┐рдд рдХрд░реЗрдВрдЧреЗред
рдирдП рдкреНрд░реЛрдЬреЗрдХреНрдЯ рдХрд╛ рд╕реНрдХреИрдлреЛрд▓реНрдбрд┐рдВрдЧ
рдЬрдм рдЖрдк
--language pythonрдлрд╝реНрд▓реИрдЧ рдХреЗ рд╕рд╛рдеcdk initрдХрдорд╛рдВрдб рдЪрд▓рд╛рддреЗ рд╣реИрдВ, рддреЛ рдпрд╣ рдПрдХ рдкреВрд░реНрдг рдкреНрд░реЛрдЬреЗрдХреНрдЯ рд╕реНрдЯреНрд░рдХреНрдЪрд░ рд╕реЗрдЯ рдХрд░рддрд╛ рд╣реИ рдЬреЛ рдХреБрдЫ рдЗрд╕ рддрд░рд╣ рджрд┐рдЦрддрд╛ рд╣реИ: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 рдмрдХреЗрдЯ
Lambda рдлрд╝рдВрдХреНрд╢рди
рд╕реНрдЯреИрдХ рдкрд░рд┐рдирд┐рдпреЛрдЬрд┐рдд рдХрд░рдирд╛
рдПрдХ рдмрд╛рд░ рдЬрдм рдЖрдкрдиреЗ рдЕрдкрдиреЗ рд╕рдВрд╕рд╛рдзрди рдЬреЛрдбрд╝ рд▓рд┐рдП, рддреЛ рдЙрдиреНрд╣реЗрдВ AWS рдкрд░ рдкрд░рд┐рдирд┐рдпреЛрдЬрд┐рдд рдХрд░рдиреЗ рдХрд╛ рд╕рдордп рд╣реИред
рдЕрдкрдиреЗ рдЯрд░реНрдорд┐рдирд▓ рдореЗрдВ, рд╡рд░реНрдЪреБрдЕрд▓ рдПрдирд╡рд╛рдпрд░рдирдореЗрдВрдЯ рдПрдХреНрдЯрд┐рд╡реЗрдЯ рдХрд░реЗрдВ рдФрд░ рдЪрд▓рд╛рдПрдБ:
рдпрд╣ рдХрд░реЗрдЧрд╛:
рдпрджрд┐ рдЖрдк рдкрд╣рд▓реА рдмрд╛рд░ рд╕реНрдЯреИрдХ рдкрд░рд┐рдирд┐рдпреЛрдЬрд┐рдд рдХрд░ рд░рд╣реЗ рд╣реИрдВ, рддреЛ рдЖрдкрд╕реЗ рдкрд░рд┐рд╡рд░реНрддрдиреЛрдВ рдХреЛ рдЕрдиреБрдореЛрджрд┐рдд рдХрд░рдиреЗ рдХреЗ рд▓рд┐рдП рдХрд╣рд╛ рдЬрд╛рдПрдЧрд╛ред
рдбрд┐рдкреНрд▓реЙрдпрдореЗрдВрдЯ рдХреЗ рдмрд╛рдж, рдЖрдк рдпрд╣ рдХрд░ рд╕рдХрддреЗ рд╣реИрдВ: