Skip to content

Commit 2e866a2

Browse files
Consolidate all infrastructure into single repository
BREAKING CHANGE: Merged webhook-receiver, es-indexer-worker, and SQS infrastructure into this repo - All Lambda functions in lambda/ directory - Single Terraform deployment for everything - Creates: SQS queues, webhook-receiver Lambda, es-indexer-worker Lambda, Elasticsearch Fargate - No Docker/ECR needed for Lambdas - just JAR files - Simplified deployment: one repo, one workflow, one terraform apply - Cost: ~-50/month total (Lambdas ~/month + ES ~/month) Benefits: - Single GitHub Actions workflow builds and deploys everything - No separate repos to manage - Lambdas auto-scale with load - Much cheaper than Fargate for webhook/indexer ( vs /month)
1 parent 27c8dc2 commit 2e866a2

File tree

16 files changed

+1601
-138
lines changed

16 files changed

+1601
-138
lines changed

.github/workflows/deploy.yaml

Lines changed: 50 additions & 24 deletions
Original file line numberDiff line numberDiff line change
@@ -1,11 +1,9 @@
1-
name: Deploy Elasticsearch Infrastructure
1+
name: Deploy Complete Elasticsearch Infrastructure
22

33
on:
44
push:
55
branches:
66
- main
7-
paths:
8-
- 'terraform/**'
97
workflow_dispatch:
108

119
permissions:
@@ -14,30 +12,41 @@ permissions:
1412

1513
env:
1614
AWS_REGION: eu-central-1
17-
ECS_CLUSTER: elasticsearch-javazone
18-
ECS_SERVICE: elasticsearch-javazone
1915

2016
jobs:
21-
terraform-deploy:
17+
deploy:
2218
runs-on: ubuntu-latest
2319
steps:
2420
- name: Checkout repository
2521
uses: actions/checkout@v4
2622

27-
- name: Configure AWS Credentials (OIDC)
23+
- name: Setup Java
24+
uses: actions/setup-java@v3
25+
with:
26+
distribution: 'temurin'
27+
java-version: '11'
28+
cache: 'maven'
29+
30+
- name: Build webhook-receiver Lambda
31+
working-directory: lambda/webhook-receiver
32+
run: mvn clean package -DskipTests
33+
34+
- name: Build es-indexer-worker Lambda
35+
working-directory: lambda/es-indexer-worker
36+
run: mvn clean package -DskipTests
37+
38+
- name: Configure AWS Credentials
2839
uses: aws-actions/configure-aws-credentials@v4
2940
with:
3041
aws-region: ${{ env.AWS_REGION }}
3142
role-to-assume: ${{ secrets.AWS_OIDC }}
32-
role-session-name: GitHubActions-OIDC
3343

34-
- name: Assume CDK Deploy Role for Terraform
44+
- name: Assume CDK Deploy Role
3545
uses: aws-actions/configure-aws-credentials@v4
3646
with:
3747
aws-region: ${{ env.AWS_REGION }}
3848
role-to-assume: arn:aws:iam::553637109631:role/cdk-hnb659fds-deploy-role-553637109631-eu-central-1
3949
role-chaining: true
40-
role-session-name: GitHubActions-Deploy
4150

4251
- name: Setup Terraform
4352
uses: hashicorp/setup-terraform@v3
@@ -54,45 +63,62 @@ jobs:
5463
run: terraform plan -input=false
5564
env:
5665
TF_VAR_vpc_id: ${{ secrets.VPC_ID }}
57-
TF_VAR_subnet_ids: ${{ secrets.ES_SUBNET_IDS }}
66+
TF_VAR_es_subnet_ids: ${{ secrets.ES_SUBNET_IDS }}
5867
TF_VAR_assign_public_ip: false
5968
TF_VAR_allowed_cidr_blocks: ${{ secrets.VPC_CIDR_BLOCKS }}
6069
TF_VAR_elasticsearch_password: ${{ secrets.ELASTICSEARCH_PASSWORD }}
70+
TF_VAR_elasticsearch_url: http://elasticsearch.javazone.internal:9200
6171
TF_VAR_task_cpu: 1024
6272
TF_VAR_task_memory: 2048
6373
TF_VAR_heap_size: 1024
64-
TF_VAR_enable_service_discovery: true
74+
TF_VAR_webhook_secret: ${{ secrets.WEBHOOK_SECRET }}
75+
TF_VAR_moresleep_url: ${{ secrets.MORESLEEP_URL }}
76+
TF_VAR_moresleep_username: ${{ secrets.MORESLEEP_USERNAME }}
77+
TF_VAR_moresleep_password: ${{ secrets.MORESLEEP_PASSWORD }}
6578

6679
- name: Terraform Apply
6780
working-directory: terraform
6881
run: terraform apply -auto-approve -input=false
6982
env:
7083
TF_VAR_vpc_id: ${{ secrets.VPC_ID }}
71-
TF_VAR_subnet_ids: ${{ secrets.ES_SUBNET_IDS }}
84+
TF_VAR_es_subnet_ids: ${{ secrets.ES_SUBNET_IDS }}
7285
TF_VAR_assign_public_ip: false
7386
TF_VAR_allowed_cidr_blocks: ${{ secrets.VPC_CIDR_BLOCKS }}
7487
TF_VAR_elasticsearch_password: ${{ secrets.ELASTICSEARCH_PASSWORD }}
88+
TF_VAR_elasticsearch_url: http://elasticsearch.javazone.internal:9200
7589
TF_VAR_task_cpu: 1024
7690
TF_VAR_task_memory: 2048
7791
TF_VAR_heap_size: 1024
78-
TF_VAR_enable_service_discovery: true
92+
TF_VAR_webhook_secret: ${{ secrets.WEBHOOK_SECRET }}
93+
TF_VAR_moresleep_url: ${{ secrets.MORESLEEP_URL }}
94+
TF_VAR_moresleep_username: ${{ secrets.MORESLEEP_USERNAME }}
95+
TF_VAR_moresleep_password: ${{ secrets.MORESLEEP_PASSWORD }}
7996

80-
- name: Wait for Elasticsearch to be ready
97+
- name: Show Outputs
98+
working-directory: terraform
8199
run: |
82-
echo "Waiting 120 seconds for Elasticsearch to start..."
83-
sleep 120
100+
echo "================================================"
101+
echo "✅ Deployment Complete!"
102+
echo "================================================"
103+
echo ""
104+
echo "🔗 Webhook URL for moresleep:"
105+
terraform output -raw webhook_url
106+
echo ""
107+
echo ""
108+
echo "📊 Elasticsearch:"
109+
terraform output -raw elasticsearch_endpoint
110+
echo ""
111+
echo ""
112+
echo "📦 SQS Queue:"
113+
terraform output -raw sqs_queue_url
114+
echo ""
115+
echo "================================================"
84116
85117
- name: Create Elasticsearch Index
86118
run: |
87-
# Get Elasticsearch URL from service discovery or task IP
119+
sleep 60
88120
ES_URL="http://elasticsearch.javazone.internal:9200"
89-
90-
# Create index (idempotent - won't fail if already exists)
91121
curl -X PUT "$ES_URL/javazone_talks" \
92122
-u elastic:${{ secrets.ELASTICSEARCH_PASSWORD }} \
93123
-H "Content-Type: application/json" \
94124
-d @config/index-mapping.json || echo "Index may already exist"
95-
96-
# Verify cluster health
97-
curl -u elastic:${{ secrets.ELASTICSEARCH_PASSWORD }} \
98-
"$ES_URL/_cluster/health"

0 commit comments

Comments
 (0)