#paas firebase microsoft
Explore tagged Tumblr posts
souhaillaghchimdev · 3 months ago
Text
Cloud Computing for Programmers
Tumblr media
Cloud computing has revolutionized how software is built, deployed, and scaled. As a programmer, understanding cloud services and infrastructure is essential to creating efficient, modern applications. In this guide, we’ll explore the basics and benefits of cloud computing for developers.
What is Cloud Computing?
Cloud computing allows you to access computing resources (servers, databases, storage, etc.) over the internet instead of owning physical hardware. Major cloud providers include Amazon Web Services (AWS), Microsoft Azure, and Google Cloud Platform (GCP).
Key Cloud Computing Models
IaaS (Infrastructure as a Service): Provides virtual servers, storage, and networking (e.g., AWS EC2, Azure VMs)
PaaS (Platform as a Service): Offers tools and frameworks to build applications without managing servers (e.g., Heroku, Google App Engine)
SaaS (Software as a Service): Cloud-hosted apps accessible via browser (e.g., Gmail, Dropbox)
Why Programmers Should Learn Cloud
Deploy apps quickly and globally
Scale applications with demand
Use managed databases and storage
Integrate with AI, ML, and big data tools
Automate infrastructure with DevOps tools
Popular Cloud Services for Developers
AWS: EC2, Lambda, S3, RDS, DynamoDB
Azure: App Services, Functions, Cosmos DB, Blob Storage
Google Cloud: Compute Engine, Cloud Run, Firebase, BigQuery
Common Use Cases
Hosting web and mobile applications
Serverless computing for microservices
Real-time data analytics and dashboards
Cloud-based CI/CD pipelines
Machine learning model deployment
Getting Started with the Cloud
Create an account with a cloud provider (AWS, Azure, GCP)
Start with a free tier or sandbox environment
Launch your first VM or web app
Use the provider’s CLI or SDK to deploy code
Monitor usage and set up billing alerts
Example: Deploying a Node.js App on Heroku (PaaS)
# Step 1: Install Heroku CLI heroku login # Step 2: Create a new Heroku app heroku create my-node-app # Step 3: Deploy your code git push heroku main # Step 4: Open your app heroku open
Tools and Frameworks
Docker: Containerize your apps for portability
Kubernetes: Orchestrate containers at scale
Terraform: Automate cloud infrastructure with code
CI/CD tools: GitHub Actions, Jenkins, GitLab CI
Security Best Practices
Use IAM roles and permissions
Encrypt data at rest and in transit
Enable firewalls and VPCs
Regularly update dependencies and monitor threats
Conclusion
Cloud computing enables developers to build powerful, scalable, and reliable software with ease. Whether you’re developing web apps, APIs, or machine learning services, cloud platforms provide the tools you need to succeed in today’s tech-driven world.
0 notes
itsadisharma · 5 years ago
Text
Microsoft Azure VS Google Firebase
Microsoft has created a core public cloud computing platform for building, deploying and managing applications and its services anytime, anywhere with solutions. Azure provides Infrastructure as a Service (IaaS) for organisations to entrust Microsoft with all of their computing and network needs and Platform as a Service (PaaS), and Software as a Service (SaaS)  that lets its users add cloud capabilities to their existing network that can be used for services such as analytics, virtual computing, storage, networking, and much more.
Azure provides next generation cloud platform for organisations Infrastructural, Analytical, AI app and BI app needs. It is a fast and a flexible platform with cost-effective solutions and capabilities, making it the best public cloud offering on the market. 
Irrespective of the organisations size, Microsoft Azure implementation allows users to connect their devices to the cloud using solutions that integrate with their existing infrastructure and start collecting new data about their company.
With pre-built disaster management module, Azure provides protection to all the sensitive data to its users. Data in organizations is of utmost importance and Azure disaster management ensures that the data will always be secure and ready to use even when the on-premise installation or live instance suffers a crash.
Microsoft Azure is very flexible as it supports a huge variety of the programming languages, databases, operating systems and hardware. It can run Linux containers along with Docker integration. It allows its users to build applications with .NET, Node.js, JavaScript, Python, PHP, and Java for Android, iOS and Windows devices.
It also allows its users to build and deploy applications on their own terms with a commitment to support all languages and frameworks. 
Google Firebase
Firebase is a platform for smartphone and web applications created by Google. Originally founded in 2011, it was an independent company. The platform was bought by Google in 2014 and is now their leading software development offering. 
App platform for real time. Firebase is a cloud service that allows interactive applications in real time. Only add your application to the Firebase library to access the shared data structure; any adjustments made to that information are immediately synced within milliseconds with the Firebase cloud and other clients.
Add the Firebase library to your app and access a shared data structure. Changes to these data are synchronised automatically with Firebase and other customers in milliseconds. 
Firebase applications can be completely configured, modified out-of-the-box in real time, well integrate with existing services, scale automatically, and provide strong data protection.
Data Accessibility – Data is saved in Firebase under JSON. Each data component has its own URL which is available as a REST endpoint in Firebase 's client libraries. You can also enter these URLs in the browser for displaying the data and viewing it in real time.
0 notes
louisxvob343 · 4 years ago
Text
How to establish taxi reserving application
Practically each and every smartphone person provides a taxi scheduling application downloaded on their own gadget. The market for on-demand companies apps has actually been proliferating and now represents an incredible selection of options and designs.
We chose to compose this post to get rid of some gentle on what it's going to take to construct a clone of Among the most famous As well as in some ways controversial apps of recent occasions. Looking to contend with Uber’s world dominance is a daunting problem, but launching an identical company at the nationwide or regional levels looks really promising.
At Japanese Peak Now we have effectively implemented various identical tasks together with Gett, a world taxi provider, #1 for on-demand from customers corporate transportation driving 50 percent the Fortune five hundred.
To create a taxi scheduling application like Uber we must know how it really works and define its basic building blocks.
Common overview
On-need experience companies (also referred to as journey-hailing or ridesourcing products and services) like Uber are marketplaces where individuals (riders) and service companies (drivers) can link with one another.
Drivers for these providers are usually not necessarily certified professionals but are personal people who use their own autos and need to make some more money. This simplistic approach which captures a standard consumer desire is exactly what tends to make these expert services accessible Just about all over the place – something not achievable by regular taxi corporations.
A person who calls for transportation solutions simply just needs to create a request to the application. Once the ask for has been created, a notification with all the mandatory information, like The placement and level of vacation spot, is distributed to the closest driver. The driving force both accepts or rejects it.
In the case that a rejection is built, the request is allocated to the nearest driver etc. If the driver accepts the request, they travel to The client’s place to choose them up. Later on, the two the passenger and the driver get an option to level each other.
How it works underneath the hood
Launching applications of this sort of complexity entail equally consumer and server-aspect growth. They need a central server to handle interactions involving a number of people (in our circumstance passengers and drivers), to execute advanced computations (matching, cost calculation, ETA, Fee subtraction, and so forth), and organization logic and information storage capabilities. Uber maintains various geographically dispersed servers to enhance response occasions, remove failures and supply continual support availability.
Uber’s backend program is prepared making use of these types of systems as Node.js, Python, Go, Redis, MongoDB and MySQL. Moreover, it takes advantage of its possess facts center community even though also relying on third-party PaaS/IaaS vendors for example Amazon Web Solutions for many functions.
Trip-hailing products and services of this kind of magnitude as Uber are unable to do without having its individual massive computing infrastructure. Nonetheless, It will likely be sufficient to guidance your complete backend in the Preliminary levels within your undertaking working with cloud support suppliers like Amazon Website Services, Microsoft Azure, Google App Motor or Parse.
On-demand experience companies also depend seriously on diverse frameworks and APIs for navigation, on the internet payment and conversation. Uber employs Google Maps to point out the surrounding place, Core Place and Google Spot Expert services API to ascertain the user’s spot, MapKit and Google Maps Instructions API for route configuration, Braintree for payments, Twilio for SMS notifications, Apple Force Notifications Services and Firebase Cloud Messaging for drive notifications, and SendGrid for sending transactional e-mails.
The client-side of a taxi booking application like Uber consists of two interactive cellular applications – a single for demand from customers (travellers) and one particular for supply (drivers), Every with its possess list of features. There’s also will need for the online-based mostly admin dashboard which will provide the function of centralized backend-Workplace, to observe all the process and also to complete administrative steps. Shopper aspect cell apps may be developed as native applications making use of platform-unique programming languages (Java for Android or Goal-C/Swift/C++ for iOS) or cross-platform/hybrid apps applying HTML5,CSS & JavaScript. While in the context of taxi reserving application development, utilizing a local strategy is considered much more preferable.
Let’s now discover shopper-facet apps in better element, outline The essential attributes they ought to have and how to implement them.
Needs to have features for the two Driver and Passenger apps:
1. Registration and Authentication
Uber like applications must present social websites and electronic mail/password signup and login performance. Creating a profile, past increasing buyer retention, is required for companies that entail mobile payments. As yet another necessity for drivers, profiles must be verified and accredited via the support administration.
2. Profile modifying
Travellers and motorists should be capable of effortlessly edit their own profiles: identify, Image, cell phone number, email, etcetera. The motive force app must also include the driving force’s license and information about the vehicle (manufacturer and calendar year of creation, car or truck class, shade, license plate amount) and its Image. Both of those the driving force and also the passenger need to have the ability to view each other’s profile. With this data, they might understand one another within the pickup site. This will help minimize anxiety and offers a sense of security.
three. Matching
Matching permits a passenger to routinely connect with the closest out there driver. It’s a fancy algorithm which will take into account a number of components: places of your passenger and nearby drivers (Uber displays approximately eight motorists), motorists’ standing and their rating, vehicle versions, and so on. The driver has a couple of seconds to just accept the request (Uber offers fifteen seconds) just before it goes to the following driver.
Some taxi scheduling providers allow for travellers to choose the driver manually. At present Uber doesn’t make it possible for this selection.
You could also include an option to customise the matching algorithm. One example is, a driver could set a spot filter and be matched only with Those people riders who are interested in traveling in precisely the same route.
four. Navigation
At the center of a place-primarily based application like Uber is the technology of GPS tracking, all over which all the things else is built on. It makes it possible for to discover latest spots of passengers and motorists, draw paths between them, established pickup and drop-off destinations, track the motion of autos and in some cases compute the cost of the ride along with the ETA (estimated time of arrival). These details sets are sent to the server for even more processing and broadcasting to other customers in that exact place.
A lot of geolocation, https://androiddevelopers.co/united-states/california/sandiego orientation, and mapping APIs will also be used when constructing apps with navigation options.
5. Notifications
Now most experience-hailing apps use a few options to notify consumers about critical occasions: SMS, press notifications and e-mail. Thrust notifications is often implemented making use of absolutely free utilities furnished by platform suppliers: Apple Push Notification Provider for iOS and Firebase Cloud Messaging for Android, or third-occasion cross-platform utilities like OneSignal.
To put into practice SMS notifications Uber utilizes Twilio but there’re a number of other equivalent services companies: Plivo, Nexmo or Sinch.
For sending advertising and transactional e-mails Uber employs SendGrid.
six. Analyzing and exhibiting the expense of a trip
The two the driver as well as the passenger must know the estimated fare beforehand. As we talked about previously, calculating the actual fare with the trip will likely be performed within the server-facet. It could entail the subsequent parameters and elements: the distance between pickup and fall-off areas, cost of fuel, probable reductions, auto class, traffic and weather conditions, peak several hours and many others.
Uber makes use of the so-named ‘surge pricing’ approach and improves its regular fares when demand from customers for rides exceeds supply, which happens to be currently a really controversial aspect and Lots of people have already been complaining about it due to the fact its introduction. We don’t recommend implementing this feature, no less than originally, mainly because it could repel buyers.
seven. Creating payments
This really is how it works inside of Uber’s application:
Uber has partnered with Braintree to securely acknowledge payments throughout the app. All payments are cashless, so once the ride has done, payment is withdrawn mechanically with the payment gateway. There are plenty of other on-line payment providers like Stripe, Worldpay or Adyen. They provide sturdy APIs, that can certainly be built-in into cellular applications. All of these are optimized for World-wide-web, cellular and in-app purchases. They assist significant bank cards like Visa, MasterCard, American Categorical and digital wallets like Apple Shell out, Walmart Shell out, Android Pay back and plenty of Some others.
Uber makes income by charging drivers a twenty% Fee on all rides booked by means of it. Payments are transferred to the driver’s account every week.
Regular cash payments really should not be fully eradicated. Paying out in income continue to remains the dominant payment technique in a few international locations, in rural spots or for some classes with the inhabitants like senior citizens and teenagers.
8. Ranking and responses
Travellers and drivers ought to have the capacity to price each other after the journey is around. This feature aids keep a large standard of service. Drivers with small scores will at some point not be capable to use the support. If a passenger features a lower ranking, it might be more durable for him to get a journey. Travellers must also have the ability to offer suggestions on their own working experience through the vacation. This suggestions will probably be shown in the motive force’s profile for Other people to view.
Analyzing the ranking of equally the need (passengers) and the provision (motorists) can help you discover strengths and weaknesses in the assistance and make enhancements where by wanted.
nine. Reserving and payments historical past
Both motorists and passengers need to be able to check out comprehensive data about previous visits from their profiles: date, time, Value, driver/passenger name, automobile design, pickup and drop-off locations, score etcetera.
10. Reserving cancellation
Motorists and passengers should have the ability to terminate a experience. In the situation of the cancellation, a rate can be charged.
Ought to-have capabilities for the Passenger App:
Tracking close by motorists
Capacity to set the pickup site around the map without having typing an tackle
Capacity to see pertinent facts about the driver: name, Image, contact facts, rating, car kind, and ETA (approximated time of arrival)
Notification upon taxi arrival
Choosing automobile typeRiders needs to be ready to choose between different classes of motor vehicles (In the situation of Uber you'll find UberX, UberXL, UberSelect and Uber BLACK). Needless to say, the fares will differ depending on the form of motor vehicle
Sharing rides with other passengersA rider must manage to share a reserving with One more rider who’s heading in a similar path and break up the price
Most loved addresses for handy long term bookings
Should-have characteristics for the Driver Application:
Finding passenger on map
Power to see appropriate facts regarding the passenger: title, photo (optional), Get hold of data, rating, number of travellers;
Power to settle for or deny requests
Placing position (Go Online / Go offline)The “Log on” standing permits passengers to find out motorists about the map and have interaction them. The “Go offline” standing will temporarily cover the driving force from remaining tracked.
Admin panel
The admin panel will likely be an internet-based mostly interface that can help take care of your entire assistance: handle back-end settings, handle drivers, passengers, requests, transactions, look at passengers and motorists’ routines, figures, and produce reports.
Website-based buying portal
As an extra choice for passengers you could Establish an on-line Net portal that can duplicate the features of the Passenger cellular app and permit them to create requests ideal in the browser without the require for any mobile app.
MVP
You don’t have to fill the product with all the above mentioned-described Innovative features when releasing it to the market. We suggest getting started with a Least Practical Product (MVP) – the initial Edition with the item that will include things like both equally Passenger and Driver applications along with the Admin Panel Using the most basic and indispensable features simply to ‘check the waters’ of the marketplace.
How long will it take to acquire an MVP for an application like Uber
Below’s an approximate list of features for a taxi booking app MVP and our rough estimate of the amount advancement time it will acquire:
Functional technical specs and layout
Making a in-depth useful specification to the conclusion product and UI/UX style and design – one hundred twenty-150+ several hours
Superior-amount design and style: Database schema, third party integrations, know-how stack, etc. – fifty+ hrs
Acquiring an application for only one platform
Making an application for iOS and Android can take 2 times as while.
Registration (in-app or by means of social networking sites) – 32-40 hours
Consumer profile – 16-24 hours
Driver profile – sixteen-24 hrs
Putting an buy (customer) – 80-ninety six hrs
Booking (driver) – 48-fifty six hours
Pickup area and route – 32-forty hours
Booking heritage (shopper)- sixteen-24 hrs
Reserving background (driver)- sixteen-24 several hours
Payment (include a card, integrating payment API, computerized payment after the purchase is entire) – forty-forty eight hours
Backend development
Database schema – 24 hours
Organization logic – 240 hrs
Admin dashboard – a hundred and sixty several hours
Technique general performance report – a hundred and sixty hours
Top quality Assurance
QA commonly provides about 30% additional to the event time.
You should Notice, that this is really an approximate estimate based upon our preceding undertaking in taxi scheduling app development. The development time of similar task may possibly vary with regards to the UI/UX complexity, challenge specifics and enterprise logic complexity.
Increasing the performance
One example is, there’s no have to have to include rating and opinions functionalities, Price tag splitting or preferred addresses to the MVP or develop the world wide web-primarily based purchasing portal. These capabilities offer added worth, but you can save Preliminary fees and depart it for afterwards date. Working with only thrust notifications to establish a link in between motorists and travellers will likely be adequate. Here’s a list of other attributes which could be extra later:
scheduled rides
discount rates and free rides
power to choose drivers (presently Uber doesn’t provide this selection)
desired destination filter for motorists
paid waiting around time for drivers
dynamic pricing (surge pricing)
in-application chat
voice-pushed Guidance
in-app suggestion element
insurance coverage
multi-language aid
promo codes
gamification
In addition to the most simple and indispensable characteristics we’ve protected in this post, an MVP could also contain Unique advertising functions to aid get initial shoppers (each motorists and riders) and market your application in these techniques
signup bonuses
tipping motorists to stay on the web even if there’s no demand
free of charge rides for new travellers in the expense on the services
no commission For brand spanking new motorists for the first three months
The way to get going?
The products discovery section is the greatest initial step you might take to put a good foundation for the event of the app. It features a functional specification, UX/UI structure, and a visible prototype that provides you with a clear eyesight of the tip merchandise. On typical, this phase can take 4-6 months.
The item discovery phase will help you:
define a full scope of work and acquire a roadmap for the challenge set a realistic spending plan for the MVP and strategy your sources, examination the waters together with your audience applying a visual prototype, craft a convincing expenditure pitch, get to learn your workforce
2 notes · View notes
arashtadstudio · 3 years ago
Link
0 notes
jamstack-technology · 4 years ago
Text
7 Best hosting Places for Your Jamstack Site
Jamstack architecture is gaining popularity through web developers worldwide.
The JAM in Jamstack stands for three components "JavaScript, API, and Markup".
The website built using Jamstack is a static site with HTML, JavaScript, and CSS.
Tumblr media
Since they are text files, they can easily be served up fast without the use of different servers.
Jamstack websites use APIs to communicate with the user. This allows the developers to decouple the web applications using APIs and makes the site load fast.
It uses CDNs for the front end of the website.
These were some of the Benefits of JAMstack.
Let's look at some best options for hosting the JAmstack websites.
1. GitHub
GitHub is one of the easiest ways to host static sites using GitHub pages.
You can build your site on jam stack on your local machine and publish it on GitHub.
Tumblr media
GitHub is free to use, provides Git integration with great performance.
2. Netlify
Netlify is a platform-as-a-service (Paas) used to build static sites.
It provides static site hosting with CDNs (content delivery networks), which makes your site fast.
Tumblr media
You can also build a static site from a repository. It provides continuous integration and fast edge servers.
It has pre-built servers for static site generators.
3. Vercel
Vercel is another PaaS provider that provides fast static site hosting for your Jamstack websites.
Tumblr media
It supports continuous integration and also supports Lambda functions.
4. Amazon Web Services
Amazon Web Services provides multiple ways to host the jam stack websites.
They provide services to everyone from the casual blogger to the full-scale enterprise.
Tumblr media
They provide different hosting services for smaller websites and large websites.
It also provides scalability and integration with other AWS services.
5. Microsoft Azure
Microsoft Azure provides many ways to host Jamstack websites.
They also support different hosting for small and large websites.
Tumblr media
It also provides integration of your website to different Azure services.
6. Google Cloud Platform
Google Cloud Platform provides excellent services for static site hosting.
Tumblr media
It requires different additional configurations to host static websites.
It provides integration to other Google Cloud services.
7. Firebase Hosting
Firebase is a part of Google and Google Cloud Platform. We are mentioning it specifically because of its speed and simplicity.
It provides very fast hosting services and scalability. It supports both modes (static/dynamic) with Google Cloud Platform.
Tumblr media
It also has a powerful command-line interface.
Conclusion:
Jamstack architecture enables you to build fast static websites and host them anywhere. But, these hosting providers make the jam stack websites more fast and scalable.
These hosting providers provide features beyond simple HTML hosting.
If you are interested in building an eCommerce site using Jamstack you may check Headless CMS for eCommerce.
0 notes
holytheoristtastemaker · 5 years ago
Link
The news of Zeit Vercel raising $21m (slide deck here) is great occasion for taking stock of what is going on with cloud startups. As Brian Leroux (who runs Begin.com) observes, with reference to Netlify's $55m Series C last month:
Between just Netlify and Vercel the VC community has put over 70MM in cloud focused on frontend dev in 2020.
Haven't AWS/GCP/Azure owned the cloud space? What is the full potential of this new generation of startups basically reselling their services with some value add?
Cloud's Deployment Age
I am reminded, again, of Fred Wilson's beloved Carlota Perez framework that I wrote about in React Distros. First you have an Installation Age, with a lot of creative destruction. Then, with the base primitives sorted out, we then build atop the installed layer, in a Deployment Age:
Tumblr media
I think the same dynamics I outlined with frontend frameworks is happening here with cloud services. I'm obviously a LOT less well versed with the history of cloud, so please please take this with a grain of salt.
The "Failure" of PaaS
The argument is that the Big 3 Cloud Providers are mostly providing the new commoditized primitives on which the next generation of cloud services will be built. AWS is AWS, Azure maybe caters to the dotNet/Microsoft crowd better, whereas GCP maybe differentiates on Kubernetes and Machine Learning. Basically everyone has a container thing, a data thing, a file storage thing, a serverless thing, and so on.
A nice way to think about it, which I attribute to Guillermo (but I'm not sure about), is that these basic services are the new "Hardware". Instead of going to Fry's and picking up a motherboard, we now go to the AWS Console and pick up a t2.micro or to Azure for a Durable Function. Instead of debating Sandisk vs Western Digital we match up AWS Aurora vs Azure DocumentDB. The benefits are clear - we don't get our hands dirty, we can easily (too easily?) scale with a single API call, and thanks to Infra-as-Code we can truly treat our infra like cattle, not pets.
When the Big N clouds launched, the expectation was that Platform as a Service (PaaS) would win out over Infrastructure as a Service (IaaS). I mean - look at this chart! - if you were running a Software business, would you want to run it atop an IaaS or a PaaS? It made intuitive sense, and both Google App Engine and Azure originally launched with this vision, while Salesforce bought Heroku within 3 years of founding.
But this thesis was wrong. As Patrick McKenzie recently noted:
I'm surprised that Heroku's model didn't win over AWS' model and that DevOps is accordingly a core competence at most SaaS companies. This seems obviously terrible to me every time I'm doing DevOps, which probably took ~20% of all engineering cycles at my last company for surfacing very little customer value.
This rings true. As moderately successful as Heroku, Parse, and Firebase were, they are dwarfed by the size of the big clouds' IaaS businesses. It turns out that most people just wanted to lift and shift their workloads, rather than start new apps from scratch on underpowered platforms. Assisted by Docker, this acquired the rather unfortunate name of "cloud native". (Unfortunate, because there are now "more native" versions of building cloud-powered apps than "containerize everything and somehow mention agile")
But I don't think the PaaSes were wrong.
They were just early.
Developer Experience as a Differentiator
The thing about hardware providers is that they don't cater well to specific audiences. By nature, they build for general use. The best they can do is offer up a default "Operating System" to run them - the AWS Console, Google Cloud Console, Microsoft Azure Portal (Dave Cutler literally called Azure a Cloud OS when it began).
Meanwhile, the "undifferentiated heavy lifting" (aka Muck) of wrangling datacenters turned into "undifferentiated heavy lifting" of messing with 5 different AWS services just to set up a best practices workflow.
So increasingly, intermediate providers are rising up to provide a better developer experience and enforce opinionated architectures (like JAMstack):
Netlify
Vercel
Repl.it
Begin.com
Glitch
Render.com
Amplify
KintoHub
The working name for this new generation of cloud providers, used by Martin Casado, Amjad Masad, and Guillermo Rauch, is "second layer" or "higher level" cloud providers.
Nobody loves these names. It doesn't tell you the value add of having a second layer. Also the name implies that more layers atop these layers will happen, and that is doubtful.
Cloud Distros
I think the right name for this phenomenon is Cloud Distros (kinda gave this away in the title, huh). The idea is both that the default experience is not good enough, and that there are too many knobs and bells and whistles to tweak for the average developer to setup a basic best practices workflow.
Ok, I lied - there is no average developer. There are a ton of developers - ~40m, going by GitHub numbers. They don't all have the same skillset. The argument here is that cloud is going from horizontal, general purpose, off the shelf, to verticalized, opinionated, custom distributions. There are ~300,000 AWS Cloud Practitioners - yet, going by Vercel's numbers, there are 11 million frontend developers.
In order to cross this "chasm", the cloud must change shape. We need to develop custom "Distros" for each audience. For the Jamstack audience, we now have Netlify, Amplify, Begin and Vercel. For the Managed Containers crew, we have Render and KintoHub. For the Hack and Learn in the Cloud folks, we have Glitch and Repl.it. What the business nerds call verticalization or bundling, developers call "developer experience" - and it is different things to different people.
What's funny is these startups all basically run AWS or GCP under the hood anyway. They select the good parts, abstract over multiple services and give us better defaults. This is a little reminiscent of Linux Distros - you can like Ubuntu, and I can like Parrot OS, but it's all Linux under the hood anyway. We pick our distro based on what we enjoy, and our distros are made with specific developer profiles in mind too.
The Future of Cloud Distros
What we have now isn't the end state of things. It is still too damn hard to create and deploy full stack apps, especially with a serverless architecture. Serverless cannot proclaim total victory until we can recreate DHH's demo from 15 years ago in 15 minutes. I have yet to see a realistic demo replicating this. Our users and their frameworks want us to get there, but the platforms need to grow their capabilities dramatically. In our haste to go serverless, we broke apart the monolith - and suffered the consequences - now we must rebuild it atop our new foundations.
Begin and Amplify have made some great steps in this direction - offering integrated database solutions. Render and KintoHub buck the serverless trend, offering a great developer experience for those who need a running server.
There's probably no winner-takes-all effect in this market - but of course, there can be an Ubuntu. This generation of Cloud Distros is fighting hard to be the one-stop platform for the next wave (even the next generation) of developers, and we all win as a result.
0 notes
masaa-ma · 6 years ago
Text
2019年のDevOps/MLOpsエンジニアの標準的スキルセット
from https://qiita.com/poly_soft/items/8dd105341869f93b129c?utm_campaign=popular_items&utm_medium=feed&utm_source=popular_items
Tumblr media
以前「2018年の最先端DevOpsエンジニアになるためのロードマップ」という翻訳記事を投稿させて頂いたのですが、その記事は主に「オンプレ環境におけるDevOpsエンジニア」を想定した説明になっており、クラウドネイティブ時代の技術としては少々違和感があるかなということと、最近はDevOpsだけでなくMLOpsもかなり注目を集めているということで、今回は、私の考える「2019年のクラウド環境におけるDevOps/MLOpsエンジニアの標準的スキルセット」に関して述べてみたいと思います。
ちなみに現時点の私のスキルセットはこんな感じになっておりまして、下記で説明する技術の大体90%以上は一通り実務で経験済みですが、未使用の技術も含まれますので、記述内容に誤りがありましたらコメント欄等でご指摘頂けますと幸いです)
前提
「DevOps」の範囲は非常に広く、また人によって解釈がかなり異なりますが、この記事ではDevOpsの定義として「サービスを安定稼働させたまま、ユーザからのフィードバックを取り入れた新機能や改善を、迅速にサービスに反映するためのあらゆる取り組みや文化のこと」という前提で話を進めさせて頂きます。(MLOpsはDevOpsの機械学習バージョンという理解で問題ないと思います)
また、上記の通り「DevOps」は非常に範囲の広い概念であり、非テクノロジー的な要素も含まれますので「DevOpsエンジニア」という呼称は本来おかしい(職種の範囲が曖昧すぎる&広すぎる)のですが、ここでは「DevOpsの目的を実現する上��必要なテクノロジー面のスキルセットを保持しているエンジニア」という風に考えて頂ければと思います。
また、開発工数および運用工数の削減がリードタイムの短縮には欠かせませんが、そのためには「可能な限りクラウドやSaaSのマネージドサービスだけで機能を実現する(巨人の肩に乗る)」ことがクラウドネイティブ時代のDevOpsエンジニアの必須条件というのが私の認識であり、そのためこちらの記事は「マネージドサービスを使いこなすこと」にかなり主眼を置いた内容となりますので、その点はあらかじめご認識頂ければと思います。
DevOps
まずはDevOpsエンジニアに必要なスキルセットを見ていきましょう。
AWSとGCPの各種マネージドサービスの知見
数年前であればクラウドに関してはAWSの知識だけで十分でしたが、ここ数年のGCPの進化により、サービスの新規開発の際に「IaaSとしてAWSとGCPのどちらを使うか」を検討するフェーズがほぼ必ずと言っていいほど入ってくるようになりました。
お客様の方では「GCPはより先進的(Kubernetesや機械学習系サービスに関してAWSよりも先行している)」というイメージがあるようで、(それ以外にもAWSに対する「技術者の飽き」もあると思いますが)「GCPを使ってみたい」という要望が増えており、2019年時点ではもう「AWSしか扱えないDevOpsエンジニアは時代遅れ」という状況になっていると考えて差し支えないでしょう。
両クラウドサービスの全てのマネージドサービスに関して詳しくなることは不可能ですが、一般的によく使用される下記のサービスの存在と用途とその対比に関してはある程度把握しておく必要があると思われます。
種類 AWS GCP
VM EC2 GCE
ストレージ S3 GCS
PaaS Beanstalk GAE(SE/FE)
FaaS Lambda Cloud Functions Cloud Run
コンテナ基盤 ECS EKS GKE
RDB RDS Cloud SQL
NoSQL DynamoDB Cloud Bigtable Cloud Spanner
KVS ElastiCache Cloud Memorystore
メッセージキュー SQS Cloud Tasks
Pub/Sub SNS Cloud Pub/Sub
バッチ/ジョブフロー制御 AWS Batch Step Functions Cloud Composer
ビッグデータ分散処理 EMR Cloud Dataflow Cloud Dataproc
認証 Cognito Firebase Authentication
ロギング/モニタリング CloudWatch Stackdriver
ちなみに、IT業界全体のシェアとしてはMicrosoftのAzureの方がGCPを上回っていますが、Web業界においてIaaSにAzureを採用している企業さんは2019年時点ではまだまだ少ないので、現状ではとりあえずAzureへのキャッチアップは後回しにしておいて問題ないと思われます。
クラウドアーキテクチャ設計
前述したAWSやGCPの各種マネージドサービスを適切に組み合わせてアーキテクチャ設計を行い、それを構成図に落とし込める能力は必須となります。
いわゆる「アーキテクト」という職種の担当領域でもありますが、「サービスを安定稼働させたまま、バリューをユーザに迅速に届ける」ためには、自動化のしづらい構成が採用されてしまったり、無駄な機能が開発されてしまったり、アンマネージドなツールやサービスが使用されて管理工数が肥大化したりしないように、アーキテクチャ設計の段階からDevOpsエンジニアが関与する必要があります。(小規模なサービスの場合はDevOpsエンジニアがアーキテクトを兼務する場合も多いと思います)
AWSやGCPの各種マネージドサービスに関しては、下記のような書籍でざっと学習して、どんどん実際に手を動かしてサービスを触ってみると良いでしょう。
Amazon Web Services 基礎からのネットワーク&サーバー構築 改訂版 【ダウンロード版】AWSをはじめよう ~AWSによる環境構築を1から10まで~ GCPの教科書 プログラマのためのGoogle Cloud Platform入門
VPCのネットワーク設計やIPアドレス範囲の設計に関する知識も重要です。拡張性を考慮した上で、自分なりのパターンを確立しておいた方が良いでしょう。下記の記事が参考になると思います。
AWSのネットワーク設計をサボらないでちゃんとやる Amazon VPC IPアドレス設計レシピ 【AWSしかやったことない人向け】AWSとGCPのネットワークの違いを理解してみよう
Gitブランチモデルの適切な設計とタスク粒度の管理
ソースコードのバージョン管理を行うことは当然ですし、その場合大抵はGitを使うことになると思いますが、適切なブランチモデル(git-flow|github-flow|gitlab-flow|あるいはそれらのアレンジ版)を採用し、さらにタスクの粒度を小さく保っておかないと、コンフリクトやデグレードの可能性が高まり、「リードタイムを短縮する」というDevOpsの目的が達成できなくなってしまいます。
「これが絶対の正解」というブランチモデルやタスク管理の手法は存在しませんが、何らかの新機能を追加したりする際のコードサイズがどうしても肥大化してしまうようであれば���「フィーチャートグル」等を使用して、作業ブランチの生存期間を出来るだけ短くするように工夫する必要があるでしょう。
Git利用時のフローはどれを使うか Pete HodgsonさんのFeature-togglesが面白かったので翻訳してみた
ちなみにGitブランチモデルに関しては、私の場合はgilab-flowを基本にして、多少のアレンジを加えた方式で対応することが多いです。
GitLab flowから学ぶワークフローの実践
インフラのコード化
インフラをクラウドのWebコンソールから手動で作成したり、あるいはサーバにSSHでログインして直接ライブラリ等をインストールする方式は、「別環境を作る際にまた手動で同じ作業を行う必要がある」「現在のインフラやサーバの構成を把握することが難しい」「手順書管理になってしまう」「属人性が発生する(いわゆる「デプロイ職人」が必要になってしまう)」等の様々なデメリットがありますので、リードタイムを短縮するにはインフラの構成は基本的に全てコード化して管理する必要があります。
インフラのコード化ツールとしては
といった辺りが一般的ですが、最近は特にTerraformの人気が高いので、Terraformに関しては必須知識になっていると考えて良いでしょう。
【ダウンロード版】Pragmatic Terraform on AWS
ただし、tfstateファイルをクラウド上で管理するために、AWSの場合にはS3バケットを、GCPの場合にはGCSバケットを事前に作成する必要があり、このtfstateファイル管理用のバケットの作成や削除も自動化したい場合には必然的にCloudFormationかDeployment Managerを使うことになりますので、この両者に関しても一応押さえておいた方が良いと思われます。
また、最近は
といったツールも注目されており、まだメインストリームというほどには広まっていないという印象ではありますが、Terraformからトレンドが移行する可能性もゼロではないので、注視しておいた方が良いかもしれません。
Terraform と Pulumiを比較する AWS CDK が GA! さっそく TypeScript でサーバーレスアプリケーションを構築するぜ【 Cloud Development Kit 】
コンテナ基盤とマイクロサービス
Dockerを活用することにより「環境の差異によって生じる様々な問題を防止できる」「デプロイやロールバックやオートスケールが容易になる」等の明確なメリットがありますので、コンテナ基盤に関する知識もDevOpsエンジニアにとっては非常に重要です。
コンテナ基盤としては、AWSだとまだまだECSやBeanstalkがよく使われているようですが、現状��トレンドから考えてKubernetesへのキャッチアップはDevOpsエンジニアにとっては必須と考えて良いでしょう。
AWSだとEKS、GCPだとGKEを使うということになりますが、最低限どちらのプラットフォームにおいてもマネージドサービスによるKubernetesクラスタの構築およびPod/Service/Ingress等のデプロイを行えるようになっておく必要があると思われます。
サービスメッシュに関しては、使うメリットがある企業さんは限定的だとは思いますが、AWSの「App Mesh」およびGCPの「Istio」に関してはある程度押さえておいた方が良いでしょう。(App Meshはまだほとんど使い物にならないという印象ですが、GCPではIstioを使うことが恐らく今後一般的になっていくと思われます)
Service meshとは何か Kubernetes上でgRPCサービスを動かす
また、Kubernetesを使用したマイクロサービスの開発においては、言語は「Go」が採用されることが多く、そしてKubernetesクラスタ内でのマイクロサービス間の通信においては「gRPC」が使われることが多いため、GoとgRPCを使用した開発に関しても慣れておいた方が良いと思われます。
Goで始めるgRPC入門
認証基盤
クラウドのマネージドな認証基盤を活用することで、アプリケーション側で認証コードを実装したり自分達で認証基盤を構築したりする必要がなくなりますので、アプリケーションの安全性や保守性が向上し、開発工数も管理工数も大幅に削減することが可能になります。
AWSだとCognito、GCPだとFirebase Authenticationが認証基盤を提供していますので、これらのサービスの概要に関してはある程度把握しておいた方が良いでしょう。(Cognitoは相当学習コストが高いですが、API GatewayだけでなくALBと連携できるようになってから一気に利便性が向上したという印象です)
最近はAuth0というサードパーティのIDaaSも注目されているようです。
認証プラットフォーム Auth0 とは?
サーバーレス/FaaS
何らかのイベントをトリガーとして処理を実行したい場合、自前で常時起動のサーバーを用意してAPIをホストするのは手間とコストが必要になりますが、FaaS(Function as a Service)を使えばサーバーレスで処理を実行できるので工数もコストも大幅に削減できます。
AWSならLambda、GCPならCloud FunctionsもしくはCloud Run(on GKE)がFaaSに該当します。
各サービスの設定方法やデプロイ方法、「最大実行可能時間」や「同時起動可能数」「複数回リトライされる可能性があるため冪等性を持たせる必要がある」という点、および「何らかのイベントをトリガとして起動できるFaaSと、単にHTTPのエンドポイントとしてのみ使用可能なFaaSがある」���VPC内のリソースにアクセス可能なFaaSとそうでないFaaSがある」という点に関してはある程度把握しておいた方が良いでしょう。
Amazon VPC 内のリソースにアクセスできるように Lambda 関数を構成する VPC ネットワークの内部リソースへの接続  |  Cloud Functions のドキュメント Google Cloud Next 2019 in SF , サーバーレス関連発表まとめ
RDBのスキーマのマイグレーション
RDBのスキーマ変更が行われないWebサービスはまず存在しませんし、スキーマのマイグレーションを手動で行ってしまうと「属人性」や「オペレーションミス」という問題が発生することになりますので、マイグレーションをコードで管理して自動化することもDevOpsエンジニアの重要なタスクとなります。
こちらに関しても「これが絶対に正解」という手法は存在しませんが、私がAWSでRDB(RDS)のマイグレーションを行う場合は、大抵は「VPC Lambda」を使用しています。(Lambdaはコンピュート用のサービスなのでマイグレーション用ツールを実行可能であること、VPC LambdaはPrivateのRDSインスタンスにアクセス可能であること、Systems Manager Run CommandのようにEC2を常時起動しておいたりする必要がないので低コストなこと等、要件を満たしているため。ただし冪等性に注意する必要がある)
マイグレーションツールに関しては、個人的にはRidgepoleのように「スキーマファイルの差分を検出してDDLを自動生成してくれる」というツールが好みなのですが、実行されるDDLがコードレビュー時に分からないことや、スキーマ定義がツール独自のDSLに依存してしまうことが許容されない場合も多かったり、あるいはDDLだけでなくDMLを実行したい場合もあったりするので、一般的にはflyway系の、生のDDLやDMLをそのまま記述できるタイプのツールを使用する方が無難と思われます。
winebarrel/ridgepole Flyway by Boxfuse
権限管理/アカウント管理
AWSもGCPも「IAM」という権限管理の仕組みがあります。システムを安定稼働させる上ではセキュリティは最重要要件の一つなので、権限管理に関しては十分に勉強しておく必要があるでしょう。
AWS IAM(ユーザーアクセスと暗号化キーの管理) Cloud IAM - Identity & Access Management
AWSのIAMに関しては「Assume Role」の概念が最初は非常に理解しづらいと思います(私もしばらくAWSの案件から離れるとすぐ忘れてしまいます)。下記の記事等で学習しておきましょう。
IAMロール徹底理解 〜 AssumeRoleの正体 Assume Roleの用途・メリット
また、GCPに関しては以前から「開発環境」「ステージング環境」「本番環境」など、サービスや環境ごとにプロジェクトを分けるという手法が一般的でしたが、AWSも「AWS Organizations」の登場によってアカウントを非常にカジュアルに作成/削除出来るようになったため、今後はサービスや環境ごとにアカウントを分けるという手法が一般化していくと思われますので、こちらに関しても理解しておく必要があるでしょう。
(例えば業務委託の方は開発用のAWSアカウントのみアクセス可能にして、本番用のAWSアカウントは一部の社員の方だけしかアクセス出来ないようにすれば、サービスの安全性は大幅に向上しますので、今後は一つのAWSアカウントで全ての環境をホストするようなリスクの高い構成は廃れていくと思われます)
AWS Organizationsによるマルチアカウント戦略とその実装 AWS Organizations を実際に初めてみる第一歩
ビッグデータ分散処理
ビッグデータの分散処理に関しても、クラウドのマネージドサービスを活用することで、低コストで効率よく処理を実行することが可能です。
AWSならEMR、GCPならCloud DataprocかCloud Dataflowがビッグデータの分散処理基盤となります。
あくまで私の主観になりますが、「クラスタの管理をしないでよい」という点で、GCPを使う場合はCloud DataprocよりもCloud Dataflowの方が圧倒的に楽だと思います。Cloud Dataprocはクラスタの構築管理を自分達で行う必要がありますが、Cloud Dataflowは実行時に自動的にクラスタの構築とスケールと削除を行ってくれるので便利です。(DataflowはApache Beamのマネージドサービスです)
Apache beamとdataflow紹介
AWSに関してはEMR以外の選択肢がありません(AWS Batchも一応並列分散処理は可能ではありますがMapReduce系の処理には対応していません)。またEMRを使う場合は大抵の場合Sparkを使うことになると思いますので、Sparkの知識が必要になります。(過去の経験による個人的見解ですが、Apache Beamと比較すると、Sparkの学習コストはかなり高めです)
Spark on EMRの基礎をおさらいする
バッチ処理とジョブフロー制御
バッチ処理もバッチジョブのフロー制御も、現在はクラウドのマネージドサービス(の組み合わせ)で実現できるようになっています。
AWSであればStep FunctionsとAWS Batchの組み合わせ、GCPの場合はCloud Composerを使うことが一般的だと思います。
Step FunctionsとAWS Batchはそれほど難しくはありませんが、Cloud Composer(Airflow)は学習コストがかなり高い(特にWeb UIの使い方が非常に分かりにくい)ツールのため、使いこなせるようになるまでにはある程度学習期間が必要になると思われます。
また、Cloud Composerは、現時点では起動する際に最低でも3台のGCEインスタンスが必要になります(ComposerはKubernetesクラスタ上に構築されています)ので、ジョブフローの数がそれほど多くないサービスの場合はコスト面でかなり割高感があると思われます。
単体のジョブを実行したいだけであれば、GCPなら「Cloud Scheduler + Cloud Pub/Sub + Cloud Functions」という組み合わせでも実現可能です。(ただしCloud Functionsの最大実行可能時間には540秒という制限があります)
Pub/Sub を使用して Cloud ファンクションをトリガーする
また、私はやったことはありませんが、GKE上でJobを実行するという方法もあります。「とにかく何もかもKubernetesに寄せたい」という方針のチームであればこの方式もありかもしれません。
Running a job  |  Kubernetes Engine Documentation
CI/CDパイプラインの構築
CI/CDパイプラインの構築は、DevOpsエンジニアの最重要タスクの一つとなります。
CI/CDツールは色々ありますが、現時点では、一般的なWebサービスの開発においては「CircleCI一択」と考えて良いのではないでしょうか。
例えばAWSにはCodeBuildやCodePipeline、GCPにはCloud BuildというCI/CD用のサービスが存在しますが、「クラウドサービスのアクセスキー等の秘匿情報をCIサービスで管理してよい」という条件がOKならば、ほぼ全ての機能はCircleCIだけで実現可能なのと、CircleCIのノウハウはAWSでもGCPでもどちらでも共通で使えるので、わざわざ一つのクラウドベンダー限定でしか使用できないサービスに学習コストを浪費する必要はないのでは、というのが私の個人的見解です。
CircleCI vs. CodePipeline
ただしCircleCIも安泰というわけではなく、GitHub Actionsが先日のバージョンアップでCI/CDをサポートしたことにより、将来的にはCircleCIからGitHub Actionsへの移行が進んでいく可能性がかなり高くなってきているという印象です。
現状のGitHub Actionsは「キャッシュ機能がない」「ブランチのフィルタリングが一括で行えない」等、CircleCIと比較した際に明らかに不便な部分が存在するようですが、ここら辺の問題が解決されれば、CircleCIを置換していくのは時間の問題かもしれません。(ちなみにGitHub ActionsのバックエンドではAzure Pipelinesのfork版が動作しているようです)
circleciのbuild/test/deployをgithub actions(beta)に移行した 新 GitHub Actions 入門
ロギング/モニタリング
サービスを安定稼働させる上でロギング/モニタリングは必須です。AWSならCloudWatch、GCPならStackdriverの使用方法にある程度詳しくなっておく必要があるでしょう。
サードパーティのモニタリングサービスとしては「Datadog」が比較的よく使われています。(はてなさんのMackerelも名前はよく目にしますが、私が今までに参画したプロジェクトでは使われていませんでした)
Datadogに関しては、ダッシュボードのUIコンポーネントが豊富だったり、Slackへの通知に��ラフ画像を含めることが出来たり、外形監視を行えたり等、機能そのものが充実しているという点以外に、(完全ではないものの)唯一「Monitoring as Code」に対応しているツールであるというメリットもあります。(CloudWatchやStackdriverでもダッシュボードは作成可能ですが、環境ごとに全て手動で作っていく必要があります。監視する対象が多いとかなりしんどい作業になります)
TerraformとDataDogで始めるMonitoring as Code入門 クラウド時代の監視ツールDatadogをあらためて紹介します DatadogのSynthetics(外形監視)つかってみた
分析基盤
ユーザのフィードバックをサービスに反映していく上で、分析基盤の構築もDevOpsエンジニアの重要なタスクとなっています。
AWSならRedshift、GCPならBigQueryが基本的な分析基盤となりますが、私が今まで参画した現場ではRedshiftを使っているチームはほとんど見かけませんでしたし、構築の容易さや、使い方を間違えなければ比較的低コストで運用できるというメリットから考えると、分析基盤に関してはとりあえずBigQueryだけ学習しておけば十分だと思います。
サードパーティのTreasure Dataというサービスを使っている会社さんもありますが、料金がかなり高めということもあって、こちらもBigQueryと比較すると使っている会社さんは少ないので、私も一応使用経験はありますが、あえて勉強しておく必要はないのではという印象です。
データ分析基盤について
BashスクリプトとCLIツール
Bashスクリプトは、主にCI/CDにまつわる各種作業を自動化する上で必須のスキルとなります。
シェルスクリプトに関する書籍等で基本をしっかり学習しておきましょう。下記のエムスリーさんの研修資料もとても参考になると思います。
新しいシェルプログラミングの教科書 bashスクリプティング研修の資料を公開します
さらに、AWSの場合はAWS CLI、GCPの場合はgcloud、この2つのツールも自動化作業において必須なので、使用方法に関しては十分に詳しくなっておく必要があります。
AWS コマンドラインインターフェイス(CLI: AWSサービスを管理する統合ツール) gcloud コマンドライン ツールの概要
基盤コードの開発
こちらも本来はアーキテクトの仕事になりますが、開発人数が少ない場合や、経験の浅いエンジニアの方が多い場合は、DevOpsエンジニアがアプリケーションの基盤コード部分も作成することになります。
私が基盤コードを実装する場合は、
Webフレームワークの選定
パッケージマネージャの導入
サンプルAPIの実装
単体テスト
統合テスト
Linterの設定
Formatterの設定
.gitignore等の設定
ここら辺までをざっと実装してから、アプリケーションエンジニアや機械学習エンジニアの方にお引渡しするというケースが多いです。
ちなみにAWSの各種サービスに依存する部分のテストに関しては、AWSのサービスをエミュレートしてくれるlocalstackというDockerイメージが便利です。
MLOps
次に、MLOpsエンジニアに必要なスキルセットを見ていきましょう。DevOpsエンジニアのスキルセットに加えて、下記のような知見が必要になります。
機械学習の基礎知識
機械学習の深い知見は必要ありませんが、実際にMLOpsエンジニアとして機械学習エンジニアの方たちと働いてきた経験上、とりあえず下記レベルの知識はあった方が良いかなと考えております。
微分と線形代数と確率統計の基礎知識
Courseraの機械学習コース修了レベルの知識
Jupyter Notebook(またはJupyterLab)の基礎知識
KaggleのTitanicを一回やっておく
数学に関しては、大学レベルの知識は不要だと思います。高校3年生程度のレベルで十分だと思いますし、一回復習して大部分を忘れてしまってもMLOpsエンジニアとしてそれほど支障はないと思います。(ちなみに私の場合は下記の記事のように一ヶ月ほど仕事を休んで小学校の算数から高校3年生の数学までを全て勉強し直しました)
文系エンジニアが機械学習に入門するために小学校の算数から高校数学までを一気に復習してみました。
Courseraの機械学習コースは非常に評価の高いコースですが、実際に取り組んだ経験として「MLOpsエンジニアであればこのコースのカリキュラムをやっておけば機械学習の基礎知識としては十分」と考えております。(こちらは仕事をやりながら約1ヶ月程度で修了しました)
文系エンジニアがCourseraの機械学習コースを1ヶ月で修了したので振り返ってみました。
Jupyter Notebookに関しては、私の場合はフリーライブラリで学ぶ機械学習入門という書籍に取り組む中で勉強しました。ただし今後はJupyterLabが主流になるようですので、そちらの使い方に慣れておいた方が良いかもしれません。(GCPのAI PlatformではJupyterLab用のマネージドサービスであるAI Platform Notebooksが提供されています。
JupyterLabのすゝめ
また、Kaggleの初心者向け課題であるTitanicに取り組むと、機械学習エンジニアの方たちの作業の流れが一応おおまかには把握できますので、こちらもやっておいた方が良いと思います。
【Kaggle初心者入門編】タイタニック号で生き残るのは誰?
機械学習基盤
AWSであればSageMaker、GCPであればAI Platformが機械学習基盤となります。(GCPの機械学習基盤は以前は「ML Engine」という名称でしたが、色々なサービスの追加や機能変更に伴って名称が変更されたようです)
どちらも
分析(Jupyter NotebookやJupyterLab環境)
学習
学習済みモデルのデプロイとAPIとしてのホスト
といった、機械学習基盤としての基本的な機能は共通です。
MLOpsエンジニアの場合、分析業務に関しては基本的に携わりま��んので、それぞれのサービスを使用した学習の実行、およびモデルのデプロイとAPIのホストをどのように行うのか、という辺りが把握出来ていれば十分だと思います。
MLワークフロー制御
データの収集、前処理、学習、モデルのデプロイといった一連の機械学習のワークフローを制御する作業は、MLOpsエンジニアの最重要タスクとなります。
MLワークフロー制御に関して「これがスタンダード」というツールは存在しませんが、AWSであればStep Functions、GCPであればCloud Composer(Airflow)を用いることで、マネージドサービスだけを用いたMLワークフロー制御は一応可能です。
AWS StepFunctions を使った機械学習ワークフローの管理 Practical Guide: How to automatize your ML process with Airflow and Cloud Composer
AWSの公式ドキュメントに、Airflowを使ったMLワークフロー制御に関する記事が存在しますが、Airflowをアンマネージドな方式で使用することを許容できるならば、この方法もありかもしれません。
Amazon SageMaker と Apache Airflow
GCPの場合、GKE上でkubeflow pipelinesを使用してMLワークフローを制御するという方式が推されているので今後このツールの使用が広まっていく可能性もありますが、まだかなり発展途上のツールのため、今のところは静観しておいた方が良さそうです。
AutoML
データに対する前処理、学習アルゴリズムやハイパーパラメータの選定、学習と評価といった一連の作業(もしくはその一部)を自動で処理してくれるサービスを総称して「AutoML」と言います。(GCPの「Cloud AutoML」は単なるサービス名です)
AWSの場合、Amazon PersonalizeがAutoML系サービスの代表格だと思います。GCPの場合はAutoML Visionが有名です。
機械学習エンジニアの方やデータサイエンティストの方たちに色々お話を伺う限りでは、今まで機械学習エンジニアの方にお願いしないと不可能だった作業が、今後AutoMLによってどんどん自動化(いわゆる「AIの民主化」)されていく可能性が非常に高くなっているという情勢のようですが、AutoMLがうまくハマるタイプの作業であれば工数を大幅に削減することが可能になるため、「機械学習サービスのリードタイムを短縮する」ことが主要な役割のMLOpsエンジニアにとって、AutoML系の技術へのキャッチアップは必須になっていくと思われます。
まとめ
こちらの記事で紹介した全ての技術を短期間で経験するのは難しいと思いますが、「自動化」「巨人の肩に乗る」「モダンな技術を採用する」という方針の企業さんのご案件を複数渡り歩いていけば、クラウドのマネージドサービスを適切に活用する知見は自然と身に付いていくと思います。(少なくとも「手作業」や「オレオレコード」や「僕の考えた最強の社内ツール」的なものが蔓延している企業さんで働くことは、DevOps/MLOpsエンジニアのキャリアにとってはほとんどメリットがないと思います)
また、最初の方でも述べましたが、現在は「AWSとGCPのどちらをインフラとして使用するか」を検討するフェーズが新規開発案件���場合はほぼ必ず入ってくるという状況ですので、例えばAWSに関してある程度詳しくなったら次はGCPを使える案件を選択する等、プラットフォームにこだわり過ぎずに両クラウドのマネージドサービスを幅広く経験していく方が、より先進的で面白い案件に携われる可能性が高くなるのではないかと思います。(ちなみに私の場合はAWS案件とGCP案件を掛け持ちするみたいなこともやっております)
私もまだまだ「クラウドネイティブ時代のDevOps/MLOpsエンジニア」として発展途上ですので、今後も引き続き様々なマネージドサービスにキャッチアップして、サービス全体の安定性やリードタイムの向上にさらに大きく貢献できるように頑張っていきたいと思います。
おまけ
Youtubeの方で、Web系エンジニアやWeb系エンジニアに興味のある方たち向けの雑食系エンジニアTVというチャンネルをやっています。もしご興味ございましたらチャンネル登録してみて頂けると大変嬉しいです。
また、2019年から「雑食系エンジニアサロン」というオンラインサロンも始めました。(ご登録者様は2019年8月時点で1,200名様を超えました)
Twitterの方でも「Web系エンジニアのキャリア戦略」を中心に色々と情報を発信しておりますので、もし宜しければフォローしてみてください。@poly_soft
0 notes