Files
swift-aws-lambda-runtime/Examples/HelloJSON/README.md
T
Sébastien Stormacq c22f5271a0 add HelloJSON example + README (#424)
* add HelloJSON example + README

* multiple corrections of typos and grammatical errors

Co-authored-by: Tim Condon <0xTim@users.noreply.github.com>
2024-11-13 13:53:19 +01:00

80 lines
2.6 KiB
Markdown

# Hello JSON
This is a simple example of an AWS Lambda function that takes a JSON structure as an input parameter and returns a JSON structure as a response.
The runtime takes care of decoding the input and encoding the output.
## Code
The code defines `HelloRequest` and `HelloResponse` data structures to represent the input and output payloads. These structures are typically shared with a client project, such as an iOS application.
The code creates a `LambdaRuntime` struct. In it's simplest form, the initializer takes a function as an argument. The function is the handler that will be invoked when an event triggers the Lambda function.
The handler is `(event: HelloRequest, context: LambdaContext)`. The function takes two arguments:
- the event argument is a `HelloRequest`. It is the parameter passed when invoking the function.
- the context argument is a `Lambda Context`. It is a description of the runtime context.
The function return value will be encoded to a `HelloResponse` as your Lambda function response.
## Build & Package
To build & archive the package, type the following commands.
```bash
swift package archive --allow-network-connections docker
```
If there is no error, there is a ZIP file ready to deploy.
The ZIP file is located at `.build/plugins/AWSLambdaPackager/outputs/AWSLambdaPackager/HelloJSON/HelloJSON.zip`
## Deploy
Here is how to deploy using the `aws` command line.
```bash
# Replace with your AWS Account ID
AWS_ACCOUNT_ID=012345678901
aws lambda create-function \
--function-name HelloJSON \
--zip-file fileb://.build/plugins/AWSLambdaPackager/outputs/AWSLambdaPackager/HelloJSON/HelloJSON.zip \
--runtime provided.al2 \
--handler provided \
--architectures arm64 \
--role arn:aws:iam::${AWS_ACCOUNT_ID}:role/lambda_basic_execution
```
The `--architectures` flag is only required when you build the binary on an Apple Silicon machine (Apple M1 or more recent). It defaults to `x64`.
Be sure to define the `AWS_ACCOUNT_ID` environment variable with your actual AWS account ID (for example: 012345678901).
## Invoke your Lambda function
To invoke the Lambda function, use this `aws` command line.
```bash
aws lambda invoke \
--function-name HelloJSON \
--payload $(echo '{ "name" : "Seb", "age" : 50 }' | base64) \
out.txt && cat out.txt && rm out.txt
```
Note that the payload is expected to be a valid JSON string.
This should output the following result.
```
{
"StatusCode": 200,
"ExecutedVersion": "$LATEST"
}
{"greetings":"Hello Seb. You look younger than your age."}
```
## Undeploy
When done testing, you can delete the Lambda function with this command.
```bash
aws lambda delete-function --function-name HelloJSON
```