Swift Lambda Applications λ

This will be part II of CI/CD deployment:

To recall the reference use in there:

  1. https://fabianfett.dev/getting-started-with-swift-aws-lambda-runtime

  2. https://fabianfett.dev/swift-on-aws-lambda-creating-your-first-http-endpoint

But you and I cannot agree more that UI Consoles are a bit annoying and 🐌x2. There are solutions for it:


- Serverless Framework <-- ✅ x5⭐️

brew install serverless
code serverless.yml
serverless deploy --config "./serverless.yml" --stage dev 

Well sort of... let me catch my breath and `map` it .. this is very exciting and its going so fast... did you now Swift Docker images support ARM already?


You will need:


FROM swift:5.6-amazonlinux2
RUN yum -y install git jq tar zip openssl-devel


  name: aws
  runtime: provided.al2 # <--- Important!
  region: us-east-2
  architecture: arm64 # <--- Important!

keep in mind that I'm leaving out the upload package format which can be .zip or a docker image hosted in AWS ECR

I used the same build scripts found in swift-aws-lambda-runtime/Examples/Deployment

I did modified the following lines thought

docker run --rm -v "$workspace":/workspace -w /workspace/Examples/Deployment builder \       
bash -cl "swift build --product $executable -c release"
echo "done"

echo"-------------------------------------------------------------------------"echo"packaging \"$executable\" lambda"echo"-------------------------------------------------------------------------"

docker run --rm -v "$workspace":/workspace -w /workspace/Examples/Deployment builder \       
bash -cl "./scripts/package.sh $executable"


docker run --rm -v "$workspace":/workspace -w /workspace/ builder \
       bash -cl "swift build --product $executable -c release"
docker run --rm -v "$workspace":/workspace -w /workspace/ builder \
       bash -cl "./scripts/package.sh $executable" 

and now you can run the command below from your MacBook M1


side_note: Before swift:5.6-amazonlinux2 I set the scripts within a Github Action.. but the scripts were building the image on an Ubuntu machine and the arch were set for arm64, just keep an 👀 in which computer you are running

the above highlights where I spent sometime reading, for which I enjoy figuring out how things work. Hope this is one of those reads you will find as trying to accomplish the same as me: Build Swift Serverless functions for any Cloud ☁️

Demo... 📽

I implemented a Serverless application to send a push notification to an iOS application


The above was very high level demo of code, implementation and integration of a Lambda function. With that said, everyone has their own use case and I'm just starting to grasp and simplify the process of the common use case. Per AWS, the following seems to be the common use case:

An AWS Lambda application is a combination of Lambda functions, event sources, and other resources that work together to perform tasks. You can use AWS CloudFormation and other tools to collect your application's components into a single package that can be deployed and managed as one resource. Applications make your Lambda projects portable and enable you to integrate with additional developer tools... - AWS Docs

For a myself, as a developer, this is how I interpreted it:

I would like to have different functions related to the same project and deploy them as an UPSERT strategy.

For Swift Lambda application, this could look like the following:

- Single repository

- Many executables map to Lambda Functions

- Pushing the stack

a. Single stack application grouping those executables, which would do the UPSERT

b. Linking the Lambdas to an existing stack (which could be part of a team)

It was great to learn how to perform the above as part of Cloud DevOps on my projects.

Here is a slide modification of Fabian's scripts:

Note: you still have to write/map your serverless.yml file

## This source file is part of the SwiftAWSLambdaRuntime open source project
## Copyright (c) 2020 Apple Inc. and the SwiftAWSLambdaRuntime project authors
## Licensed under Apache License v2.0
## See LICENSE.txt for license information
## See CONTRIBUTORS.txt for the list of SwiftAWSLambdaRuntime project authors
## SPDX-License-Identifier: Apache-2.0

set -eu

DIR="$(cd "$(dirname "$0")" && pwd)"

executables=( $(swift package dump-package | sed -e 's|: null|: ""|g' | jq '.products[] | (select(.type.executable)) | .name' | sed -e 's|"||g') )

if [[ ${#executables[@]} = 0 ]]; then
    echo "no executables found"
    exit 1

echo "multiple executables found:"
for executable in ${executables[@]}; do
    $DIR/build-and-package.sh "$executable"

serverless deploy --config "./serverless.yml" --stage dev --verbose