
рдпрд╣ рдЕрдЪреНрдЫрд╛ рд╣реЛрдЧрд╛ рдпрджрд┐ рдХреЙрдкреА-рдкреЗрд╕реНрдЯ рддреИрдирд╛рддреА рдЕрддреАрдд рдХреА рдмрд╛рдд рдереА, рд▓реЗрдХрд┐рди, рдЕрдлрд╕реЛрд╕, рдЪреАрдЬреЗрдВ рдЕрд▓рдЧ рд╣реИрдВред рдРрд╕рд╛ рд╣реЛрддрд╛ рд╣реИ рдХрд┐ рдбреЗрд╡рд▓рдкрд░реНрд╕ рдХреЗрд╡рд▓ рдЗрд╕ рддрд░рд╣ рдХреА рдбрд┐рд▓реАрд╡рд░реА рдкрджреНрдзрддрд┐ рдкрд╕рдВрдж рдХрд░рддреЗ рд╣реИрдВред рд╣рд╛рд▓рд╛рдБрдХрд┐ рдЕрдм рдЗрд╕ рдмрд╛рд░реЗ рдореЗрдВ рдПрдХ рд▓реЗрдЦ рд▓рд┐рдЦреЗрдВ рдХрд┐ рдпрд╣ рдЪрд░реНрдЪрд╛ рдХреНрдпреЛрдВ рдирд╣реАрдВ рд╣реИ, рд▓реЗрдХрд┐рди рдЖрдк рдореЗрд░реЗ рдмрд┐рдирд╛ рд╕рдм рдХреБрдЫ рдЬрд╛рдирддреЗ рд╣реИрдВред рд╕рд░реНрд╡рд░ рд░рд╣рд┐рдд рдЖрд░реНрдХрд┐рдЯреЗрдХреНрдЪрд░ рдХреА рдУрд░ рд░реБрдЭрд╛рди рдХреЗ рд╕рд╛рде, рд╕реАрдЖрдИ / рд╕реАрдбреА рдкрд╛рдЗрдкрд▓рд╛рдЗрди рдЖрд╡реЗрджрди рд╡рд┐рддрд░рдг рдореЗрдВ рдорд╣рддреНрд╡рдкреВрд░реНрдг рднреВрдорд┐рдХрд╛ рдирд┐рднрд╛рддреЗ рд╣реИрдВред рдореИрдВрдиреЗ рдЙрдирдХреЗ рдмрд╛рд░реЗ рдореЗрдВ рд▓реЗрдЦ рдореЗрдВ рднреА рд▓рд┐рдЦрд╛ рдерд╛ " рдЖрдкрдХреЗ рдЕрдЧрд▓реЗ рд╕рд░реНрд╡рд░рд▓реЗрд╕ рдкреНрд░реЛрдЬреЗрдХреНрдЯ рдХреЗ рд▓рд┐рдП 3 рдмреЗрд╣рддрд░реАрди рдЯрд┐рдкреНрд╕ ред"
рдореИрдВ рдПрдХ рд▓рдВрдмреЗ рд╕рдордп рдкрд╣рд▓реЗ CI рдФрд░ CD рдХреЗ рд╡рд┐рд╖рдп рдореЗрдВ рд░реБрдЪрд┐ рд░рдЦрддрд╛ рдерд╛, рдФрд░ рдкрд╣рд▓реА рдмрд╛рд░ рдореИрдВ рдХрдИ рд╕рд╛рд▓ рдкрд╣рд▓реЗ рдЗрд╕ рдкрд░ рдЖрдпрд╛ рдерд╛ - TeamCity рдХрд╛ рдзрдиреНрдпрд╡рд╛рджред рд╡рд░реНрддрдорд╛рди рдореЗрдВ, TeamCity рдХрд╛ рдЙрдкрдпреЛрдЧ рдЕрднреА рднреА рд╣рдорд╛рд░реЗ CI / CD рдкрд╛рдЗрдкрд▓рд╛рдЗрдиреЛрдВ рдореЗрдВ рд╕реЗ рдЕрдзрд┐рдХрд╛рдВрд╢ рдХреЗ рд▓рд┐рдП рдХрд┐рдпрд╛ рдЬрд╛рддрд╛ рд╣реИред рдЯреАрдорд╕рд┐рдЯреА рдорд╣рд╛рди рдХрд╛рдо рдХрд░рддреА рд╣реИ, рдореЗрд░реЗ рдкрд╛рд╕ рдЗрд╕рдХреЗ рдЦрд┐рд▓рд╛рдл рдХреБрдЫ рднреА рдирд╣реАрдВ рд╣реИ, рд▓реЗрдХрд┐рди рдореИрдВ рд╣рдореЗрд╢рд╛ рдХрд╛рдо рдХреЛ рдмреЗрд╣рддрд░ рдмрдирд╛рдиреЗ рдХрд╛ рдкреНрд░рдпрд╛рд╕ рдХрд░рддрд╛ рд╣реВрдВред рдЙрджрд╛рд╣рд░рдг рдХреЗ рд▓рд┐рдП, рдХреЛрдб рдХреЗ рд░реВрдк рдореЗрдВ рдкрд╛рдЗрдкрд▓рд╛рдЗрдиреЛрдВ рдХреЛ рдЗрдХрдЯреНрдард╛ рдХрд░рдирд╛ рдЕрдЪреНрдЫрд╛ рд╣реЛрдЧрд╛ - рдпрд╣ рдЙрди рдХреНрд╖реЗрддреНрд░реЛрдВ рдореЗрдВ рд╕реЗ рдПрдХ рд╣реИ рдЬрд┐рд╕рдореЗрдВ рдЯреАрдорд╕рд┐рдЯреА рдЗрддрдирд╛ рдЕрдЪреНрдЫрд╛ рдирд╣реАрдВ рд╣реИред
рдореИрдВрдиреЗ рдХреБрдЫ рд╕рдордп рдкрд╣рд▓реЗ AWS рдкрд░ рдПрдХреАрдХрд░рдг рдФрд░ рд╡рд┐рддрд░рдг рдЙрдкрдХрд░рдг рд╕реАрдЦреЗ рдереЗ, рдФрд░ рдпрджреНрдпрдкрд┐ рд╣рдо EC2 рдкрд░ рдХрд╛рдо рдХрд░рдиреЗ рд╡рд╛рд▓реА рдХрд┐рд╕реА рдЕрдиреНрдп рдкрд░рд┐рдпреЛрдЬрдирд╛ рдХреЗ рд▓рд┐рдП рдХреЛрдбрдбрд┐рдкреНрд▓реЙрдп рдХрд╛ рдЙрдкрдпреЛрдЧ рдХрд░рддреЗ рд╣реИрдВ, рдореИрдВрдиреЗ рдЕрднреА рддрдХ рдЙрдирдХреЗ рд╕рд╛рде рд╕рд░реНрд╡рд░ рд░рд╣рд┐рдд рдкрд░рд┐рдпреЛрдЬрдирд╛ рдХреЛ рддреИрдирд╛рдд рдирд╣реАрдВ рдХрд┐рдпрд╛ рд╣реИред рдлрд┐рд░ рд╕реЗ рдЙрдкрдХрд░рдгреЛрдВ рдХреА рд╕рдореАрдХреНрд╖рд╛ рдХрд░рдиреЗ рдХреЗ рдмрд╛рдж, рдореИрдВрдиреЗ рдЗрд╕ рдкрд░ рдзреНрдпрд╛рди рджрд┐рдпрд╛: рдЕрдм рдХреНрд▓рд╛рдЙрдб рдПрдлрд╝реЙрд░реНрдореЗрд╢рди рдФрд░ рд▓реИрдореНрдмреНрдбрд╛ рдХреЛ рддреИрдирд╛рдд рдХрд░рдиреЗ рдХреЗ рд▓рд┐рдП рдПрдХ рдЕрдВрддрд░реНрдирд┐рд╣рд┐рдд рдПрдХреАрдХрд░рдг рдлрд╝рдВрдХреНрд╢рди рд╣реИ, рд╕рдВрднрд╡рддрдГ рд╕реИрдо рдПрдбрдмреНрд▓реНрдпреВрдПрд╕ рдкрд░ рдЖрдзрд╛рд░рд┐рдд рд╣реИ; рд╣рдо рд╕рд░реНрд╡рд░ рд░рд╣рд┐рдд рдврд╛рдВрдЪреЗ рдХрд╛ рдЙрдкрдпреЛрдЧ рдХрд░рддреЗ рд╣реИрдВ - рдпрд╣ CloudFormation рдЯреЗрдореНрдкреНрд▓реЗрдЯ рдЙрддреНрдкрдиреНрди рдХрд░рддрд╛ рд╣реИ, рд▓реЗрдХрд┐рди рдпрд╣ AWS рдЯреВрд▓ рдХреЗ рд╕рд╛рде рдмреЙрдХреНрд╕ рд╕реЗ рдмрд╛рд╣рд░ рдХрд╛рдо рдирд╣реАрдВ рдХрд░рддрд╛ рд╣реИред
рдЯреНрд░реЗрдирд┐рдВрдЧ
рдореИрдВ рдирд┐рдореНрдирд▓рд┐рдЦрд┐рдд AWS рд╕реЗрд╡рд╛рдУрдВ рдХрд╛ рдЙрдкрдпреЛрдЧ рдХрд░рддрд╛ рд╣реВрдВ: EC2, Docker, ECR, S3, IAM, CodeBuild, CodePipeline, CloudWatch, CloudTrailред рд░рдЦрдиреЗ рдХреЗ рд▓рд┐рдП, рдЖрдкрдХреЛ рдХрдо рд╕реЗ рдХрдо рдПрдХ рдмреБрдирд┐рдпрд╛рджреА рд╕реНрддрд░ рдкрд░ рд╕рдордЭрдиреЗ рдХреА рдЖрд╡рд╢реНрдпрдХрддрд╛ рд╣реИ рдХрд┐ рдЗрдирдореЗрдВ рд╕реЗ рдкреНрд░рддреНрдпреЗрдХ рд╕реЗрд╡рд╛ рдХреНрдпрд╛ рдХрд░рддреА рд╣реИред
рдореВрд▓ рд░реВрдк рд╕реЗ, рдореИрдВ .NET рдореЗрдВ рд╕рд░реНрд╡рд░ рд╕рд╛рдЗрдб рдХреЛрдб рд▓рд┐рдЦрддрд╛ рд╣реВрдВ, рдФрд░ рдпрд╣ рдЧрд╛рдЗрдб рднреА рдЗрд╕ рдкреНрд▓реЗрдЯрдлреЙрд░реНрдо рдкрд░ рдирд┐рд░реНрднрд░ рдХрд░рддрд╛ рд╣реИред Prebuilt CodeBuild рдЫрд╡рд┐рдпреЛрдВ рдореЗрдВ рд╕реЗ рдХреЛрдИ рдПрдХ рд╣реА рд╕рдордп рдореЗрдВ рдПрдХ .NET рдФрд░ NodeJS рд░рдирдЯрд╛рдЗрдо рд╣реИ (рд╕рд░реНрд╡рд░ рд░рд╣рд┐рдд рдврд╛рдВрдЪреЗ рдХреЗ рд▓рд┐рдП NodeJS рдХреА рдЖрд╡рд╢реНрдпрдХрддрд╛ рд╣реИ)ред рдпрджрд┐ рдЖрдкрдХреЗ рд▓реИрдореНрдмреНрдбрд╛ рдлрд╝рдВрдХреНрд╢рди рдХреЛ NodeJS рдореЗрдВ рд▓рд┐рдЦрд╛ рдЧрдпрд╛ рд╣реИ, рдкрд░рд┐рдирд┐рдпреЛрдЬрди рдкрд╛рдЗрдкрд▓рд╛рдЗрди рдХреЛ рдХреЙрдиреНрдлрд╝рд┐рдЧрд░ рдХрд░рдирд╛ рдмрд╣реБрдд рд╕рд░рд▓ рд╣реИ, рдХреНрдпреЛрдВрдХрд┐ рдбреЙрдХ рдЫрд╡рд┐ рдореЗрдВ рд╕реНрдерд╛рдкрдирд╛ рдХреЗ рд▓рд┐рдП рдпрд╣ рдПрдХрдорд╛рддреНрд░ рд░рдирдЯрд╛рдЗрдо рд╡рд╛рддрд╛рд╡рд░рдг рд╣реИ (рдпрджрд┐ рдЖрдкрдХрд╛ рдорд╛рдорд▓рд╛ рд╣реИ, рддреЛ рдмреЗрдЭрд┐рдЭрдХ рдЕрдзрд┐рдХрд╛рдВрд╢ рдореИрдиреБрдЕрд▓ рдХреЛ рдЫреЛрдбрд╝ рджреЗрдВ)ред рдПрдХ рджреВрд╕рд░реЗ рдХреЗ рд▓рд┐рдП, рдХрдВрдЯреЗрдирд░реЛрдВ рдХреЗ рд╕рд╛рде рдпрд╣ рдореЗрд░рд╛ рдкрд╣рд▓рд╛ рдЕрдиреБрднрд╡ рдерд╛, рдФрд░ рдореБрдЭреЗ рдХреБрдЫ рдирдпрд╛ рд╕реАрдЦрдиреЗ рдХреА рдЦреБрд╢реА рд╣реИред
рдореИрдВ рдпрд╣ рдорд╛рдирдиреЗ рдХреА рд╣рд┐рдореНрдордд рдХрд░рддрд╛ рд╣реВрдВ рдХрд┐ рдЖрдкрдХрд╛ рдХреЛрдб рдПрдХ рдирд┐рд╢реНрдЪрд┐рдд рднрдВрдбрд╛рд░ рдореЗрдВ рд╣реИ, рдЙрджрд╛рд╣рд░рдг рдХреЗ рд▓рд┐рдП, gitред рдорд╛рд░реНрдЧрджрд░реНрд╢рди рдХреЗ рд▓рд┐рдП, рд╣рдо рдмрд╕ рдПрд╕ 3 рдореЗрдВ рдПрдХ рдлрд╛рдЗрд▓ рдЕрдкрд▓реЛрдб рдХрд░рддреЗ рд╣реИрдВ рдЬрд┐рд╕рдореЗрдВ рддреИрдирд╛рддреА рдХреЗ рд▓рд┐рдП рдХреЛрдб рдХрд╛ рдПрдХ рдкреИрдХреЗрдЬ рд╣реЛрддрд╛ рд╣реИ; рдЖрдк рдХреИрд╕реЗ рдкреНрд░рд╛рдкреНрдд рдХрд░рддреЗ рд╣реИрдВ рдпрд╣ рдЖрдкрдХреЗ рдКрдкрд░ рд╣реИред рдореЗрд░реЗ рдХрд╛рдо рдХреЗ рдЖрдзрд╛рд░ рдкрд░, рдЖрдк рд╣рдореЗрд╢рд╛ рдЕрдкрдиреА рдкрд╛рдЗрдкрд▓рд╛рдЗрди рдХреЛ рд░рд┐рдкреЙрдЬрд┐рдЯрд░реА рдЬреИрд╕реЗ рдХрд┐ рдЧреАрдереВрдм рдпрд╛ рдХреЛрдбрдХреЙрдорд┐рдЯ рд╕реЗ рдЬреЛрдбрд╝рдХрд░ рдЖрдЧреЗ рдмрдврд╝ рд╕рдХрддреЗ рд╣реИрдВред
1. рдПрдХ EC2 рдЙрджрд╛рд╣рд░рдг рдмрдирд╛рдПрдВ рдФрд░ рдбреЙрдХрд░ рд╕реНрдерд╛рдкрд┐рдд рдХрд░реЗрдВ
AWS Linux 2 EC2 рдХрд╛ рдПрдХ рдорд╛рдирдХ рдЙрджрд╛рд╣рд░рдг рдЪрд▓рд╛рдПрдВ - рдпрд╣ рд╕реНрдкрд╖реНрдЯреАрдХрд░рдг рдХреЗ рдмрд┐рдирд╛ рд╕реНрдкрд╖реНрдЯ рд╣реЛрдирд╛ рдЪрд╛рд╣рд┐рдПред рд▓реЙрдЧ рдЗрди рдХрд░реЗрдВ рдФрд░ рдЖрджреЗрд╢реЛрдВ рдХрд╛ рдЙрдкрдпреЛрдЧ рдХрд░рдХреЗ рдбреЙрдХрд░ рд╕реНрдерд╛рдкрд┐рдд рдХрд░реЗрдВ:
sudo yum update -y sudo amazon-linux-extras install docker sudo service docker start
рдЖрдкрдХреЛ sudo рдХрд╛ рдЙрдкрдпреЛрдЧ рдХрд┐рдП рдмрд┐рдирд╛ Docker рдХрдорд╛рдВрдб рдХреЛ рдирд┐рд╖реНрдкрд╛рджрд┐рдд рдХрд░рдиреЗ рдХреЗ рд▓рд┐рдП рдЙрдкрдпреЛрдЧрдХрд░реНрддрд╛ ec2 рдХреЛ docker рд╕рдореВрд╣ рдореЗрдВ рдЬреЛрдбрд╝рдиреЗ рдХреА рдЖрд╡рд╢реНрдпрдХрддрд╛ рд╣реИ:
sudo usermod -a -G docker ec2-user
рдЬрдм рдЖрджреЗрд╢ рдкреВрд░рд╛ рд╣реЛ рдЬрд╛рддрд╛ рд╣реИ, рддреЛ рд▓реЙрдЧ рдЖрдЙрдЯ рдХрд░реЗрдВ рдФрд░ рдЕрдкрдиреЗ EC2 рдЙрджрд╛рд╣рд░рдг рдореЗрдВ рд╡рд╛рдкрд╕ рд▓реЙрдЧ рдЗрди рдХрд░реЗрдВ рддрд╛рдХрд┐ ec2 рдЙрдкрдпреЛрдЧрдХрд░реНрддрд╛ рдХреЛ рдирдИ рдЕрдиреБрдорддрд┐рдпрд╛рдБ рдкреНрд░рд╛рдкреНрдд рд╣реЛрдВред рд╕реБрдирд┐рд╢реНрдЪрд┐рдд рдХрд░реЗрдВ рдХрд┐ ec2 рдЙрдкрдпреЛрдЧрдХрд░реНрддрд╛ рдмрд┐рдирд╛ рдбреЙрдХреНрд╕ рдХрдорд╛рдВрдб рдЪрд▓рд╛рддрд╛ рд╣реИ:
docker info

