詳細検索

Build an agile and scalable development environment in the DevOps era with Vagrant, GitHub, Travis, Chef, and OpsWorks

Avatar
by 平形大樹

Build an agile and scalable development environment in the DevOps era with Vagrant, GitHub, Travis, Chef, and OpsWorks
Translated from 日本語 • View original

Hello. It's been a long time. This is the developer's flat shape.

All the engineers who visited this blog. And people other than engineers.

Thank you very much. First of all, there is no code or command line in this article.

Introduction

What I am sending this time can help you build and operate a truly scalable environment. I will deliver it multiple times in a series of articles, but if you finish reading this series and put it into practice, you will already be able to scale You must be working in an environment.

In this series of articles, we will send you the necessary tools in a hands-on format in order to install and use them. I think it is very meaningful for you to actually move your hands and feel it. In this episode, there is no code or command line at all. It will come out more and more after the next time. Before that, let me shout, "I have something to tell you, because I like you" by Kazumasa Oda.

This article is not suitable for:

  • I'm going to live alone for the rest of my life! A person who is enthusiastic about going to the toilet once a day.
  • I don't want to think about the future. I'm living in the present! A person who says three times a week.

Those who fall under these categories. Thank you for your hard work. The exit is here.

I would like you to read this article if you fall under the following categories.

  • Developers and infrastructure personnel.
  • If you are starting a new project but are worried about how to structure it.
  • What if the number of servers increases? Those who are worried.
  • What if the number of development personnel suddenly increases? Those who are worried.
  • Those who are interested in DevOps or scalable environments, but can't take the first step.
  • Those who tried to practice the above but were frustrated.
  • For some reason, the code running in the development environment does not work in the public environment and cannot go home.
  • I don't want to go to the company because I'm afraid of the actual reflection.
  • Those who can't sleep at night because they are worried about the server crashing.
  • When I think about the future, I feel anxious and anxious, and I can't help but say, "Anyway, I don't want to go home to school or home anymore." by Yutaka Ozaki and humming.

So, let's open the door to your dreams.

Legacy Development and Operations

  • The construction of the development environment and the public environment is manually installed based on the construction procedure.
  • The server expansion in the public environment is manually kitted one by one.
  • Patch application and version upgrade are manually performed one by one based on the procedure.
  • There is no version control, and each person uploads the correction file via FTP.

Superman is the one who can operate these without human error and without stress. And all development and operation members must be supermen like me. It's impossible for me as an ordinary person.

Modern Development and Operations

In order to withstand the rapidly changing service demands of today, various things must be streamlined.
Release quickly, see user reactions, change specifications, reflect them immediately, and release them again. It is also necessary to do something like that.
Recently, the automation of development and operation has been featured in various media articles and has become a buzz. But how far can automation actually go?

  • Version control
  • Environment Construction
  • Security patching
  • Version upgrade
  • Autoscale
  • Automated testing
  • Automated deployment
  • Distribution of development environments

It's hard to do everything, right? But if you do it**, you will definitely be happier. **

What is DevOps?

What is DevOps?

DevOps is one of the software development methods. It is a combination of development and operations, and refers to a development method in which development personnel and operation personnel work together and cooperate. Quote source: wiki

It is also said that this is also said.

The concern of DevOps is to create an environment where both development and operations, which often clash due to differences in roles, work together and work towards the same goal, and I believe that tools and culture are important to create such an environment. Quote from: @IT

In my own words, let's **be able to do both development and operation to some extent! **That's what I'm talking about.

DevOps

DevOps is also related to agile processes. In the past, there were many waterfall long-term and huge projects, so it was considered good to clearly distinguish the roles of each person in charge and build an efficient project system.

But what about in modern times? Isn't it more agile projects? There are many cases where you have to start a project with a small number of people because you can't spend that much on labor costs, right? In that case, how will you judge if it becomes a hit in the future and the number of development and operation personnel increases or the number of servers increases? When the server configuration is changed, it is necessary to apply it to all environments in a small number of steps. Otherwise, someone will have to go through a hard time. I believe that DevOps is essential for everyone involved to be happy.

"I'm not just talking about beautiful things!" **"Isn't it Superman to be able to develop and operate?" ** Yes. I don't think there are many people like that. **Development and operation go hand in hand. **That's what it means. Instead of asking the operation team to build new servers, increase servers, monitor, or do it yourself, you can do it yourself when the development side needs it. Now, with the spread of the cloud, you can raise or lower and increase or decrease with one touch. There are tools that can make server configuration programmable. Installing the necessary middleware, changing the configuration, updating the development environment, unifying the public environment and the local development environment, and distributing the latest development environment all at once.

Haa, haa, haa,

**Anyone can do it all quickly! **(This is in the style of a press conference by a member of the No○mura Council)

Agile Development

Agile software development is a general term for a group of lightweight development methods in software engineering that develop software quickly and adaptively. Quote source: wiki

The characteristics of agile development are:

  • Requirements, design, development, testing, and release in a short period of time, such as one lap, and repeat the cycle
  • There are many small group sizes, and back-end engineers, front-end engineers, and server engineers cover each other's domains.
  • Manage tasks on Kanban boards, etc.
  • Focus on moving code rather than documentation.

