рдпрд╕ рд▓реЗрдЦрдорд╛ рд╣рд╛рдореА рдЯреЗрд░рд╛рдлрд░реНрдордорд╛ рдХреЗ рд╕рдорд╛рд╡реЗрд╢ рдЫ рднрдиреЗрд░ рд╣реЗрд░реНрдиреЗрдЫреМрдВ, рд░ рдмрд┐рд╕реНрддрд╛рд░реИ рд╣рд╛рдореНрд░реЛ рдЖрдлреНрдиреИ рдкреВрд░реНрд╡рд╛рдзрд╛рд░ рдкрдирд┐ рд╕реБрд░реБ рдЧрд░реНрдиреЗрдЫреМрдВред
рд╕рдмреИ рдХреБрд░рд╛рдХреЛ рдмрд╛рд░реЗрдорд╛ рд╡рд┐рд╕реНрддреГрдд рд░ рддреАрди рдЪрд░рдгрд╣рд░реВрдорд╛:
1. Terraform - рд╡рд┐рд╡рд░рдг, рд▓рд╛рдн рд░ рдШрдЯрдХ
рдЯреЗрд░рд╛рдлрд░реНрдо рдХреЛрдб рдкреНрд░рдпреЛрдЧ рдЧрд░реЗрд░ рднрд░реНрдЪреБрдЕрд▓ рдкреВрд░реНрд╡рд╛рдзрд╛рд░ рдирд┐рд░реНрдорд╛рдг рд░ рд╡реНрдпрд╡рд╕реНрдерд╛рдкрди рдЧрд░реНрдирдХреЛ рд▓рд╛рдЧрд┐ IaC (рдЗрдиреНрдлреНрд░рд╛рд╕реНрдЯреНрд░рдХреНрдЪрд░-рдПрдЬ-рдХреЛрдб) рдЙрдкрдХрд░рдг рд╣реЛред
рд╣рд╛рдореАрд▓реЗ рдЙрдкрдХрд░рдгрд╕рдБрдЧ рдХрд╛рдо рдЧрд░реНрджрд╛ рдзреЗрд░реИ рдлрд╛рдЗрджрд╛рд╣рд░реВ рдиреЛрдЯ рдЧрд░реНрдпреМрдВ:
-
рдирдпрд╛рдБ рднрд╛рдбрд╛рд╡рд╛рд▓рд╣рд░реВрдХреЛ рддреИрдирд╛рддреА рдЧрддрд┐ (рдЕрдиреБрдХреВрд▓ рднрд░реНрдЪреБрдЕрд▓ рд╡рд╛рддрд╛рд╡рд░рдг)ред рд╕рд╛рдорд╛рдиреНрдпрддрдпрд╛, рддреНрдпрд╣рд╛рдБ рдзреЗрд░реИ рдирдпрд╛рдБ рдЧреНрд░рд╛рд╣рдХрд╣рд░реВ рдЫрдиреН, рдердк "рдХреНрд▓рд┐рдХрд╣рд░реВ" рдкреНрд░рд╛рд╡рд┐рдзрд┐рдХ рд╕рдорд░реНрдерди рдХрд░реНрдордЪрд╛рд░реАрд╣рд░реВрд▓реЗ рдирдпрд╛рдБ рд╕реНрд░реЛрддрд╣рд░реВ рдкреНрд░рдХрд╛рд╢рд┐рдд рдЧрд░реНрди рдЖрд╡рд╢реНрдпрдХ рдЫред Terraform рдХреЛ рд╕рд╛рде, рдкреНрд░рдпреЛрдЧрдХрд░реНрддрд╛рд╣рд░реВрд▓реЗ рднрд░реНрдЪреБрдЕрд▓ рдореЗрд╕рд┐рди рд╕реЗрдЯрд┐рдЩрд╣рд░реВ рдкрд░рд┐рд╡рд░реНрддрди рдЧрд░реНрди рд╕рдХреНрдЫрдиреН (рдЙрджрд╛рд╣рд░рдгрдХрд╛ рд▓рд╛рдЧрд┐, рд╕реНрд╡рдЪрд╛рд▓рд┐рдд рд░реВрдкрдорд╛ OS рдмрдиреНрдж рдЧрд░реНрдиреЗ рд░ рднрд░реНрдЪреБрдЕрд▓ рдбрд┐рд╕реНрдХ рд╡рд┐рднрд╛рдЬрди рдмрдврд╛рдЙрдиреЗ) рдкреНрд░рд╛рд╡рд┐рдзрд┐рдХ рд╕рдорд░реНрдерди рд╡рд╛ рдореЗрд╕рд┐рди рдЖрдлреИ рдмрдиреНрдж рдирдЧрд░реАред
-
рд╕рдХреНрд░рд┐рдпрддрд╛ рдпреЛрдЬрдирд╛рдХреЛ рддрддреНрдХрд╛рд▓ рдкреНрд░рдорд╛рдгрд┐рдХрд░рдг рдирдпрд╛рдБ рдЯреЗрдиреЗрдиреНрдЯред рдкреВрд░реНрд╡рд╛рдзрд╛рд░ рдХреЛрдбрдХреЛ рд╡рд┐рд╡рд░рдг рдкреНрд░рдпреЛрдЧ рдЧрд░реЗрд░, рд╣рд╛рдореА рддреБрд░реБрдиреНрддреИ рдХреЗ рдердкрд┐рдиреЗрдЫ рд░ рдХреБрди рдХреНрд░рдордорд╛, рд╕рд╛рдереИ рдХреБрди рдЕрдиреНрддрд┐рдо рдЕрд╡рд╕реНрдерд╛рдорд╛ рдпреЛ рд╡рд╛ рддреНрдпреЛ рднрд░реНрдЪреБрдЕрд▓ рдореЗрд╕рд┐рди рд╡рд╛ рднрд░реНрдЪреБрдЕрд▓ рдореЗрд╕рд┐рдирд╣рд░реВрд╕рдБрдЧ рдЬрдбрд╛рди рднрдПрдХреЛ рднрд░реНрдЪреБрдЕрд▓ рдиреЗрдЯрд╡рд░реНрдХ рд╣реБрдиреЗрдЫ рднрдиреЗрд░ рдЬрд╛рдБрдЪ рдЧрд░реНрди рд╕рдХреНрдЫреМрдВред
-
рд╕рдмреИрднрдиреНрджрд╛ рд▓реЛрдХрдкреНрд░рд┐рдп рдХреНрд▓рд╛рдЙрдб рдкреНрд▓реЗрдЯрдлрд░реНрдорд╣рд░реВ рд╡рд░реНрдгрди рдЧрд░реНрдиреЗ рдХреНрд╖рдорддрд╛ред рддрдкрд╛рдИрдВ рдЙрдкрдХрд░рдг рдкреНрд░рдпреЛрдЧ рдЧрд░реНрди рд╕рдХреНрдиреБрд╣реБрдиреНрдЫ Amazon рд░ Google Cloud рджреЗрдЦрд┐ VMware vCloud рдирд┐рд░реНрджреЗрд╢рдХрдорд╛ рдЖрдзрд╛рд░рд┐рдд рдирд┐рдЬреА рдкреНрд▓реЗрдЯрдлрд░реНрдорд╣рд░реВрдорд╛, IaaS, SaaS рд░ PaaS рд╕рдорд╛рдзрд╛рдирд╣рд░реВ рднрд┐рддреНрд░ рд╕реЗрд╡рд╛рд╣рд░реВ рдкреНрд░рджрд╛рди рдЧрд░реНрджреИред
-
рдзреЗрд░реИ рдХреНрд▓рд╛рдЙрдб рдкреНрд░рджрд╛рдпрдХрд╣рд░реВ рдкреНрд░рдмрдиреНрдз рдЧрд░реНрдиреБрд╣реЛрд╕реН рд░ рдХреНрд▓рд╛рдЙрдб рд╕реНрд░реЛрддрд╣рд░реВ рд╕рд┐рд░реНрдЬрдирд╛ рдЧрд░реНрди, рдирд┐рджрд╛рди рдЧрд░реНрди рд░ рд╡реНрдпрд╡рд╕реНрдерд╛рдкрди рдЧрд░реНрди рдПрдХрд▓ рдХрдиреНрдлрд┐рдЧрд░реЗрд╕рди рдкреНрд░рдпреЛрдЧ рдЧрд░реЗрд░ рджреЛрд╖ рд╕рд╣рд┐рд╖реНрдгреБрддрд╛ рд╕реБрдзрд╛рд░ рдЧрд░реНрди рддрд┐рдиреАрд╣рд░реВ рдмреАрдЪрдХреЛ рдкреВрд░реНрд╡рд╛рдзрд╛рд░ рд╡рд┐рддрд░рдг рдЧрд░реНрдиреБрд╣реЛрд╕реНред
-
рдбреЗрдореЛ рд╕реНрдЯреНрдпрд╛рдиреНрдбрд╣рд░реВ рд╕рд┐рд░реНрдЬрдирд╛ рдЧрд░реНрдирдХреЛ рд▓рд╛рдЧрд┐ рд╕реБрд╡рд┐рдзрд╛рдЬрдирдХ рдкреНрд░рдпреЛрдЧ рд╕рдлреНрдЯрд╡реЗрдпрд░ рдкрд░реАрдХреНрд╖рдг рд░ рдбрд┐рдмрдЧрд┐рдЩрдХреЛ рд▓рд╛рдЧрд┐ред рддрдкрд╛рдИрд▓реЗ рдкрд░реАрдХреНрд╖рдг рд╡рд┐рднрд╛рдЧрдХреЛ рд▓рд╛рдЧрд┐ рд╕реНрдЯреНрдпрд╛рдиреНрдбрд╣рд░реВ рд╕рд┐рд░реНрдЬрдирд╛ рдЧрд░реНрди рд░ рд╕реНрдерд╛рдирд╛рдиреНрддрд░рдг рдЧрд░реНрди рд╕рдХреНрдиреБрд╣реБрдиреНрдЫ, рд╕рдорд╛рдирд╛рдиреНрддрд░ рд░реВрдкрдорд╛ рд╡рд┐рднрд┐рдиреНрди рд╡рд╛рддрд╛рд╡рд░рдгрдорд╛ рд╕рдлреНрдЯрд╡реЗрдпрд░ рдкрд░реАрдХреНрд╖рдг рдЧрд░реНрдиреБрд╣реЛрд╕реН, рд░ рдХреЗрд╡рд▓ рдПрдХ рд╕реНрд░реЛрдд рдирд┐рд░реНрдорд╛рдг рдпреЛрдЬрдирд╛ рд╕рд┐рд░реНрдЬрдирд╛ рдЧрд░реЗрд░ рд╕реНрд░реЛрддрд╣рд░реВ рддрддреНрдХрд╛рд▓ рдкрд░рд┐рд╡рд░реНрддрди рдЧрд░реНрди рд░ рдореЗрдЯрд╛рдЙрди рд╕рдХреНрдиреБрд╣реБрдиреНрдЫред
"рдЯреЗрд░рд╛рд░рд┐рдпрдо" рдЯреЗрд░рд╛рдлрд╛рд░реНрдо
рд╣рд╛рдореАрд▓реЗ рдЫреЛрдЯрдХрд░реАрдорд╛ рдЙрдкрдХрд░рдгрдХреЛ рдлрд╛рдЗрджрд╛рд╣рд░реВрдХреЛ рдмрд╛рд░реЗрдорд╛ рдХреБрд░рд╛ рдЧрд░реНрдпреМрдВ, рдЕрдм рдпрд╕рд▓рд╛рдИ рдпрд╕рдХреЛ рдШрдЯрдХрд╣рд░реВрдорд╛ рд╡рд┐рднрд╛рдЬрди рдЧрд░реМрдВ
рдкреНрд░рджрд╛рдпрдХрд╣рд░реВред
Terraform рдорд╛, рд▓рдЧрднрдЧ рдХреБрдиреИ рдкрдирд┐ рдкреНрд░рдХрд╛рд░рдХреЛ рдкреВрд░реНрд╡рд╛рдзрд╛рд░рд▓рд╛рдИ рд╕реНрд░реЛрддрдХреЛ рд░реВрдкрдорд╛ рдкреНрд░рддрд┐рдирд┐рдзрд┐рддреНрд╡ рдЧрд░реНрди рд╕рдХрд┐рдиреНрдЫред рд╕реНрд░реЛрддрд╣рд░реВ рд░ API рдкреНрд▓реЗрдЯрдлрд░реНрдо рдмреАрдЪрдХреЛ рдЬрдбрд╛рди рдкреНрд░рджрд╛рдпрдХ рдореЛрдбреНрдпреБрд▓рд╣рд░реВ рджреНрд╡рд╛рд░рд╛ рдкреНрд░рджрд╛рди рдЧрд░рд┐рдПрдХреЛ рдЫ, рдЬрд╕рд▓реЗ рддрдкрд╛рдИрдВрд▓рд╛рдИ рдПрдХ рд╡рд┐рд╢рд┐рд╖реНрдЯ рдкреНрд▓реЗрдЯрдлрд░реНрдо рднрд┐рддреНрд░ рд╕реНрд░реЛрддрд╣рд░реВ рд╕рд┐рд░реНрдЬрдирд╛ рдЧрд░реНрди рдЕрдиреБрдорддрд┐ рджрд┐рдиреНрдЫ, рдЙрджрд╛рд╣рд░рдгрдХрд╛ рд▓рд╛рдЧрд┐, Azure рд╡рд╛ VMware vCloud рдирд┐рд░реНрджреЗрд╢рдХред
рдкрд░рд┐рдпреЛрдЬрдирд╛рдХреЛ рдПрдХ рднрд╛рдЧрдХреЛ рд░реВрдкрдорд╛, рддрдкрд╛рдЗрдБ рд╡рд┐рднрд┐рдиреНрди рдкреНрд▓реЗрдЯрдлрд░реНрдорд╣рд░реВрдорд╛ рд╡рд┐рднрд┐рдиреНрди рдкреНрд░рджрд╛рдпрдХрд╣рд░реВрд╕рдБрдЧ рдЕрдиреНрддрд░рдХреНрд░рд┐рдпрд╛ рдЧрд░реНрди рд╕рдХреНрдиреБрд╣реБрдиреНрдЫред
рд╕рдВрд╕рд╛рдзрди (рд╕реНрд░реЛрдд рд╡рд┐рд╡рд░рдг)ред
рд╕реНрд░реЛрддрд╣рд░реВрдХреЛ рд╡рд┐рд╡рд░рдгрд▓реЗ рддрдкрд╛рдИрдВрд▓рд╛рдИ рдкреНрд▓реЗрдЯрдлрд░реНрдо рдХрдореНрдкреЛрдиреЗрдиреНрдЯрд╣рд░реВ рд╡реНрдпрд╡рд╕реНрдерд╛рдкрди рдЧрд░реНрди рдЕрдиреБрдорддрд┐ рджрд┐рдиреНрдЫ, рдЬрд╕реНрддреИ рднрд░реНрдЪреБрдЕрд▓ рдореЗрд╕рд┐рди рд╡рд╛ рдиреЗрдЯрд╡рд░реНрдХрд╣рд░реВред
рддрдкрд╛рдИрдВрд▓реЗ VMware vCloud рдирд┐рд░реНрджреЗрд╢рдХ рдкреНрд░рджрд╛рдпрдХрдХреЛ рд▓рд╛рдЧрд┐ рд╕реНрд░реЛрдд рд╡рд┐рд╡рд░рдг рд╕рд┐рд░реНрдЬрдирд╛ рдЧрд░реНрди рд╕рдХреНрдиреБрд╣реБрдиреНрдЫ рд░ vCloud рдирд┐рд░реНрджреЗрд╢рдХ рдкреНрд░рдпреЛрдЧ рдЧрд░реНрдиреЗ рдХреБрдиреИ рдкрдирд┐ рд╣реЛрд╕реНрдЯрд┐рдЩ рдкреНрд░рджрд╛рдпрдХрд╕рдБрдЧ рд╕реНрд░реЛрддрд╣рд░реВ рд╕рд┐рд░реНрдЬрдирд╛ рдЧрд░реНрди рдпреЛ рд╡рд┐рд╡рд░рдг рдкреНрд░рдпреЛрдЧ рдЧрд░реНрдиреБрд╣реЛрд╕реНред рддрдкрд╛рдИрдВрд▓реЗ рдорд╛рддреНрд░ рдЖрд╡рд╢реНрдпрдХ рд╣реЛрд╕реНрдЯрд┐рдЩ рдкреНрд░рджрд╛рдпрдХрдорд╛ рдкреНрд░рдорд╛рдгреАрдХрд░рдг рдкреНрдпрд╛рд░рд╛рдорд┐рдЯрд░рд╣рд░реВ рд░ рдиреЗрдЯрд╡рд░реНрдХ рдЬрдбрд╛рди рдкреНрдпрд╛рд░рд╛рдорд┐рдЯрд░рд╣рд░реВ рдкрд░рд┐рд╡рд░реНрддрди рдЧрд░реНрди рдЖрд╡рд╢реНрдпрдХ рдЫред
рдкреНрд░рд╛рд╡рдзрд╛рдирдХрд░реНрддрд╛рд╣рд░реВред
рдпреЛ рдХрдореНрдкреЛрдиреЗрдиреНрдЯрд▓реЗ рднрд░реНрдЪреБрдЕрд▓ рдореЗрд╕рд┐рдирд╣рд░реВ рд╕рд┐рд░реНрдЬрдирд╛ рдЧрд░реЗрдкрдЫрд┐ рдЕрдкрд░реЗрдЯрд┐рдЩ рд╕рд┐рд╕реНрдЯрдордХреЛ рдкреНрд░рд╛рд░рдореНрднрд┐рдХ рд╕реНрдерд╛рдкрдирд╛ рд░ рдорд░реНрдорддрдХрд╛ рд▓рд╛рдЧрд┐ рдХрд╛рд░реНрдпрд╣рд░реВ рдЧрд░реНрди рд╕рдореНрднрд╡ рдмрдирд╛рдЙрдБрдЫред рдПрдХрдЪреЛрдЯрд┐ рддрдкрд╛рдИрдВрд▓реЗ рднрд░реНрдЪреБрдЕрд▓ рдореЗрд╕рд┐рди рд╕реНрд░реЛрдд рд╕рд┐рд░реНрдЬрдирд╛ рдЧрд░реЗрдкрдЫрд┐, рддрдкрд╛рдИрдВрд▓реЗ SSH рдорд╛рд░реНрдлрдд рдХрдиреНрдлрд┐рдЧрд░ рдЧрд░реНрди рд░ рдЬрдбрд╛рди рдЧрд░реНрди, рдЕрдкрд░реЗрдЯрд┐рдЩ рд╕рд┐рд╕реНрдЯрдо рдЕрдкрдбреЗрдЯ рдЧрд░реНрди, рд░ рд╕реНрдХреНрд░рд┐рдкреНрдЯ рдбрд╛рдЙрдирд▓реЛрдб рдЧрд░реНрди рд░ рдЪрд▓рд╛рдЙрди рдкреНрд░рд╛рд╡рдзрд╛рдирд╣рд░реВ рдкреНрд░рдпреЛрдЧ рдЧрд░реНрди рд╕рдХреНрдиреБрд╣реБрдиреНрдЫред
рдЗрдирдкреБрдЯ рд░ рдЖрдЙрдЯрдкреБрдЯ рдЪрд░ред
рдЗрдирдкреБрдЯ рдЪрд░ - рдХреБрдиреИ рдкрдирд┐ рдкреНрд░рдХрд╛рд░рдХрд╛ рдмреНрд▓рдХрд╣рд░реВрдХреЛ рд▓рд╛рдЧрд┐ рдЗрдирдкреБрдЯ рдЪрд░ред
рдЖрдЙрдЯрдкреБрдЯ рдЪрд░рд╣рд░реВрд▓реЗ рддрдкрд╛рдИрдВрд▓рд╛рдИ рд╕реНрд░реЛрддрд╣рд░реВ рд╕рд┐рд░реНрдЬрдирд╛ рдЧрд░реЗрдкрдЫрд┐ рдорд╛рдирд╣рд░реВ рдмрдЪрдд рдЧрд░реНрди рдЕрдиреБрдорддрд┐ рджрд┐рдиреНрдЫ рд░ рдЕрдиреНрдп рдореЛрдбреНрдпреБрд▓рд╣рд░реВрдорд╛ рдЗрдирдкреБрдЯ рдЪрд░рдХреЛ рд░реВрдкрдорд╛ рдкреНрд░рдпреЛрдЧ рдЧрд░реНрди рд╕рдХрд┐рдиреНрдЫ, рдЙрджрд╛рд╣рд░рдгрдХрд╛ рд▓рд╛рдЧрд┐ Provisioners рдмреНрд▓рдХрдорд╛ред
рд░рд╛рдЬреНрдпрд╣рд░реБ.
рд░рд╛рдЬреНрдп рдлрд╛рдЗрд▓рд╣рд░реВрд▓реЗ рдкреНрд░рджрд╛рдпрдХ рдкреНрд▓реЗрдЯрдлрд░реНрдо рд╕реНрд░реЛрддрд╣рд░реВрдХреЛ рдХрдиреНрдлрд┐рдЧрд░реЗрд╕рдирдХреЛ рдмрд╛рд░реЗрдорд╛ рдЬрд╛рдирдХрд╛рд░реА рднрдгреНрдбрд╛рд░рдг рдЧрд░реНрджрдЫред рдЬрдм рдкреНрд▓реЗрдЯрдлрд░реНрдо рдкрд╣рд┐рд▓реЛ рдкрдЯрдХ рд╕рд┐рд░реНрдЬрдирд╛ рдЧрд░рд┐рдиреНрдЫ, рддреНрдпрд╣рд╛рдБ рд╕реНрд░реЛрддрд╣рд░реВрдХреЛ рдмрд╛рд░реЗрдорд╛ рдХреБрдиреИ рдЬрд╛рдирдХрд╛рд░реА рдЫреИрди рд░ рдХреБрдиреИ рдкрдирд┐ рд╕рдЮреНрдЪрд╛рд▓рди рдЧрд░реНрдиреБ рдЕрдШрд┐, рдЯреЗрд░рд╛рдлрд░реНрдорд▓реЗ рдкрд╣рд┐рд▓реЗ рдиреИ рд╡рд░реНрдгрди рдЧрд░рд┐рдПрдХреЛ рд╕реНрд░реЛрддрд╣рд░реВрдХреЛ рд╡рд╛рд╕реНрддрд╡рд┐рдХ рдкреВрд░реНрд╡рд╛рдзрд╛рд░рдХреЛ рд╕рд╛рде рд░рд╛рдЬреНрдпрд▓рд╛рдИ рдЕрджреНрдпрд╛рд╡рдзрд┐рдХ рдЧрд░реНрджрдЫред
рд░рд╛рдЬреНрдпрд╣рд░реВрдХреЛ рдореБрдЦреНрдп рдЙрджреНрджреЗрд╢реНрдп рдкрд╣рд┐рд▓реЗ рдиреИ рд╕рд┐рд░реНрдЬрдирд╛ рдЧрд░рд┐рдПрдХрд╛ рд╕реНрд░реЛрддрд╣рд░реВрдХреЛ рд╡рд╕реНрддреБрд╣рд░реВрдХреЛ рдЧреБрдЪреНрдЫрд╛ рдмрдЪрдд рдЧрд░реНрди рдердкрд┐рдПрдХреЛ рд╕реНрд░реЛрддрд╣рд░реВ рд░ рд╡рд╕реНрддреБрд╣рд░реВрдХреЛ рдХрдиреНрдлрд┐рдЧрд░реЗрд╕рди рддреБрд▓рдирд╛ рдЧрд░реНрдирдХреЛ рд▓рд╛рдЧрд┐ рджреЛрд╣реЛрд░реНрдпрд╛рдЗрдПрдХреЛ рд╕рд┐рд░реНрдЬрдирд╛ рд░ рдкреНрд▓реЗрдЯрдлрд░реНрдордорд╛ рдкрд░рд┐рд╡рд░реНрддрдирд╣рд░реВрдмрд╛рдЯ рдмрдЪреНрдирдХреЛ рд▓рд╛рдЧрд┐ рд╣реЛред
рдкреВрд░реНрд╡рдирд┐рд░реНрдзрд╛рд░рд┐рдд рд░реВрдкрдорд╛, рд░рд╛рдЬреНрдп рдЬрд╛рдирдХрд╛рд░реА рд╕реНрдерд╛рдиреАрдп рдлрд╛рдЗрд▓ terraform.tfstate рдорд╛ рднрдгреНрдбрд╛рд░рдг рдЧрд░рд┐рдиреНрдЫ, рддрд░ рдЖрд╡рд╢реНрдпрдХ рднрдПрдорд╛, рдпреЛ рдЯреЛрд▓реА рдХрд╛рд░реНрдпрдХреЛ рд▓рд╛рдЧрд┐ рдЯрд╛рдврд╛рдХреЛ рднрдгреНрдбрд╛рд░рдг рдкреНрд░рдпреЛрдЧ рдЧрд░реНрди рд╕рдореНрднрд╡ рдЫред
рддрдкрд╛рдИрд▓реЗ рд╣рд╛рд▓рдХреЛ рдкреНрд▓реЗрдЯрдлрд░реНрдо рд╕реНрд░реЛрддрд╣рд░реВ рд░рд╛рдЬреНрдпрдорд╛ рдЖрдпрд╛рдд рдЧрд░реНрди рд╕рдХреНрдиреБрд╣реБрдиреНрдЫ рдЕрдиреНрдп рд╕реНрд░реЛрддрд╣рд░реВрд╕рдБрдЧ рдердк рдЕрдиреНрддрд░рдХреНрд░рд┐рдпрд╛ рдЧрд░реНрди рдЬреБрди рдмрд╛рд░реАрдорд╛ Terraform рдХреЛ рдорджреНрджрдд рдмрд┐рдирд╛ рд╕рд┐рд░реНрдЬрдирд╛ рдЧрд░рд┐рдПрдХреЛ рдерд┐рдпреЛред
2. рдкреВрд░реНрд╡рд╛рдзрд╛рд░ рдирд┐рд░реНрдорд╛рдг
рдХрдореНрдкреЛрдиреЗрдиреНрдЯрд╣рд░реВ рдХреНрд░рдордмрджреНрдз рдЧрд░рд┐рдПрдХреЛ рдЫ, рдЕрдм Terraform рдкреНрд░рдпреЛрдЧ рдЧрд░реЗрд░ рд╣рд╛рдореА рдмрд┐рд╕реНрддрд╛рд░реИ рддреАрди рднрд░реНрдЪреБрдЕрд▓ рдореЗрд╕рд┐рдирд╣рд░реВ рд╕рд╣рд┐рддрдХреЛ рдкреВрд░реНрд╡рд╛рдзрд╛рд░ рд╕рд┐рд░реНрдЬрдирд╛ рдЧрд░реНрдиреЗрдЫреМрдВред рдкрд╣рд┐рд▓реЛ nginx рдкреНрд░реЛрдХреНрд╕реА рд╕рд░реНрднрд░ рд╕реНрдерд╛рдкрдирд╛ рднрдПрдХреЛ, рджреЛрд╕реНрд░реЛ рдиреЗрдХреНрд╕реНрдЯрдХреНрд▓рд╛рдЙрдбрдорд╛ рдЖрдзрд╛рд░рд┐рдд рдлрд╛рдЗрд▓ рднрдгреНрдбрд╛рд░рдг рд░ рддреЗрд╕реНрд░реЛ CMS Bitrix рд╕рдБрдЧред
рд╣рд╛рдореА рдХреЛрдб рд▓реЗрдЦреНрдиреЗрдЫреМрдВ рд░ рд╣рд╛рдореНрд░реЛ рдЙрджрд╛рд╣рд░рдг рдкреНрд░рдпреЛрдЧ рдЧрд░реЗрд░ рдпрд╕рд▓рд╛рдИ рдХрд╛рд░реНрдпрд╛рдиреНрд╡рдпрди рдЧрд░реНрдиреЗрдЫреМрдВ
рдкрд╣рд┐рд▓реЗ, рд╣рд╛рдореНрд░реЛ рдирдпрд╛рдБ рдкрд░рд┐рдпреЛрдЬрдирд╛рдХреЛ рд▓рд╛рдЧрд┐ рдПрдЙрдЯрд╛ рдбрд╛рдЗрд░реЗрдХреНрдЯрд░реА рд╕рд┐рд░реНрдЬрдирд╛ рдЧрд░реМрдВ рдЬрд╕рдорд╛ рдкреВрд░реНрд╡рд╛рдзрд╛рд░ рд╡рд░реНрдгрди рдЧрд░реНрдиреЗ рдлрд╛рдЗрд▓рд╣рд░реВ рд░рд╛рдЦрд┐рдиреЗрдЫред
mkdir project01
рдЕрд░реНрдХреЛ, рд╣рд╛рдореА рдкреВрд░реНрд╡рд╛рдзрд╛рд░ рдШрдЯрдХрд╣рд░реВ рд╡рд░реНрдгрди рдЧрд░реНрдЫреМрдВред Terraform рд▓реЗ рдлрд╛рдЗрд▓рд╣рд░реВрдорд╛ рд╡рд░реНрдгрдирдХреЛ рдЖрдзрд╛рд░рдорд╛ рд╕рдореНрдмрдиреНрдзрд╣рд░реВ рд╕рд┐рд░реНрдЬрдирд╛ рдЧрд░реНрджрдЫ рд░ рдлрд╛рдЗрд▓рд╣рд░реВ рдкреНрд░рдХреНрд░рд┐рдпрд╛ рдЧрд░реНрджрдЫред рдлрд╛рдЗрд▓рд╣рд░реВ рдЖрдлреИрдВрд▓рд╛рдИ рд╡рд░реНрдгрди рдЧрд░рд┐рдПрдХреЛ рдмреНрд▓рдХрд╣рд░реВрдХреЛ рдЙрджреНрджреЗрд╢реНрдпрдХреЛ рдЖрдзрд╛рд░рдорд╛ рдирд╛рдо рджрд┐рди рд╕рдХрд┐рдиреНрдЫ, рдЙрджрд╛рд╣рд░рдгрдХрд╛ рд▓рд╛рдЧрд┐, network.tf - рдкреВрд░реНрд╡рд╛рдзрд╛рд░рдХреЛ рд▓рд╛рдЧрд┐ рдиреЗрдЯрд╡рд░реНрдХ рдкреНрдпрд╛рд░рд╛рдорд┐рдЯрд░рд╣рд░реВ рд╡рд░реНрдгрди рдЧрд░реНрджрдЫред
рд╣рд╛рдореНрд░реЛ рдкреВрд░реНрд╡рд╛рдзрд╛рд░рдХрд╛ рдШрдЯрдХрд╣рд░реВ рд╡рд░реНрдгрди рдЧрд░реНрди, рд╣рд╛рдореАрд▓реЗ рдирд┐рдореНрди рдлрд╛рдЗрд▓рд╣рд░реВ рд╕рд┐рд░реНрдЬрдирд╛ рдЧрд░реЗрдХрд╛ рдЫреМрдВ:
рдлрд╛рдЗрд▓рд╣рд░реВрдХреЛ рд╕реВрдЪреАред
main.tf - рднрд░реНрдЪреБрдЕрд▓ рд╡рд╛рддрд╛рд╡рд░рдгрдХрд╛ рд▓рд╛рдЧрд┐ рдкреНрдпрд╛рд░рд╛рдорд┐рдЯрд░рд╣рд░реВрдХреЛ рд╡рд┐рд╡рд░рдг - рднрд░реНрдЪреБрдЕрд▓ рдореЗрд╕рд┐рдирд╣рд░реВ, рднрд░реНрдЪреБрдЕрд▓ рдХрдиреНрдЯреЗрдирд░рд╣рд░реВ;
network.tf - рднрд░реНрдЪреБрдЕрд▓ рдиреЗрдЯрд╡рд░реНрдХ рдкреНрдпрд╛рд░рд╛рдорд┐рдЯрд░рд╣рд░реВ рд░ NAT рд░ рдлрд╛рдпрд░рд╡рд╛рд▓ рдирд┐рдпрдорд╣рд░реВрдХреЛ рд╡рд┐рд╡рд░рдг;
variables.tf - рд╣рд╛рдореАрд▓реЗ рдкреНрд░рдпреЛрдЧ рдЧрд░реНрдиреЗ рдЪрд░рд╣рд░реВрдХреЛ рд╕реВрдЪреА;
vcd.tfvars - VMware vCloud рдирд┐рд░реНрджреЗрд╢рдХ рдореЛрдбреНрдпреБрд▓рдХреЛ рд▓рд╛рдЧрд┐ рдкрд░рд┐рдпреЛрдЬрдирд╛ рдЪрд▓ рдорд╛рдирд╣рд░реВред
Terraform рдорд╛ рдХрдиреНрдлрд┐рдЧрд░реЗрд╕рди рднрд╛рд╖рд╛ рдШреЛрд╖рдгрд╛рддреНрдордХ рдЫ рд░ рдмреНрд▓рдХрд╣рд░реВрдХреЛ рдХреНрд░рдо рдлрд░рдХ рдкрд░реНрджреИрди, рдкреНрд░реЛрднрд┐рдЬрдирд░ рдмреНрд▓рдХрд╣рд░реВ рдмрд╛рд╣реЗрдХ, рдХрд┐рдирднрдиреЗ рдпрд╕ рдмреНрд▓рдХрдорд╛ рд╣рд╛рдореА рдкреВрд░реНрд╡рд╛рдзрд╛рд░ рддрдпрд╛рд░ рдЧрд░реНрджрд╛ рдХрд╛рд░реНрдпрд╛рдиреНрд╡рдпрди рдЧрд░рд┐рдиреЗ рдЖрджреЗрд╢рд╣рд░реВ рд╡рд░реНрдгрди рдЧрд░реНрджрдЫреМрдВ рд░ рддрд┐рдиреАрд╣рд░реВ рдХреНрд░рдордмрджреНрдз рд░реВрдкрдорд╛ рдХрд╛рд░реНрдпрд╛рдиреНрд╡рдпрди рд╣реБрдиреЗрдЫрдиреНред
рдмреНрд▓рдХ рд╕рдВрд░рдЪрдирд╛ред
<BLOCK TYPE> "<BLOCK LABEL>" "<BLOCK LABEL>" {
# Block body
<IDENTIFIER> = <EXPRESSION> # Argument
}
рдмреНрд▓рдХрд╣рд░реВ рд╡рд░реНрдгрди рдЧрд░реНрди, рдпрд╕рдХреЛ рдЖрдлреНрдиреИ рдкреНрд░реЛрдЧреНрд░рд╛рдорд┐рдЩ рднрд╛рд╖рд╛ HCL (HashiCorp рдХрдиреНрдлрд┐рдЧрд░реЗрд╕рди рднрд╛рд╖рд╛) рдкреНрд░рдпреЛрдЧ рдЧрд░рд┐рдиреНрдЫ; JSON рдкреНрд░рдпреЛрдЧ рдЧрд░реЗрд░ рдкреВрд░реНрд╡рд╛рдзрд╛рд░ рд╡рд░реНрдгрди рдЧрд░реНрди рд╕рдореНрднрд╡ рдЫред рддрдкрд╛рдЗрдБ рд╕рд┐рдиреНрдЯреНрдпрд╛рдХреНрд╕рдХреЛ рдмрд╛рд░реЗрдорд╛ рдердк рдЬрд╛рдиреНрди рд╕рдХреНрдиреБрд╣реБрдиреНрдЫ
рд╡рд╛рддрд╛рд╡рд░рдг рдЪрд░ рдХрдиреНрдлрд┐рдЧрд░реЗрд╕рди, variables.tf рд░ vcd.tfvars
рдкрд╣рд┐рд▓реЗ, VMware vCloud рдирд┐рд░реНрджреЗрд╢рдХ рдореЛрдбреНрдпреБрд▓рдХреЛ рд▓рд╛рдЧрд┐ рд╕рдмреИ рдкреНрд░рдпреЛрдЧ рдЧрд░рд┐рдПрдХрд╛ рдЪрд░рд╣рд░реВрдХреЛ рд╕реВрдЪреА рд░ рддрд┐рдиреАрд╣рд░реВрдХреЛ рдорд╛рдирд╣рд░реВ рд╡рд░реНрдгрди рдЧрд░реНрдиреЗ рджреБрдИ рдлрд╛рдЗрд▓рд╣рд░реВ рд╕рд┐рд░реНрдЬрдирд╛ рдЧрд░реМрдВред рдкрд╣рд┐рд▓реЗ, variables.tf рдлрд╛рдЗрд▓ рд╕рд┐рд░реНрдЬрдирд╛ рдЧрд░реМрдВред
variables.tf рдлрд╛рдЗрд▓рдХреЛ рд╕рд╛рдордЧреНрд░реАред
variable "vcd_org_user" {
description = "vCD Tenant User"
}
variable "vcd_org_password" {
description = "vCD Tenant Password"
}
variable "vcd_org" {
description = "vCD Tenant Org"
}
variable "vcd_org_vdc" {
description = "vCD Tenant VDC"
}
variable "vcd_org_url" {
description = "vCD Tenant URL"
}
variable "vcd_org_max_retry_timeout" {
default = "60"
}
variable "vcd_org_allow_unverified_ssl" {
default = "true"
}
variable "vcd_org_edge_name" {
description = "vCD edge name"
}
variable "vcd_org_catalog" {
description = "vCD public catalog"
}
variable "vcd_template_os_centos7" {
description = "OS CentOS 7"
default = "CentOS7"
}
variable "vcd_org_ssd_sp" {
description = "Storage Policies"
default = "Gold Storage Policy"
}
variable "vcd_org_hdd_sp" {
description = "Storage Policies"
default = "Bronze Storage Policy"
}
variable "vcd_edge_local_subnet" {
description = "Organization Network Subnet"
}
variable "vcd_edge_external_ip" {
description = "External public IP"
}
variable "vcd_edge_local_ip_nginx" {}
variable "vcd_edge_local_ip_bitrix" {}
variable "vcd_edge_local_ip_nextcloud" {}
variable "vcd_edge_external_network" {}
рдЪрд░ рдорд╛рдирд╣рд░реВ рдЬреБрди рд╣рд╛рдореАрд▓реЗ рдкреНрд░рджрд╛рдпрдХрдмрд╛рдЯ рдкреНрд░рд╛рдкреНрдд рдЧрд░реНрдЫреМрдВред
-
vcd_org_user тАФ рд╕рдВрдЧрдарди рдкреНрд░рд╢рд╛рд╕рдХ рдЕрдзрд┐рдХрд╛рд░ рд╕рд╣рд┐рддрдХреЛ рдкреНрд░рдпреЛрдЧрдХрд░реНрддрд╛ рдирд╛рдо,
-
vcd_org_password тАФ рдкреНрд░рдпреЛрдЧрдХрд░реНрддрд╛ рдкрд╛рд╕рд╡рд░реНрдб,
-
vcd_org тАФ рд╕рдВрд╕реНрдерд╛рдХреЛ рдирд╛рдо,
-
vcd_org_vdc тАФ рднрд░реНрдЪреБрдЕрд▓ рдбрд╛рдЯрд╛ рдХреЗрдиреНрджреНрд░рдХреЛ рдирд╛рдо,
-
vcd_org_url - API URL,
-
vcd_org_edge_name тАФ рднрд░реНрдЪреБрдЕрд▓ рд░рд╛рдЙрдЯрд░рдХреЛ рдирд╛рдо,
-
vcd_org_catalog тАФ рднрд░реНрдЪреБрдЕрд▓ рдореЗрд╕рд┐рди рдЯреЗрдореНрдкреНрд▓реЗрдЯ рднрдПрдХреЛ рдбрд╛рдЗрд░реЗрдХреНрдЯрд░реАрдХреЛ рдирд╛рдо,
-
vcd_edge_external_ip тАФ рд╕рд╛рд░реНрд╡рдЬрдирд┐рдХ IP рдареЗрдЧрд╛рдирд╛,
-
vcd_edge_external_network тАФ рдмрд╛рд╣реНрдп рдиреЗрдЯрд╡рд░реНрдХрдХреЛ рдирд╛рдо,
-
vcd_org_hdd_sp тАФ HDD рднрдгреНрдбрд╛рд░рдг рдиреАрддрд┐рдХреЛ рдирд╛рдо,
-
vcd_org_ssd_sp тАФ SSD рднрдгреНрдбрд╛рд░рдг рдиреАрддрд┐рдХреЛ рдирд╛рдоред
рд░ рд╣рд╛рдореНрд░реЛ рдЪрд░ рдкреНрд░рд╡рд┐рд╖реНрдЯ рдЧрд░реНрдиреБрд╣реЛрд╕реН:
-
vcd_edge_local_ip_nginx тАФ NGINX рд╕рдБрдЧ рднрд░реНрдЪреБрдЕрд▓ рдореЗрд╕рд┐рдирдХреЛ IP рдареЗрдЧрд╛рдирд╛,
-
vcd_edge_local_ip_bitrix - 1C рдХреЛ рд╕рд╛рде рднрд░реНрдЪреБрдЕрд▓ рдореЗрд╕рд┐рдирдХреЛ IP рдареЗрдЧрд╛рдирд╛: Bitrix,
-
vcd_edge_local_ip_nextcloud тАФ Nextcloud рдХреЛ рд╕рд╛рде рднрд░реНрдЪреБрдЕрд▓ рдореЗрд╕рд┐рдирдХреЛ IP рдареЗрдЧрд╛рдирд╛ред
рджреЛрд╕реНрд░реЛ рдлрд╛рдЗрд▓рдХреЛ рд╕рд╛рде рд╣рд╛рдореАрд▓реЗ vcd.tfvars рдлрд╛рдЗрд▓рдорд╛ VMware vCloud рдирд┐рд░реНрджреЗрд╢рдХ рдореЛрдбреНрдпреБрд▓рдХрд╛ рд▓рд╛рдЧрд┐ рдЪрд░рд╣рд░реВ рд╕рд┐рд░реНрдЬрдирд╛ рд░ рдирд┐рд░реНрджрд┐рд╖реНрдЯ рдЧрд░реНрдЫреМрдВ: рд╣рд╛рдореАрд▓рд╛рдИ рд╕рдореНрдЭрдиреБрд╣реЛрд╕реН рдХрд┐ рд╣рд╛рдореНрд░реЛ рдЙрджрд╛рд╣рд░рдгрдорд╛ рд╣рд╛рдореАрд▓реЗ рдкреНрд░рдпреЛрдЧ рдЧрд░реНрдЫреМрдВред
vcd.tfvars рдлрд╛рдЗрд▓рдХреЛ рд╕рд╛рдордЧреНрд░реАред
vcd_org_url = "https://vcloud.mclouds.ru/api"
vcd_org_user = "orgadmin"
vcd_org_password = "*"
vcd = "org"
vcd_org_vdc = "orgvdc"
vcd_org_maxretry_timeout = 60
vcd_org_allow_unverified_ssl = true
vcd_org_catalog = "Templates"
vcd_templateos_centos7 = "CentOS7"
vcd_org_ssd_sp = "Gold Storage Policy"
vcd_org_hdd_sp = "Bronze Storage Policy"
vcd_org_edge_name = "MCLOUDS-EDGE"
vcd_edge_external_ip = "185.17.66.1"
vcd_edge_local_subnet = "192.168.110.0/24"
vcd_edge_local_ip_nginx = "192.168.110.1"
vcd_edge_local_ip_bitrix = "192.168.110.10"
vcd_edge_local_ip_nextcloud = "192.168.110.11"
vcd_edge_external_network = "NET-185-17-66-0"
рдиреЗрдЯрд╡рд░реНрдХ рдХрдиреНрдлрд┐рдЧрд░реЗрд╕рди, network.tfред
рд╡рд╛рддрд╛рд╡рд░рдг рдЪрд░рд╣рд░реВ рд╕реЗрдЯ рдЧрд░рд┐рдПрдХрд╛ рдЫрдиреН, рдЕрдм рд╣рд╛рдореА рднрд░реНрдЪреБрдЕрд▓ рдореЗрд╕рд┐рди рдЬрдбрд╛рди рдпреЛрдЬрдирд╛ рд╕реЗрдЯ рдЕрдк рдЧрд░реНрдиреЗрдЫреМрдВ - рдкреНрд░рддреНрдпреЗрдХ рднрд░реНрдЪреБрдЕрд▓ рдореЗрд╕рд┐рдирд▓рд╛рдИ рдирд┐рдЬреА IP рдареЗрдЧрд╛рдирд╛ рддреЛрдХреНрдиреЗ рд░ рдмрд╛рд╣реНрдп рдиреЗрдЯрд╡рд░реНрдХрдорд╛ рдкреЛрд░реНрдЯрд╣рд░реВрд▓рд╛рдИ "рдлрд░реНрд╡рд╛рд░реНрдб" рдЧрд░реНрди рдЧрдиреНрддрд╡реНрдп NAT рдкреНрд░рдпреЛрдЧ рдЧрд░реНрдиреБрд╣реЛрд╕реНред рд╡реНрдпрд╡рд╕реНрдерд╛рдкрди рдкреЛрд░реНрдЯрд╣рд░реВрдорд╛ рдкрд╣реБрдБрдЪ рд╕реАрдорд┐рдд рдЧрд░реНрди, рд╣рд╛рдореА рд╣рд╛рдореНрд░реЛ IP рдареЗрдЧрд╛рдирд╛рдХреЛ рд▓рд╛рдЧрд┐ рдорд╛рддреНрд░ рдкрд╣реБрдБрдЪ рд╕реЗрдЯ рдЧрд░реНрдиреЗрдЫреМрдВред
Terraform рдкреНрд▓реЗрдЯрдлрд░реНрдордХреЛ рд▓рд╛рдЧрд┐ рдиреЗрдЯрд╡рд░реНрдХ рд░реЗрдЦрд╛рдЪрд┐рддреНрд░ рд╕рд┐рд░реНрдЬрдирд╛ рднрдЗрд░рд╣реЗрдХреЛ рдЫ
рд╣рд╛рдореА net_lan01 рдирд╛рдордХреЛ рд╕рд╛рде рднрд░реНрдЪреБрдЕрд▓ рд╕рдВрдЧрдардирд╛рддреНрдордХ рдиреЗрдЯрд╡рд░реНрдХ рд╕рд┐рд░реНрдЬрдирд╛ рдЧрд░реНрдЫреМрдВ, рдкреВрд░реНрд╡рдирд┐рд░реНрдзрд╛рд░рд┐рдд рдЧреЗрдЯрд╡реЗ: 192.168.110.254, рд░ рдареЗрдЧрд╛рдирд╛ рд╕реНрдкреЗрд╕: 192.168.110.0/24ред
рд╣рд╛рдореА рднрд░реНрдЪреБрдЕрд▓ рдиреЗрдЯрд╡рд░реНрдХрдХреЛ рд╡рд░реНрдгрди рдЧрд░реНрдЫреМрдВред
resource "vcd_network_routed" "net" {
name = "net_lan01"
edge_gateway = var.vcd_org_edge_name
gateway = "192.168.110.254"
dns1 = "1.1.1.1"
dns2 = "8.8.8.8"
static_ip_pool {
start_address = "192.168.110.1"
end_address = "192.168.110.253"
}
}
рднрд░реНрдЪреБрдЕрд▓ рдореЗрд╕рд┐рдирд╣рд░реВрд▓рд╛рдИ рдЗрдиреНрдЯрд░рдиреЗрдЯ рдкрд╣реБрдБрдЪ рдЧрд░реНрди рдЕрдиреБрдорддрд┐ рджрд┐рдиреЗ рдлрд╛рдпрд░рд╡рд╛рд▓ рдирд┐рдпрдорд╣рд░реВ рд╕рд┐рд░реНрдЬрдирд╛ рдЧрд░реМрдВред рдпреЛ рдмреНрд▓рдХ рднрд┐рддреНрд░, рдХреНрд▓рд╛рдЙрдбрдорд╛ рднрдПрдХрд╛ рд╕рдмреИ рднрд░реНрдЪреБрдЕрд▓ рд╕реНрд░реЛрддрд╣рд░реВрдорд╛ рдЗрдиреНрдЯрд░рдиреЗрдЯрдорд╛ рдкрд╣реБрдБрдЪ рд╣реБрдиреЗрдЫ:
рд╣рд╛рдореА рдЗрдиреНрдЯрд░рдиреЗрдЯрдорд╛ VM рдкрд╣реБрдБрдЪрдХрд╛ рд▓рд╛рдЧрд┐ рдирд┐рдпрдорд╣рд░реВ рд╡рд░реНрдгрди рдЧрд░реНрдЫреМрдВред
resource "vcd_nsxv_firewall_rule" "fw_internet_access" {
edge_gateway = var.vcdorgedgename
name = "Internet Access"
source {
gateway_interfaces = ["internal"]
}
destination {
gateway_interfaces = ["external"]
}
service {
protocol = "any"
}
depends_on = [vcdnetworkrouted.net]
}
рдирд┐рд░реНрднрд░рддрд╛ рд╕реНрдерд╛рдкрд┐рдд рдЧрд░рд┐рд╕рдХреЗрдкрдЫрд┐ vcdnetworkrouted.net рдмреНрд▓рдХ рдкреНрд░рд╢реЛрдзрди рдЧрд░реЗрдкрдЫрд┐, рд╣рд╛рдореА vcdnsxvfirewallrule рдмреНрд▓рдХ рдХрдиреНрдлрд┐рдЧрд░ рдЧрд░реНрди рдЕрдЧрд╛рдбрд┐ рдмрдвреНрдЫреМрдВред, рдкреНрд░рдпреЛрдЧ рдЧрд░реЗрд░ рднрд░ рдкрд░реНрдЫред рд╣рд╛рдореА рдпреЛ рд╡рд┐рдХрд▓реНрдк рдкреНрд░рдпреЛрдЧ рдЧрд░реНрдЫреМрдВ рдХрд┐рдирднрдиреЗ рдХреЗрд╣реА рдирд┐рд░реНрднрд░рддрд╛рд╣рд░реВ рдХрдиреНрдлрд┐рдЧрд░реЗрд╕рдирдорд╛ рд╕реНрдкрд╖реНрдЯ рд░реВрдкрдорд╛ рдкрд╣рд┐рдЪрд╛рди рд╣реБрди рд╕рдХреНрдЫред
рдЕрд░реНрдХреЛ, рд╣рд╛рдореА рдмрд╛рд╣реНрдп рдиреЗрдЯрд╡рд░реНрдХрдмрд╛рдЯ рдкреЛрд░реНрдЯрд╣рд░реВрдорд╛ рдкрд╣реБрдБрдЪ рдЕрдиреБрдорддрд┐ рджрд┐рдиреЗ рдирд┐рдпрдорд╣рд░реВ рд╕рд┐рд░реНрдЬрдирд╛ рдЧрд░реНрдиреЗрдЫреМрдВ рд░ рд╕рд░реНрднрд░рд╣рд░реВрдорд╛ SSH рдорд╛рд░реНрдлрдд рдЬрдбрд╛рди рдЧрд░реНрдирдХреЛ рд▓рд╛рдЧрд┐ рд╣рд╛рдореНрд░реЛ IP рдареЗрдЧрд╛рдирд╛ рд╕рдВрдХреЗрдд рдЧрд░реНрджрдЫреМрдВред рдХреБрдиреИ рдкрдирд┐ рдЗрдиреНрдЯрд░рдиреЗрдЯ рдкреНрд░рдпреЛрдЧрдХрд░реНрддрд╛рдХреЛ рд╡реЗрдм рд╕рд░реНрднрд░рдорд╛ рдкреЛрд░реНрдЯ 80 рд░ 443 рдорд╛ рдкрд╣реБрдБрдЪ рдЫ, рд░ 90.1.15.1 рдХреЛ IP рдареЗрдЧрд╛рдирд╛ рднрдПрдХреЛ рдкреНрд░рдпреЛрдЧрдХрд░реНрддрд╛рд╕рдБрдЧ рднрд░реНрдЪреБрдЕрд▓ рд╕рд░реНрднрд░рд╣рд░реВрдХреЛ SSH рдкреЛрд░реНрдЯрд╣рд░реВрдорд╛ рдкрд╣реБрдБрдЪ рдЫред
рдмрд╛рд╣реНрдп рдиреЗрдЯрд╡рд░реНрдХрдмрд╛рдЯ рдкреЛрд░реНрдЯрд╣рд░реВрдорд╛ рдкрд╣реБрдБрдЪ рдЕрдиреБрдорддрд┐ рджрд┐рдиреБрд╣реЛрд╕реНред
resource "vcd_nsxv_firewall_rule" "fwnatports" {
edge_gateway = var.vcd_org_edge_name
name = "HTTPs Access"
source {
gateway_interfaces = ["external"]
}
destination {
gateway_interfaces = ["internal"]
}
service {
protocol = "tcp"
port = "80"
}
service {
protocol = "tcp"
port = "443"
}
depends_on = [vcd_network_routed.net]
}
resource "vcd_nsxv_firewall_rule" "fw_nat_admin_ports" {
edge_gateway = var.vcd_org_edge_name
name = "Admin Access"
source {
ip_addresses = [ "90.1.15.1" ]
}
destination {
gateway_interfaces = ["internal"]
}
service {
protocol = "tcp"
port = "58301"
}
service {
protocol = "tcp"
port = "58302"
}
service {
protocol = "tcp"
port = "58303"
}
depends_on = [vcd_network_routed.net]
}
рд╣рд╛рдореА рдХреНрд▓рд╛рдЙрдб рд╕реНрдерд╛рдиреАрдп рдиреЗрдЯрд╡рд░реНрдХрдмрд╛рдЯ рдЗрдиреНрдЯрд░рдиреЗрдЯ рдкрд╣реБрдБрдЪ рдЧрд░реНрди рд╕реНрд░реЛрдд NAT рдирд┐рдпрдорд╣рд░реВ рд╕рд┐рд░реНрдЬрдирд╛ рдЧрд░реНрдЫреМрдВ:
рд╣рд╛рдореА рд╕реНрд░реЛрдд NAT рдирд┐рдпрдорд╣рд░реВ рд╡рд░реНрдгрди рдЧрд░реНрдЫреМрдВред
resource "vcd_nsxv_snat" "snat_local" {
edge_gateway = var.vcd_org_edge_name
network_type = "ext"
network_name = var.vcdedgeexternalnetwork
original_address = var.vcd_edge_local_subnet
translated_address = var.vcd_edge_external_ip
depends_on = [vcd_network_routed.net]
}
рд░ рдиреЗрдЯрд╡рд░реНрдХ рдмреНрд▓рдХрдХреЛ рдХрдиреНрдлрд┐рдЧрд░реЗрд╕рди рдкреВрд░рд╛ рдЧрд░реНрди, рд╣рд╛рдореА рдмрд╛рд╣реНрдп рдиреЗрдЯрд╡рд░реНрдХрдмрд╛рдЯ рд╕реЗрд╡рд╛рд╣рд░реВ рдкрд╣реБрдБрдЪ рдЧрд░реНрди рдЧрдиреНрддрд╡реНрдп NAT рдирд┐рдпрдорд╣рд░реВ рдердкреНрдЫреМрдВ:
рдЧрдиреНрддрд╡реНрдп NAT рдирд┐рдпрдорд╣рд░реВ рдердкреНрджреИред
resource "vcd_nsxv_dnat" "dnat_tcp_nginx_https" {
edge_gateway = var.vcd_org_edge_name
network_name = var.vcd_edge_external_network
network_type = "ext"
description = "NGINX HTTPs"
original_address = var.vcd_edge_external_ip
original_port = 443
translated_address = var.vcd_edge_local_ip_nginx
translated_port = 443
protocol = "tcp"
depends_on = [vcd_network_routed.net]
}
resource "vcd_nsxv_dnat" "dnat_tcp_nginx_http" {
edge_gateway = var.vcd_org_edge_name
network_name = var.vcd_edge_external_network
network_type = "ext"
description = "NGINX HTTP"
original_address = var.vcd_edge_external_ip
original_port = 80
translated_address = var.vcd_edge_local_ip_nginx
translated_port = 80
protocol = "tcp"
depends_on = [vcd_network_routed.net]
}
Nginx рдЕрдиреНрддрд░реНрдЧрдд SSH рд╕рд░реНрднрд░рдорд╛ рдкреЛрд░реНрдЯ рдЕрдиреБрд╡рд╛рджрдХреЛ рд▓рд╛рдЧрд┐ NAT рдирд┐рдпрдо рдердкреНрдиреБрд╣реЛрд╕реНред
resource "vcd_nsxv_dnat" "dnat_tcp-nginx_ssh" {
edge_gateway = var.vcd_org_edge_name
network_name = var.vcd_edge_external_network
network_type = "ext"
description = "SSH NGINX"
original_address = var.vcd_edge_external_ip
original_port = 58301
translated_address = var.vcd_edge_local_ip_nginx
translated_port = 22
protocol = "tcp"
depends_on = [vcd_network_routed.net]
}
1C-Bitrix рд╕рдБрдЧ SSH рд╕рд░реНрднрд░рдорд╛ рдкреЛрд░реНрдЯ рдЕрдиреБрд╡рд╛рджрдХреЛ рд▓рд╛рдЧрд┐ NAT рдирд┐рдпрдо рдердкреНрдиреБрд╣реЛрд╕реНред
resource "vcd_nsxv_dnat" "dnat_tcp_bitrix_ssh" {
edge_gateway = var.vcd_org_edge_name
network_name = var.vcd_edge_external_network
network_type = "ext"
description = "SSH Bitrix"
original_address = var.vcd_edge_external_ip
original_port = 58302
translated_address = var.vcd_edge_local_ip_bitrix
translated_port = 22
protocol = "tcp"
depends_on = [vcd_network_routed.net]
}
Nextcloud рдХреЛ рд╕рд╛рде SSH рд╕рд░реНрднрд░рдорд╛ рдкреЛрд░реНрдЯ рдЕрдиреБрд╡рд╛рджрдХреЛ рд▓рд╛рдЧрд┐ NAT рдирд┐рдпрдо рдердкреНрдиреБрд╣реЛрд╕реНред
resource "vcd_nsxv_dnat" "dnat_tcp_nextcloud_ssh" {
edge_gateway = var.vcd_org_edge_name
network_name = var.vcd_edge_external_network
network_type = "ext"
description = "SSH Nextcloud"
original_address = var.vcd_edge_external_ip
original_port = 58303
translated_address = var.vcd_edge_local_ip_nextcloud
translated_port = 22
protocol = "tcp"
depends_on = [vcd_network_routed.net]
}
Main.tf рднрд░реНрдЪреБрдЕрд▓ рд╡рд╛рддрд╛рд╡рд░рдг рдХрдиреНрдлрд┐рдЧрд░реЗрд╕рди
рд╣рд╛рдореАрд▓реЗ рд▓реЗрдЦрдХреЛ рд╕реБрд░реБрдорд╛ рдпреЛрдЬрдирд╛ рдЧрд░реЗрдЭреИрдВ, рд╣рд╛рдореА рддреАрди рднрд░реНрдЪреБрдЕрд▓ рдореЗрд╕рд┐рдирд╣рд░реВ рд╕рд┐рд░реНрдЬрдирд╛ рдЧрд░реНрдиреЗрдЫреМрдВред рддрд┐рдиреАрд╣рд░реВ "рдЕрддрд┐рдерд┐ рдЕрдиреБрдХреВрд▓рди" рдкреНрд░рдпреЛрдЧ рдЧрд░реЗрд░ рддрдпрд╛рд░ рд╣реБрдиреЗрдЫрдиреНред рд╣рд╛рдореАрд▓реЗ рдирд┐рд░реНрджрд┐рд╖реНрдЯ рдЧрд░реЗрдХрд╛ рд╕реЗрдЯрд┐рдЩрд╣рд░реВ рдЕрдиреБрд╕рд╛рд░ рд╣рд╛рдореА рдиреЗрдЯрд╡рд░реНрдХ рдкреНрдпрд╛рд░рд╛рдорд┐рдЯрд░рд╣рд░реВ рд╕реЗрдЯ рдЧрд░реНрдиреЗрдЫреМрдВ, рд░ рдкреНрд░рдпреЛрдЧрдХрд░реНрддрд╛ рдкрд╛рд╕рд╡рд░реНрдб рд╕реНрд╡рдЪрд╛рд▓рд┐рдд рд░реВрдкрдорд╛ рдЙрддреНрдкрдиреНрди рд╣реБрдиреЗрдЫред
vApp рдХреЛ рд╡рд░реНрдгрди рдЧрд░реМрдВ рдЬрд╕рдорд╛ рднрд░реНрдЪреБрдЕрд▓ рдореЗрд╕рд┐рдирд╣рд░реВ рдЕрд╡рд╕реНрдерд┐рдд рд╣реБрдиреЗрдЫрдиреН рд░ рддрд┐рдиреАрд╣рд░реВрдХреЛ рдХрдиреНрдлрд┐рдЧрд░реЗрд╕рдиред
рднрд░реНрдЪреБрдЕрд▓ рдореЗрд╕рд┐рди рдХрдиреНрдлрд┐рдЧрд░реЗрд╕рди
рдПрдЙрдЯрд╛ vApp рдХрдиреНрдЯреЗрдирд░ рд╕рд┐рд░реНрдЬрдирд╛ рдЧрд░реМрдВред рд╣рд╛рдореА рддреБрд░реБрдиреНрддреИ vApp рд░ VM рд▓рд╛рдИ рднрд░реНрдЪреБрдЕрд▓ рдиреЗрдЯрд╡рд░реНрдХрдорд╛ рдЬрдбрд╛рди рдЧрд░реНрди рд╕рдХреНрдЫреМрдВ, рд╣рд╛рдореА рдкрдирд┐ рдирд┐рд░реНрднрд░_on рдкреНрдпрд╛рд░рд╛рдорд┐рдЯрд░ рдердкреНрдЫреМрдВ:
рдХрдиреНрдЯреЗрдирд░ рдмрдирд╛рдЙрдиреБрд╣реЛрд╕реН
resource "vcd_vapp" "vapp" {
name = "web"
power_on = "true"
depends_on = [vcd_network_routed.net]
}
рд╡рд┐рд╡рд░рдгрдХреЛ рд╕рд╛рде рднрд░реНрдЪреБрдЕрд▓ рдореЗрд╕рд┐рди рд╕рд┐рд░реНрдЬрдирд╛ рдЧрд░реМрдВ
resource "vcd_vapp_vm" "nginx" {
vapp_name = vcd_vapp.vapp.name
name = "nginx"
catalog_name = var.vcd_org_catalog
template_name = var.vcd_template_os_centos7
storage_profile = var.vcd_org_ssd_sp
memory = 8192
cpus = 1
cpu_cores = 1
network {
type = "org"
name = vcd_network_routed.net.name
is_primary = true
adapter_type = "VMXNET3"
ip_allocation_mode = "MANUAL"
ip = var.vcd_edge_local_ip_nginx
}
override_template_disk {
bus_type = "paravirtual"
size_in_mb = "32768"
bus_number = 0
unit_number = 0
storage_profile = var.vcd_org_ssd_sp
}
}
VM рд╡рд┐рд╡рд░рдгрдорд╛ рдореБрдЦреНрдп рдкреНрдпрд╛рд░рд╛рдорд┐рдЯрд░рд╣рд░реВ:
-
рдирд╛рдо - рднрд░реНрдЪреБрдЕрд▓ рдореЗрд╕рд┐рдирдХреЛ рдирд╛рдо,
-
vappname - рдирдпрд╛рдБ VM рдердкреНрдирдХреЛ рд▓рд╛рдЧрд┐ vApp рдХреЛ рдирд╛рдо,
-
catalogname / templatename - рдХреНрдпрд╛рдЯрд▓рдЧ рдирд╛рдо рд░ рднрд░реНрдЪреБрдЕрд▓ рдореЗрд╕рд┐рди рдЯреЗрдореНрдкреНрд▓реЗрдЯ рдирд╛рдо,
-
рднрдгреНрдбрд╛рд░рдг рдкреНрд░реЛрдлрд╛рдЗрд▓ - рдкреВрд░реНрд╡рдирд┐рд░реНрдзрд╛рд░рд┐рдд рднрдгреНрдбрд╛рд░рдг рдиреАрддрд┐ред
рдиреЗрдЯрд╡рд░реНрдХ рдмреНрд▓рдХ рдкреНрдпрд╛рд░рд╛рдорд┐рдЯрд░рд╣рд░реВ:
-
рдкреНрд░рдХрд╛рд░ - рдЬрдбрд╛рди рдиреЗрдЯрд╡рд░реНрдХ рдХреЛ рдкреНрд░рдХрд╛рд░,
-
рдирд╛рдо - VM рд▓рд╛рдИ рдЬрдбрд╛рди рдЧрд░реНрди рдХреБрди рднрд░реНрдЪреБрдЕрд▓ рдиреЗрдЯрд╡рд░реНрдХ,
-
isprimary - рдкреНрд░рд╛рдердорд┐рдХ рдиреЗрдЯрд╡рд░реНрдХ рдПрдбрд╛рдкреНрдЯрд░,
-
ipallocation_mode тАФ MANUAL / DHCP / POOL рдареЗрдЧрд╛рдирд╛ рдЖрд╡рдВрдЯрди рдореЛрдб,
-
ip - рднрд░реНрдЪреБрдЕрд▓ рдореЗрд╕рд┐рдирдХреЛ рд▓рд╛рдЧрд┐ IP рдареЗрдЧрд╛рдирд╛, рд╣рд╛рдореА рдпрд╕рд▓рд╛рдИ рдореНрдпрд╛рдиреБрдЕрд▓ рд░реВрдкрдорд╛ рдирд┐рд░реНрджрд┐рд╖реНрдЯ рдЧрд░реНрдиреЗрдЫреМрдВред
override_template_disk block:
-
sizeinmb тАФ рднрд░реНрдЪреБрдЕрд▓ рдореЗрд╕рд┐рдирдХреЛ рд▓рд╛рдЧрд┐ рдмреБрдЯ рдбрд┐рд╕реНрдХ рдЖрдХрд╛рд░
-
рднрдгреНрдбрд╛рд░рдг_рдкреНрд░реЛрдлрд╛рдЗрд▓ - рдбрд┐рд╕реНрдХрдХреЛ рд▓рд╛рдЧрд┐ рднрдгреНрдбрд╛рд░рдг рдиреАрддрд┐
Nextcloud рдлрд╛рдЗрд▓ рднрдгреНрдбрд╛рд░рдгрдХреЛ рд╡рд┐рд╡рд░рдгрдХреЛ рд╕рд╛рде рджреЛрд╕реНрд░реЛ VM рд╕рд┐рд░реНрдЬрдирд╛ рдЧрд░реМрдВ
resource "vcd_vapp_vm" "nextcloud" {
vapp_name = vcd_vapp.vapp.name
name = "nextcloud"
catalog_name = var.vcd_org_catalog
template_name = var.vcd_template_os_centos7
storage_profile = var.vcd_org_ssd_sp
memory = 8192
cpus = 1
cpu_cores = 1
network {
type = "org"
name = vcd_network_routed.net.name
is_primary = true
adapter_type = "VMXNET3"
ip_allocation_mode = "MANUAL"
ip = var.vcd_edge_local_ip_nextcloud
}
override_template_disk {
bus_type = "paravirtual"
size_in_mb = "32768"
bus_number = 0
unit_number = 0
storage_profile = var.vcd_org_ssd_sp
}
}
resource "vcd_vm_internal_disk" "disk1" {
vapp_name = vcd_vapp.vapp.name
vm_name = "nextcloud"
bus_type = "paravirtual"
size_in_mb = "102400"
bus_number = 0
unit_number = 1
storage_profile = var.vcd_org_hdd_sp
allow_vm_reboot = true
depends_on = [ vcd_vapp_vm.nextcloud ]
}
vcdvminternal_disk рдЦрдгреНрдбрдорд╛ рд╣рд╛рдореА рднрд░реНрдЪреБрдЕрд▓ рдореЗрд╕рд┐рдирдорд╛ рдЬреЛрдбрд┐рдПрдХреЛ рдирдпрд╛рдБ рднрд░реНрдЪреБрдЕрд▓ рдбрд┐рд╕реНрдХрдХреЛ рд╡рд░реНрдгрди рдЧрд░реНрдиреЗрдЫреМрдВред
vcdvminternaldisk рдмреНрд▓рдХрдХреЛ рд▓рд╛рдЧрд┐ рд╕реНрдкрд╖реНрдЯреАрдХрд░рдг:
-
bustype - рдбрд┐рд╕реНрдХ рдирд┐рдпрдиреНрддреНрд░рдХ рдкреНрд░рдХрд╛рд░
-
sizeinmb - рдбрд┐рд╕реНрдХ рдЖрдХрд╛рд░
-
busnumber / unitnumber - рдПрдбрд╛рдкреНрдЯрд░ рдорд╛ рдЬрдбрд╛рди рд╕реНрдерд╛рди
-
рднрдгреНрдбрд╛рд░рдг_рдкреНрд░реЛрдлрд╛рдЗрд▓ - рдбрд┐рд╕реНрдХрдХреЛ рд▓рд╛рдЧрд┐ рднрдгреНрдбрд╛рд░рдг рдиреАрддрд┐
Bitrix рдорд╛ рдирд╡реАрдирддрдо VM рд╡рд░реНрдгрди рдЧрд░реМрдВ
resource "vcd_vapp_vm" "bitrix" {
vapp_name = vcd_vapp.vapp.name
name = "bitrix"
catalog_name = var.vcd_org_catalog
template_name = var.vcd_template_os_centos7
storage_profile = var.vcd_org_ssd_sp
memory = 8192
cpus = 1
cpu_cores = 1
network {
type = "org"
name = vcd_network_routed.net.name
is_primary = true
adapter_type = "VMXNET3"
ip_allocation_mode = "MANUAL"
ip = var.vcd_edge_local_ip_bitrix
}
override_template_disk {
bus_type = "paravirtual"
size_in_mb = "81920"
bus_number = 0
unit_number = 0
storage_profile = var.vcd_org_ssd_sp
}
}
OS рдЕрджреНрдпрд╛рд╡рдзрд┐рдХ рдЧрд░реНрджреИ рд░ рдердк рд╕реНрдХреНрд░рд┐рдкреНрдЯрд╣рд░реВ рд╕реНрдерд╛рдкрдирд╛ рдЧрд░реНрджреИ
рдиреЗрдЯрд╡рд░реНрдХ рддрдпрд╛рд░ рдЫ, рднрд░реНрдЪреБрдЕрд▓ рдореЗрд╕рд┐рдирд╣рд░реВ рд╡рд░реНрдгрди рдЧрд░рд┐рдПрдХреЛ рдЫред рд╣рд╛рдореНрд░реЛ рдкреВрд░реНрд╡рд╛рдзрд╛рд░ рдЖрдпрд╛рдд рдЧрд░реНрдиреБ рдЕрдШрд┐, рд╣рд╛рдореА рдкреНрд░реЛрднрд┐рдЬрдирд░ рдмреНрд▓рдХрд╣рд░реВ рдкреНрд░рдпреЛрдЧ рдЧрд░реЗрд░ рд░ рдЬрд╡рд╛рдлрджреЗрд╣реА рдкреНрд░рдпреЛрдЧ рдирдЧрд░реА рдкреНрд░рд╛рд░рдореНрднрд┐рдХ рдкреНрд░рд╛рд╡рдзрд╛рди рдЧрд░реНрди рд╕рдХреНрдЫреМрдВред
рдУрдПрд╕ рдЕрдкрдбреЗрдЯ рдЧрд░реНрдиреЗ рд░ рдкреНрд░реЛрднрд┐рдЬрдирд░ рдмреНрд▓рдХ рдкреНрд░рдпреЛрдЧ рдЧрд░реЗрд░ CMS Bitrix рд╕реНрдерд╛рдкрдирд╛ рд╕реНрдХреНрд░рд┐рдкреНрдЯ рдХрд╕рд░реА рдЪрд▓рд╛рдЙрдиреЗ рднрдиреЗрд░ рд╣реЗрд░реМрдВред
рдкрд╣рд┐рд▓реЗ, CentOS рдЕрдкрдбреЗрдЯ рдкреНрдпрд╛рдХреЗрдЬрд╣рд░реВ рд╕реНрдерд╛рдкрдирд╛ рдЧрд░реМрдВред
resource "null_resource" "nginx_update_install" {
provisioner "remote-exec" {
connection {
type = "ssh"
user = "root"
password = vcd_vapp_vm.nginx.customization[0].admin_password
host = var.vcd_edge_external_ip
port = "58301"
timeout = "30s"
}
inline = [
"yum -y update && yum -y upgrade",
"yum -y install wget nano epel-release net-tools unzip zip" ]
}
}
}
рдЕрд╡рдпрд╡рд╣рд░реВрдХреЛ рдкрджрдирд╛рдо:
-
provisioner "remote-exec" - рдЯрд╛рдврд╛рдХреЛ рдкреНрд░рд╛рд╡рдзрд╛рди рдмреНрд▓рдХ рдЬрдбрд╛рди рдЧрд░реНрдиреБрд╣реЛрд╕реН
-
рдЬрдбрд╛рди рдмреНрд▓рдХрдорд╛ рд╣рд╛рдореА рдЬрдбрд╛рдирдХреЛ рд▓рд╛рдЧрд┐ рдкреНрд░рдХрд╛рд░ рд░ рдкреНрдпрд╛рд░рд╛рдорд┐рдЯрд░рд╣рд░реВ рд╡рд░реНрдгрди рдЧрд░реНрдЫреМрдВ:
-
рдкреНрд░рдХрд╛рд░ - рдкреНрд░реЛрдЯреЛрдХрд▓, рд╣рд╛рдореНрд░реЛ рдорд╛рдорд▓рд╛ рдорд╛ SSH;
-
рдкреНрд░рдпреЛрдЧрдХрд░реНрддрд╛ - рдкреНрд░рдпреЛрдЧрдХрд░реНрддрд╛ рдирд╛рдо;
-
рдкрд╛рд╕рд╡рд░реНрдб - рдкреНрд░рдпреЛрдЧрдХрд░реНрддрд╛ рдкрд╛рд╕рд╡рд░реНрдбред рд╣рд╛рдореНрд░реЛ рдХреЗрд╕рдорд╛, рд╣рд╛рдореА рдкреНрдпрд╛рд░рд╛рдорд┐рдЯрд░ vcdvappvm.nginx.customization[0].admin_password рдорд╛ рджреЗрдЦрд╛рдЙрдБрдЫреМрдВ, рдЬрд╕рд▓реЗ рдкреНрд░рдгрд╛рд▓реА рдкреНрд░рдпреЛрдЧрдХрд░реНрддрд╛рдХреЛ рд▓рд╛рдЧрд┐ рдЙрддреНрдкрдиреНрди рдкрд╛рд╕рд╡рд░реНрдб рднрдгреНрдбрд╛рд░рдг рдЧрд░реНрдЫред
-
рд╣реЛрд╕реНрдЯ - рдЬрдбрд╛рдирдХреЛ рд▓рд╛рдЧрд┐ рдмрд╛рд╣реНрдп рдЖрдИрдкреА рдареЗрдЧрд╛рдирд╛;
-
рдкреЛрд░реНрдЯ - рдЬрдбрд╛рдирдХреЛ рд▓рд╛рдЧрд┐ рдкреЛрд░реНрдЯ, рдЬреБрди рдкрд╣рд┐рд▓реЗ DNAT рд╕реЗрдЯрд┐рдЩрд╣рд░реВрдорд╛ рдирд┐рд░реНрджрд┐рд╖реНрдЯ рдЧрд░рд┐рдПрдХреЛ рдерд┐рдпреЛ;
-
рдЗрдирд▓рд╛рдЗрди - рдкреНрд░рд╡рд┐рд╖реНрдЯ рдЧрд░рд┐рдиреЗ рдЖрджреЗрд╢рд╣рд░реВрдХреЛ рд╕реВрдЪреА рд╕реВрдЪреАрдмрджреНрдз рдЧрд░реНрдиреБрд╣реЛрд╕реНред рдпрд╕ рдЦрдгреНрдбрдорд╛ рд╕рдВрдХреЗрдд рдЧрд░рд┐рдП рдЕрдиреБрд╕рд╛рд░ рдЖрджреЗрд╢рд╣рд░реВ рдкреНрд░рд╡рд┐рд╖реНрдЯ рдЧрд░рд┐рдиреЗрдЫред
рдЙрджрд╛рд╣рд░рдгрдХреЛ рд░реВрдкрдорд╛, 1C-Bitrix рд╕реНрдерд╛рдкрдирд╛ рд╕реНрдХреНрд░рд┐рдкреНрдЯ рдкрдирд┐ рдХрд╛рд░реНрдпрд╛рдиреНрд╡рдпрди рдЧрд░реМрдВред рдпреЛрдЬрдирд╛ рдЪрд▓рд┐рд░рд╣реЗрдХреЛ рдмреЗрд▓рд╛ рд╕реНрдХреНрд░рд┐рдкреНрдЯ рдХрд╛рд░реНрдпрд╛рдиреНрд╡рдпрди рдкрд░рд┐рдгрд╛рдордХреЛ рдЖрдЙрдЯрдкреБрдЯ рдЙрдкрд▓рдмреНрдз рд╣реБрдиреЗрдЫред рд╕реНрдХреНрд░рд┐рдкреНрдЯ рд╕реНрдерд╛рдкрдирд╛ рдЧрд░реНрди, рдкрд╣рд┐рд▓реЗ рд╣рд╛рдореА рдмреНрд▓рдХ рд╡рд░реНрдгрди:
1C-Bitrix рдХреЛ рд╕реНрдерд╛рдкрдирд╛ рд╡рд░реНрдгрди рдЧрд░реМрдВред
provisioner "file" {
source = "prepare.sh"
destination = "/tmp/prepare.sh"
connection {
type = "ssh"
user = "root"
password = vcd_vapp_vm.nginx.customization[0].admin_password
host = var.vcd_edge_external_ip
port = "58301"
timeout = "30s"
}
}
provisioner "remote-exec" {
inline = [
"chmod +x /tmp/prepare.sh", "./tmp/prepare.sh"
]
}
рд░ рд╣рд╛рдореА рддреБрд░реБрдиреНрддреИ Bitrix рдЕрджреНрдпрд╛рд╡рдзрд┐рдХ рд╡рд░реНрдгрди рдЧрд░реНрдиреЗрдЫреМрдВред
1C-Bitrix рдкреНрд░рд╛рд╡рдзрд╛рди рдХреЛ рдПрдХ рдЙрджрд╛рд╣рд░рдгред
resource "null_resource" "install_update_bitrix" {
provisioner "remote-exec" {
connection {
type = "ssh"
user = "root"
password = vcd_vapp_vm.bitrix.customization[0].admin_password
host = var.vcd_edge_external_ip
port = "58302"
timeout = "60s"
}
inline = [
"yum -y update && yum -y upgrade",
"yum -y install wget nano epel-release net-tools unzip zip",
"wget http://repos.1c-bitrix.ru/yum/bitrix-env.sh -O /tmp/bitrix-env.sh",
"chmod +x /tmp/bitrix-env.sh",
"/tmp/bitrix-env.sh"
]
}
}
рдорд╣рддреНрддреНрд╡рдкреВрд░реНрдг! рдпрджрд┐ рддрдкрд╛рдИрдВрд▓реЗ SELinux рд▓рд╛рдИ рдкрд╣рд┐рд▓реЗ рдиреИ рдЕрд╕рдХреНрд╖рдо рдЧрд░реНрдиреБрднрдПрди рднрдиреЗ рд▓рд┐рдкрд┐рд▓реЗ рдХрд╛рдо рдирдЧрд░реНрди рд╕рдХреНрдЫ! рдпрджрд┐ рддрдкрд╛рдИрдВрд▓рд╛рдИ bitrix-env.sh рдкреНрд░рдпреЛрдЧ рдЧрд░реЗрд░ CMS 1C-Bitrix рд╕реНрдерд╛рдкрдирд╛ рд░ рдХрдиреНрдлрд┐рдЧрд░ рдЧрд░реНрдиреЗ рдмрд╛рд░реЗ рд╡рд┐рд╕реНрддреГрдд рд▓реЗрдЦ рдЪрд╛рд╣рд┐рдиреНрдЫ рднрдиреЗ, oo рддрдкрд╛рдИрдВ рд╕рдХреНрдиреБрд╣реБрдиреНрдЫ
3. рдкреВрд░реНрд╡рд╛рдзрд╛рд░ рдкреНрд░рд╛рд░рдореНрднрд┐рдХрд░рдг
рдореЛрдбреНрдпреБрд▓ рд░ рдкреНрд▓рдЧрдЗрдирд╣рд░реВ рдкреНрд░рд╛рд░рдореНрдн рдЧрд░реНрджреИ
рдХрд╛рдордХреЛ рд▓рд╛рдЧрд┐, рд╣рд╛рдореА рдПрдХ рд╕рд╛рдзрд╛рд░рдг "рдЬреЗрдиреНрдЯрд▓рдореНрдпрд╛рди рдХрд┐рдЯ" рдкреНрд░рдпреЛрдЧ рдЧрд░реНрдЫреМрдВ: Windows 10 OS рднрдПрдХреЛ рд▓реНрдпрд╛рдкрдЯрдк рд░ рдЖрдзрд┐рдХрд╛рд░рд┐рдХ рд╡реЗрдмрд╕рд╛рдЗрдЯрдмрд╛рдЯ рд╡рд┐рддрд░рдг рдХрд┐рдЯ terraform.exe init
рдХрдореНрдкреНрдпреБрдЯрд┐рдЩ рд░ рд╕рдЮреНрдЬрд╛рд▓ рдкреВрд░реНрд╡рд╛рдзрд╛рд░рдХреЛ рд╡рд░реНрдгрди рдЧрд░рд┐рд╕рдХреЗрдкрдЫрд┐, рд╣рд╛рдореА рд╣рд╛рдореНрд░реЛ рдХрдиреНрдлрд┐рдЧрд░реЗрд╕рди рдкрд░реАрдХреНрд╖рдг рдЧрд░реНрдиреЗ рдпреЛрдЬрдирд╛ рд╕реБрд░реБ рдЧрд░реНрдЫреМрдВ, рдЬрд╣рд╛рдБ рд╣рд╛рдореА рдХреЗ рд╕рд┐рд░реНрдЬрдирд╛ рд╣реБрдиреЗрдЫ рд░ рдХрд╕рд░реА рдПрдХрдЕрд░реНрдХрд╛рд╕рдБрдЧ рдЬреЛрдбрд┐рдиреЗрдЫ рднрдиреЗрд░ рджреЗрдЦреНрди рд╕рдХреНрдЫреМрдВред
-
рдЖрджреЗрд╢ рдХрд╛рд░реНрдпрд╛рдиреНрд╡рдпрди рдЧрд░реНрдиреБрд╣реЛрд╕реН
- terraform plan -var-file=vcd.tfvars
. -
рдирддрд┐рдЬрд╛ рдкрд╛рдЙрдБрдЫреМрдВ
- Plan: 16 to add, 0 to change, 0 to destroy.
рдЕрд░реНрдерд╛рддреН рдпреЛ рдпреЛрдЬрдирд╛ рдЕрдиреБрд╕рд╛рд░ резрем рд╡рдЯрд╛ рд╢реНрд░реЛрддрд╣рд░реБ рд╕реГрдЬрдирд╛ рд╣реБрдиреЗрдЫрдиреН ред -
рд╣рд╛рдореА рдХрдорд╛рдгреНрдбрдорд╛ рдпреЛрдЬрдирд╛ рд╕реБрд░реБ рдЧрд░реНрдЫреМрдВ
- terraform.exe apply -var-file=vcd.tfvars
.
рднрд░реНрдЪреБрдЕрд▓ рдореЗрд╕рд┐рдирд╣рд░реВ рд╕рд┐рд░реНрдЬрдирд╛ рдЧрд░рд┐рдиреЗрдЫ, рд░ рддреНрдпрд╕рдкрдЫрд┐ рд╣рд╛рдореАрд▓реЗ рд╕реВрдЪреАрдмрджреНрдз рдЧрд░реЗрдХрд╛ рдкреНрдпрд╛рдХреЗрдЬрд╣рд░реВ рдкреНрд░реЛрднрд┐рдЬрдирд░ рдЦрдгреНрдб рднрд┐рддреНрд░ рдХрд╛рд░реНрдпрд╛рдиреНрд╡рдпрди рдЧрд░рд┐рдиреЗрдЫ - OS рдЕрджреНрдпрд╛рд╡рдзрд┐рдХ рдЧрд░рд┐рдиреЗрдЫ рд░ CMS Bitrix рд╕реНрдерд╛рдкрдирд╛ рдЧрд░рд┐рдиреЗрдЫред
рдЬрдбрд╛рди рдЬрд╛рдирдХрд╛рд░реА рдкреНрд░рд╛рдкреНрдд рдЧрд░реНрджреИ
рдпреЛрдЬрдирд╛ рдХрд╛рд░реНрдпрд╛рдиреНрд╡рдпрди рдЧрд░реЗрдкрдЫрд┐, рд╣рд╛рдореА рд╕рд░реНрднрд░рд╣рд░реВрдорд╛ рдЬрдбрд╛рди рдЧрд░реНрдирдХреЛ рд▓рд╛рдЧрд┐ рдкрд╛рда рдлрд╛рд░рдордорд╛ рдбреЗрдЯрд╛ рдкреНрд░рд╛рдкреНрдд рдЧрд░реНрди рдЪрд╛рд╣рдиреНрдЫреМрдВ, рдпрд╕рдХреЛ рд▓рд╛рдЧрд┐ рд╣рд╛рдореА рдирд┐рдореНрди рд░реВрдкрдорд╛ рдЖрдЙрдЯрдкреБрдЯ рдЦрдгреНрдб рдврд╛рдБрдЪрд╛ рдЧрд░реНрдиреЗрдЫреМрдВ:
output "nginxpassword" {
value = vcdvappvm.nginx.customization[0].adminpassword
}
рд░ рдирд┐рдореНрди рдЖрдЙрдЯрдкреБрдЯрд▓реЗ рд╣рд╛рдореАрд▓рд╛рдИ рд╕рд┐рд░реНрдЬрдирд╛ рдЧрд░рд┐рдПрдХреЛ рднрд░реНрдЪреБрдЕрд▓ рдореЗрд╕рд┐рдирдХреЛ рд▓рд╛рдЧрд┐ рдкрд╛рд╕рд╡рд░реНрдб рдмрддрд╛рдЙрдБрдЫ:
Outputs: nginx_password = F#4u8!!N
рдирддрд┐рдЬрд╛рдХреЛ рд░реВрдкрдорд╛, рд╣рд╛рдореАрд▓реЗ рд╣рд╛рдореНрд░реЛ рдердк рдХрд╛рдордХреЛ рд▓рд╛рдЧрд┐ рдЕрджреНрдпрд╛рд╡рдзрд┐рдХ рдЕрдкрд░реЗрдЯрд┐рдЩ рд╕рд┐рд╕реНрдЯрдо рд░ рдкреВрд░реНрд╡-рд╕реНрдерд╛рдкрд┐рдд рдкреНрдпрд╛рдХреЗрдЬрд╣рд░реВ рднрдПрдХрд╛ рднрд░реНрдЪреБрдЕрд▓ рдореЗрд╕рд┐рдирд╣рд░реВрдорд╛ рдкрд╣реБрдБрдЪ рдкрд╛рдЙрдБрдЫреМрдВред рд╕рдмреИ рддрдпрд╛рд░ рдЫ!
рддрд░ рдпрджрд┐ рддрдкрд╛рдЗрдБрд╕рдБрдЧ рдкрд╣рд┐рд▓реЗ рдиреИ рдЕрд╡рд╕реНрдерд┐рдд рдкреВрд░реНрд╡рд╛рдзрд╛рд░ рдЫ рднрдиреЗ рдХреЗ рд╣реБрдиреНрдЫ?
рей.резред рдЕрд╡рд╕реНрдерд┐рдд рдкреВрд░реНрд╡рд╛рдзрд╛рд░рдХреЛ рд╕рд╛рде рдЯреЗрд░рд╛рдлрд╛рд░реНрдо рдХрд╛рдо рдЧрд░реНрджреИ
рдпреЛ рд╕рд░рд▓ рдЫ, рддрдкрд╛рдИрд▓реЗ рд╣рд╛рд▓рдХреЛ рднрд░реНрдЪреБрдЕрд▓ рдореЗрд╕рд┐рдирд╣рд░реВ рд░ рддрд┐рдиреАрд╣рд░реВрдХреЛ vApp рдХрдиреНрдЯреЗрдирд░рд╣рд░реВ рдЖрдпрд╛рдд рдЖрджреЗрд╢ рдкреНрд░рдпреЛрдЧ рдЧрд░реЗрд░ рдЖрдпрд╛рдд рдЧрд░реНрди рд╕рдХреНрдиреБрд╣реБрдиреНрдЫред
VAPP рд╕реНрд░реЛрдд рд░ рднрд░реНрдЪреБрдЕрд▓ рдореЗрд╕рд┐рдирдХреЛ рд╡рд░реНрдгрди рдЧрд░реМрдВред
resource "vcd_vapp" "Monitoring" {
name = "Monitoring"
org = "mClouds"
vdc = "mClouds"
}
resource "vcd_vapp_vm" "Zabbix" {
name = "Zabbix"
org = "mClouds"
vdc = "mClouds"
vapp = "Monitoring"
}
рдЕрд░реНрдХреЛ рдЪрд░рдг рдврд╛рдБрдЪрд╛рдорд╛ vApp рд╕реНрд░реЛрддрд╣рд░реВрдХреЛ рдЧреБрдгрд╣рд░реВ рдЖрдпрд╛рдд рдЧрд░реНрди рд╣реЛ vcdvapp.<vApp> <org>.<orgvdc>.<vApp>
рдХрд╣рд╛рдБ:
-
vApp - vApp рдирд╛рдо;
-
org тАФ рд╕рдВрд╕реНрдерд╛рдХреЛ рдирд╛рдо;
-
org_vdc тАФ рднрд░реНрдЪреБрдЕрд▓ рдбрд╛рдЯрд╛ рдХреЗрдиреНрджреНрд░рдХреЛ рдирд╛рдоред
VAPP рд╕реНрд░реЛрдд рдЧреБрдгрд╣рд░реВ рдЖрдпрд╛рдд рдЧрд░реНрджреИ
рдврд╛рдБрдЪрд╛рдорд╛ VM рд╕реНрд░реЛрддрд╣рд░реВрдХреЛ рдЧреБрдгрд╣рд░реВ рдЖрдпрд╛рдд рдЧрд░реМрдВ: vcdvappvm.<VM> <org>.<orgvdc>.<vApp>.<VM>
, рдЬрд╕рдорд╛:
-
VM - VM рдирд╛рдо;
-
vApp - vApp рдирд╛рдо;
-
org тАФ рд╕рдВрд╕реНрдерд╛рдХреЛ рдирд╛рдо;
-
orgvdc рднрд░реНрдЪреБрдЕрд▓ рдбрд╛рдЯрд╛ рдХреЗрдиреНрджреНрд░рдХреЛ рдирд╛рдо рд╣реЛред
рдЖрдпрд╛рдд рд╕рдлрд▓ рднрдпреЛ
C:UsersMikhailDesktopterraform>terraform import vcd_vapp_vm.Zabbix mClouds.mClouds.Monitoring.Zabbix
vcd_vapp_vm.Zabbix: Importing from ID "mClouds.mClouds.Monitoring.Zabbix"...
vcd_vapp_vm.Zabbix: Import prepared!
Prepared vcd_vapp_vm for import
vcd_vapp_vm.Zabbix: Refreshing state... [id=urn:vcloud:vm:778f4a89-1c8d-45b9-9d94-0472a71c4d1f]
Import successful!
The resources that were imported are shown above. These resources are now in
your Terraform state and will henceforth be managed by Terraform.
рдЕрдм рд╣рд╛рдореА рдирдпрд╛рдБ рдЖрдпрд╛рддрд┐рдд рд╕реНрд░реЛрдд рд╣реЗрд░реНрди рд╕рдХреНрдЫреМрдВ:
рдЖрдпрд╛рддрд┐рдд рд╕реНрд░реЛрдд
> terraform show
...
# vcd_vapp.Monitoring:
resource "vcd_vapp" "Monitoring" {
guest_properties = {}
href = "https://vcloud.mclouds.ru/api/vApp/vapp-fe5db285-a4af-47c4-93e8-55df92f006ec"
id = "urn:vcloud:vapp:fe5db285-a4af-47c4-93e8-55df92f006ec"
ip = "allocated"
metadata = {}
name = "Monitoring"
org = "mClouds"
status = 4
status_text = "POWERED_ON"
vdc = "mClouds"
}
тАж
# vcd_vapp_vm.Zabbix:
resource "vcd_vapp_vm" "Zabbix" {
computer_name = "Zabbix"
cpu_cores = 1
cpus = 2
expose_hardware_virtualization = false
guest_properties = {}
hardware_version = "vmx-14"
href = "https://vcloud.mclouds.ru/api/vApp/vm-778f4a89-1c8d-45b9-9d94-0472a71c4d1f"
id = "urn:vcloud:vm:778f4a89-1c8d-45b9-9d94-0472a71c4d1f"
internal_disk = [
{
bus_number = 0
bus_type = "paravirtual"
disk_id = "2000"
iops = 0
size_in_mb = 122880
storage_profile = "Gold Storage Policy"
thin_provisioned = true
unit_number = 0
},
]
memory = 8192
metadata = {}
name = "Zabbix"
org = "mClouds"
os_type = "centos8_64Guest"
storage_profile = "Gold Storage Policy"
vapp_name = "Monitoring"
vdc = "mClouds"
customization {
allow_local_admin_password = true
auto_generate_password = true
change_sid = false
enabled = false
force = false
join_domain = false
join_org_domain = false
must_change_password_on_first_login = false
number_of_auto_logons = 0
}
network {
adapter_type = "VMXNET3"
ip_allocation_mode = "DHCP"
is_primary = true
mac = "00:50:56:07:01:b1"
name = "MCLOUDS-LAN01"
type = "org"
}
}
рдЕрдм рд╣рд╛рдореАрд▓реЗ рдкрдХреНрдХреИ рдкрдирд┐ рдЧрд░рд┐рд╕рдХреЗрдХрд╛ рдЫреМрдВ - рд╣рд╛рдореАрд▓реЗ рдЕрдиреНрддрд┐рдо рдмрд┐рдиреНрджреБ (рдЕрд╡рд╕реНрдерд┐рдд рдкреВрд░реНрд╡рд╛рдзрд╛рд░рдорд╛ рдЖрдпрд╛рдд) рдкреВрд░рд╛ рдЧрд░рд┐рд╕рдХреЗрдХрд╛ рдЫреМрдВ рд░ рдЯреЗрд░рд╛рдлрд░реНрдорд╕рдБрдЧ рдХрд╛рдо рдЧрд░реНрдиреЗ рд╕рдмреИ рдореБрдЦреНрдп рдмреБрдБрджрд╛рд╣рд░реВ рд╕рдорд╛рд╡реЗрд╢ рдЧрд░реЗрдХрд╛ рдЫреМрдВред
рдЙрдкрдХрд░рдг рдзреЗрд░реИ рд╕реБрд╡рд┐рдзрд╛рдЬрдирдХ рднрдпреЛ рд░ рддрдкрд╛рдЗрдБрд▓рд╛рдИ рддрдкрд╛рдЗрдБрдХреЛ рдкреВрд░реНрд╡рд╛рдзрд╛рд░ рдХреЛрдб рдХреЛ рд░реВрдк рдорд╛ рд╡рд░реНрдгрди рдЧрд░реНрди рдХреЛ рд▓рд╛рдЧреА рдЕрдиреБрдорддрд┐ рджрд┐рдиреНрдЫ, рдПрдХ рдХреНрд▓рд╛рдЙрдб рдкреНрд░рджрд╛рдпрдХ рдХреЛ рднрд░реНрдЪреБрдЕрд▓ рдорд┐рд╕рд┐рдирд╣рд░реБ рджреЗрдЦрд┐ рдиреЗрдЯрд╡рд░реНрдХ рдШрдЯрдХ рдХреЛ рд╕реНрд░реЛрддрд╣рд░реБ рдХреЛ рд╡рд░реНрдгрди рдЧрд░реНрди рдХреЛ рд▓рд╛рдЧреАред
рдПрдХреИ рд╕рдордпрдорд╛, рд╡рд╛рддрд╛рд╡рд░рдгрдмрд╛рдЯ рд╕реНрд╡рддрдиреНрддреНрд░рддрд╛рд▓реЗ рд╕реНрдерд╛рдиреАрдп, рдХреНрд▓рд╛рдЙрдб рд╕реНрд░реЛрддрд╣рд░реВрд╕рдБрдЧ рдХрд╛рдо рдЧрд░реНрди рд░ рдкреНрд▓реЗрдЯрдлрд░реНрдо рд╡реНрдпрд╡рд╕реНрдерд╛рдкрди рдЧрд░реНрди рд╕рдореНрднрд╡ рдмрдирд╛рдЙрдБрдЫред рд░ рдпрджрд┐ рддреНрдпрд╣рд╛рдБ рдХреБрдиреИ рд╕рдорд░реНрдерд┐рдд рдкреНрд▓реЗрдЯрдлрд░реНрдо рдЫреИрди рд░ рддрдкрд╛рдЗрдБ рдирдпрд╛рдБ рдердкреНрди рдЪрд╛рд╣рдиреБрд╣реБрдиреНрдЫ рднрдиреЗ, рддрдкрд╛рдЗрдБ рддрдкрд╛рдЗрдБрдХреЛ рдЖрдлреНрдиреИ рдкреНрд░рджрд╛рдпрдХ рд▓реЗрдЦреНрди рд░ рдпрд╕рд▓рд╛рдИ рдкреНрд░рдпреЛрдЧ рдЧрд░реНрди рд╕рдХреНрдиреБрд╣реБрдиреНрдЫред
рд╕реНрд░реЛрдд: www.habr.com