docker info
рдЖрдЙрдЯрдкреБрдЯ
2. рдПрдХ рдбреЙрдХрд░ рдЫрд╡рд┐ рдмрдирд╛рдПрдВ рдФрд░ рдЗрд╕реЗ рдИрд╕реАрдЖрд░ рдореЗрдВ рд░рдЦреЗрдВ
рдорд╛рди рд▓реАрдЬрд┐рдП рдХрд┐ рдкрд┐рдЫрд▓рд╛ рдЪрд░рдг рд╕рдлрд▓ рд╣реИ; рдЕрдЧрд▓рд╛ рдХрджрдо рдИрд╕реАрдЖрд░ рдореЗрдВ рдлрд┐рдЯ рд╣реЛрдиреЗ рд╡рд╛рд▓реА рдбреЙрдХрд░ рдЫрд╡рд┐ рдмрдирд╛рдирд╛ рд╣реИред AWS рдХреЛрдбрдмреБрдХ рдХреЗ рд▓рд┐рдП рдмреБрдирд┐рдпрд╛рджреА рдЪрд┐рддреНрд░ рдЧрд┐рддреБрдм рдкрд░ рдкреНрд░рджрд╛рди рдХрд░рддрд╛ рд╣реИ, рдФрд░ рдЗрд╕рд╕реЗ рдЖрдкрдХреА рд╕реНрд╡рдпрдВ рдХреА рдЫрд╡рд┐ рдмрдирд╛рдирд╛ рдЖрд╕рд╛рди рд╣реЛ рдЬрд╛рддрд╛ рд╣реИред
рдореИрдВрдиреЗ рдЫрд╡рд┐ рдХреЛ рдЧрд┐рддреБрдм рдкрд░ рднреА рдкреЛрд╕реНрдЯ рдХрд┐рдпрд╛ рд╣реИ - рдпрджрд┐ рдЖрдк рдЕрдкрдирд╛ рд╕реНрд╡рдпрдВ рдХрд╛ рдмрдирд╛рдиреЗ рдХреЗ рд▓рд┐рдП рдЗрди рдЪрд░рдгреЛрдВ рдХрд╛ рдкрд╛рд▓рди рдирд╣реАрдВ рдХрд░рдирд╛ рдЪрд╛рд╣рддреЗ рд╣реИрдВ: https://github.com/effectivedigital/serverless-deployment-image
рдЫрд╡рд┐рдпреЛрдВ рдХреЛ рдХреЙрдкреА рдХрд░реЗрдВ рдФрд░ .NET рдХреЛрд░ 2.1 рдирд┐рд░реНрджреЗрд╢рд┐рдХрд╛ рдкрд░ рдЬрд╛рдПрдВ:
git clone https://github.com/aws/aws-codebuild-docker-images.git cd aws-codebuild-docker-images cd ubuntu/dot-net/core-2.1/
рдЕрдкрдиреЗ рдкрд╕рдВрджреАрджрд╛ рдкрд╛рда рд╕рдВрдкрд╛рджрдХ рдореЗрдВ Dockerfile рдЦреЛрд▓реЗрдВ:
nano Dockerfile
Dodeerfile рдореЗрдВ рдкрд╣рд▓реЗ рд╕реЗ рдЙрдкрд▓рдмреНрдз рдЕрдиреНрдп рдЖрджреЗрд╢реЛрдВ рдХреЗ рдЕрдВрдд рдореЗрдВ NodeJS рдФрд░ рд╕рд░реНрд╡рд░ рд░рд╣рд┐рдд рдврд╛рдВрдЪреЗ рдХреЛ рд╕реНрдерд╛рдкрд┐рдд рдХрд░рдиреЗ рдХреЗ рд▓рд┐рдП рдХрдорд╛рдВрдб рдЬреЛрдбрд╝реЗрдВред рдореБрдЭреЗ рдЗрдирдореЗрдВ рд╕реЗ рдЕрдзрд┐рдХрд╛рдВрд╢ рдХрдорд╛рдВрдб рдПрдХ рд╣реА AWS рд░рд┐рдкреЙрдЬрд┐рдЯрд░реА рдореЗрдВ NodeJS рдбреЙрдХрд░ рдЫрд╡рд┐ рд╕реЗ рдорд┐рд▓реАрдВ:
# Install Node Dependencies ENV NODE_VERSION="10.14.1" # gpg keys listed at https://github.com/nodejs/node#release-team RUN set -ex \ && for key in \ 94AE36675C464D64BAFA68DD7434390BDBE9B9C5 \ B9AE9905FFD7803F25714661B63B535A4C206CA9 \ 77984A986EBC2AA786BC0F66B01FBB92821C587A \ 56730D5401028683275BD23C23EFEFE93C4CFFFE \ 71DCFD284A79C3B38668286BC97EC7A07EDE3FC1 \ FD3A5288F042B6850C66B31F09FE44734EB7990E \ 8FCCA13FEF1D0C2E91008E09770F7A9A5AE15600 \ C4F0DFFF4E8C1A8236409D08E73BC641CC11F4C8 \ DD8F2338BAE7501E3DD5AC78C273792F7D83545D \ 4ED778F539E3634C779C87C6D7062848A1AB005C \ A48C2BEE680E841632CD4E44F07496B3EB3C1762 \ ; do \ gpg - keyserver hkp://p80.pool.sks-keyservers.net:80 - recv-keys "$key" || \ gpg - keyserver hkp://ipv4.pool.sks-keyservers.net - recv-keys "$key" || \ gpg - keyserver hkp://pgp.mit.edu:80 - recv-keys "$key" ; \ done RUN set -ex \ && wget "https://nodejs.org/download/release/v$NODE_VERSION/node-v$NODE_VERSION-linux-x64.tar.gz" -O node-v$NODE_VER$ && wget "https://nodejs.org/download/release/v$NODE_VERSION/SHASUMS256.txt.asc" -O SHASUMS256.txt.asc \ && gpg - batch - decrypt - output SHASUMS256.txt SHASUMS256.txt.asc \ && grep " node-v$NODE_VERSION-linux-x64.tar.gz\$" SHASUMS256.txt | sha256sum -c - \ && tar -xzf "node-v$NODE_VERSION-linux-x64.tar.gz" -C /usr/local - strip-components=1 \ && rm "node-v$NODE_VERSION-linux-x64.tar.gz" SHASUMS256.txt.asc SHASUMS256.txt \ && ln -s /usr/local/bin/node /usr/local/bin/nodejs \ && rm -fr /var/lib/apt/lists/* /tmp/* /var/tmp/* RUN npm set unsafe-perm true CMD [ "node" ] # Install Serverless Framework RUN set -ex \ && npm install -g serverless
рдЕрдм рд╣рдо рдЫрд╡рд┐ рдХреЛ рдПрдХрддреНрд░ рдХрд░рддреЗ рд╣реИрдВ рдФрд░ рдЯреИрдЧ рдХрд░рддреЗ рд╣реИрдВ:
docker build -t aws/codebuild/dot-net .
рд╡рд┐рдзрд╛рдирд╕рднрд╛ рдХреЛ рдкреВрд░рд╛ рдХрд░рдиреЗ рдХреЗ рдмрд╛рдж, рдЫрд╡рд┐ рдХреЛ рдЪрд▓рд╛рдПрдВ - рд╕реБрдирд┐рд╢реНрдЪрд┐рдд рдХрд░реЗрдВ рдХрд┐ рд╕рдм рдХреБрдЫ рдХрд╛рдо рдХрд░рддрд╛ рд╣реИ рдФрд░ рд╕рд░реНрд╡рд░ рд░рд╣рд┐рдд рд░реВрдкрд░реЗрдЦрд╛ рд╕рд╣реА рдврдВрдЧ рд╕реЗ рд╕реНрдерд╛рдкрд┐рдд рд╣реИ:
docker run -it --entrypoint sh aws/codebuild/dot-net -c bash sls -v

