# Domain App S3 Data Source Setup

## Objective:

This document will help you to create a JSON data source and upload it in Amazon S3. These documents will be used as data source for domain apps in iX Hello.

## Create an account in Amazon Web Services

1. Each user will need an account through Amazon Web Services. If already registered, please log in. If not a current user, register at “<https://console.aws.amazon.com/>”. User will be directed to the registration page as shown below, click **Create a new AWS account** and follow the steps to register.

<div align="center"><figure><img src="/files/Bax7Yo5UPPhhWI3Rolpw" alt=""><figcaption></figcaption></figure></div>

2. Once registered, login to the AWS-Management console “<https://console.aws.amazon.com/> using the credentials from Step 1.<br>

<div align="center"><figure><img src="/files/gFJ8diOeHuNTaPZCn6kD" alt=""><figcaption></figcaption></figure></div>

3. Sign in will direct users to the AWS Management Console.

![](/files/-MlOfrYphmgimsEppMMb)

### Create Policy&#x20;

1. After you log into to the console, type **IAM** in the search bar and click IAM in the search result.\ <br>

   <figure><img src="/files/sAbj11W2GkKQeIMLJPut" alt=""><figcaption></figcaption></figure>

2. On the left navigation, click **Policies**, and **Create policy** as shown in the screen below.<br>

<figure><img src="/files/mhOeoV7dHfOS7gbrXcEJ" alt=""><figcaption></figcaption></figure>

Click the **JSON** tab. Replace the contents with the following JSON content. Replace **INSERT\_BUCKET\_NAME** with the name of your bucket:

{\
&#x20;  "Version": "2025-03-24",\
&#x20;  "Statement": \[\
&#x20;  {\
&#x20;     "Effect": "Allow",\
&#x20;     "Action": \[\
&#x20;        "iam:ChangePassword"\
&#x20;     ],\
&#x20;     "Resource": \[\
&#x20;        "arn:aws:iam::\*:user/${aws:username}"\
&#x20;     ]\
&#x20;  },\
&#x20;  {\
&#x20;     "Effect": "Allow",\
&#x20;     "Action": \[\
&#x20;        "iam:GetAccountPasswordPolicy"\
&#x20;     ],\
&#x20;     "Resource": "\*"\
&#x20;   },\
&#x20;   {\
&#x20;      "Effect": "Allow",\
&#x20;      "Action": \[\
&#x20;         "logs:CreateLogGroup",\
&#x20;         "logs:CreateLogStream",\
&#x20;         "logs:PutLogEvents"\
&#x20;      ],\
&#x20;      "Resource": "\*"\
&#x20;   },\
&#x20;   {\
&#x20;      "Sid": "ConsoleAccess",\
&#x20;      "Effect": "Allow",\
&#x20;      "Action": \[\
&#x20;         "s3:GetAccountPublicAccessBlock",\
&#x20;         "s3:GetBucketAcl",\
&#x20;         "s3:GetBucketLocation",\
&#x20;         "s3:GetBucketPolicyStatus",\
&#x20;         "s3:GetBucketPublicAccessBlock",\
&#x20;         "s3:ListAllMyBuckets"\
&#x20;      ],\
&#x20;      "Resource": "\*"\
&#x20;   },\
&#x20;   {\
&#x20;      "Sid": "ListObjectsInBucket",\
&#x20;      "Effect": "Allow",\
&#x20;      "Action": "s3:ListBucket",\
&#x20;      "Resource": \[\
&#x20;         "arn:aws:s3:::**INSERT\_BUCKET\_NAME**"\
&#x20;      ]\
&#x20;   },\
&#x20;   {\
&#x20;      "Sid": "AllObjectActions",\
&#x20;      "Effect": "Allow",\
&#x20;      "Action": "s3:\*Object",\
&#x20;      "Resource": \[\
&#x20;         "arn:aws:s3:::**INSERT\_BUCKET\_NAME**/\*"\
&#x20;       ]\
&#x20;   },\
&#x20;   {\
&#x20;      "Sid": "Lambda",\
&#x20;      "Effect": "Allow",\
&#x20;      "Action": \[\
&#x20;         "lambda:ListFunctions",\
&#x20;         "lambda:InvokeFunction",\
&#x20;         "lambda:ListVersionsByFunction",\
&#x20;         "lambda:GetLayerVersion",\
&#x20;         "lambda:GetEventSourceMapping",\
&#x20;         "lambda:GetFunction",\
&#x20;         "lambda:ListAliases",\
&#x20;         "lambda:GetAccountSettings",\
&#x20;         "lambda:InvokeAsync",\
&#x20;         "lambda:GetFunctionConfiguration",\
&#x20;         "lambda:GetLayerVersionPolicy",\
&#x20;         "lambda:ListFunctionEventInvokeConfigs",\
&#x20;         "lambda:ListProvisionedConcurrencyConfigs",\
&#x20;         "lambda:GetProvisionedConcurrencyConfig",\
&#x20;         "lambda:GetFunctionConcurrency",\
&#x20;         "lambda:ListTags",\
&#x20;         "lambda:GetFunctionEventInvokeConfig",\
&#x20;         "lambda:ListEventSourceMappings",\
&#x20;         "lambda:ListLayerVersions",\
&#x20;         "lambda:ListLayers",\
&#x20;         "lambda:GetAlias",\
&#x20;         "lambda:GetPolicy"\
&#x20;      ],\
&#x20;      "Resource": "\*"\
&#x20;   }\
&#x20;   ]\
}

