diff --git a/supporting-video-content/create_an_elastic_serverless_project_programmatically/Create_an_Elastic_Serverless_Search_Project_Programmatically.ipynb b/supporting-video-content/create_an_elastic_serverless_project_programmatically/Create_an_Elastic_Serverless_Search_Project_Programmatically.ipynb
index b2a2276e..ebac0e52 100644
--- a/supporting-video-content/create_an_elastic_serverless_project_programmatically/Create_an_Elastic_Serverless_Search_Project_Programmatically.ipynb
+++ b/supporting-video-content/create_an_elastic_serverless_project_programmatically/Create_an_Elastic_Serverless_Search_Project_Programmatically.ipynb
@@ -1,343 +1,346 @@
{
- "nbformat": 4,
- "nbformat_minor": 0,
- "metadata": {
- "colab": {
- "provenance": []
- },
- "kernelspec": {
- "name": "python3",
- "display_name": "Python 3"
- },
- "language_info": {
- "name": "python"
- }
- },
- "cells": [
- {
- "cell_type": "markdown",
- "source": [
- "# Create an Elastic Serverless Search Project Programmatically\n",
- "\n",
- "\n",
- "## This notebook will show you how to:\n",
- " - Create an Elastics Serverless Project\n",
- "\n",
- "[Serverless API Docs](https://www.elastic.co/docs/api/doc/elastic-cloud-serverless/operation/operation-createelasticsearchproject#operation-createelasticsearchproject-body-application-json-optimized_for)\n",
- "\n",
- "This tutorial assumes you have an Elastic Cloud account.
\n",
- "If not head over to [cloud.elastic.co/trial](https://cloud.elastic.co/trial)"
- ],
- "metadata": {
- "id": "_ebYbHHh_0hI"
- }
- },
- {
- "cell_type": "markdown",
- "source": [
- "# Notebook Setup\n",
- "- Install elasticsearch python library\n",
- "- import required libraries"
- ],
- "metadata": {
- "id": "JBHESuD7PJ54"
- }
- },
- {
- "cell_type": "code",
- "source": [
- "!pip install -qq elasticsearch"
- ],
- "metadata": {
- "id": "_DmXlQWsGNeM",
+ "nbformat": 4,
+ "nbformat_minor": 0,
+ "metadata": {
"colab": {
- "base_uri": "https://localhost:8080/"
+ "provenance": []
},
- "outputId": "6c04a6f7-a4e7-4e96-faaf-04d9bf2e9af7"
- },
- "execution_count": null,
- "outputs": [
- {
- "output_type": "stream",
- "name": "stdout",
- "text": [
- "\u001b[?25l \u001b[90m━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━\u001b[0m \u001b[32m0.0/960.5 kB\u001b[0m \u001b[31m?\u001b[0m eta \u001b[36m-:--:--\u001b[0m\r\u001b[2K \u001b[91m━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━\u001b[0m\u001b[91m╸\u001b[0m \u001b[32m952.3/960.5 kB\u001b[0m \u001b[31m28.8 MB/s\u001b[0m eta \u001b[36m0:00:01\u001b[0m\r\u001b[2K \u001b[90m━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━\u001b[0m \u001b[32m960.5/960.5 kB\u001b[0m \u001b[31m17.5 MB/s\u001b[0m eta \u001b[36m0:00:00\u001b[0m\n",
- "\u001b[?25h\u001b[?25l \u001b[90m━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━\u001b[0m \u001b[32m0.0/65.3 kB\u001b[0m \u001b[31m?\u001b[0m eta \u001b[36m-:--:--\u001b[0m\r\u001b[2K \u001b[90m━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━\u001b[0m \u001b[32m65.3/65.3 kB\u001b[0m \u001b[31m4.6 MB/s\u001b[0m eta \u001b[36m0:00:00\u001b[0m\n",
- "\u001b[?25h"
- ]
+ "kernelspec": {
+ "name": "python3",
+ "display_name": "Python 3"
+ },
+ "language_info": {
+ "name": "python"
}
- ]
- },
- {
- "cell_type": "code",
- "source": [
- "import requests\n",
- "import getpass\n",
- "from pprint import pprint\n",
- "from elasticsearch import Elasticsearch\n",
- "from elasticsearch.exceptions import ConnectionTimeout\n",
- "from IPython.display import clear_output\n",
- "from time import sleep"
- ],
- "metadata": {
- "id": "cuomUVE-zYjB"
- },
- "execution_count": null,
- "outputs": []
},
- {
- "cell_type": "markdown",
- "source": [
- "# Setup Your Cloud API Key\n",
- "\n",
- "1. Generate your secret API key at https://cloud.elastic.co/account/keys\n",
- "2. Run the next cell to store your API Key"
- ],
- "metadata": {
- "id": "yWSg_D91x9mF"
- }
- },
- {
- "cell_type": "code",
- "source": [
- "api_key = getpass.getpass(\"Enter your API key: \")\n",
- "\n",
- "print(\"API key successfully entered!\")"
- ],
- "metadata": {
- "colab": {
- "base_uri": "https://localhost:8080/"
+ "cells": [
+ {
+ "cell_type": "markdown",
+ "source": [
+ "# Create an Elastic Serverless Search Project Programmatically\n",
+ "\n",
+ "\n",
+ "## This notebook will show you how to:\n",
+ " - Create an Elastics Serverless Project\n",
+ "\n",
+ "[Serverless API Docs](https://www.elastic.co/docs/api/doc/elastic-cloud-serverless/operation/operation-createelasticsearchproject#operation-createelasticsearchproject-body-application-json-optimized_for)\n",
+ "\n",
+ "This tutorial assumes you have an Elastic Cloud account.
\n",
+ "If not head over to [cloud.elastic.co/trial](https://cloud.elastic.co/trial)"
+ ],
+ "metadata": {
+ "id": "_ebYbHHh_0hI"
+ }
},
- "id": "bidHlfsy2OPf",
- "outputId": "33eceaab-1963-4c36-992a-ed96cd98904a"
- },
- "execution_count": null,
- "outputs": [
{
- "output_type": "stream",
- "name": "stdout",
- "text": [
- "Enter your API key: ··········\n",
- "API key successfully entered!\n"
- ]
- }
- ]
- },
- {
- "cell_type": "markdown",
- "source": [
- "## Create Elasticsearch project\n"
- ],
- "metadata": {
- "id": "mt4_kL0b0E75"
- }
- },
- {
- "cell_type": "markdown",
- "source": [
- "Configure:\n",
- "- name of project - `name`\n",
- "- cloud region - `region_id`\n",
- "- headers\n",
- "\n",
- "Then create the project!"
- ],
- "metadata": {
- "id": "ZcQ2AgeNQHOA"
- }
- },
- {
- "cell_type": "code",
- "source": [
- "url = \"https://api.elastic-cloud.com/api/v1/serverless/projects/elasticsearch\"\n",
- "\n",
- "project_data = {\"name\": \"Serverless Search Project\", \"region_id\": \"aws-us-east-1\"}\n",
- "\n",
- "auth_header = f\"ApiKey {api_key}\"\n",
- "headers = {\"Content-Type\": \"application/json\", \"Authorization\": auth_header}\n",
- "\n",
- "es_project = requests.post(url, json=project_data, headers=headers)"
- ],
- "metadata": {
- "id": "lVkyA7KUyDEO"
- },
- "execution_count": null,
- "outputs": []
- },
- {
- "cell_type": "markdown",
- "source": [
- "Serverless projects generally start pretty quickly
We'll loop and wait for the project to be configured and ready to use"
- ],
- "metadata": {
- "id": "3oFstW-wQVWl"
- }
- },
- {
- "cell_type": "code",
- "source": [
- "if 200 <= es_project.status_code < 300:\n",
- " es_project_keys = es_project.json()\n",
- " prg_name = es_project_keys[\"name\"]\n",
- " print(f\"Project {prg_name} creation started\")\n",
- "\n",
- " # wait for the project to be initialized and ready\n",
- " project_id = es_project.json()[\"id\"]\n",
- " print(\"Checking if project is created and ready\")\n",
- " loop = 1\n",
- " while True:\n",
- " es_project_check = requests.get(url + f\"/{project_id}/status\", headers=headers)\n",
- " if es_project_check.json()[\"phase\"] == \"initialized\":\n",
- " break\n",
- " else:\n",
- " clear_output(wait=True)\n",
- " print(\n",
- " f\"Waiting for project to be ready. Current status:{es_project_check.json()['phase']} - Loop {loop} Sleeping 10 seconds\"\n",
- " )\n",
- " sleep(10)\n",
- " loop += 1\n",
- "\n",
- " print(\"Project is ready\")\n",
- "\n",
- "else:\n",
- " print(es_project.text)"
- ],
- "metadata": {
- "colab": {
- "base_uri": "https://localhost:8080/"
+ "cell_type": "markdown",
+ "source": [
+ "# Notebook Setup\n",
+ "- Install elasticsearch python library\n",
+ "- import required libraries"
+ ],
+ "metadata": {
+ "id": "JBHESuD7PJ54"
+ }
},
- "id": "jlOjE8l5QU91",
- "outputId": "b7ecd36e-62df-4d29-e75f-121aa37e2d76"
- },
- "execution_count": null,
- "outputs": [
{
- "output_type": "stream",
- "name": "stdout",
- "text": [
- "Waiting for project to be ready. Current status:initializing - Loop 16 Sleeping 10 seconds\n",
- "Project is ready\n"
- ]
- }
- ]
- },
- {
- "cell_type": "markdown",
- "source": [
- "# Retrieve Serverless Project Connection Information"
- ],
- "metadata": {
- "id": "RogmJvonQnRu"
- }
- },
- {
- "cell_type": "markdown",
- "source": [
- "## Create elasticsearch client\n",
- "\n",
- "We set the connection information from the `es_project` response above."
- ],
- "metadata": {
- "id": "Uh0JpsnONMhv"
- }
- },
- {
- "cell_type": "code",
- "source": [
- "es = Elasticsearch(\n",
- " es_project_keys[\"endpoints\"][\"elasticsearch\"],\n",
- " basic_auth=(\n",
- " es_project_keys[\"credentials\"][\"username\"],\n",
- " es_project_keys[\"credentials\"][\"password\"],\n",
- " ),\n",
- ")"
- ],
- "metadata": {
- "id": "KG01YrIwMdHz"
- },
- "execution_count": null,
- "outputs": []
- },
- {
- "cell_type": "markdown",
- "source": [
- "## Project API Key\n",
- "Create a [Project level API key](https://www.elastic.co/guide/en/elasticsearch/reference/current/security-api-create-api-key.html)"
- ],
- "metadata": {
- "id": "Xhu2U-YszbDe"
- }
- },
- {
- "cell_type": "code",
- "source": [
- "project_key_response = es.security.create_api_key(\n",
- " name=\"full_access_key\",\n",
- " metadata={\"description\": \"API key for full access\"},\n",
- " expiration=\"14d\",\n",
- ")\n",
- "\n",
- "project_api_key = project_key_response[\"encoded\"]\n",
- "print(f\"{project_key_response['name']} has been created\")"
- ],
- "metadata": {
- "colab": {
- "base_uri": "https://localhost:8080/"
+ "cell_type": "code",
+ "source": [
+ "!pip install -qq elasticsearch"
+ ],
+ "metadata": {
+ "id": "_DmXlQWsGNeM",
+ "colab": {
+ "base_uri": "https://localhost:8080/"
+ },
+ "outputId": "6c04a6f7-a4e7-4e96-faaf-04d9bf2e9af7"
+ },
+ "execution_count": null,
+ "outputs": [
+ {
+ "output_type": "stream",
+ "name": "stdout",
+ "text": [
+ "\u001b[?25l \u001b[90m━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━\u001b[0m \u001b[32m0.0/960.5 kB\u001b[0m \u001b[31m?\u001b[0m eta \u001b[36m-:--:--\u001b[0m\r\u001b[2K \u001b[91m━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━\u001b[0m\u001b[91m╸\u001b[0m \u001b[32m952.3/960.5 kB\u001b[0m \u001b[31m28.8 MB/s\u001b[0m eta \u001b[36m0:00:01\u001b[0m\r\u001b[2K \u001b[90m━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━\u001b[0m \u001b[32m960.5/960.5 kB\u001b[0m \u001b[31m17.5 MB/s\u001b[0m eta \u001b[36m0:00:00\u001b[0m\n",
+ "\u001b[?25h\u001b[?25l \u001b[90m━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━\u001b[0m \u001b[32m0.0/65.3 kB\u001b[0m \u001b[31m?\u001b[0m eta \u001b[36m-:--:--\u001b[0m\r\u001b[2K \u001b[90m━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━\u001b[0m \u001b[32m65.3/65.3 kB\u001b[0m \u001b[31m4.6 MB/s\u001b[0m eta \u001b[36m0:00:00\u001b[0m\n",
+ "\u001b[?25h"
+ ]
+ }
+ ]
+ },
+ {
+ "cell_type": "code",
+ "source": [
+ "import requests\n",
+ "import getpass\n",
+ "from pprint import pprint\n",
+ "from elasticsearch import Elasticsearch\n",
+ "from elasticsearch.exceptions import ConnectionTimeout\n",
+ "from IPython.display import clear_output\n",
+ "from time import sleep"
+ ],
+ "metadata": {
+ "id": "cuomUVE-zYjB"
+ },
+ "execution_count": null,
+ "outputs": []
+ },
+ {
+ "cell_type": "markdown",
+ "source": [
+ "# Setup Your Cloud API Key\n",
+ "\n",
+ "1. Generate your secret API key at https://cloud.elastic.co/account/keys\n",
+ "2. Run the next cell to store your API Key"
+ ],
+ "metadata": {
+ "id": "yWSg_D91x9mF"
+ }
+ },
+ {
+ "cell_type": "code",
+ "source": [
+ "api_key = getpass.getpass(\"Enter your API key: \")\n",
+ "\n",
+ "print(\"API key successfully entered!\")"
+ ],
+ "metadata": {
+ "colab": {
+ "base_uri": "https://localhost:8080/"
+ },
+ "id": "bidHlfsy2OPf",
+ "outputId": "33eceaab-1963-4c36-992a-ed96cd98904a"
+ },
+ "execution_count": null,
+ "outputs": [
+ {
+ "output_type": "stream",
+ "name": "stdout",
+ "text": [
+ "Enter your API key: ··········\n",
+ "API key successfully entered!\n"
+ ]
+ }
+ ]
+ },
+ {
+ "cell_type": "markdown",
+ "source": [
+ "## Create Elasticsearch project\n"
+ ],
+ "metadata": {
+ "id": "mt4_kL0b0E75"
+ }
+ },
+ {
+ "cell_type": "markdown",
+ "source": [
+ "Configure:\n",
+ "- name of project - `name`\n",
+ "- cloud region - `region_id`\n",
+ "- headers\n",
+ "\n",
+ "Then create the project!"
+ ],
+ "metadata": {
+ "id": "ZcQ2AgeNQHOA"
+ }
},
- "id": "Puj1UWIKVtSv",
- "outputId": "b195543a-2206-4a20-8d10-b80030d276de"
- },
- "execution_count": null,
- "outputs": [
{
- "output_type": "stream",
- "name": "stdout",
- "text": [
- "full_access_key has been created\n"
- ]
+ "cell_type": "code",
+ "source": [
+ "url = \"https://api.elastic-cloud.com/api/v1/serverless/projects/elasticsearch\"\n",
+ "\n",
+ "project_data = {\n",
+ " \"name\": \"Serverless Search Project\",\n",
+ " \"region_id\": \"aws-us-east-1\"\n",
+ "}\n",
+ "\n",
+ "auth_header = f\"ApiKey {api_key}\"\n",
+ "headers = {\n",
+ " \"Content-Type\": \"application/json\",\n",
+ " \"Authorization\": auth_header\n",
+ " }\n",
+ "\n",
+ "es_project = requests.post(url, json=project_data, headers=headers)"
+ ],
+ "metadata": {
+ "id": "lVkyA7KUyDEO"
+ },
+ "execution_count": null,
+ "outputs": []
+ },
+ {
+ "cell_type": "markdown",
+ "source": [
+ "Serverless projects generally start pretty quickly
We'll loop and wait for the project to be configured and ready to use"
+ ],
+ "metadata": {
+ "id": "3oFstW-wQVWl"
+ }
+ },
+ {
+ "cell_type": "code",
+ "source": [
+ "if 200 <= es_project.status_code < 300:\n",
+ " es_project_keys = es_project.json()\n",
+ " prg_name = es_project_keys[\"name\"]\n",
+ " print(f\"Project {prg_name} creation started\")\n",
+ "\n",
+ " # wait for the project to be initialized and ready\n",
+ " project_id = es_project.json()[\"id\"]\n",
+ " print(\"Checking if project is created and ready\")\n",
+ " loop = 1\n",
+ " while True:\n",
+ " es_project_check = requests.get(url + f\"/{project_id}/status\", headers=headers)\n",
+ " if es_project_check.json()[\"phase\"] == \"initialized\":\n",
+ " break\n",
+ " else:\n",
+ " clear_output(wait=True)\n",
+ " print(\n",
+ " f\"Waiting for project to be ready. Current status:{es_project_check.json()['phase']} - Loop {loop} Sleeping 10 seconds\"\n",
+ " )\n",
+ " sleep(10)\n",
+ " loop += 1\n",
+ "\n",
+ " print(\"Project is ready\")\n",
+ "\n",
+ "else:\n",
+ " print(es_project.text)\n"
+ ],
+ "metadata": {
+ "colab": {
+ "base_uri": "https://localhost:8080/"
+ },
+ "id": "jlOjE8l5QU91",
+ "outputId": "b7ecd36e-62df-4d29-e75f-121aa37e2d76"
+ },
+ "execution_count": null,
+ "outputs": [
+ {
+ "output_type": "stream",
+ "name": "stdout",
+ "text": [
+ "Waiting for project to be ready. Current status:initializing - Loop 16 Sleeping 10 seconds\n",
+ "Project is ready\n"
+ ]
+ }
+ ]
+ },
+ {
+ "cell_type": "markdown",
+ "source": [
+ "# Retrieve Serverless Project Connection Information"
+ ],
+ "metadata": {
+ "id": "RogmJvonQnRu"
+ }
+ },
+ {
+ "cell_type": "markdown",
+ "source": [
+ "## Create elasticsearch client\n",
+ "\n",
+ "We set the connection information from the `es_project` response above."
+ ],
+ "metadata": {
+ "id": "Uh0JpsnONMhv"
+ }
+ },
+ {
+ "cell_type": "code",
+ "source": [
+ "es = Elasticsearch(\n",
+ " es_project_keys[\"endpoints\"][\"elasticsearch\"],\n",
+ " basic_auth=(\n",
+ " es_project_keys[\"credentials\"][\"username\"],\n",
+ " es_project_keys[\"credentials\"][\"password\"],\n",
+ " ),\n",
+ ")"
+ ],
+ "metadata": {
+ "id": "KG01YrIwMdHz"
+ },
+ "execution_count": null,
+ "outputs": []
+ },
+ {
+ "cell_type": "markdown",
+ "source": [
+ "## Project API Key\n",
+ "Create a [Project level API key](https://www.elastic.co/guide/en/elasticsearch/reference/current/security-api-create-api-key.html)"
+ ],
+ "metadata": {
+ "id": "Xhu2U-YszbDe"
+ }
+ },
+ {
+ "cell_type": "code",
+ "source": [
+ "project_key_response = es.security.create_api_key(\n",
+ " name=\"full_access_key\",\n",
+ " metadata={\"description\": \"API key for full access\"},\n",
+ " expiration=\"14d\",\n",
+ ")\n",
+ "\n",
+ "project_api_key = project_key_response[\"encoded\"]\n",
+ "print(f\"{project_key_response['name']} has been created\")"
+ ],
+ "metadata": {
+ "colab": {
+ "base_uri": "https://localhost:8080/"
+ },
+ "id": "Puj1UWIKVtSv",
+ "outputId": "b195543a-2206-4a20-8d10-b80030d276de"
+ },
+ "execution_count": null,
+ "outputs": [
+ {
+ "output_type": "stream",
+ "name": "stdout",
+ "text": [
+ "full_access_key has been created\n"
+ ]
+ }
+ ]
+ },
+ {
+ "cell_type": "markdown",
+ "source": [
+ "# Summary"
+ ],
+ "metadata": {
+ "id": "EnKDbhz6RIYx"
+ }
+ },
+ {
+ "cell_type": "code",
+ "source": [
+ "print(\"\\n--- Project Summary ---\")\n",
+ "print(f\"Project Name: {es_project_keys['name']}\")\n",
+ "print(f\"Elasticsearch Endpoint: {es_project_keys['endpoints']['elasticsearch']}\")\n",
+ "if 'kibana' in es_project_keys['endpoints']:\n",
+ " print(f\"Kibana Endpoint: {es_project_keys['endpoints']['kibana']}\")\n",
+ "else:\n",
+ " print(\"Kibana Endpoint: Not available (Kibana may not be part of the serverless project)\")\n",
+ "\n",
+ "\n",
+ "print(\"\\n--- API Key ---\")\n",
+ "print(f\"API key stored in variable: project_api_key\")\n",
+ "\n",
+ "show_api_key = input(\"Do you want to print the API key in clear text? (yes/no): \").lower()\n",
+ "\n",
+ "if show_api_key == 'yes':\n",
+ " print(f\"Project API Key: {project_api_key}\")\n",
+ "else:\n",
+ " print(\"API key not printed in clear text as requested. Stored in `project_api_key`\")\n"
+ ],
+ "metadata": {
+ "id": "ACDRmumLRGd_"
+ },
+ "execution_count": null,
+ "outputs": []
}
- ]
- },
- {
- "cell_type": "markdown",
- "source": [
- "# Summary"
- ],
- "metadata": {
- "id": "EnKDbhz6RIYx"
- }
- },
- {
- "cell_type": "code",
- "source": [
- "print(\"\\n--- Project Summary ---\")\n",
- "print(f\"Project Name: {es_project_keys['name']}\")\n",
- "print(f\"Elasticsearch Endpoint: {es_project_keys['endpoints']['elasticsearch']}\")\n",
- "if \"kibana\" in es_project_keys[\"endpoints\"]:\n",
- " print(f\"Kibana Endpoint: {es_project_keys['endpoints']['kibana']}\")\n",
- "else:\n",
- " print(\n",
- " \"Kibana Endpoint: Not available (Kibana may not be part of the serverless project)\"\n",
- " )\n",
- "\n",
- "\n",
- "print(\"\\n--- API Key ---\")\n",
- "print(f\"API key stored in variable: project_api_key\")\n",
- "\n",
- "show_api_key = input(\n",
- " \"Do you want to print the API key in clear text? (yes/no): \"\n",
- ").lower()\n",
- "\n",
- "if show_api_key == \"yes\":\n",
- " print(f\"Project API Key: {project_api_key}\")\n",
- "else:\n",
- " print(\"API key not printed in clear text as requested. Stored in `project_api_key`\")"
- ],
- "metadata": {
- "id": "ACDRmumLRGd_"
- },
- "execution_count": null,
- "outputs": []
- }
- ]
+ ]
}
+