Up until now, you have used Architect to develop and deploy your application. However, Architect’s role in your development process does not end there. You still need to monitor the system and be able to dive in when a problem occurs. To help facilitate this, Architect provides some helpful commands that will allow you better insights into how your system is doing.

Whether it be a remote deployment using architect deploy or a local one using architect dev these commands will give you a deeper insight into your product.

We will assume that you have deployed the example react app to a remote environment for the following examples.

$ architect deploy ./examples/react-app/architect.yml

Remote vs local

The following commands will work on both a remote deployment and a local deployment. The main difference is that a remote deployment is tied to an account where as a local deployment is not. So if you would like to access a remote deployment you would include the --account flag. If you do not include the --account flag, the Architect CLI will prompt you with a list of both local and remote options.

Don’t worry, if you are unsure about what account, environment or service you are trying to work with, then just leave them out of the command. The Architect CLI will present you with a list of options and help you find what you are looking for.

Logging

As your application runs, it will generally print important information to stdout and stderr. The logs command will allow you to stream those logs from a remote service to your console. For instance, let’s say you wanted to see the latest logs for the API of the example react app. You would do the following.

$ architect logs -a my_account -e my_environment react-app.services.api

The output would be

Logs:
―――――――――――――――――――――――――――――――――――――――――――――――――――――――――――――――――――――――――――――――
api | {"message":"GET /names","level":"info","service":"backend"}
api | Executing (default): SELECT "id", "name", "createdAt", "updatedAt" FROM "names" AS "na
api | me" ORDER BY "name"."id" DESC;

To have a constant stream of logs, you can add the --follow flag to the command.

$ architect logs -a my_account -e my_environment react-app.services.api

For more options please take a look at our Readme.

Remote execution

Sometimes logs do not paint the complete picture of what is happening in production, or you may want to run some unique script on a remote deployment. Either way, Architect has you covered with our exec command. Using this command, we can run arbitrary commands on any remote service. By providing the command with the name of a service, a container running that service is picked, and the container will execute your designated command. So, for instance, if you were running the react example app and wanted to know what the remote file structure looked like, you could run.

$ architect exec -a my_account -e my_environment react-app.services.api -- ls

Which would output

Dockerfile         node_modules       package.json
logs               package-lock.json  src

While this is great for quick one-off commands, sometimes a more interactive approach would be preferred. Instead, you can create an interactive session with the remote container using the -ti flags.

$ architect exec -ti -a my_account -e my_environment react-app.services.api -- sh
Which would provide you with an interactive terminal.

```sh
/usr/src/app #

Depending on the base image your service is using, sh might not be a valid command. If not, the other most common terminal is /bin/bash.

For more options please take a look at our Readme.

Port forwarding

To access services running inside the cluster without exposing them publicly, you can use the port-forward command. This will allow you to access these services on your local machine and is useful for debugging non-HTTP services.

$ architect port-forward -a my_account -e my_environment react-app.services.api --port 5000 --target-port 8080

Which would expose the react api’s port 8080 on your own localhost at http://localhost:5000.

For more options please take a look at our Readme.