etc. Why go through this process? The answer is to be the first to respond to the rapidly changing demands of users. The longer it takes to experience it, the more time it will take to improve later. We must keep up with the technological innovation that is approaching us day by day. The DevOps mindset is also quite relevant to Agile.

Agile emphasizes testing and refactoring. Fast release and testing are essential for that.

What is Scalable?

What is scalable?

Scalability is one of the desirable characteristics of a system, network, or algorithm in telecommunications and software engineering, and the ability and degree to adapt to an increase in users and work. Quote source: wiki

Scalability is sometimes about system resources, and that's of course. Now, if you use a cloud server, you can increase or decrease as much as you need, when you need it. You can also do it automatically.

I believe that scalability is also required for human resources.

The structure of the project must also be flexible as needed. What do you have to think about at that time? Cost.

  • The cost of know-how sharing due to being individualized
  • Cost of development environment construction time
  • Cost of sharing procedures
  • Cost of training for newcomers

This is because the turnover of personnel is becoming more intense, right?

  • Ensure that anyone involved in the project can start development quickly.
  • Don't let the project flutter even if you're gone tomorrow.
  • Don't be flustered even if dozens of people suddenly participate in development.

You're having a hard time around here, aren't you? But I think it's better to be that way, right?

Diversification of the Environment

User requirements are changing more and more than they used to be. It is related to the benefits of technological development.

  • Devices: PCs, smartphones, and wearables. These will greatly change the usage scenarios of the application.
  • Infrastructure Lines have become faster, and the amount of information that can be handled has increased dramatically. In addition, the number of usage scenarios is increasing, and it is also required regardless of location. As a result, business requirements change rapidly.

In order to solve these problems, development languages and tools are becoming more and more efficient and changing at a dizzying pace.

Application to Change

What do you think are common so far?

It's a change. **It is also a drastic change. **

As a son of a temple, what I want to say here is that all actions are impermanent.

Impermanence (sabbe-saMkhaaraa-aniccaa, सब्बे संखारा अफिच्चा) is a Buddhist term that means that all real beings in this world are always in flux and change, both in essence and in essence, and that existence cannot maintain its identity even for a moment.
Quote source: wiki I think there are various things that were taken for granted yesterday and are outdated today.

  • Revolution in Technology
  • Dizzying changes in service requests
  • Personnel turnover

How do you respond to these various drastic changes?

I think two things are necessary for that.

  • Mindset to embrace change
  • How to adapt to change

I will write about this mindset again when I have time. In this article, we'll talk about how it works to apply to change.

Automation

I'm not interested in automation. Is there anyone who thinks?

But as an engineer, you are already doing automation.

"Huh?"

"What do you know about me!"

You thought. Well, don't get so angry, just listen calmly while eating taiyaki.

自動化

All engineers (except for some bad people) exist to make the world more convenient and rich. I believe that the goal is to provide more people with opportunities and experiences to enrich them. For example, the following efficiency improvements.

  • Process complex processing of huge amounts of data at ridiculous speed, and shape the data into an easy-to-read form.
  • Use the DB to efficiently organize data and search quickly.
  • Replace the digital process with faster and cumbersome procedures that were previously done in analog.
  • Communicate your intentions to the other party regardless of place or time. connect.
  • Make it possible to shop online without going to a physical store.

etc. What do you think? Aren't you already doing automation that corresponds to these on a regular basis? Or is it related in some way? That's right. Providing value to users is the result of automation. IT engineering is indeed there to automate (streamline). So why don't we automate our work?

We are in the business of making people happy with automation. Then **let's work happier with automation ourselves! **

Here are the tools you need to do this.

Explain the tools that enable an agile and scalable environment in the DevOps era

Sorry to keep you waiting! Now, let's finally talk about Vagrant, GitHub, Travis, Chef, and OpsWorks, which are in the title. We will give a brief description of each tool. We will explain these tools in detail with code in each episode.

DevTools
  • Vagrant is a tool for building virtual machines. It is useful when building locally. If you think VirtualBox is good, I will explain what is useful in a later article. You will be captivated.
  • A community of engineers is formed on GitHub through GitHub Git repositories. GitHub is able to instill a good culture in development teams thanks to a great invention called Pull Request.
  • Travis CI cloud service. By integrating with GitHub, it runs tests every time it is pushed and notifies GitHub of the results.
  • Chef is a configuration management tool. You can manage the configuration of your server in code. No matter how many times you run it, you can always make sure it is in the same state. If you are still sshing and installing and configuring, use Chef.
  • OpsWorks is one of the AWS deployment tools. It's a powerful tool that helps you build scalable environments and automate deployments. I will explain this in detail in a later article.

Why do you do such a troublesome thing?

You thought so. There is only one answer. **All for the sake of happiness for you and those around you. **

In recent years, development languages, frameworks, and server engineering have become increasingly diverse. And it will continue to accelerate. But don't worry about being scared.

If you are interested in how to use these tools and how to think, it will spread and lead to the future. **It's about brightening the future of IT engineering! **

Thank you very much for reading to the end (half crying)

Next time

We're going to talk about building a development environment in Vagrant. Good luck everyone. Goodbye.

Related Articles