When finished, click **Review Policy**.

![](/files/-MlOfrYs-5EokZ3Hs9GU)

4. Provide Name, Description, and click **Create policy**.

<figure><img src="/files/iBd1Bo2i8pAjRNFXzVV2" alt=""><figcaption></figcaption></figure>

<figure><img src="/files/MpHDfmcLI8YJiscqQI81" alt=""><figcaption></figcaption></figure>

### Create IAM User

1. In AWS console, type IAM in the search bar and click on the IAM from the drop down.

![](/files/-MlOfrYvtTlyGjndlPu9)

2. On the left navigation, Click Users. Click button Add user as shown in the screen below.

![](/files/-MlOfrYwFUOwsrle_1IC)

3. Provide username, enable check box for Programmatic Access and AWS management Console Access. Click radio button for Autogenerate password and check User must create a new password at next sign in. Please refer the screen below.

![](/files/-MlOfrYxlq-dx6IW5qxH)

4. Click Next. And tags are optional; you can just click Next to get to the final screen to create user.

![](/files/-MlOfrYyjoSTLQHQWqpH)

Click button Create user.

![](/files/-MlOfrYz61i8842_hn4V)

6. Success screen will be displayed.
7. Click button Download .csv and share the file with us.

![](/files/-MlOfrZ-2a9CzimNrCs8)

8. Click **Services** on the top left corner and type S3 in the **All services** filter. Amazon S3 (Simple Storage Service) has a web service interface which can be used to **store and retrieve** any amount of data, at any time on the web.

![](/files/-MlOfrZ0ggIewCxtvzAn)

9. Create bucket in S3 by clicking “**Create Bucket**”.

* **Enter Bucket Name**: myawsbucket
* **Select Region**: US East
* **Click**: Create Bucket
* **Server-Side Encryption**: Choose to disable

![](/files/-MlOfrZ1I9DpNkKrzWS8)

![](/files/-MlOfrZ2LcZH71Ip-XR3)

![](/files/-MlOfrZ30lWvWKEnBfWq)

