Mongoose OS ESP32-PICO-KIT breakout was designed by Espressif Systems specifically for the AWS Pop-up Loft Dedicated to Espressif. It provides a quick way to start IoT development on ESP32.
This quick start guide and reference materials include the following:

  1. Install AWS CLI command line utility
  2. Follow AWS CLI configuration guide to setup your AWS credentials
  3. Make sure that aws iot list-things command works without errors
  1. Connect the device to your computer with a micro-USB cable
  2. Follow installation instructions to install mos tool on your computer
  3. Follow the Quickstart guide and finish steps 1-7. That should leave you with the device connected to your WiFi network
  4. Run mos aws-iot-setup command to provision your device to AWS IoT
Troubleshooting: post on Mongoose OS forum or talk on Mongoose OS chat
In this tutorial we are going to write a button handler which publishes a message to AWS IoT MQTT service on a button press.
1. In the Web UI, click on "Device Files" tab. Click "Refresh File List" button. Click on init.js file to open it.
2. Copy/paste this code, click "Save + Reboot":
load('api_gpio.js');
load('api_mqtt.js');

let topic = 'mos/topic1';
let pin = 36;

GPIO.set_button_handler(pin, GPIO.PULL_UP, GPIO.INT_EDGE_NEG, 200, function() {
  let message = JSON.stringify({ foo: 'bar' });
  let ok = MQTT.pub(topic, message, 1);
  print('Published:', ok);
}, null);
3. Open AWS IoT console, click on "Test" link on the left hand side.
4. Subscribe to mos/topic1 topic.
5. Press BTN1 button couple of times, see messages appear on the AWS IoT console.
In this tutorial, we will use a timer to read measurements from the light sensor BH1730 and send those to the AWS IoT service every second.
1. Open init.js, copy/paste this code, click "Save + Reboot":
load('api_mqtt.js');
load('api_timer.js');
load('api_bh1730.js');

let topic = 'mos/topic1';
let bh1730 = BH1730.create(0x29);

Timer.set(1000, 1, function() {
  let message = JSON.stringify({ lux: bh1730.read_lux() });
  let ok = MQTT.pub(topic, message, 1);
  print('Published:', ok);
}, null);
2. Open AWS IoT console, see JSON messages with light sensor measurements appear.
In this tutorial, we add a second sensor to our existing code. The new sensor is the BME280 that reports temperature, humidity and pressure.
1. Open init.js, copy/paste this code, click "Save + Reboot": Open init.js, copy/paste this code, click "Save + Reboot":
load('api_mqtt.js');
load('api_timer.js');
load('api_bh1730.js');
load('api_arduino_bme280.js');

let topic = 'mos/topic1';
let bh1730 = BH1730.create(0x29);
let bme = Adafruit_BME280.create();
bme.begin(0x76);

Timer.set(1000, 1, function() {
  let message = JSON.stringify({
    lux: bh1730.read_lux(),
    temperature: bme.readTemperature(),
    humidity:    bme.readHumidity(),
    pressure:    bme.readPressure(),
  });
  let ok = MQTT.pub(topic, message, 1);
  print('Published:', ok, message);
}, null);
2. Open AWS IoT console, see JSON messages with sensor measurements appear.
In this tutorial, we will light up RGB LEDs remotely via AWS IoT. The device subscribes to an MQTT topic mos/topic1 and waits for MQTT messages with control commands. We are going to send those commands via the AWS IoT MQTT console.
1. Open init.js, copy/paste this code, click "Save + Reboot":
load('api_mqtt.js');
load('api_neopixel.js');

let topic = 'mos/topic1';
let strip = NeoPixel.create(23, 5, NeoPixel.GRB);

MQTT.sub(topic, function(conn, topic, msg) {
  print('Topic:', topic, 'message:', msg);
  let obj = JSON.parse(msg);
  strip.setPixel(obj.pixel, obj.r, obj.g, obj.b);
  strip.show();
}, null);
2. Open AWS IoT console, and publish this message to topic mos/topic1:
{
  "pixel": 0, "r": 40, "g": 120, "b": 220
}
3. See how LED lights up. Play with different values for pixel, red, green, blue.
Please follow instructions at IoT button App - AWS IoT, Lambda, SNS