{"id":50721725,"url":"https://github.com/cloudsteak/trn-aws-workshop","last_synced_at":"2026-06-10T00:30:52.155Z","repository":{"id":338729919,"uuid":"1157781591","full_name":"cloudsteak/trn-aws-workshop","owner":"cloudsteak","description":"AWS Tips of the Day - 1 napos Workshop","archived":false,"fork":false,"pushed_at":"2026-02-25T04:15:17.000Z","size":214,"stargazers_count":0,"open_issues_count":0,"forks_count":0,"subscribers_count":0,"default_branch":"main","last_synced_at":"2026-02-25T09:57:11.414Z","etag":null,"topics":[],"latest_commit_sha":null,"homepage":null,"language":"CSS","has_issues":true,"has_wiki":null,"has_pages":null,"mirror_url":null,"source_name":null,"license":"mit","status":null,"scm":"git","pull_requests_enabled":true,"icon_url":"https://github.com/cloudsteak.png","metadata":{"files":{"readme":"README.md","changelog":null,"contributing":null,"funding":null,"license":"LICENSE","code_of_conduct":null,"threat_model":null,"audit":null,"citation":null,"codeowners":null,"security":null,"support":null,"governance":null,"roadmap":null,"authors":null,"dei":null,"publiccode":null,"codemeta":null,"zenodo":null,"notice":null,"maintainers":null,"copyright":null,"agents":null,"dco":null,"cla":null}},"created_at":"2026-02-14T09:35:21.000Z","updated_at":"2026-02-25T04:15:20.000Z","dependencies_parsed_at":null,"dependency_job_id":null,"html_url":"https://github.com/cloudsteak/trn-aws-workshop","commit_stats":null,"previous_names":["cloudsteak/trn-aws-workshop"],"tags_count":0,"template":false,"template_full_name":null,"purl":"pkg:github/cloudsteak/trn-aws-workshop","repository_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/cloudsteak%2Ftrn-aws-workshop","tags_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/cloudsteak%2Ftrn-aws-workshop/tags","releases_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/cloudsteak%2Ftrn-aws-workshop/releases","manifests_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/cloudsteak%2Ftrn-aws-workshop/manifests","owner_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/owners/cloudsteak","download_url":"https://codeload.github.com/cloudsteak/trn-aws-workshop/tar.gz/refs/heads/main","sbom_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/cloudsteak%2Ftrn-aws-workshop/sbom","scorecard":null,"host":{"name":"GitHub","url":"https://github.com","kind":"github","repositories_count":286080680,"owners_count":34132030,"icon_url":"https://github.com/github.png","version":null,"created_at":"2022-05-30T11:31:42.601Z","updated_at":"2026-05-26T15:22:16.424Z","status":"online","status_checked_at":"2026-06-09T02:00:06.510Z","response_time":63,"last_error":null,"robots_txt_status":"success","robots_txt_updated_at":"2025-07-24T06:49:26.215Z","robots_txt_url":"https://github.com/robots.txt","online":true,"can_crawl_api":true,"host_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub","repositories_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories","repository_names_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repository_names","owners_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/owners"}},"keywords":[],"created_at":"2026-06-10T00:30:51.062Z","updated_at":"2026-06-10T00:30:52.138Z","avatar_url":"https://github.com/cloudsteak.png","language":"CSS","funding_links":[],"categories":[],"sub_categories":[],"readme":"# ☁️ AWS Képzés – Cloud Idézetek + AI Chatbot\n\nEgy napos, gyakorlati AWS képzés. A nap végére egy **működő webalkalmazást** hozunk létre,\nami idézeteket jelenít meg adatbázisból és egy AI chatbotot is tartalmaz.\n\n---\n\n## 🏗️ Architektúra\n\n```mermaid\ngraph TD\n    Browser[\"Böngésző\"]\n    EC2[\"Frontend:\u003cbr/\u003eEC2 + Apache\"]\n    APIGW[\"API Gateway\"]\n    LambdaQ[\"Backend:\u003cbr/\u003eLambda quotes\"]\n    LambdaC[\"Backend:\u003cbr/\u003eLambda chat\"]\n    RDS[\"Database:\u003cbr/\u003eRDS MySQL\"]\n    Bedrock[\"AI:\u003cbr/\u003eBedrock Claude AI\"]\n\n    Browser --\u003e EC2\n    EC2 --\u003e APIGW\n    APIGW --\u003e LambdaQ\n    APIGW --\u003e LambdaC\n    LambdaQ --\u003e RDS\n    LambdaC --\u003e Bedrock\n\n    style Browser fill:#1e293b,stroke:#94a3b8,color:#f1f5f9\n    style EC2 fill:#1e3a5f,stroke:#38bdf8,color:#f1f5f9\n    style APIGW fill:#2d1b4e,stroke:#a78bfa,color:#f1f5f9\n    style LambdaQ fill:#1a3636,stroke:#4ade80,color:#f1f5f9\n    style LambdaC fill:#1a3636,stroke:#4ade80,color:#f1f5f9\n    style RDS fill:#3b1f1f,stroke:#f97316,color:#f1f5f9\n    style Bedrock fill:#3b1f3b,stroke:#f093fb,color:#f1f5f9\n```\n\n| Réteg     | AWS szolgáltatás    | Mappa                       |\n| --------- | ------------------- | --------------------------- |\n| Frontend  | EC2 + Apache        | `01-Webapp/`                |\n| Backend   | Lambda (Python) × 2 | `02-Lambda/`                |\n| Adatbázis | RDS MySQL           | `03-Database/`              |\n| API       | API Gateway         | _(konzolban konfiguráljuk)_ |\n| AI        | Amazon Bedrock      | _(konzolban konfiguráljuk)_ |\n\n---\n\n## 📁 Projekt struktúra\n\n```\n.\n├── 01-Webapp/\n│   ├── index.html\n│   ├── css/\n│   │   └── style.css\n│   └── js/\n│       ├── config.js          ← ⚠️ API URL beállítás\n│       └── app.js\n├── 02-Lambda/\n│   ├── quotes/\n│   │   └── lambda_handler.py  ← Idézetek API\n│   └── chat/\n│       └── lambda_handler.py  ← AI Chatbot\n├── 03-Database/\n│   └── init.sql               ← Tábla + idézetek\n├── LICENSE\n└── README.md                  ← Ez a fájl\n```\n\n---\n\n## 🎯 Haladási terv\n\n| #   | Lépés                             | Működik utána?              |\n| --- | --------------------------------- | --------------------------- |\n| 1   | EC2 + Apache + frontend feltöltés | ❌ (nincs backend)          |\n| 2   | Lambda function-ök létrehozása    | ❌ (nincs API GW, nincs DB) |\n| 3   | API Gateway + config.js frissítés | ❌ (nincs DB)               |\n| 4   | RDS MySQL + Lambda env vars       | ✅ Idézetek működnek!       |\n| 5   | Bedrock model access + IAM        | ✅ AI chatbot is működik!   |\n\n---\n\n## Előfeltételek\n\n- AWS account (free tier elég)\n- Régió: **eu-central-1** (Frankfurt)\n- **DBeaver Community** (adatbázis kezeléshez) – https://dbeaver.io/download/\n\n---\n\n## 1. lépés – EC2 + Apache (frontend)\n\n\u003e 📂 Fájlok: `01-Webapp/`\n\n### 1.1 EC2 instance indítása\n\nAWS Console → **EC2** → **Launch instance**\n\n| Beállítás                    | Érték                                 |\n| ---------------------------- | ------------------------------------- |\n| Name                         | `webapp-frontend`                     |\n| AMI                          | **Amazon Linux 2023** (free tier)     |\n| Instance type                | **t3.micro** (free tier)              |\n| Key pair                     | Create new → `webapp-key` → Download! |\n| Security group               | Create new                            |\n| → SSH (22)                   | My IP (legbiztonságosabb)             |\n| → HTTP (80)                  | **Anywhere** (0.0.0.0/0)              |\n| Advanced details → User data | (lásd: 1.3 Apache telepítése)         |\n\n### 1.2 Csatlakozás\n\nEC2 → Instances → válaszd ki → **Connect** → **EC2 Instance Connect** → Connect\n\n### 1.3 Apache telepítése\n\n```bash\n#!/bin/bash\nsudo yum update -y\nsudo yum install -y httpd\nsudo systemctl start httpd\nsudo systemctl enable httpd\n```\n\nTeszt: `http://EC2_PUBLIC_IP` → Apache tesztoldal jelenik meg.\n\n### 1.4 Frontend feltöltése\n\nA fájlokat közvetlenül a GitHub repóból töltjük le – így nincs kódolási probléma:\n\n```bash\nREPO=\"https://raw.githubusercontent.com/cloudsteak/trn-aws-workshop/main/01-Webapp\"\n\nsudo mkdir -p /var/www/html/css /var/www/html/js\n\nsudo curl -o /var/www/html/index.html      \"$REPO/index.html\"\nsudo curl -o /var/www/html/css/style.css    \"$REPO/css/style.css\"\nsudo curl -o /var/www/html/js/config.js     \"$REPO/js/config.js\"\nsudo curl -o /var/www/html/js/app.js        \"$REPO/js/app.js\"\n```\n\n\u003e ⚠️ Cseréld ki a `cloudsteak/trn-aws-workshop`-et a saját repódra!\n\n\u003e Ellenőrizd a létrejött fájlstruktúrát: `tree /var/www/html`\n\nTeszt: `http://EC2_PUBLIC_IP` → Az oldal megjelenik. A health dashboard piros – ez normális, nincs backend még.\n\n---\n\n## 2. lépés – Lambda function-ök\n\n\u003e 📂 Fájlok: `02-Lambda/`\n\n### 2.1 PyMySQL Layer készítése\n\nA quotes Lambda-nak kell a `pymysql` csomag. Futtasd a repóban található scriptet\n(Windows, Mac, Linux – mindenhol működik, csak Python 3.12 kell):\n\n```bash\npython 02-Lambda/build_layer.py\n```\n\nEredmény: `pymysql-layer.zip`\n\nLambda → **Layers** → Create layer → Name: `pymysql` → Upload: `pymysql-layer.zip` → Runtime: Python 3.12\n\n### 2.2 Lambda #1: Idézetek API\n\n1. Lambda → **Create function**\n   - Name: `cloud-quotes-api`\n   - Runtime: **Python 3.12**\n2. Create function\n3. Kód: másold be a `02-Lambda/quotes/lambda_handler.py` tartalmát\n4. Deploy\n5. Layers → **Add a layer** → Custom layers → `pymysql`\n6. Configuration → **Environment variables**:\n\n| Kulcs         | Érték                         |\n| ------------- | ----------------------------- |\n| `DB_HOST`     | ⏳ _A 4. lépésben kapjuk meg_ |\n| `DB_USER`     | `admin`                       |\n| `DB_PASSWORD` | ⏳ _A 4. lépésben adjuk meg_  |\n| `DB_NAME`     | `cloudquotes`                 |\n\n7. Configuration → General → **Timeout**: 30 sec\n\n### 2.3 Lambda #2: AI Chatbot\n\n1. Lambda → **Create function**\n   - Name: `cloud-chat-api`\n   - Runtime: **Python 3.12**\n2. Create function\n3. Kód: másold be a `02-Lambda/chat/lambda_handler.py` tartalmát\n4. **Timeout**: 30 sec\n5. IAM: ⏳ _Az 5. lépésben adjuk hozzá_\n6. Opcionális env var (újabb Claude modellekhez):\n\n- `BEDROCK_INFERENCE_PROFILE_ID` = inference profile ID vagy ARN\n\n---\n\n## 3. lépés – API Gateway\n\n\u003e _(Nincs kódfájl – a konzolban konfiguráljuk)_\n\n### 3.1 API létrehozása\n\nAPI Gateway → Create API → **REST API** → Name: `cloud-quotes`\n\n### 3.2 Végpontok\n\nAzoknál a methodoknál, ahol a Lambda függvényt hozzárendeljük, ott kapcsold be a **Lambda Proxy integration**-t – így a Lambda teljes request/response objektumot kap, és mi döntjük el mit csinálunk vele.\n\n| Resource         | Method | Lambda function    | Proxy |\n| ---------------- | ------ | ------------------ | ----- |\n| `/quotes`        | GET    | `cloud-quotes-api` | ✅    |\n| `/quotes/random` | GET    | `cloud-quotes-api` | ✅    |\n| `/quotes/health` | GET    | `cloud-quotes-api` | ✅    |\n| `/chat`          | POST   | `cloud-chat-api`   | ✅    |\n| `/chat/health`   | GET    | `cloud-chat-api`   | ✅    |\n\nLépések:\n\n1. Resources → Create resource → `quotes` → Create method → GET → Lambda Proxy → `cloud-quotes-api`\n2. `/quotes` → Create resource → `random` → Create method → GET → Lambda Proxy → `cloud-quotes-api`\n3. `/quotes` → Create resource → `health` → Create method → GET → Lambda Proxy → `cloud-quotes-api`\n4. Root `/` → Create resource → `chat` → Create method → POST → Lambda Proxy → `cloud-chat-api`\n5. `/chat` → Create resource → `health` → Create method → GET → Lambda Proxy → `cloud-chat-api`\n\n### 3.3 CORS engedélyezése\n\n⚠️ Minden resource-ra: kiválasztod → **Enable CORS** → `*` → Enable\n\n### 3.4 Deploy\n\nDeploy API → Create new stage → `prod` → Deploy\n\n📋 Jegyezd fel az **Invoke URL**-t!\n\n### 3.5 ⚠️ Vissza az EC2-re: config.js frissítése\n\n```bash\nsudo nano /var/www/html/js/config.js\n```\n\nCseréld ki az `XXXXXXXXXX`-et:\n\n```javascript\nAPI_BASE_URL: 'https://abc123xyz.execute-api.eu-central-1.amazonaws.com/prod',\n```\n\n---\n\n## 4. lépés – RDS MySQL adatbázis\n\n\u003e 📂 Fájlok: `03-Database/`\n\n### 4.1 RDS instance létrehozása\n\nAWS Console → **RDS** → Create database (nem Easy mode)\n\n| Beállítás              | Érték                                                                        |\n| ---------------------- | ---------------------------------------------------------------------------- |\n| Engine                 | **MySQL** 8.0                                                                |\n| Template               | **Free tier** ✅                                                             |\n| DB instance identifier | `quotes-db`                                                                  |\n| Master username        | `admin`                                                                      |\n| Master password        | Válassz egyet és **jegyezd meg!**                                            |\n| DB instance class      | `db.t4g.micro`                                                               |\n| Storage                | 20 GB                                                                        |\n| Public access          | **Yes** ⚠️ (csak képzéshez!)                                                 |\n| Security group         | Create new → `quotes-db-sg`                                                  |\n| Initial database name  | `cloudquotes`                                                                |\n| Initial backup         | Disabled. A bemutató során ne készüljön mentés, hogy ezzel is időt nyerjünk. |\n\nCreate database → Várj 5-10 percet.\n\n### 4.2 Security Group\n\nEC2 → Security Groups → `quotes-db-sg` → Inbound → Edit:\n\n- Type: **MySQL/Aurora** (3306) → Source: **Anywhere** ⚠️\n\n### 4.3 Csatlakozás DBeaver-rel\n\n📋 Jegyezd fel az RDS **Endpoint**-ot: RDS → Databases → `quotes-db` → Connectivity \u0026 security.\n\n#### DBeaver connection beállítása\n\n1. DBeaver → **New Database Connection** → MySQL\n2. **Main tab**:\n\n| Mező        | Érték                                            |\n| ----------- | ------------------------------------------------ |\n| Server Host | `quotes-db.xxxxx.eu-central-1.rds.amazonaws.com` |\n| Port        | `3306`                                           |\n| Database    | `cloudquotes`                                    |\n| Username    | `admin`                                          |\n| Password    | a te jelszavad                                   |\n\n3. **SSL tab** – kötelező az RDS-hez:\n\n| Beállítás                 | Érték               |\n| ------------------------- | ------------------- |\n| Use SSL                   | ✅                  |\n| Require SSL               | ✅                  |\n| Verify server certificate | ✅                  |\n| CA Certificate            | `global-bundle.pem` |\n\nA CA tanúsítványt töltsd le innen:\n\n```\nhttps://truststore.pki.rds.amazonaws.com/global/global-bundle.pem\n```\n\n4. **Test Connection** → Ha zöld, minden rendben!\n\n### 4.4 SQL futtatása DBeaver-ben\n\n1. Bal oldali fa → `quotes-db.xxxxx.eu-central-1.rds.amazonaws.com` → Databases\n2. Felül keresd meg az **Open SQL script** gombot – megnyílik egy új SQL editor ablak\n3. Az üres részben kattints jobb gombbal és válaszd a **File** → **Import SQL script** opciót, majd tallózd be a `03-Database/init.sql` fájlt\n4. **Execute SQL script** gombra kattintva az összes parancs lefut\n5. Ellenőrzés: a Results panelen látod a kategóriánkénti darabszámot\n\n### 4.5 ⚠️ Vissza a Lambda-hoz: environment variables\n\nLambda → `cloud-quotes-api` → Configuration → Environment variables:\n\n| Kulcs         | Érték                                            |\n| ------------- | ------------------------------------------------ |\n| `DB_HOST`     | `quotes-db.xxxxx.eu-central-1.rds.amazonaws.com` |\n| `DB_USER`     | `admin`                                          |\n| `DB_PASSWORD` | a te jelszavad                                   |\n| `DB_NAME`     | `cloudquotes`                                    |\n\n### 4.6 Tesztelés\n\nNyisd meg a webapp-ot a böngészőben: `http://EC2_PUBLIC_IP`\n\n🎉 **Az idézetek megjelennek!** A health dashboard-on a Lambda (quotes) és RDS zöldre vált.\n\n---\n\n## 5. lépés – AI Chatbot (Amazon Bedrock)\n\n\u003e _(Nincs kódfájl – a Lambda kód a 2. lépésben már felkerült)_\n\n### 5.1 Model access engedélyezése\n\n1. **Amazon Bedrock** → **Model catalog** (a bal oldali menüben)\n2. Keresés: **Anthropic** → **Claude 4.5 Haiku**\n3. **Request model access** → Enable\n\n\u003e ⚠️ Az Anthropic első használatkor megköveteli a use case leírását:\n\u003e _\"Anthropic requires first-time customers to submit use case details before invoking a model,\n\u003e once per account or once at the organization's management account.\"_\n\u003e\n\u003e Kattints a **Submit use case details** gombra és töltsd ki a rövid kérdőívet.\n\u003e Az információ az Anthropic-kal lesz megosztva. Ez egyszer kell, utána az összes Anthropic modell elérhető.\n\n### 5.2 IAM jogosultság a chat Lambda-hoz\n\n1. Lambda → `cloud-chat-api` → Configuration → Permissions → kattints a **Role name**-re\n2. IAM → **Add permissions** → **Attach policies**\n3. Keresés: `AmazonBedrockFullAccess` → Add\n\nVagy minimális policy:\n\n```json\n{\n  \"Version\": \"2012-10-17\",\n  \"Statement\": [\n    {\n      \"Effect\": \"Allow\",\n      \"Action\": \"bedrock:InvokeModel\",\n      \"Resource\": \"arn:aws:bedrock:eu-central-1::foundation-model/anthropic.claude-3-haiku-20240307-v1:0\"\n    }\n  ]\n}\n```\n\n### 5.3 Inference profile ARN beállítása (Claude 4.5)\n\n1. Amazon Bedrock-ban nyisd meg a **Cross-region inference** menüpontot\n2. Keresd meg a használt modellt (pl. **Claude 4.5 Haiku**)\n3. Másold ki az adott modellhez tartozó **Inference profile ARN** értéket\n4. Menj a Lambda → `cloud-chat-api` → **Configuration** → **Environment variables** részre\n5. Add hozzá ezt az env var-t:\n\n- `BEDROCK_INFERENCE_PROFILE_ID` = _(az előbb kimásolt Inference profile ARN)_\n\n6. Mentsd el és nyomj **Deploy**-t a Lambda kódra\n\n### 5.4 Tesztelés\n\nNyisd meg a webapp-ot: `http://EC2_PUBLIC_IP` → jobb alsó sarok 🤖 → kérdezz valamit!\n\n🎉 **Az AI válaszol!** A health dashboard-on a Bedrock is zöldre vált.\n\n\u003e 💡 **Megjegyzés**: A chatbotnak csak a böngésző ablak frissítéséig van memóriája.\n\u003e Teljesen független memóriát (konverzáció-előzmények) DynamoDB-vel lehetne implementálni, de a cél most az volt,\n\u003e hogy lássuk milyen **egyszerű egy AI chatbotot összerakni** AWS-en.\n\n---\n\n## 🎉 Kész!\n\nA teljes alkalmazás működik:\n\n```\nIdézetek:  Böngésző → EC2 Apache → API GW → Lambda → RDS MySQL\nAI Chat:   Böngésző → EC2 Apache → API GW → Lambda → Bedrock Claude\n```\n\n---\n\n## Takarítás (Erőforrások eltávolítása és törlése a képzés után!)\n\n1. **EC2**: Terminate instance\n2. **RDS**: Delete database (skip final snapshot)\n3. **Lambda**: Delete mindkét function + pymysql layer\n4. **API Gateway**: Delete API\n5. **Security Groups**: Töröld az egyedieket\n\n---\n\n## ❓ Gyakori problémák\n\n| Probléma                | Megoldás                                                            |\n| ----------------------- | ------------------------------------------------------------------- |\n| Lambda timeout (quotes) | RDS Public access bekapcsolva? Security Group 3306 nyitva?          |\n| CORS hiba böngészőben   | API GW → Enable CORS mindenhol → Deploy újra                        |\n| RDS connection refused  | Security Group 3306 port nyitva?                                    |\n| DBeaver SSL hiba        | CA Certificate beállítva? `global-bundle.pem` letöltve?             |\n| Bedrock access denied   | Model access engedélyezve? IAM policy hozzáadva? Use case kitöltve? |\n| Bedrock on-demand hiba  | Add meg a `BEDROCK_INFERENCE_PROFILE_ID` env var-t a chat Lambdán.  |\n| Webapp nem tölt be      | Ellenőrizd a `js/config.js` API URL-t                               |\n| Apache nem indul        | `sudo systemctl status httpd`                                       |\n\n---\n\n## 💰 Költségek\n\n| Szolgáltatás     | Free tier      | Becsült költség |\n| ---------------- | -------------- | --------------- |\n| EC2 t3.micro     | ✅ 12 hó       | $0              |\n| RDS db.t4g.micro | ✅ 12 hó       | $0              |\n| Lambda           | ✅ 1M kérés/hó | $0              |\n| API Gateway      | ✅ 1M kérés/hó | $0              |\n| Bedrock Haiku    | ❌ Pay-per-use | ~$0.01–0.05     |\n","project_url":"https://awesome.ecosyste.ms/api/v1/projects/github.com%2Fcloudsteak%2Ftrn-aws-workshop","html_url":"https://awesome.ecosyste.ms/projects/github.com%2Fcloudsteak%2Ftrn-aws-workshop","lists_url":"https://awesome.ecosyste.ms/api/v1/projects/github.com%2Fcloudsteak%2Ftrn-aws-workshop/lists"}