рд░рдирд┐рдВрдЧ sls -v
рдПрдХ рдмреНрд░рд╛рдВрдб рдХреЗ рдирдП рдХрдВрдЯреЗрдирд░ рдХреЗ рдЕрдВрджрд░
рдлрд┐рд░ AWS CLI рдХрд╛ рдЙрдкрдпреЛрдЧ рдХрд░рдХреЗ ECR рдореЗрдВ рд░рд┐рдкреЙрдЬрд┐рдЯрд░реА рдмрдирд╛рдПрдВред рдХрдорд╛рдВрдб рдЪрд▓рд╛рдиреЗ рдХреЗ рдмрд╛рдж, рдирдпрд╛ рд░рд┐рдкреЙрдЬрд┐рдЯрд░реА AWS рдХрдВрд╕реЛрд▓ рдореЗрдВ рдкреНрд░рджрд░реНрд╢рд┐рдд рд╣реЛрдЧреА:
aws ecr create-repository --repository-name codebuild-dotnet-node

рдИрд╕реАрдЖрд░ рдореЗрдВ рд░рд┐рдкреЛрдЬрд┐рдЯрд░реА рдмрдирд╛рдиреЗ рдХреЗ рд▓рд┐рдП рдПрдбрдмреНрд▓реНрдпреВрдПрд╕ рд╕реАрдПрд▓рдЖрдИ рдкреНрд░рддрд┐рдХреНрд░рд┐рдпрд╛

