From c7b44efa624bb1b3bd3fcf6e7c1b3ffecff4cd5b Mon Sep 17 00:00:00 2001 From: Gary Rutland Date: Thu, 26 Feb 2026 16:04:31 +0000 Subject: [PATCH 1/8] Create deploy-lambda.yaml --- .github/workflows/deploy-lambda.yaml | 26 ++++++++++++++++++++++++++ 1 file changed, 26 insertions(+) create mode 100644 .github/workflows/deploy-lambda.yaml diff --git a/.github/workflows/deploy-lambda.yaml b/.github/workflows/deploy-lambda.yaml new file mode 100644 index 0000000..36c03d7 --- /dev/null +++ b/.github/workflows/deploy-lambda.yaml @@ -0,0 +1,26 @@ +name: Deploy Lambda to AWS + +on: + push: + branches: ["*-workshop"] + paths: + - "lambda/**" + +concurrency: + group: ${{ github.workflow }}-${{ github.ref }} + cancel-in-progress: true + +env: + AWS_REGION: eu-west-1 + +jobs: + deploy: + runs-on: ubuntu-latest + env: + FUNCTION_NAME: ${{ github.ref_name }} + permissions: + id-token: write + contents: read + steps: + - name: Checkout repository + uses: actions/checkout@v6 From 6653d60a192afbed27caedf035253a809de82953 Mon Sep 17 00:00:00 2001 From: Gary Rutland Date: Thu, 26 Feb 2026 16:08:58 +0000 Subject: [PATCH 2/8] Update deploy-lambda.yaml --- .github/workflows/deploy-lambda.yaml | 3 ++- 1 file changed, 2 insertions(+), 1 deletion(-) diff --git a/.github/workflows/deploy-lambda.yaml b/.github/workflows/deploy-lambda.yaml index 36c03d7..9121486 100644 --- a/.github/workflows/deploy-lambda.yaml +++ b/.github/workflows/deploy-lambda.yaml @@ -4,7 +4,8 @@ on: push: branches: ["*-workshop"] paths: - - "lambda/**" + - .github/** + - lambda/** concurrency: group: ${{ github.workflow }}-${{ github.ref }} From 4f13c6bf5374afb58c152f321d6851a3183b8545 Mon Sep 17 00:00:00 2001 From: Gary Rutland Date: Thu, 26 Feb 2026 16:09:51 +0000 Subject: [PATCH 3/8] Update deploy-lambda.yaml --- .github/workflows/deploy-lambda.yaml | 11 +++++++++++ 1 file changed, 11 insertions(+) diff --git a/.github/workflows/deploy-lambda.yaml b/.github/workflows/deploy-lambda.yaml index 9121486..d01f0a0 100644 --- a/.github/workflows/deploy-lambda.yaml +++ b/.github/workflows/deploy-lambda.yaml @@ -25,3 +25,14 @@ jobs: steps: - name: Checkout repository uses: actions/checkout@v6 + - name: Configure AWS Credentials + uses: aws-actions/configure-aws-credentials@v6 + with: + role-to-assume: ${{ secrets.AWS_ROLE_ARN }} + aws-region: ${{ env.AWS_REGION }} + - name: Setup Node.js + uses: actions/setup-node@v6 + with: + node-version: 24 + cache: npm + cache-dependency-path: lambda/package-lock.json From c46f3667faa2a2da28a180488ffba714e7780f45 Mon Sep 17 00:00:00 2001 From: Gary Rutland Date: Thu, 26 Feb 2026 16:11:03 +0000 Subject: [PATCH 4/8] Update deploy-lambda.yaml --- .github/workflows/deploy-lambda.yaml | 9 +++++++++ 1 file changed, 9 insertions(+) diff --git a/.github/workflows/deploy-lambda.yaml b/.github/workflows/deploy-lambda.yaml index d01f0a0..7b07d52 100644 --- a/.github/workflows/deploy-lambda.yaml +++ b/.github/workflows/deploy-lambda.yaml @@ -36,3 +36,12 @@ jobs: node-version: 24 cache: npm cache-dependency-path: lambda/package-lock.json + - name: Install dependencies + working-directory: ./lambda + run: npm ci + - name: Build TypeScript + working-directory: ./lambda + run: npm run build + - name: Package Lambda function + working-directory: ./lambda + run: npm run package From 4079b966163709c0a613dd56eee3a742d3be7244 Mon Sep 17 00:00:00 2001 From: Gary Rutland Date: Thu, 26 Feb 2026 16:12:09 +0000 Subject: [PATCH 5/8] Update deploy-lambda.yaml --- .github/workflows/deploy-lambda.yaml | 33 ++++++++++++++++++++++++++++ 1 file changed, 33 insertions(+) diff --git a/.github/workflows/deploy-lambda.yaml b/.github/workflows/deploy-lambda.yaml index 7b07d52..70af1d0 100644 --- a/.github/workflows/deploy-lambda.yaml +++ b/.github/workflows/deploy-lambda.yaml @@ -45,3 +45,36 @@ jobs: - name: Package Lambda function working-directory: ./lambda run: npm run package + - name: Check if Lambda function exists + id: check_lambda + run: | + if aws lambda get-function --function-name ${{ env.FUNCTION_NAME }} >/dev/null 2>&1; then + echo "exists=true" >> $GITHUB_OUTPUT + echo "โœ… Lambda function ${{ env.FUNCTION_NAME }} exists" + else + echo "exists=false" >> $GITHUB_OUTPUT + echo "โžก๏ธ Lambda function ${{ env.FUNCTION_NAME }} needs to be created" + fi + - name: Create Lambda function + if: steps.check_lambda.outputs.exists == 'false' + working-directory: ./lambda + run: | + aws lambda create-function \ + --function-name ${{ env.FUNCTION_NAME }} \ + --runtime nodejs24.x \ + --role ${{ secrets.LAMBDA_EXECUTION_ROLE_ARN }} \ + --handler build/index.handler \ + --zip-file fileb://function.zip \ + --description "Workshop Lambda deployed by ${{ github.actor }}" \ + --environment Variables={GITHUB_ACTOR=${{ github.actor }}} \ + --tags Workshop=GitHubActions,User=${{ github.actor }} + echo "๐ŸŽ‰ Lambda function ${{ env.FUNCTION_NAME }} created!" + + - name: Update Lambda function code + if: steps.check_lambda.outputs.exists == 'true' + working-directory: ./lambda + run: | + aws lambda update-function-code \ + --function-name ${{ env.FUNCTION_NAME }} \ + --zip-file fileb://function.zip + echo "๐Ÿ”„ Lambda function ${{ env.FUNCTION_NAME }} updated!" From 1c818d084a11ce02f6468fdc37715f4020f1b372 Mon Sep 17 00:00:00 2001 From: Gary Rutland Date: Thu, 26 Feb 2026 16:13:17 +0000 Subject: [PATCH 6/8] Update deploy-lambda.yaml --- .github/workflows/deploy-lambda.yaml | 27 +++++++++++++++++++++++++++ 1 file changed, 27 insertions(+) diff --git a/.github/workflows/deploy-lambda.yaml b/.github/workflows/deploy-lambda.yaml index 70af1d0..1d861b7 100644 --- a/.github/workflows/deploy-lambda.yaml +++ b/.github/workflows/deploy-lambda.yaml @@ -78,3 +78,30 @@ jobs: --function-name ${{ env.FUNCTION_NAME }} \ --zip-file fileb://function.zip echo "๐Ÿ”„ Lambda function ${{ env.FUNCTION_NAME }} updated!" + - name: Test Lambda function + run: | + echo "๐Ÿงช Testing Lambda function..." + aws lambda invoke \ + --function-name ${{ env.FUNCTION_NAME }} \ + --payload '{}' \ + --log-type Tail \ + response.json + + echo "๐Ÿ“‹ Lambda response:" + cat response.json + - name: Get CloudWatch logs + run: | + echo "๐Ÿ“œ Fetching CloudWatch logs..." + LOG_STREAM=$(aws logs describe-log-streams \ + --log-group-name /aws/lambda/${{ env.FUNCTION_NAME }} \ + --order-by LastEventTime \ + --descending \ + --max-items 1 \ + --query 'logStreams[0].logStreamName' \ + --output text) + + aws logs get-log-events \ + --log-group-name /aws/lambda/${{ env.FUNCTION_NAME }} \ + --log-stream-name "$LOG_STREAM" \ + --limit 20 \ + --output table From 0078611b35dc2e8e9fff8cda89ec4060aeaa8fb8 Mon Sep 17 00:00:00 2001 From: Gary Rutland Date: Thu, 26 Feb 2026 16:20:36 +0000 Subject: [PATCH 7/8] Update deploy-lambda.yaml --- .github/workflows/deploy-lambda.yaml | 44 +++++----------------------- 1 file changed, 8 insertions(+), 36 deletions(-) diff --git a/.github/workflows/deploy-lambda.yaml b/.github/workflows/deploy-lambda.yaml index 1d861b7..ba97096 100644 --- a/.github/workflows/deploy-lambda.yaml +++ b/.github/workflows/deploy-lambda.yaml @@ -42,42 +42,14 @@ jobs: - name: Build TypeScript working-directory: ./lambda run: npm run build - - name: Package Lambda function - working-directory: ./lambda - run: npm run package - - name: Check if Lambda function exists - id: check_lambda - run: | - if aws lambda get-function --function-name ${{ env.FUNCTION_NAME }} >/dev/null 2>&1; then - echo "exists=true" >> $GITHUB_OUTPUT - echo "โœ… Lambda function ${{ env.FUNCTION_NAME }} exists" - else - echo "exists=false" >> $GITHUB_OUTPUT - echo "โžก๏ธ Lambda function ${{ env.FUNCTION_NAME }} needs to be created" - fi - - name: Create Lambda function - if: steps.check_lambda.outputs.exists == 'false' - working-directory: ./lambda - run: | - aws lambda create-function \ - --function-name ${{ env.FUNCTION_NAME }} \ - --runtime nodejs24.x \ - --role ${{ secrets.LAMBDA_EXECUTION_ROLE_ARN }} \ - --handler build/index.handler \ - --zip-file fileb://function.zip \ - --description "Workshop Lambda deployed by ${{ github.actor }}" \ - --environment Variables={GITHUB_ACTOR=${{ github.actor }}} \ - --tags Workshop=GitHubActions,User=${{ github.actor }} - echo "๐ŸŽ‰ Lambda function ${{ env.FUNCTION_NAME }} created!" - - - name: Update Lambda function code - if: steps.check_lambda.outputs.exists == 'true' - working-directory: ./lambda - run: | - aws lambda update-function-code \ - --function-name ${{ env.FUNCTION_NAME }} \ - --zip-file fileb://function.zip - echo "๐Ÿ”„ Lambda function ${{ env.FUNCTION_NAME }} updated!" + - name: Deploy to Lambda + uses: aws-actions/aws-lambda-deploy@v1 + with: + function-name: ${{ env.FUNCTION_NAME }} + function-description: "Workshop Lambda deployed by ${{ github.actor }}" + code-artifacts-dir: ./lambda + handler: index.handler + runtime: nodejs24.x - name: Test Lambda function run: | echo "๐Ÿงช Testing Lambda function..." From 0251534a8744c2a8ed43c9fd9637050829d80b15 Mon Sep 17 00:00:00 2001 From: Gary Rutland Date: Thu, 26 Feb 2026 16:25:19 +0000 Subject: [PATCH 8/8] Update deploy-lambda.yaml --- .github/workflows/deploy-lambda.yaml | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/.github/workflows/deploy-lambda.yaml b/.github/workflows/deploy-lambda.yaml index ba97096..fb89150 100644 --- a/.github/workflows/deploy-lambda.yaml +++ b/.github/workflows/deploy-lambda.yaml @@ -48,7 +48,7 @@ jobs: function-name: ${{ env.FUNCTION_NAME }} function-description: "Workshop Lambda deployed by ${{ github.actor }}" code-artifacts-dir: ./lambda - handler: index.handler + handler: build/index.handler runtime: nodejs24.x - name: Test Lambda function run: |