At the same time, I would not recommend spending time on official webgateway docker image, as it made to be too specific for ICM and/or Durable %SYS. And at the same time, needs some magic to get it working. e.g. apache will not start without specifically saying so. And even if it started, it does not mean, that it will be started with the CSP module enabled.

Instructions of what? If saying just about Apache+webgateway.

The repo I've provided is quite complete. With some basic knowledge of docker.

So, you just have to build the docker image, publish it to some docker registry, public or private and deploy it with AWS

Deploying just IRIS itself as a container does not make so much sense at all. As it needs to be packed with some application it should run. Containerized IRIS it's not the same as IRIS running on a virtual machine, it's very different, and not so easy to explain it in a simple way.

For instance, you can look at this article, about deploying some web-based IRIS application on Amazon

I would recommend, to contact me through info@caretdev.com, so, we could schedule a discussion, where you could give more details, and I will say the ways how it can be solved. 

Having separate Apache it's not something unordinary, and in fact, is just a recommended way for web-based applications.

And Apache in docker or not have no difference. The configuration will be exactly the same.

You can look at my example I made some time ago. It uses docker-compose, but the key feature, that it should use the same network, which creates by default in docker-compose configuration for the services in the same project. So, you just have to prepare apache with webgateway, and properly configured. Or like in my case, webgateway can be configured by environment variables, so, the same image can be used multiple times with different IRIS servers.

Look at my project, it implements a backend, where frontend can be any, In my example it uses Vue by default, and Angular and React as option. Frontend, is that something, that completely not related to InterSystems at all. You can do it in any way you like. In project RealWorld you can find lots of realizations of exactly the same frontend. And any of this realization can be used with any of realization of backend, and in our case, it can be IRIS as well. And this project is very cool in case, when you would like to see, how to do the same in a different way.

You can use property "links" in "objectscript.conn", to add some links to your projects, which you will be able to open quickly

  "objectscript.conn": {
    "active": true,
    "username": "_system",
    "password": "SYS",
    "ns": "MYAPP",
    "port": 52773,
    "links": {
      "MyApp": "http://${host}:${port}/csp/${namespace}/main.csp"
    }
  }

After this, you will get a new item in the menu shown by click on the status bar with connection info.

While you are working with JSON, I would recommend to not do it manually and use native JSON support, available since 2016.2 (2016.1 with notes).

So, you can do it just 

set json = {}.%FromJSON(str)

or

set json = {}.%FromJSON(stream)

and value will be available by

write json."Not  Working Example"

If you have a version with no native JSON support, look at this project

I don't see XML here, but for your examples, I would use Regex

    Set regex = ##class(%Regex.Matcher).%New("(""[^""]*""):\s(""[^""]*""|[^,]*)")     
    
    Set regex.Text = """Working Example"": xyz,"
    Write !,regex.Text,!
    If regex.Locate() {
      Write !?5,regex.Group(1)
      Write !?5,regex.Group(2)
    }
    Write !     
    
    Set regex.Text = """Not  Working Example"": ""x,  y"","
    Write !,regex.Text,!
    If regex.Locate() {
      Write !?5,regex.Group(1)
      Write !?5,regex.Group(2)
    }

And the output will be

"Working Example": xyz, 
     "Working Example"
     xyz

"Not  Working Example": "x,  y",
     "Not  Working Example"
     "x,  y"