рдЕрдм рдкрд┐рдЫрд▓реЗ рдЪрд░рдг рд╕реЗ рдорд╛рди рд░рд┐рдкреЙрдЬрд┐рдЯрд░реА рдпреВрд░реА рдХреЗ рд╕рд╛рде рдкрд╣рд▓реЗ рдирд┐рд░реНрдорд┐рдд aws / codebuild / dot-net рдЫрд╡рд┐ рдХреЛ рдЪрд┐рд╣реНрдирд┐рдд рдХрд░реЗрдВ:
docker tag aws/codebuild/dot-net <ACCOUNTID>.dkr.ecr.ap-southeast-2.amazonaws.com/codebuild-dotnet-node
рдХрдВрдЯреЗрдирд░ рд░рдЬрд┐рд╕реНрдЯреНрд░реА рдХреЗ рд▓рд┐рдП docker login рдкреНрд░рдорд╛рдгреАрдХрд░рдг рдХрдорд╛рдВрдб рд▓рд╛рдЗрди рдкреНрд░рд╛рдкреНрдд рдХрд░рдиреЗ рдХреЗ рд▓рд┐рдП get-login рдХрдорд╛рдВрдб рдЪрд▓рд╛рдПрдБ:
aws ecr get-login --no-include-email

рдЕрдВрддрд┐рдо рдЪрд░рдг рдХреЗ рджреМрд░рд╛рди рдЧреЗрдЯ-рд▓реЙрдЧрд┐рди рдЖрджреЗрд╢ рджреНрд╡рд╛рд░рд╛ рдЬрд╛рд░реА рдХрд┐рдП рдЧрдП docker рд▓реЙрдЧрд┐рди рдХрдорд╛рдВрдб рдХреЛ рдЪрд▓рд╛рдПрдВред
docker login -u AWS -p eyJwYXlsb2FkIjoiNGZnd0dSaXM1L2svWWRLMmhJT1c0WWpOZEcxamJFeFJOK2VvT0Y5[...] https://<ACCOUNTID>.dkr.ecr.ap-southeast-2.amazonaws.com
рдпрджрд┐ рд▓реЙрдЧрд┐рди рд╕рдлрд▓ рд╣реИ, рддреЛ ECR рдореЗрдВ рдмрдирд╛рдП рдЧрдП рд░рд┐рдкреЙрдЬрд┐рдЯрд░реА рдореЗрдВ docker рдХреА рдЗрдореЗрдЬ рдбрд╛рд▓реЗрдВред рдЗрд╕рдореЗрдВ рдХрдИ рдорд┐рдирдЯ рд▓рдЧ рд╕рдХрддреЗ рд╣реИрдВ (рдкреВрд░реНрдг рдЫрд╡рд┐ рдХреЗ рдЖрдХрд╛рд░ рдХреЗ рдЖрдзрд╛рд░ рдкрд░)ред
docker push <ACCOUNTID>.dkr.ecr.ap-southeast-2.amazonaws.com/codebuild-dotnet-node

