DevOps for SharePoint With Packer, Terraform, Ansible, and Vagrant — Oscar Medina Ethan Schumann DevOps for SharePoint With Packer, Terraform, Ansible, and Vagrant Oscar Medina Ethan Schumann DevOps for SharePoint Oscar Medina Ethan Schumann Lafayette, CA, USA Frisco, TX, USA ISBN-13 (pbk): 978-1-4842-3687-1 ISBN-13 (electronic): 978-1-4842-3688-8 https://doi.org/10.1007/978-1-4842-3688-8 Library of Congress Control Number: 2018961417 Copyright © 2018 by Oscar Medina, Ethan Schumann This work is subject to copyright. All rights are reserved by the Publisher, whether the whole or part of the material is concerned, specifically the rights of translation, reprinting, reuse of illustrations, recitation, broadcasting, reproduction on microfilms or in any other physical way, and transmission or information storage and retrieval, electronic adaptation, computer software, or by similar or dissimilar methodology now known or hereafter developed. Trademarked names, logos, and images may appear in this book. Rather than use a trademark symbol with every occurrence of a trademarked name, logo, or image we use the names, logos, and images only in an editorial fashion and to the benefit of the trademark owner, with no intention of infringement of the trademark. The use in this publication of trade names, trademarks, service marks, and similar terms, even if they are not identified as such, is not to be taken as an expression of opinion as to whether or not they are subject to proprietary rights. While the advice and information in this book are believed to be true and accurate at the date of publication, neither the authors nor the editors nor the publisher can accept any legal responsibility for any errors or omissions that may be made. The publisher makes no warranty, express or implied, with respect to the material contained herein. Managing Director, Apress Media LLC: Welmoed Spahr Acquisitions Editor: Joan Murray Development Editor: Laura Berendson Coordinating Editor: Jill Balzano Cover image designed by Freepik (www.freepik.com) Distributed to the book trade worldwide by Springer Science+Business Media New York, 233 Spring Street, 6th Floor, New York, NY 10013. Phone 1-800-SPRINGER, fax (201) 348-4505, e-mail orders-ny@springer- sbm.com, or visit www.springeronline.com. Apress Media, LLC is a California LLC and the sole member (owner) is Springer Science + Business Media Finance Inc (SSBM Finance Inc). SSBM Finance Inc is a Delaware corporation. For information on translations, please e-mail [email protected], or visit http://www.apress.com/ rights-permissions. Apress titles may be purchased in bulk for academic, corporate, or promotional use. eBook versions and licenses are also available for most titles. For more information, reference our Print and eBook Bulk Sales web page at http://www.apress.com/bulk-sales. Any source code or other supplementary material referenced by the author in this book is available to readers on GitHub via the book's product page, located at www.apress.com/9781484236871. For more detailed information, please visit http://www.apress.com/source-code. Printed on acid-free paper I dedicate this book to my wonderful wife and daughter and our little puppy, Ginger. I am truly blessed to have you all in my life. —Oscar Everything I do is with my amazing wife, Diana, in mind. Thank you for continuous love and support! —Ethan Table of Contents About the Authors ����������������������������������������������������������������������������������������������������ix About the Technical Reviewers �������������������������������������������������������������������������������xi Acknowledgments �������������������������������������������������������������������������������������������������xiii Chapter 1: Introduction ��������������������������������������������������������������������������������������������1 What Is DevOps? ���������������������������������������������������������������������������������������������������������������������������1 DevOps Core Practices ������������������������������������������������������������������������������������������������������������3 DevOps Core Values �����������������������������������������������������������������������������������������������������������������5 DevOps Tools of the Trade��������������������������������������������������������������������������������������������������������6 Benefits of DevOps Practices ������������������������������������������������������������������������������������������������16 Summary�������������������������������������������������������������������������������������������������������������������������������������20 Chapter 2: Getting up and Running: Set up Your Environment �������������������������������21 Our Environment �������������������������������������������������������������������������������������������������������������������������21 Our Project Workflow ������������������������������������������������������������������������������������������������������������������22 Install an Open Source Toolchain ������������������������������������������������������������������������������������������������23 Install Git �������������������������������������������������������������������������������������������������������������������������������23 Install Terraform ��������������������������������������������������������������������������������������������������������������������24 Install Packer �������������������������������������������������������������������������������������������������������������������������25 Install Vagrant ������������������������������������������������������������������������������������������������������������������������25 Install Ansible ������������������������������������������������������������������������������������������������������������������������27 About the GitHub Repository �������������������������������������������������������������������������������������������������������30 Getting Started ����������������������������������������������������������������������������������������������������������������������30 Summary�������������������������������������������������������������������������������������������������������������������������������������30 v Table of ConTenTs Chapter 3: Build a Dev SharePoint Farm with Vagrant and ServerSpec �����������������31 GitHub Repository Project Structure �������������������������������������������������������������������������������������������32 Creating a Windows-Based Image Using Packer ������������������������������������������������������������������������33 Disabling Windows Updates ��������������������������������������������������������������������������������������������������34 The Packer Template �������������������������������������������������������������������������������������������������������������34 Building the Box File ��������������������������������������������������������������������������������������������������������������39 Building the Vagrant SharePoint Test Environment ���������������������������������������������������������������������39 Using SPAutoInstaller ������������������������������������������������������������������������������������������������������������40 A Look at the Vagrant Multimachine Environment�����������������������������������������������������������������40 A Closer Look at the Vagrantfile ��������������������������������������������������������������������������������������������41 Bring up the SharePoint Vagrant Environment ����������������������������������������������������������������������51 Using ServerSpec to Test SharePoint Server Role Config �����������������������������������������������������������77 About ServerSpec ������������������������������������������������������������������������������������������������������������������78 About Test-Driven Infrastructure �������������������������������������������������������������������������������������������78 Push Vagrantfile to GitHub ����������������������������������������������������������������������������������������������������������83 Summary�������������������������������������������������������������������������������������������������������������������������������������83 Chapter 4: Provisioning the SharePoint Farm to Azure Using Terraform ���������������85 About the Solution Architecture ��������������������������������������������������������������������������������������������������85 Terraform Folder Structure ���������������������������������������������������������������������������������������������������������86 Create Base VM Image Using Packer ������������������������������������������������������������������������������������������88 Running the Bash Script ��������������������������������������������������������������������������������������������������������89 Create Packer Image VM �������������������������������������������������������������������������������������������������������97 Configuring the Terraform Remote State ����������������������������������������������������������������������������������102 The Backend�tf File ��������������������������������������������������������������������������������������������������������������103 Run Terraform Init ����������������������������������������������������������������������������������������������������������������104 Create Core Azure Resources Using Terraform �������������������������������������������������������������������������106 About Terraform Modules ����������������������������������������������������������������������������������������������������106 Defining the Core Networking Resources ���������������������������������������������������������������������������������107 Terraforming the SharePoint 2016 Servers in the Farm Topology ��������������������������������������������115 Preparing to Deploy Resources to Azure �����������������������������������������������������������������������������115 vi Table of ConTenTs Testing Terraform Infrastructure Deployments Using InSpec ����������������������������������������������������129 About InSpec 2�0 �����������������������������������������������������������������������������������������������������������������129 Getting Started ��������������������������������������������������������������������������������������������������������������������129 Terraform Output �����������������������������������������������������������������������������������������������������������������130 Testing Virtual Machines������������������������������������������������������������������������������������������������������131 Executing InSpec Tests ��������������������������������������������������������������������������������������������������������133 Generating the Dynamic Ansible Inventory File for Azure Resources ���������������������������������������134 Using azure_rm�py and azure_rm�ini Files Provided by Ansible �����������������������������������������135 Use Ansible Playbooks to Install and Configure SharePoint 2016 Farm �����������������������������������138 Execute Ansible Ad Hoc Commands Against Azure Virtual Machine ������������������������������������139 Run Ansible Playbooks by Role ��������������������������������������������������������������������������������������������146 Summary�����������������������������������������������������������������������������������������������������������������������������������153 Chapter 5: Provisioning the SharePoint Farm to AWS Using Terraform and Ansible ������������������������������������������������������������������������������������������155 About the Solution Architecture ������������������������������������������������������������������������������������������������155 Terraform Folder Structure �������������������������������������������������������������������������������������������������������157 Set up AWS Credentials�������������������������������������������������������������������������������������������������������������158 Configuring the Terraform Back End �����������������������������������������������������������������������������������������159 Create the S3 Bucket via AWS CLI ���������������������������������������������������������������������������������������159 Run Terraform Init ����������������������������������������������������������������������������������������������������������������162 Define the Terraform Back End �������������������������������������������������������������������������������������������������164 Create Core AWS Resources Using Terraform ���������������������������������������������������������������������������165 About Terraform Modules ����������������������������������������������������������������������������������������������������165 Terraforming the SharePoint 2016 Servers in the Farm Topology ��������������������������������������������173 Preparing to Deploy Resources to AWS �������������������������������������������������������������������������������175 Generating the Dynamic Ansible Inventory File for AWS Resources �����������������������������������������179 Using EC2�py and EC2�ini Files Provided by Ansible ������������������������������������������������������������179 Use Ansible Playbooks to Install and Configure SharePoint 2016 Farm �����������������������������������181 Execute Ansible Ad Hoc Commands Against AWS Instance �������������������������������������������������182 Run Ansible Playbooks by Role ��������������������������������������������������������������������������������������������188 Summary�����������������������������������������������������������������������������������������������������������������������������������196 vii Table of ConTenTs Chapter 6: Scaling the Farm Using Terraform and Ansible�����������������������������������197 Farm Topology ���������������������������������������������������������������������������������������������������������������������������197 Architecture Changes ����������������������������������������������������������������������������������������������������������198 Building the Packer WFE Image ������������������������������������������������������������������������������������������������199 Getting Started ��������������������������������������������������������������������������������������������������������������������199 Scaling Farm Topology Using Terraform �����������������������������������������������������������������������������������206 Scaling Up ���������������������������������������������������������������������������������������������������������������������������206 Scaling Out ��������������������������������������������������������������������������������������������������������������������������208 Terraforming Multiple WFE Virtual Machines �����������������������������������������������������������������������208 Terraforming the Load Balancer and NAT Rules ������������������������������������������������������������������212 Provisioning the New SharePoint 2016 Farm ����������������������������������������������������������������������217 Performing Configuration Management on the WFEs ���������������������������������������������������������������220 Accessing the WFEs in the Availability Set ��������������������������������������������������������������������������220 Joining WFEs to the SharePoint Farm ���������������������������������������������������������������������������������221 Summary�����������������������������������������������������������������������������������������������������������������������������������223 Chapter 7: Establishing an Enterprise Environment to Manage and Collaborate as a Team �����������������������������������������������������������������������������������225 Version Control ��������������������������������������������������������������������������������������������������������������������������225 Orchestration ����������������������������������������������������������������������������������������������������������������������������226 Security �������������������������������������������������������������������������������������������������������������������������������������230 Secrets Management ����������������������������������������������������������������������������������������������������������230 Access Control ���������������������������������������������������������������������������������������������������������������������231 Code ������������������������������������������������������������������������������������������������������������������������������������232 Automations ������������������������������������������������������������������������������������������������������������������������232 Environments �����������������������������������������������������������������������������������������������������������������������232 Resilience����������������������������������������������������������������������������������������������������������������������������������233 One Equals Zero ������������������������������������������������������������������������������������������������������������������233 The “Nines” of Availability ���������������������������������������������������������������������������������������������������233 Shared Collaboration �����������������������������������������������������������������������������������������������������������������234 Terraform Enterprise �����������������������������������������������������������������������������������������������������������234 Summary�����������������������������������������������������������������������������������������������������������������������������������236 Index ���������������������������������������������������������������������������������������������������������������������237 viii About the Authors Oscar Medina is an independent consultant with over 18 years in the technology sector. Oscar’s experience dates back to the dot-com boom era, where he managed ecommerce sites based on Unix and written in Java. He is an advocate for DevOps practices with a focus on cloud-agnostic tools and modern frameworks. Oscar’s software development, coupled with cloud infrastructure, has been instrumental in helping companies realize the benefits of many clouds by mentoring teams in migrating legacy monolithic applications into microservices, building CI/CD pipelines, and orchestrating Docker containers using Kubernetes on three of the leading clouds (AWS, GCP, and Azure), all while maintaining a cloud-agnostic strategy. Ethan Schumann is a solutions architect for Onica, a leading AWS cloud consulting partner. He specializes in automation and DevOps transformations, with a focus on enterprise implementations using cloud native services and modern tooling. He has experience designing and implementing various technologies, such as Kubernetes containerization, CI/CD constructs for various development workflows, and large-scale Microsoft products, including SharePoint. ix About the Technical Reviewers Jon Hawkesworth is a software engineer at M*Modal Ltd., where he discovered a passion for automating Windows using Ansible. He has twice spoken at AnsibleFest London about Ansible’s Windows support. He has contributed several Ansible Windows modules, and he has been an external core committer to the Ansible project since 2016. He can be found helping others automate on the #ansible IRC channel or on the Ansible- project Google group. Nic Jackson is a developer advocate and polyglot programmer working for HashiCorp. He is the author of Building Microservices with Go (Packt Publishing, 2017), a book that examines the best patterns and practices for building microservices with the Go programming language. In his spare time, Nic coaches and mentors at Coder Dojo, teaches at Women Who Go and GoBridge, and speaks and evangelizes good coding practices, processes, and techniques. xi