10. For the data source, get sample data from [here](https://demovideo.s3.amazonaws.com/Retail.json). You’ll get data like this, which you have to copy from the browser, paste it in a notepad and save it as a JSON file.

![](/files/-MlOfrZ4_NsC4Pf3RsPF)

11. Let’s put a name to the file as **Retail.json**.

![](/files/-MlOfrZ5xsNhvooQ4_Np)

12. Now, upload the file in the bucket. Click **Name** and click **Upload**.

![](/files/-MlOfrZ6ELtahbfFrC2Q)

![](/files/-MlOfrZ7UjtzMzWOlzj1)

13. Files or folders can either be added or uploaded. To upload file, click **Add Files** and select the **Retail.json** file (from earlier) from your PC.

![](/files/-MlOfrZ89QMYliXM8a4T)

![](/files/-MlOfrZ9stC6mJL_d7cK)

14. Select the file and click **Upload**.

![](/files/-MlOfrZAFz101qhkmEi5)

15. Your data source is now ready for use. You can perform retrieval operation on the JSON data source by using a managed connection from iX Hello.

![](/files/-MlOfrZBAUfCSdL3KGAv)

16. The name of the JSON file shall be used in iX Hello to perform a query against the data source. Below is an example of a valid data sample on the JSON data source file. If you could not get the data sample from Step 8, you can use the following data and continue.

{\
&#x20;  "customerAccountDetails": \[\
&#x20;  {\
&#x20;     "id": "4DABC534-7744-4987-988A-5E0C4CF6762D",\
&#x20;     "customerId": 512312,\
&#x20;     "accountNo": 12589,\
&#x20;     "registrationDate": "11-01-2020",\
&#x20;     "expiryDate": "10-31-2027",\
&#x20;     "accountBalance": 15000,\
&#x20;     "accountDue": 70,\
&#x20;     "isDueCleared": false,\
&#x20;     "customerCode": 1001,\
&#x20;     "email": "<johndoe@company.com>",\
&#x20;     "fullName": "John Doe",\
&#x20;     "address": "Bryant, AR",\
&#x20;     "dob": "03-16-1975",\
&#x20;     "idNumber": 53698,\
&#x20;     "SSN": "173213211",\
&#x20;     "zipcode": "72022"\
&#x20;   }\
&#x20;   ],\
&#x20;   "customerOrders": \[\
&#x20;   {\
&#x20;      "id": "29A8BB59-82A1-45E6-A5DB-044CF987D659",\
&#x20;      "customerId": 512312,\
&#x20;      "orderNo": 10012,\
&#x20;      "grossTotal": 120,\
&#x20;      "discount": 5,\
&#x20;      "tax": 5,\
&#x20;      "netTotal": 120,\
&#x20;      "orderDate": "11-01-2020",\
&#x20;      "orderStatus": "Dispatched",\
&#x20;      "products": "LV Bag, Nike runner pro",\
&#x20;      "expectedDeliveryDate": "11-20-2020"\
&#x20;   },\
&#x20;   {\
&#x20;      "id": "C270A981-BEF8-44F3-B71C-C923052BA64E",\
&#x20;      "customerId": 512312,\
&#x20;      "orderNo": 10014,\
&#x20;      "grossTotal": 600,\
&#x20;      "discount": 100,\
&#x20;      "tax": 100,\
&#x20;      "netTotal": 600,\
&#x20;      "orderDate": "11-01-2020",\
&#x20;      "orderStatus": "Dispatched",\
&#x20;      "products": "iPhone, Apple Watch"\
&#x20;   }\
&#x20;   ],\
&#x20;   "productCatalog": \[\
&#x20;   {\
&#x20;      "id": "03A60A7C-4488-41FD-B174-CC8C0A71223A",\
&#x20;      "productSKU": 612312,\
&#x20;      "productName": "apple watch",\
&#x20;      "discount": 5,\
&#x20;      "tax": 5,\
&#x20;      "price": 350,\
&#x20;      "restockAmount":120\
&#x20;   },\
&#x20;   {\
&#x20;      "id": "03A60A7C-4488-41FD-B174-CC8C0A71223A",\
&#x20;      "productSKU": 612312,\
&#x20;      "productName": "Apple Watch",\
&#x20;      "discount": 5,\
&#x20;      "tax": 5,\
&#x20;      "price": 350,\
&#x20;      "restockAmount":120\
&#x20;   },\
&#x20;   {\
&#x20;      "id": "03A60A7C-4488-41FD-B174-CC8C0A71223A",\
&#x20;      "productSKU": 612312,\
&#x20;      "productName": "Apple watch",\
&#x20;      "discount": 5,\
&#x20;      "tax": 5,\
&#x20;      "price": 350,\
&#x20;      "restockAmount":120\
&#x20;   },\
&#x20;   {\
&#x20;      "id": "03A60A7C-4488-41FD-B174-CC8C0A71223A",\
&#x20;      "productSKU": 612312,\
&#x20;      "productName": "apple Watch",\
&#x20;      "discount": 5,\
&#x20;      "tax": 5,\
&#x20;      "price": 350,\
&#x20;      "restockAmount":120\
&#x20;   },\
&#x20;   {\
&#x20;      "id": "830F1850-6C18-4EF1-A704-A8FA884FAB61",\
&#x20;      "productSKU": 612313,\
&#x20;      "productName": "iPhone",\
&#x20;      "discount": 5,\
&#x20;      "tax": 5,\
&#x20;      "price": 900,\
&#x20;      "restockAmount":120\
&#x20;   }\
&#x20;   ],\
&#x20;   "retailLocations": \[\
&#x20;   {\
&#x20;      "id": "29A8BB59-82A1-45E6-A5DB-044CF987D651",\
&#x20;      "locationId": "DD6B6FA0-DD14-4547-8554-5E562365444E",\
&#x20;      "storeName": "Fairfield Discount Store",\
&#x20;      "Street": "123 Main Street",\
&#x20;      "City": "Fairfield",\
&#x20;      "State": "GA",\
&#x20;      "zip": 30339\
&#x20;   },\
&#x20;   {\
&#x20;      "id": "C270A981-BEF8-44F3-B71C-C923052BA64E",\
&#x20;      "locationId": "DD6B6FA0-DD14-4547-8554-5E562365555F",\
&#x20;      "storeName": "Maryland Discount Store",\
&#x20;      "Street": "192 Maryland Avenue",\
&#x20;      "City": "Chicago",\
&#x20;      "State": "IL",\
&#x20;      "zip": 30338\
&#x20;   }\
&#x20;   ]\
}

Congratulations!

You have successfully completed Domain App S3 Data Source Setup.


---

# Agent Instructions: Querying This Documentation

If you need additional information that is not directly available in this page, you can query the documentation dynamically by asking a question.

Perform an HTTP GET request on the current page URL with the `ask` query parameter:

```
GET https://docs.ixhello.com/ixhc/blueprints/domain-app-s3-data-source-setup.md?ask=<question>
```

The question should be specific, self-contained, and written in natural language.
The response will contain a direct answer to the question and relevant excerpts and sources from the documentation.

Use this mechanism when the answer is not explicitly present in the current page, you need clarification or additional context, or you want to retrieve related documentation sections.
