mirror of
https://github.com/swift-server/swift-aws-lambda-runtime.git
synced 2026-06-02 07:27:33 +00:00
c22f5271a0
* add HelloJSON example + README * multiple corrections of typos and grammatical errors Co-authored-by: Tim Condon <0xTim@users.noreply.github.com>
80 lines
2.6 KiB
Markdown
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
|
|
``` |