EC2 рдкрд░ рдбреЙрдХрд░ рд╣рдорд╛рд░реА рдЫрд╡рд┐ рдмрдирд╛рддрд╛ рд╣реИ

рдИрд╕реАрдЖрд░ рдореЗрдВ рдбреЙрдХрд░ рдЫрд╡рд┐
рдлрд┐рд░ рд╣рдо ECR рд╕реЗ рдХрд┐рд╕реА рддрдХ рднреА рдЗрдореЗрдЬ рдХреЛ рдЦреЛрд▓ рд╕рдХрддреЗ рд╣реИрдВред рдХрд╛рдо рдХреЗ рдорд╛рд╣реМрд▓ рдореЗрдВ рдЕрдиреБрдорддрд┐ рдХреЛ рдЕрд╡рд░реБрджреНрдз рдХрд┐рдпрд╛ рдЬрд╛рдирд╛ рдЪрд╛рд╣рд┐рдП, рд▓реЗрдХрд┐рди рдЗрд╕ рдЙрджрд╛рд╣рд░рдг рдореЗрдВ рд╣рдо рдЗрд╕реЗ рдЦреЛрд▓реЗрдВрдЧреЗред AWS рдХрдВрд╕реЛрд▓ рдореЗрдВ рдЕрдиреБрдорддрд┐ рдЯреИрдм рдкрд░ рдЬрд╛рдПрдВ, "JSON рдиреАрддрд┐ рдмрджрд▓реЗрдВ" рдЪреБрдиреЗрдВ рдФрд░ рдкреЙрд▓рд┐рд╕реА рдореЗрдВ рдирд┐рдореНрдирд▓рд┐рдЦрд┐рдд рддрддреНрд╡ рдбрд╛рд▓реЗрдВ:
{ "Version": "2008-10-17", "Statement": [ { "Sid": "EnableAccountAccess", "Effect": "Allow", "Principal": "*", "Action": [ "ecr:BatchCheckLayerAvailability", "ecr:BatchGetImage", "ecr:DescribeImages", "ecr:DescribeRepositories", "ecr:GetAuthorizationToken", "ecr:GetDownloadUrlForLayer", "ecr:GetRepositoryPolicy", "ecr:ListImages" ] } ] }
3. рдПрдХ рдкрд╛рдЗрдкрд▓рд╛рдЗрди рдмрдирд╛рдПрдВ
рдкрд╛рдЗрдкрд▓рд╛рдЗрди рдПрдХрддреНрд░ рдХрд░рдиреЗ рдХрд╛ рд╕рдордп рдЖ рдЧрдпрд╛ рд╣реИред рдкреНрд░рдХреНрд░рд┐рдпрд╛ рдХреЛ рд╕рд░рд▓ рдмрдирд╛рдиреЗ рдХреЗ рд▓рд┐рдП, рдЗрд╕реЗ рдмрд╣реБ-рддреИрдирд╛рддреА рдпреЛрдЧреНрдп рдмрдирд╛рдПрдВ, рдФрд░ рд╕рд░реНрд╡рд░ рд░рд╣рд┐рдд рд╡рд╛рд╕реНрддреБрдХрд▓рд╛ рдХреЗ рд╡рд┐рдирд╛рд╢рдХрд╛рд░реА рд░реВрдк рд╕реЗ рдЪрд┐рдкрдХреЗ рд░рд╣реЗрдВ, рдореИрдВрдиреЗ рд╕рд░реНрд╡рд░ рд░рд╣рд┐рдд рдврд╛рдВрдЪреЗ рдХрд╛ рдЙрдкрдпреЛрдЧ рдХрд░рдХреЗ рдПрдХ рдкрд╛рдЗрдкрд▓рд╛рдЗрди рдХрд╛ рдирд┐рд░реНрдорд╛рдг рдХрд┐рдпрд╛ред рдЖрдк CloudFormation рдореЗрдВ рдирд┐рд░реНрдорд╛рдг рдХрд░рдХреЗ рдЙрд╕реА рдкрд░рд┐рдгрд╛рдо рдХреЛ рдкреНрд░рд╛рдкреНрдд рдХрд░ рд╕рдХрддреЗ рд╣реИрдВред
рдореИрдВ рдЕрдкрдиреЗ serverless.yml рдлрд╝рд╛рдЗрд▓ рд╕реЗ рдкреВрд░реЗ рд╕реНрд░реЛрдд рдХреА рдирдХрд▓ рдирд╣реАрдВ рдХрд░реВрдБрдЧрд╛ - рдЗрд╕реЗ github рд╕реЗ рдХреЙрдкреА рдХрд░реВрдВрдЧрд╛: https://github.com/effectivedigital/serverless-deployment-pipeline
рд╕рд░реНрд╡рд░ рд░рд╣рд┐рдд рдЯреЗрдореНрдкрд▓реЗрдЯ рджреЗрдЦреЗрдВ рдХрд┐ рд╡рд╣ рдХреНрдпрд╛ рдХрд░реЗрдЧрд╛, рд▓реЗрдХрд┐рди рдпрд╣ рд╕рдВрдХреНрд╖реЗрдк рдореЗрдВ, рдпрд╣ рдирд┐рдореНрдирд▓рд┐рдЦрд┐рдд рдЖрдЗрдЯрдо рд╕реЗрдЯ рдХрд░рддрд╛ рд╣реИ:
- 3 рдЦрдВрдб S3
- 1 рдЦрдВрдб рдиреАрддрд┐
- 3 рдЖрдИрдПрдПрдо рднреВрдорд┐рдХрд╛рдПрдВ
- 1 CodeBuild рдкрд░рд┐рдпреЛрдЬрдирд╛
- 1 рдкрд╛рдЗрдкрд▓рд╛рдЗрди рдХреЛрдбрдкрд┐рдкрд▓рд╛рдЗрди
- 1 CloudWatch рдШрдЯрдирд╛
- CloudTrail рдХрд╛ 1 рдЯреНрд░реЗрд╕
рдлрд┐рд░ ECR рдореЗрдВ рдЕрдкрдиреА рдЫрд╡рд┐ рдХреЗ рд▓рд┐рдП DockerImageArn рдХреЛ рдЕрдкрдбреЗрдЯ рдХрд░реЗрдВред рдпрджрд┐ рдЖрдк рдкрд░рд┐рдирд┐рдпреЛрдЬрди.zip рдХреЗ рдЕрд▓рд╛рд╡рд╛ рдХрд┐рд╕реА рдЕрдиреНрдп рдирд╛рдо рд╕реЗ рдкрд░рд┐рдирд┐рдпреЛрдЬрди рдкреИрдХреЗрдЬ рдмрдирд╛рдирд╛ рдЪрд╛рд╣рддреЗ рд╣реИрдВ, рддреЛ рдкрд░рд┐рдирд┐рдпреЛрдЬрди рдирд╛рдо рдмрджрд▓реЗрдВ :
DockerImageArn: <ACCOUNTID>.dkr.ecr.ap-southeast-2.amazonaws.com/codebuild-dotnet-node:latest DeploymentFilename: Deployment.zip
рдпрд╣реА рд╣реИ, рдкрд╛рдЗрдкрд▓рд╛рдЗрди рддреИрдирд╛рддреА рдХреЗ рд▓рд┐рдП рддреИрдпрд╛рд░ рд╣реИред рд╕рд░реНрд╡рд░ рд░рд╣рд┐рдд рдкрд░рд┐рдирд┐рдпреЛрдЬрди рдЖрджреЗрд╢ рдЪрд▓рд╛рдПрдБ, рдФрд░ рдЙрд╕рдХреЗ рдХреЙрдиреНрдлрд╝рд┐рдЧрд░ рд╣реЛрдиреЗ рддрдХ рдкреНрд░рддреАрдХреНрд╖рд╛ рдХрд░реЗрдВ:
sls deploy -v

