Adobe Experience Manager Rapid Development Environments
Explore best practices for Rapid Development Environments (RDEs) and the updated developer console. Natalia Angulo Herrera, Software Development Engineer at Adobe, and Remo Liechti, Software Development Engineer at Adobe, cover migration challenges, AIO CLI setup, deployment, testing, logging, and configuration management for a smoother Adobe Experience Manager workflow.
Transcript
So welcome everyone to the DevOps life 2024. Here with me, it’s Natalia and me, Remo. We are working on the, rapid development environment, within Adobe. And this on demand session here will talk about, first of all, what is the cloud velocity? Development velocity? What how do we set up and use the already how do we interact with it, how we get insights. For locks, for example, some advanced topics, connected with edge delivery services, which is called crosswalk. And what are the upcoming features that we will provide in, in near future? So I hand over to you, Natalia, for the cloud develop development velocity. Thank you. Remo. So first of all, let’s going to introduce, what was a problem that we tried to solve. So basically, you, as you all know, you have the localization that you can just run locally into a laptop and then you can get up quick feedback and deploy within seconds. Okay. But the problem is, I mean, everything works in your local set up, but then you go to the cloud and then it fails. That’s what usually happen. Everyone fast with everything. So then, we saw so Miss Priority, on to the local SDK. If we go to the next slide. There you go. For the cloud, only features that can be, easily tested. That’s what we found out. Not only that, also that maintaining the local SDK in your local laptop can be consuming a lot of time.
And it’s a little bit painful because you need to update it, to, be updated with the latest version. So then, we decided we go to the next.
Okay. So the the processes you can deploy from your local laptop is what they’ve been. But that’s what it happened before. Having this one machine that will implement it. This long process took around 30 minutes. In the scenarios it can be even worse, right? Because there are a lot of checks that we do in the pipeline. We do the build in our servers.
We do also some validations, a lot of validations, and also the deployment like, proper rollout, you know, with multiple instances that need to be shut down and then new IDM instances that need to be, So this was a long process.
Therefore, if we go to the next. We decided, okay, why we don’t create a new SDK in the cloud with the new environment type. And then, you know, you can customize, combine or created several of that, new environment. There is no pipeline associated. I mean, because pipeline is good. But then as soon as you have a pipeline, you have multiple steps, the final that and then it’s taking time. So this is going to be like local SDK, right? Look on the on the cloud. So we both and there and then there’s a new environment type support changes at runtime. So then directly so you can update configurations bundles scripts with your config and even more than we are going to. So on this log. The thing is that you can validate now your new code very quickly, and this can be done via new API that we did. And the I I’ll see you later months. That is a new plugin for the ugly commands.
This new environment that we created that my work, my framework will explain later in deep. And then you can use that CLI in order to push the code to the cloud quickly.
So we go yeah there you go. So drug development environments. This is how it got the finish that now between the local environment that you have you know with your code you are developing the in your laptop to go to the cloud and quickly iterate over the changes, the feedback on the deploy is going to be within seconds to a few minutes. In the worst scenario, what you have contemplated. But the thing is that since you can deploy, some small entities of the code like a new configuration, and you run that update, then it can be even seconds, right? Because these are small part to update from the just project.
This is really good because then in the cloud you can get the advantages like you have, you know, other ones are available. You have all the cloud services available. Everything. So be the same as any other environment. We will explain a little bit the differences of the infrastructure, but the same is the is the same. But sorry, the rest is the same. These are immutable instances by the way. So that is actually what allows us, you know, to directly make the changes and runtime.
Let’s go deeper into the differences of the the infrastructure.
So it’s again go into the process that I explained before. You are the developer. You are there in your local computer. And then you run and you come up with a new plugin. Then first thing that it does is to upload the thing that you want to deploy to the cloud. Then it gets back as as you are, right. And then with this you ran with being our servers.
This server actually, is the package processor that you can see on the image. It is running the analyzers. So we are also running the same analyzers as we go into the pipeline. But there also we would push the package to a. Yeah. So in case of an analyzer, do not return an error. Then you will select the deployment stops. Then the deployment is a stage. And then you can perform new installations on top of the previous one. Like imagine, you know, abandon this machine, then you just install the bundle on top of that, and then it’s going to continue.
Then it continues to air. But in the cloud, what we are going to have is a single author in a single published book. This is actually something to hide. Like there is no high availability in traffic environments because actually, that is a plan, right? Is like the local SDK is there. And then to install something, if your the thing that you’re installing makes it, you started to see a small outage. Right. Because actually a and will be restarted. That’s how it works in the local SDK is the same but with the appendices. As I previously mentioned, to have all the, feature properties in the cloud. Not only that, difference, that is not high availability as I mentioned. Also the we are using, for the author on the public, whereas in the segments that, there is no MongoDB over here. So thus those are the two main differences. The rest will be more or less the same. I’m now saying that I pass it over to my my dremel to continue the presentation. Thank you very much, Natalia. So yeah, we can see the is a more simple set up of an entire cloud infrastructure, which makes it easy for development. So how do you actually, as a developer, get one of these? So first of all, you’ve got to log into cloud. Not sure. As you’re used to when you create a new dev environment or stage environment. But instead of adding a new development environment, you can choose a new rapid development environment. You see on the top right on the screen.
So basically you’re choosing that there’s also an entire documentation, about how to enable already in a program where you get, stepped through how you, you add the entire, already to it. But in the end, the bottom line is instead of adding new development environment, you add a new rapid development environment. All the rest is the same. But in the end that you can communicate with, did you need some additional tooling? And, the bottom line is, what is here shown on the, on the right side. You can use npm you need to have that installed because the entire CLI runs with it.
So you have to use the Adobe IO. There’s also a lot of documentation online that you find, about guide how you install the command line tools. And there’s even videos, with instructions, how you set up and how you use an already. But we will, talk you through here in this, in the show. So the bottom line is install npm install the io cli, which is the base of the IO command. You got to check if the IO installed successfully. Easiest way to do that is to call IO help in your, command line. And once this works, you can install the already plug in, with that command. So you see how plugins install and install. The other will be a plug in for the. I have already. And once this is all set up, you can basically go on and use some of the basics in a CLI, which I will talk about next. So in the next four slides there will be quite some information. I’ll talk you through before I go into a demo where we actually try out those things, but instead of, jumping forth and back, I think it’s the best if we just, go over the slides real quick. So what are the basic commands? First of all, you have the IO AMD dash dash help, which will give you a help manual page. What you can do with the commands. There’s even dedicated, man pages about each of the individual commands that we have. So, we will start using the IO log in and then to, to set up the setup will allow you to easily choose from your organization’s programs and environments in there and, list all the, all these so you can, pretty easily then, configure your system to use your already. And we’re going to check it with the, the status command on how your card is. Currently, set up. Then some more things we will do is we will install the weekend template. I guess you know that from the, on the local SDK that you can use as well.
We’re going to log in to the author and take a look at the pages which are there.
And basically we will use for that the install command. We will also talk about, how we can go in and see the history of the what has happened in there using the RG history command. And then after the demo, we can play around with the delete or reset command, which basically allow you to remove, previous deployed bundle or can reset your, in your already to the latest version, or wipe the content that you have installed on. So that’s like the basic further than that, we will, take a look at how we can get insights there. We have, the functionality for logs. The problem there with logs usually is that in an on the cloud service you have to change log levels. And that means you have to deploy. You know, what you are configuration which yeah, if it goes through the entire pipeline and everything, it just takes a lot of time. But now this you can do in an already there’s two ways of doing that. You could either put the OCI configuration within the already within the install, which will take some time or even faster. You can take life logs. We have a special or D command which I will show you on the next slide.
Basically, you can access life logs of the offer or publish ports by using the IO, Am or D logs command. So this is really life logs like a title minus f that you do on whatever log file that you have in your quickstart.
Here it’s just the same thing. It goes to the or the on the cloud and, and prints out those logs to your console. There’s various ways you can do, you for example, can put debug logs on for the. That would be and also put DevOps log on for. Org Apache. That’s the way you could put it. I mean you can put your own packages there. Obviously you have those are the possibility to have just one definition of the debug level like info here and then use space separated ones. For easier, mentioning of the packages you want to see, you can make the log levels obviously with Warn error info debug all together. And there’s also shorthand names that gives you a little bit of quicker, feedback. So that’s basically what we will be looking at. I will now stop the presentation real quick and start sharing my screen.
Basically we are taking a look at the already command. So I’ve installed everything with the npm, the CLI, and logging for all these, And first of all, we’re going to check what is entering the help so we can see okay, we have those commands that I mentioned before. We have the most important one to install the history and the delete commands, which will give you the power to install bundles or whatever artifacts you want to put on there. You can see the history, what has changed on the already and you can remove them again.
So first of all, we got to do a configuration that we can connect our, local, computer to your already. Then you have on the cloud. How do you do that? There is, first of all, you need to do a login, which will bring you to the login page of any other, Adobe service. So you have to enter your, your username credential, choose your organization. And from there you basically then go back to here to console, which gives you the token that is then used, with communicating, with the already for recent here for the demo. I have already done that and prepared because it takes a while and I don’t want to, bore you with, login process that you already know. So, how do we now connect my computer to there? It’s basically I am already set up. That’s the command that you can use to, configure it. So it will, first of all, ask you, do you want to store that setup information locally or globally? Here I always, propose to use the local storage, which will put all the information into your.io file in your current folder.
This helps to easy to switch between different orders that you have configured. So so yeah I want to store this locally so we can see it has now selected the organization which is tied to my login that I’ve done previously. And it now lists all the different programs that are in my organization. And here I can also use my, my keys up and down to select. Or I can filter because I know I want to go for the ones we have already. So we have here our development. Okay. Like I choose that. And now we are retrieving all the environments inside that program. And I, have prepared a already in here, which is for the day life. So I can also search for this life which will give me the only already there so I can see the state is ready. Everything’s fine. So I just select that one, and now we can see that we have selected that already. So when we do now I am already status. We are connecting to that already and we can see we get some feedback. There’s information for this program in environment. It’s called the life demo one. And we can see the environment is ready. But we don’t have anything installed neither in offer published for bundles or configuration. So it’s a clean wiped fresh already in here. Also, if we go to the history of the already, we can see that there is basically nothing no updates yet. So it’s really clean already. So what do we do now? First of all, I’m going to install the weekend package. This will now, choose automatically what type it is because we I have not provided type. It tries to guess choosing content package. Obviously we can see it’s pretty big. It’s 136MB. So now it’s uploading to the cloud, and, we now get back after the upload is completed, we get to source URL that, what I talked before. So we now push that source URL to the tree, which now starts to download the package again from the cloud. So another hundred 36, megabytes been transferred so that takes a little bit of time. The entire process to install. Now this content package is, depending on your speed, between 1 and 2 minutes.
And obviously that’s a really big thing if you will just deploy a simple, always configuration file, which is a couple of bytes. This will be done within seconds. So now we got to wait, for this to happen. I will speed it up probably, for you. So you don’t have to wait on that.
Maybe in the meantime, I can go and, Log into my already. I can see that when I’m there. I don’t have anything there yet. Just pure bone or heat content. So we’re going to wait on the content package to be installed. Oh, now it’s done. We can see there’s, we have, deployment completed for the package. Also, we can see there’s no logs available for that. That means whenever there would be an error during installation of a content package or whatever we put up there, you would get here the the feedback. What has happened? Why did it not install? Did you maybe violate some API regions? Do you miss some dependencies? Whatever. So you would directly get that feedback in here. You can also if you maybe close the terminal and you want to go back to that. Right. And get that feedback out again, you can do a or the history which we now see that, okay, we have a deployment. Okay. What has happened there? Number one, let me get the history of number one.
And then we basically, get everything back and the same thing as we did before. So you see, we have it installed, we have the update. There were no logs. So you basically get the same output here again. So in case you, missed, the logs there, you can always go and retrieve that again. So if we now go in here and refresh the page, we can see we have now the we can say deployed. What do we have in there. We basically go to the English version with the magazine. And I want to show you San Diego Server I think is the use case I’ve prepared. Yeah, exactly. So we have to go in there and, edit the page.
Which will bring it up.
So after a few seconds, I hope we should see what’s there.
Exactly. I have something to show that stuff anymore. So, yeah, we have to we can installed in here. And what we are now going to do is basically at the bottom we have Justin, and we want to add something to Justin here, without the need of, like, redeploying everything and taking it down the pipelines and stuff. But we want to be quick. So how do we achieve that? Right. So first of all, let’s take a look at the logs that are currently there. Then we will change what is here and add some additional logs and see if they pop up.
So for that I’m going to use maybe just a copy paste. It’s a bit faster. So we’re gonna show the logs that are now printed with debug level four comm Adobe and Org Apache. And if we do that we can see the logs are being told, and I mean debug log obviously there’s a lot of coding stuff going on. So yeah. So it’s it’s a bit fast. So maybe you want to narrow that down, which means, okay, let’s take a look at what the weekend is, putting out there. So we’re going to do debug on the, goats weekend. And if we do that, we don’t get much because obviously there’s no traffic. So I’m going to move that aside a little bit.
And whenever I refresh my page here.
We should start seeing something. At least this was the case last time that I did that. So yeah. Yeah. Sorry, I forgot to put in the logs, obviously. So, first of all, we’re going to change the, the code, which we want to deploy. So for now, what is there? We have basically just that GitHub occupations, which is what is shown here next to Justin. So let’s add this one here.
Yep. Obviously I should return here the sorted occupations which we have now added. This is basically we’re adding journalist, next to the occupation and we log in info, about the journalist being added to Justin. I will now not put in the of occupations here anymore or not right now, for another use case later on. But let me, save that then. I basically built, the core package of the weekend. This takes a couple of seconds.
So it has built and then I go back to my console, where I installed the build package. Now.
We can see it’s using the old type always try bundle. It has uploaded it. That was pretty fast.
Now it’s applying, inside the old, which takes a couple of seconds.
So we can see deployment of number two was fine. It was deployed on offer and publish. So now let’s go back and put some logs for info. To the info level that was actually there before. I didn’t get anything. So.
When I now refresh the page.
I do get the logs that we see. Okay. We have added journalists to the list of occupations of Justin, but if we go down, obviously they’re not there because I have not put the sorted occupations into the return value. I just want to, basically showcase here, like, yeah, if you forgot something in the pipeline, you would now have it, but you have to run it through the pipeline again. It takes a lot of time. So what else do we do here? We just say, oh yeah. To kind of fix that doc, put it in build.
And we are. To install it again. Upload is done. Takes a couple of seconds to apply the bundle in the already.
We can see now the free deployment was all fine both on offer and publish.
Now let’s take the logs again.
And refresh the page. So we can see again. Journalist was added. And here at the bottom we should now see journalists as well. So now the code was also updated there twice actually that few minutes.
And that’s basically how we do that. So what else do we want to do. We can for example, in here with the logging feature, if you go to a, or the logs dash, dash health, you can see a bit more information that I showed on the on the slide before. For example, we have callers that you can enable disable. So different log levels have different colors. We can highlight some substrings.
For example we could highlight journalists. And then the entire line would be highlighted there. You can target a specific tier like author or publish.
And you have even some quick commands or target flags that you can choose a different artist if you like to do so.
Yeah. I think that’s all said the last thing that I would need to do as a developer now, because I’m done, is to reset my already. So I do that, which will now basically call cloud manager, who will then, reset my environment, wipe everything, update and version to the latest release. And yeah, there we go. So, I think that’s it from the demo. So now I will go and share the presentation again. So, we have advanced topics and before I hand over to Natalia, I’ll first want to say two things, about that. First of all, we have a minus minus Json flag that is available on most of the commands they give you proper feedback. So this one here is from, status reply. So we can see on the offer we have both bundles installed which have this ID we have it’s a table bundle. We have some metadata attached. We have also configs in there with my servlet. So you get like a structured feedback that you can use in your CI, CD environment in any code, in a scripting that you do. So we make sure there is no console output, from our side and just really do the Json feedback for you so that you can also use that in scripting. There’s a documentation on the regulatory environment, documentation online. There’s a section about Json reference where you see the content of each command so that you can have a proper overview of, what you need to look for in the script.
Then the last thing I’m going to talk about is the ideal contacts. So a context is basically your connection to your RG, right? As we can see here, I have a context called stage and that one has some access tokens in there, which represent my login my and my permissions and authorization. And then we store something like the org ID program environment that you work with. So that’s basically your already. And that entire information can be either stored globally or also locally in a in a known context. And doing so would be done with those commands here on the side. So first of all we say okay, a config set minus Json for minus L for local. Create me a new I must context stage. We have some default values of the the power output. Then we use the I o of plugin to set the context to stage. So all the logins they know they’re gonna use this context. So when you do a login the access tokens gets stored directly into that context. And this basically helps you because with a few commands in your CI CD script, you can always log in. Again, the data gets stored locally and our IO or D commands will pick it up. So you don’t have any like interferences with different or these different CI, CD shops that run anything like that. So it’s pretty convenient for you to just use that. And basically have a, nice CI CD rom for that. So that’s it for me. Hand over back to you, Natalia. Thank you everyone. That was awesome. Okay. Let’s continue. So what else do we have as advanced topics? Well, we also support now from the pipeline between. But it quotes because there is no pipeline for rapid deployment environment. Remember that is how we called for any other environments. So you can now push from packages. How do you do that. What again is your local laptop then do you just build the from the package using npm run build. And then it will generate a couple of important lines that we are those are the ones that we are going to upload. Just take care of that is like that dist folder where all the distribution packages has been built by node, and also the package dot Json file. Those are actually the ones that we will now use when you run a I o am or install, you can choose the type from them endpoint to the folder that, you know what your files are leaving behind the scenes. This is going to create a template file. And then the zip file is going to be uploaded. We will process the six file and then you know it will be push then link to be used as a from the bucket. So as soon as you get back the feedback, no sorry. Go back as the sorry, as soon as you get back the feedback, for the logs so you can see the deploy artifact, is completed, and then you can see also hash, if you go to your website and inspect, via the networking tools in the browser, inspect the request. You should see that now, your requests are going. I’m using this new class that is being returned. Okay.
So this is how you push a new from the package. Now, if we continue. So okay, now we can have configuration pipeline support again pipeline that is not Python. Not always. But this is something that we, currently support. It is generally available now. And you come from the same changes as you do via the config pipeline. To that is the template also for RB is as an example here we can see, if we want to perform like a config into the CBM. This example, someone’s Yaml file that you need to create. And the same way you do it for the pipeline is, is sync. Exactly. We are going to block a path on the open on publishers. And then it’s super pretty straightforward because for the, of the case, we just need to run the command below am already install with the type. That’s config and point to the folder where all the files are live. It this Yaml file again behind the scenes as in the front end pipeline. This is going to seek all the files that you have in that folder that you are pointing out. And then push it to the cloud and then push it to the Am instances. And then everything is going to be populated, done. And as soon as you get the message type it was completed. Then your config KVM was detected. And is that this is going to be done in between segments for one thing. So it’s super fast. What is the with with the latest topic that we wanted to show you here is that actually, this is also what audit delivery services does work.
It it might be an advantage for you in case, you know, do you need to perform any changes on the, APM side? Because as you have seen, without these is super weak to perform the changes on the right and developed over there. So let’s go with the, quickly, how to configure it is the same as in any other environment. But you can see here we will select a new template and then configure it on to the instance in my author. In this case this is the typical it’s the library services template that you can see in the tutorial which is publicly available. And then more things that we need to configure. It will go next are the parts, the Json file in the GitHub repository of your git repository.
And also the if stop file Yaml file pointing to the author instance. Right. Because you can see there is my program. I then my environment I’ll be pointing to the right instance. So you configure all of these for the tutorial again. And then if we go next.
The last thing that we need to do is to quickly publish the template or the and it is a quick update. And when we but as soon as we do this we can then go to the next slide. Yeah. So then we can go here to the delivery services website for our instance. And then we can see then like this is deployed but asynchronous work. Now you can go to the editor.
That we can see on the next slide. Yeah. There you go. And then here we can just perform any change and publish it quickly. So this is just a way you know to the pool to deploy quickly and iterate over the universal editor here as well. So actually even more, as I mentioned in the beginning. Okay. Yeah, this works for all the is there for states brought by this is just another case of environment that it sort of work as expected. But the theme for the is is that, you know, imagine that following the tutorial, there are some cases where we want to deploy some configurations to our environment to properly configure the data and blah, blah, blah. So now if we go next, we can see those couple of configurations that are so only the tutorial is that like an authentication handler. And also this link may lip sync configuration change. But what are the is. It’s as simple as you know running on you know a Yammer install with the OSGi config type and then point to the configuration. This is just one example and then it gets deployed within seconds. So actually it’s super quick. And then you don’t even need to run the pipeline. Even I said anything more. The development with crosswalk. So saying that we are done with the crosswalk plug on the go okay. The upcoming features. So just to highlight what is next or what we are planning to help next on out of the is this is not yet developed. This contains I mean disclaimer this just here like a pretty meals you know it is clear it needs right up what is upcoming. We want to have are the ease working with snapshots because so far when do you set your environment then do low second we receive the customer feedback that this is not the best experience. Sometimes they can then you know to, you know, start over, install the content.
Start over data up. But then we collected the feedback and we said, okay, makes sense. Let’s work on some snapshot how we think, the commands might look like. Although again, this can change is something like I know a lot of it is not some snapshots. And then having a create snapshot, having at least a snapshot, having an apply. What did you just apply the snapshot that you previously created. Or you can delete the snapshot because we encourage you to delete the snapshots. We might even have like a limit of the snapshots because otherwise garbage is there is not the right thing at all.
So yeah, this is something that ideally you just create a snapshot, then you continue working, then you say, okay, I need to go back, and then you just apply the previous snapshot that you created, and then you continue and you even more, you know, upper rest periods or for developing if we go next. Yeah. So more things that we have in mind is to have also automatic updates, without needing to reset the RV because now again, you lost all the content when updating to a new array and version.
You know, just keep the content.
So that’s the end.
Yep. So thank you. Natalia. That looks really, really nice. Even a faster developer experience and velocity with the new features that are upcoming. So, if you have any Q&A that you want to ask, unfortunately, this is just a recording for you. So it’s an On-Demand session. We’re not your life right for you, but you can find us live on discord. So if you use that discord channel, please join there. There will be a direct connection to our development guys. So Natalia, me and some other colleagues that are, working on this, we will answer your questions there. And there’s also some, I think, way of giving feedback to the presentation or asking questions, directly here. Looks like please use that opportunity. And we will definitely reach out, back to you. Because I believe, we need to hear what your, your needs, your your workflow. What do you need in our lives? Because we want to make you faster, and we want to make it easier to, apply changes to the. I am on the cloud, which will help us all in the end. And therefore, thank you very much for joining this, developer Live session in 2024. And hopefully see you next year. But I.
Community Discussion
Continue the conversation in the Adobe Developers Live Community discussion.
Key takeaways
- Introduction to DevOps Life 2024 The session is hosted by Natalia and Remo from Adobe, focusing on rapid development environments.
- Problem Statement The challenge of local development environments working well locally but failing when deployed to the cloud.
- Solution Creation of a new SDK in the cloud to facilitate rapid development and deployment, reducing the time from 30 minutes to seconds or a few minutes.
- Deployment Process The new environment allows for quick updates and validations via a new API and CLI plugin, enabling faster feedback and deployment.
- Infrastructure Differences The cloud environment uses a single author and publish instance without high availability and does not use MongoDB.
- Setup and Usage Developers can set up a rapid development environment through the cloud interface, using npm and Adobe IO CLI for installation and configuration.
- Basic Commands Key commands include io amd --help, io login, io status, io install, io history, io delete, and io reset.
- Logging and Debugging The new environment supports live logs and changing log levels without redeployment, using commands like io am or d logs.
- Advanced Topics Support for front-end packages and configuration pipelines, allowing for quick deployment and iteration.
- Upcoming Features Plans to introduce snapshot functionality for easier environment resets and automatic updates without content loss.
- Q&A and Feedback The session encourages participants to join the Discord channel for live interaction and feedback with the development team.
recommendation-more-help
3c5a5de1-aef4-4536-8764-ec20371a5186