рд╕рд░реНрд╡рд░ рд░рд╣рд┐рдд рдврд╛рдВрдЪрд╛ рдмрдирд╛рдпрд╛ рдЧрдпрд╛ CloudFormation

рд╕рд░реНрд╡рд░ рд░рд╣рд┐рдд рдлреНрд░реЗрдорд╡рд░реНрдХ рдкрд╛рдЗрдкрд▓рд╛рдЗрди рдХреЛрдбрд┐рдкрд▓рд╛рдЗрди рджреНрд╡рд╛рд░рд╛ рдмрдирд╛рдпрд╛ рдЧрдпрд╛

рд╕рд░реНрд╡рд░ рд░рд╣рд┐рдд рдлреНрд░реЗрдорд╡рд░реНрдХ рдкреНрд░реЛрдЬреЗрдХреНрдЯ рдХреЛрдбрдмрд┐рд▓реНрдб рдкреНрд░реЛрдЬреЗрдХреНрдЯ рджреНрд╡рд╛рд░рд╛ рдмрдирд╛рдпрд╛ рдЧрдпрд╛
4. рдЕрдкрдиреЗ рдЖрд╡реЗрджрди рдореЗрдВ buildSpec.yml рдЬреЛрдбрд╝реЗрдВ
рдЬрдм CodePipeline S3 рдореЗрдВ рдкрд░рд┐рдирд┐рдпреЛрдЬрди рдлрд╝рд╛рдЗрд▓ рдореЗрдВ рдкрд░рд┐рд╡рд░реНрддрди рдХрд╛ рдкрддрд╛ рд▓рдЧрд╛рддрд╛ рд╣реИ, рддреЛ рдпрд╣ CodeBuild рдХреЛ рд╢реБрд░реВ рдХрд░рдиреЗ рдФрд░ рдПрдкреНрд▓рд┐рдХреЗрд╢рди рдХреЛ рдмрдирд╛рдиреЗ рдФрд░ рддреИрдирд╛рдд рдХрд░рдиреЗ рдХрд╛ рдкреНрд░рдпрд╛рд╕ рдХрд░рдиреЗ рдХреЗ рд▓рд┐рдП рдХрд╣рддрд╛ рд╣реИред рд╣рд╛рд▓рд╛рдБрдХрд┐, CodeBuild рдХреЛ рдпрд╣ рднреА рдкрддрд╛ рд╣реЛрдирд╛ рдЪрд╛рд╣рд┐рдП рдХрд┐ рдПрдкреНрд▓рд┐рдХреЗрд╢рди рдХреЛ рдмрдирд╛рдиреЗ рдФрд░ рддреИрдирд╛рдд рдХрд░рдиреЗ рдХреЗ рд▓рд┐рдП рдХрд┐рди рдХрдорд╛рдВрдбреНрд╕ рдХреЛ рдирд┐рд╖реНрдкрд╛рджрд┐рдд рдХрд┐рдпрд╛ рдЬрд╛рдирд╛ рдЪрд╛рд╣рд┐рдП, рдФрд░ buildSpec.yml рдореЗрдВ рдирд┐рд░реНрджреЗрд╢ рд╣реИрдВ рдЬреЛ CodeBuild рдХрд╛ рдкрд╛рд▓рди рдХрд░реЗрдЧрд╛ред
рдореИрдВрдиреЗ рдПрдХ рдмрд╣реБрдд рд╣реА рд╕рд░рд▓ "рд╣реИрд▓реЛ рд╡рд░реНрд▓реНрдб" рдПрдкреНрд▓рд┐рдХреЗрд╢рди рдмрдирд╛рдпрд╛ рдЬрд┐рд╕рдореЗрдВ рдПрдХ рдЙрджрд╛рд╣рд░рдг buildSpec.yml рдлрд╝рд╛рдЗрд▓ рд╢рд╛рдорд┐рд▓ рд╣реИ рдЬрд┐рд╕реЗ рдЖрдк рдЙрдкрдпреЛрдЧ рдХрд░ рд╕рдХрддреЗ рд╣реИрдВ: https://github.com/effectivedigital/serverless-deployment-app
рдпрд╛ рдореМрдЬреВрджрд╛ рдРрдкреНрд▓рд┐рдХреЗрд╢рди рдореЗрдВ buildSpec.yml рдлрд╝рд╛рдЗрд▓ рдмрдирд╛рдПрдВ рдФрд░ рдиреАрдЪреЗ рджрд┐рдП рдЧрдП рдирд┐рд░реНрджреЗрд╢реЛрдВ рдХреЗ рдЕрдиреБрд╕рд╛рд░ рднрд░реЗрдВ:
version: 0.2 phases: pre_build: commands: - chmod a+x * build: commands: - ./build.sh post_build: commands: - sls deploy -v -s $STAGE
5. рдкрд╛рдЗрдкрд▓рд╛рдЗрди рдХреА рдЬрд╛рдБрдЪ
рдЕрдм рдЖрдкрдХреА рдкрд╛рдЗрдкрд▓рд╛рдЗрди рдХреЗ рдкрд╣рд▓реЗ рд▓реЙрдиреНрдЪ рдХреЗ рд▓рд┐рдП рд╕рдм рдХреБрдЫ рддреИрдпрд╛рд░ рд╣реИред рдкрд░рд┐рдирд┐рдпреЛрдЬрди.рдЬрд╝рд┐рдк рдирд╛рдордХ рдПрдХ рдкреИрдХреЗрдЬ рдмрдирд╛рдПрдБ, рдЗрд╕рдореЗрдВ рдЖрдкрдХреЗ рд╕рд░реНрд╡рд░ рд░рд╣рд┐рдд рдПрдкреНрд▓рд┐рдХреЗрд╢рди рдФрд░ рдмрд┐рд▓реНрдбрд╕реНрдкреАрдХ.рдЖрдИрдПрдордПрд▓ рдлрд╝рд╛рдЗрд▓ рдХреЗ рд▓рд┐рдП рд╕рднреА рдлрд╛рдЗрд▓реЗрдВ рд╢рд╛рдорд┐рд▓ рд╣реЛрдиреА рдЪрд╛рд╣рд┐рдПред
рдХреБрдЫ рдХреНрд╖рдгреЛрдВ рдХреЗ рдмрд╛рдж, CloudTrail рдХреЛ рдПрдХ PutObject рдЗрд╡реЗрдВрдЯ рдкрдВрдЬреАрдХреГрдд рдХрд░рдирд╛ рдЪрд╛рд╣рд┐рдП рдФрд░ CloudWatch рдЗрд╡реЗрдВрдЯ рдирд┐рдпрдо рдХреЛ рд╕рдХреНрд░рд┐рдп рдХрд░рдирд╛ рдЪрд╛рд╣рд┐рдП, рдЬреЛ рддрдм CodePipeline рдЯреНрд░рд┐рдЧрд░ рдХреЛ рд╕рдХреНрд░рд┐рдп рдХрд░рддрд╛ рд╣реИред

рдкрд░рд┐рдирд┐рдпреЛрдЬрдиред рдЬрд╝рд┐рдк S3 рдореЗрдВ рдмреВрдЯ рдХрд┐рдпрд╛ рдЧрдпрд╛

рдХреЛрдбрдкрд┐рдкрд▓рд╛рдЗрди рд▓реЙрдиреНрдЪ, рдмрд┐рд▓реНрдб рдЪрд╛рд▓реВ рд╣реИ
рдпрджрд┐ рд╣рдо AWS рдХреЛрдбрдмрд▓реНрдб рд╕реНрдЯреЗрдк рдХреЗ рд╡рд┐рд╡рд░рдг рдкрд░ рдЖрдЧреЗ рдмрдврд╝рддреЗ рд╣реИрдВ, рддреЛ рд╣рдо рдирд┐рд░реНрдорд╛рдг рдФрд░ рдкрд░рд┐рдирд┐рдпреЛрдЬрди рдкреНрд░рдХреНрд░рд┐рдпрд╛ рджреЗрдЦ рд╕рдХрддреЗ рд╣реИрдВ:

CodeBuild рдирд┐рд░реНрдорд╛рдг рдФрд░ рдбреЙрдХ рдЫрд╡рд┐ рдХреА рддреИрдирд╛рддреА рд╕реЗ рдЙрддреНрдкрд╛рджрди рдкреНрд░рд╛рдкреНрдд рд╣реЛрдЧрд╛

рд╕рдлрд▓ рддреИрдирд╛рддреА!
рд╣рдорд╛рд░реА рдкрд╛рдЗрдкрд▓рд╛рдЗрди рджреНрд╡рд╛рд░рд╛ рддреИрдирд╛рдд рдирдпрд╛ рдПрдкреНрд▓рд┐рдХреЗрд╢рди CloudFormation рдореЗрдВ рднреА рджрд┐рдЦрд╛рдИ рджреЗрддрд╛ рд╣реИ:

рдЖрдк рд╣рдорд╛рд░реЗ рд╕рд╛рдзрд╛рд░рдг рдПрдкреНрд▓рд┐рдХреЗрд╢рди рдореЗрдВ рдмрдирд╛рдП рдЧрдП рдПрдкреАрдЖрдИ рдПрдВрдбрдкреЙрдЗрдВрдЯ рдХрд╛ рдкрд░реАрдХреНрд╖рдг рдХрд░ рд╕рдХрддреЗ рд╣реИрдВ (URL рдХреЛрдбрдмреАрд▓ рдЖрдЙрдЯрдкреБрдЯ рдореЗрдВ рдпрд╛ рдЧреЗрдЯрд╡реЗ рдПрдкреАрдЖрдИ рдореЗрдВ рд╣реИ) рдФрд░ рд╕реБрдирд┐рд╢реНрдЪрд┐рдд рдХрд░реЗрдВ рдХрд┐ рдПрдкреНрд▓рд┐рдХреЗрд╢рди рд╕рдлрд▓рддрд╛рдкреВрд░реНрд╡рдХ рдХрд╛рдо рдХрд░рддрд╛ рд╣реИ:

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