Skip to content

Commit

Permalink
Provide record deaggregation + feral support (#181)
Browse files Browse the repository at this point in the history
  • Loading branch information
etspaceman authored Jul 18, 2023
1 parent c804861 commit b662e40
Show file tree
Hide file tree
Showing 15 changed files with 465 additions and 19 deletions.
8 changes: 6 additions & 2 deletions .github/workflows/ci.yml
Original file line number Diff line number Diff line change
Expand Up @@ -80,6 +80,8 @@ jobs:

- name: Docker Compose Up
if: matrix.java == 'temurin@17' && matrix.os == 'ubuntu-latest'
env:
GITHUB_API_TOKEN: ${{ secrets.GITHUB_TOKEN }}
uses: nick-fields/retry@v2
with:
timeout_minutes: 15
Expand All @@ -94,6 +96,8 @@ jobs:

- name: Link Native
if: matrix.java == 'temurin@17' && matrix.os == 'ubuntu-latest' && startsWith(matrix.project, 'root-native')
env:
GITHUB_API_TOKEN: ${{ secrets.GITHUB_TOKEN }}
uses: nick-fields/retry@v2
with:
timeout_minutes: 25
Expand Down Expand Up @@ -123,11 +127,11 @@ jobs:

- name: Make target directories
if: github.event_name != 'pull_request' && (startsWith(github.ref, 'refs/tags/v') || github.ref == 'refs/heads/main')
run: mkdir -p root-js-3/target shared-ciris/target/jvm-3 root-jvm-213/target shared-localstack/target/js-2.12 smithy4s-client-logging-circe/target/js-2.13 shared-ciris/target/js-2.12 shared/target/native-2.13 aws-v1-localstack/target/jvm-2.12 compat/target/js-2.12 root-native-213/target shared-circe/target/native-2.13 kpl/target/jvm-3 shared-circe/target/js-2.12 target shared/target/jvm-2.13 shared-localstack/target/js-2.13 kpl/target/jvm-2.12 kcl-ciris/target/jvm-3 kpl-ciris/target/jvm-2.13 kpl-ciris/target/jvm-2.12 shared-circe/target/js-3 smithy4s-client-localstack/target/jvm-3 smithy4s-client-localstack/target/js-3 smithy4s-client/target/jvm-3 shared-circe/target/js-2.13 unidocs/target/jvm-2.13 compat/target/native-2.12 smithy4s-client-logging-circe/target/jvm-2.13 kcl-logging-circe/target/jvm-3 kinesis-client-logging-circe/target/jvm-3 aws-v1-localstack/target/jvm-3 shared/target/js-2.13 site/target/jvm-2.13 kinesis-client-localstack/target/jvm-3 shared/target/native-2.12 shared/target/jvm-3 kcl-localstack/target/jvm-2.13 kcl/target/jvm-3 kcl/target/jvm-2.12 root-js-212/target smithy4s-client-transformers/target/jvm-2.12 shared-ciris/target/jvm-2.12 root-jvm-3/target shared-localstack/target/native-2.13 shared-localstack/target/jvm-2.12 kcl-localstack/target/jvm-2.12 shared-ciris/target/js-3 kpl/target/jvm-2.13 smithy4s-client-localstack/target/native-3 smithy4s-client/target/js-2.13 shared-circe/target/jvm-2.12 root-native-3/target kcl-logging-circe/target/jvm-2.13 shared/target/native-3 root-js-213/target smithy4s-client-logging-circe/target/js-3 kcl-ciris/target/jvm-2.13 kinesis-client-logging-circe/target/jvm-2.13 smithy4s-client/target/js-3 compat/target/jvm-3 kinesis-client-logging-circe/target/jvm-2.12 shared-circe/target/jvm-2.13 kinesis-client/target/jvm-2.12 kpl-logging-circe/target/jvm-2.13 root-jvm-212/target shared-ciris/target/native-3 shared-localstack/target/native-3 aws-v2-localstack/target/jvm-3 compat/target/js-3 compat/target/js-2.13 kcl-http4s/target/jvm-2.12 aws-v2-localstack/target/jvm-2.12 root-native-212/target kcl-logging-circe/target/jvm-2.12 kinesis-client/target/jvm-2.13 shared/target/js-2.12 kcl/target/jvm-2.13 kpl-localstack/target/jvm-3 kpl-localstack/target/jvm-2.13 kcl-ciris/target/jvm-2.12 shared-circe/target/native-2.12 kcl-localstack/target/jvm-3 kinesis-client/target/jvm-3 shared-localstack/target/jvm-2.13 aws-v1-localstack/target/jvm-2.13 shared-ciris/target/js-2.13 kinesis-client-localstack/target/jvm-2.13 smithy4s-client/target/native-3 kpl-logging-circe/target/jvm-3 smithy4s-client-localstack/target/jvm-2.13 aws-v2-localstack/target/jvm-2.13 shared-localstack/target/js-3 compat/target/native-2.13 compat/target/native-3 kpl-logging-circe/target/jvm-2.12 integration-tests/target/js-3 shared/target/js-3 smithy4s-client-logging-circe/target/native-3 shared/target/jvm-2.12 integration-tests/target/jvm-3 integration-tests/target/jvm-2.13 smithy4s-client-localstack/target/js-2.13 shared-circe/target/jvm-3 shared-ciris/target/jvm-2.13 shared-localstack/target/jvm-3 compat/target/jvm-2.12 kpl-ciris/target/jvm-3 smithy4s-client/target/jvm-2.13 kpl-localstack/target/jvm-2.12 smithy4s-client-logging-circe/target/jvm-3 integration-tests/target/js-2.13 kcl-http4s/target/jvm-2.13 shared-circe/target/native-3 shared-ciris/target/native-2.13 kinesis-client-localstack/target/jvm-2.12 kcl-http4s/target/jvm-3 compat/target/jvm-2.13 integration-tests/target/native-3 project/target
run: mkdir -p root-js-3/target shared-ciris/target/jvm-3 root-jvm-213/target shared-localstack/target/js-2.12 smithy4s-client-logging-circe/target/js-2.13 shared-ciris/target/js-2.12 shared/target/native-2.13 aws-v1-localstack/target/jvm-2.12 compat/target/js-2.12 root-native-213/target shared-circe/target/native-2.13 kpl/target/jvm-3 shared-circe/target/js-2.12 target shared/target/jvm-2.13 shared-localstack/target/js-2.13 kpl/target/jvm-2.12 kcl-ciris/target/jvm-3 kpl-ciris/target/jvm-2.13 kpl-ciris/target/jvm-2.12 shared-circe/target/js-3 smithy4s-client-localstack/target/jvm-3 smithy4s-client-localstack/target/js-3 smithy4s-client/target/jvm-3 shared-circe/target/js-2.13 unidocs/target/jvm-2.13 compat/target/native-2.12 smithy4s-client-logging-circe/target/jvm-2.13 kcl-logging-circe/target/jvm-3 kinesis-client-logging-circe/target/jvm-3 aws-v1-localstack/target/jvm-3 shared/target/js-2.13 feral/target/jvm-3 site/target/jvm-2.13 kinesis-client-localstack/target/jvm-3 shared/target/native-2.12 shared/target/jvm-3 kcl-localstack/target/jvm-2.13 kcl/target/jvm-3 kcl/target/jvm-2.12 root-js-212/target smithy4s-client-transformers/target/jvm-2.12 shared-ciris/target/jvm-2.12 root-jvm-3/target shared-localstack/target/native-2.13 shared-localstack/target/jvm-2.12 kcl-localstack/target/jvm-2.12 shared-ciris/target/js-3 kpl/target/jvm-2.13 smithy4s-client-localstack/target/native-3 smithy4s-client/target/js-2.13 shared-circe/target/jvm-2.12 root-native-3/target kcl-logging-circe/target/jvm-2.13 shared/target/native-3 root-js-213/target smithy4s-client-logging-circe/target/js-3 kcl-ciris/target/jvm-2.13 kinesis-client-logging-circe/target/jvm-2.13 smithy4s-client/target/js-3 compat/target/jvm-3 kinesis-client-logging-circe/target/jvm-2.12 shared-circe/target/jvm-2.13 kinesis-client/target/jvm-2.12 kpl-logging-circe/target/jvm-2.13 root-jvm-212/target shared-ciris/target/native-3 shared-localstack/target/native-3 aws-v2-localstack/target/jvm-3 compat/target/js-3 compat/target/js-2.13 kcl-http4s/target/jvm-2.12 aws-v2-localstack/target/jvm-2.12 root-native-212/target kcl-logging-circe/target/jvm-2.12 kinesis-client/target/jvm-2.13 shared/target/js-2.12 kcl/target/jvm-2.13 feral/target/jvm-2.13 kpl-localstack/target/jvm-3 kpl-localstack/target/jvm-2.13 kcl-ciris/target/jvm-2.12 shared-circe/target/native-2.12 kcl-localstack/target/jvm-3 kinesis-client/target/jvm-3 shared-localstack/target/jvm-2.13 aws-v1-localstack/target/jvm-2.13 shared-ciris/target/js-2.13 kinesis-client-localstack/target/jvm-2.13 smithy4s-client/target/native-3 kpl-logging-circe/target/jvm-3 smithy4s-client-localstack/target/jvm-2.13 aws-v2-localstack/target/jvm-2.13 shared-localstack/target/js-3 compat/target/native-2.13 compat/target/native-3 kpl-logging-circe/target/jvm-2.12 integration-tests/target/js-3 shared/target/js-3 smithy4s-client-logging-circe/target/native-3 shared/target/jvm-2.12 integration-tests/target/jvm-3 integration-tests/target/jvm-2.13 smithy4s-client-localstack/target/js-2.13 shared-circe/target/jvm-3 feral/target/js-2.13 shared-ciris/target/jvm-2.13 shared-localstack/target/jvm-3 compat/target/jvm-2.12 kpl-ciris/target/jvm-3 smithy4s-client/target/jvm-2.13 kpl-localstack/target/jvm-2.12 smithy4s-client-logging-circe/target/jvm-3 integration-tests/target/js-2.13 kcl-http4s/target/jvm-2.13 shared-circe/target/native-3 shared-ciris/target/native-2.13 feral/target/js-3 kinesis-client-localstack/target/jvm-2.12 kcl-http4s/target/jvm-3 compat/target/jvm-2.13 integration-tests/target/native-3 project/target

- name: Compress target directories
if: github.event_name != 'pull_request' && (startsWith(github.ref, 'refs/tags/v') || github.ref == 'refs/heads/main')
run: tar cf targets.tar root-js-3/target shared-ciris/target/jvm-3 root-jvm-213/target shared-localstack/target/js-2.12 smithy4s-client-logging-circe/target/js-2.13 shared-ciris/target/js-2.12 shared/target/native-2.13 aws-v1-localstack/target/jvm-2.12 compat/target/js-2.12 root-native-213/target shared-circe/target/native-2.13 kpl/target/jvm-3 shared-circe/target/js-2.12 target shared/target/jvm-2.13 shared-localstack/target/js-2.13 kpl/target/jvm-2.12 kcl-ciris/target/jvm-3 kpl-ciris/target/jvm-2.13 kpl-ciris/target/jvm-2.12 shared-circe/target/js-3 smithy4s-client-localstack/target/jvm-3 smithy4s-client-localstack/target/js-3 smithy4s-client/target/jvm-3 shared-circe/target/js-2.13 unidocs/target/jvm-2.13 compat/target/native-2.12 smithy4s-client-logging-circe/target/jvm-2.13 kcl-logging-circe/target/jvm-3 kinesis-client-logging-circe/target/jvm-3 aws-v1-localstack/target/jvm-3 shared/target/js-2.13 site/target/jvm-2.13 kinesis-client-localstack/target/jvm-3 shared/target/native-2.12 shared/target/jvm-3 kcl-localstack/target/jvm-2.13 kcl/target/jvm-3 kcl/target/jvm-2.12 root-js-212/target smithy4s-client-transformers/target/jvm-2.12 shared-ciris/target/jvm-2.12 root-jvm-3/target shared-localstack/target/native-2.13 shared-localstack/target/jvm-2.12 kcl-localstack/target/jvm-2.12 shared-ciris/target/js-3 kpl/target/jvm-2.13 smithy4s-client-localstack/target/native-3 smithy4s-client/target/js-2.13 shared-circe/target/jvm-2.12 root-native-3/target kcl-logging-circe/target/jvm-2.13 shared/target/native-3 root-js-213/target smithy4s-client-logging-circe/target/js-3 kcl-ciris/target/jvm-2.13 kinesis-client-logging-circe/target/jvm-2.13 smithy4s-client/target/js-3 compat/target/jvm-3 kinesis-client-logging-circe/target/jvm-2.12 shared-circe/target/jvm-2.13 kinesis-client/target/jvm-2.12 kpl-logging-circe/target/jvm-2.13 root-jvm-212/target shared-ciris/target/native-3 shared-localstack/target/native-3 aws-v2-localstack/target/jvm-3 compat/target/js-3 compat/target/js-2.13 kcl-http4s/target/jvm-2.12 aws-v2-localstack/target/jvm-2.12 root-native-212/target kcl-logging-circe/target/jvm-2.12 kinesis-client/target/jvm-2.13 shared/target/js-2.12 kcl/target/jvm-2.13 kpl-localstack/target/jvm-3 kpl-localstack/target/jvm-2.13 kcl-ciris/target/jvm-2.12 shared-circe/target/native-2.12 kcl-localstack/target/jvm-3 kinesis-client/target/jvm-3 shared-localstack/target/jvm-2.13 aws-v1-localstack/target/jvm-2.13 shared-ciris/target/js-2.13 kinesis-client-localstack/target/jvm-2.13 smithy4s-client/target/native-3 kpl-logging-circe/target/jvm-3 smithy4s-client-localstack/target/jvm-2.13 aws-v2-localstack/target/jvm-2.13 shared-localstack/target/js-3 compat/target/native-2.13 compat/target/native-3 kpl-logging-circe/target/jvm-2.12 integration-tests/target/js-3 shared/target/js-3 smithy4s-client-logging-circe/target/native-3 shared/target/jvm-2.12 integration-tests/target/jvm-3 integration-tests/target/jvm-2.13 smithy4s-client-localstack/target/js-2.13 shared-circe/target/jvm-3 shared-ciris/target/jvm-2.13 shared-localstack/target/jvm-3 compat/target/jvm-2.12 kpl-ciris/target/jvm-3 smithy4s-client/target/jvm-2.13 kpl-localstack/target/jvm-2.12 smithy4s-client-logging-circe/target/jvm-3 integration-tests/target/js-2.13 kcl-http4s/target/jvm-2.13 shared-circe/target/native-3 shared-ciris/target/native-2.13 kinesis-client-localstack/target/jvm-2.12 kcl-http4s/target/jvm-3 compat/target/jvm-2.13 integration-tests/target/native-3 project/target
run: tar cf targets.tar root-js-3/target shared-ciris/target/jvm-3 root-jvm-213/target shared-localstack/target/js-2.12 smithy4s-client-logging-circe/target/js-2.13 shared-ciris/target/js-2.12 shared/target/native-2.13 aws-v1-localstack/target/jvm-2.12 compat/target/js-2.12 root-native-213/target shared-circe/target/native-2.13 kpl/target/jvm-3 shared-circe/target/js-2.12 target shared/target/jvm-2.13 shared-localstack/target/js-2.13 kpl/target/jvm-2.12 kcl-ciris/target/jvm-3 kpl-ciris/target/jvm-2.13 kpl-ciris/target/jvm-2.12 shared-circe/target/js-3 smithy4s-client-localstack/target/jvm-3 smithy4s-client-localstack/target/js-3 smithy4s-client/target/jvm-3 shared-circe/target/js-2.13 unidocs/target/jvm-2.13 compat/target/native-2.12 smithy4s-client-logging-circe/target/jvm-2.13 kcl-logging-circe/target/jvm-3 kinesis-client-logging-circe/target/jvm-3 aws-v1-localstack/target/jvm-3 shared/target/js-2.13 feral/target/jvm-3 site/target/jvm-2.13 kinesis-client-localstack/target/jvm-3 shared/target/native-2.12 shared/target/jvm-3 kcl-localstack/target/jvm-2.13 kcl/target/jvm-3 kcl/target/jvm-2.12 root-js-212/target smithy4s-client-transformers/target/jvm-2.12 shared-ciris/target/jvm-2.12 root-jvm-3/target shared-localstack/target/native-2.13 shared-localstack/target/jvm-2.12 kcl-localstack/target/jvm-2.12 shared-ciris/target/js-3 kpl/target/jvm-2.13 smithy4s-client-localstack/target/native-3 smithy4s-client/target/js-2.13 shared-circe/target/jvm-2.12 root-native-3/target kcl-logging-circe/target/jvm-2.13 shared/target/native-3 root-js-213/target smithy4s-client-logging-circe/target/js-3 kcl-ciris/target/jvm-2.13 kinesis-client-logging-circe/target/jvm-2.13 smithy4s-client/target/js-3 compat/target/jvm-3 kinesis-client-logging-circe/target/jvm-2.12 shared-circe/target/jvm-2.13 kinesis-client/target/jvm-2.12 kpl-logging-circe/target/jvm-2.13 root-jvm-212/target shared-ciris/target/native-3 shared-localstack/target/native-3 aws-v2-localstack/target/jvm-3 compat/target/js-3 compat/target/js-2.13 kcl-http4s/target/jvm-2.12 aws-v2-localstack/target/jvm-2.12 root-native-212/target kcl-logging-circe/target/jvm-2.12 kinesis-client/target/jvm-2.13 shared/target/js-2.12 kcl/target/jvm-2.13 feral/target/jvm-2.13 kpl-localstack/target/jvm-3 kpl-localstack/target/jvm-2.13 kcl-ciris/target/jvm-2.12 shared-circe/target/native-2.12 kcl-localstack/target/jvm-3 kinesis-client/target/jvm-3 shared-localstack/target/jvm-2.13 aws-v1-localstack/target/jvm-2.13 shared-ciris/target/js-2.13 kinesis-client-localstack/target/jvm-2.13 smithy4s-client/target/native-3 kpl-logging-circe/target/jvm-3 smithy4s-client-localstack/target/jvm-2.13 aws-v2-localstack/target/jvm-2.13 shared-localstack/target/js-3 compat/target/native-2.13 compat/target/native-3 kpl-logging-circe/target/jvm-2.12 integration-tests/target/js-3 shared/target/js-3 smithy4s-client-logging-circe/target/native-3 shared/target/jvm-2.12 integration-tests/target/jvm-3 integration-tests/target/jvm-2.13 smithy4s-client-localstack/target/js-2.13 shared-circe/target/jvm-3 feral/target/js-2.13 shared-ciris/target/jvm-2.13 shared-localstack/target/jvm-3 compat/target/jvm-2.12 kpl-ciris/target/jvm-3 smithy4s-client/target/jvm-2.13 kpl-localstack/target/jvm-2.12 smithy4s-client-logging-circe/target/jvm-3 integration-tests/target/js-2.13 kcl-http4s/target/jvm-2.13 shared-circe/target/native-3 shared-ciris/target/native-2.13 feral/target/js-3 kinesis-client-localstack/target/jvm-2.12 kcl-http4s/target/jvm-3 compat/target/jvm-2.13 integration-tests/target/native-3 project/target

- name: Upload target directories
if: github.event_name != 'pull_request' && (startsWith(github.ref, 'refs/tags/v') || github.ref == 'refs/heads/main')
Expand Down
32 changes: 32 additions & 0 deletions .mergify.yml
Original file line number Diff line number Diff line change
Expand Up @@ -150,6 +150,38 @@ pull_request_rules:
add:
- docs
remove: []
- name: Label feral PRs
conditions:
- files~=^feral/
actions:
label:
add:
- feral
remove: []
- name: Label feral3 PRs
conditions:
- files~=^.sbt/matrix/feral3/
actions:
label:
add:
- feral3
remove: []
- name: Label feralJS PRs
conditions:
- files~=^.sbt/matrix/feralJS/
actions:
label:
add:
- feralJS
remove: []
- name: Label feralJS3 PRs
conditions:
- files~=^.sbt/matrix/feralJS3/
actions:
label:
add:
- feralJS3
remove: []
- name: Label integration-tests PRs
conditions:
- files~=^integration-tests/
Expand Down
26 changes: 22 additions & 4 deletions build.sbt
Original file line number Diff line number Diff line change
Expand Up @@ -66,7 +66,8 @@ lazy val `shared-circe` = projectMatrix
description := "Common shared utilities for Circe",
libraryDependencies ++= Seq(
Circe.core.value,
Circe.parser.value
Circe.parser.value,
Circe.scodec.value
)
)
.jvmPlatform(allScalaVersions)
Expand Down Expand Up @@ -362,6 +363,19 @@ lazy val integrationTestsJvmSettings: Seq[Setting[_]] = Seq(
tlJdkRelease := Some(11)
)

lazy val feral = projectMatrix
.settings(
description := "Interfaces for constructing AWS Lambda functions via Feral",
libraryDependencies ++= Seq(
Circe.core.value,
Circe.scodec.value,
Feral.lambda.value
)
)
.jvmPlatform(last2ScalaVersions)
.jsPlatform(last2ScalaVersions)
.dependsOn(`shared-circe`)

lazy val integrationTestsJvmDependencies = List(
`kcl-http4s`,
`kcl-localstack`
Expand Down Expand Up @@ -459,7 +473,8 @@ lazy val docs = projectMatrix
),
"circe" -> url("https://circe.github.io/circe/"),
"ciris" -> url("https://cir.is/"),
"localstack" -> url("https://localstack.cloud/")
"localstack" -> url("https://localstack.cloud/"),
"feral" -> url("https://github.com/typelevel/feral")
),
laikaConfig := LaikaConfig.defaults.withConfigValue(
LinkConfig(sourceLinks =
Expand Down Expand Up @@ -495,7 +510,8 @@ lazy val docs = projectMatrix
`kinesis-client-localstack`,
`smithy4s-client`,
`smithy4s-client-logging-circe`,
`smithy4s-client-localstack`
`smithy4s-client-localstack`,
feral
)

lazy val unidocs = projectMatrix
Expand Down Expand Up @@ -526,7 +542,8 @@ lazy val unidocs = projectMatrix
`kinesis-client-localstack`,
`smithy4s-client`,
`smithy4s-client-logging-circe`,
`smithy4s-client-localstack`
`smithy4s-client-localstack`,
feral
).map(_.jvm(Scala213).project): _*
)
)
Expand Down Expand Up @@ -555,6 +572,7 @@ lazy val allProjects = Seq(
`smithy4s-client`,
`smithy4s-client-logging-circe`,
`smithy4s-client-localstack`,
feral,
`integration-tests`,
unidocs
)
Expand Down
4 changes: 4 additions & 0 deletions docs/lambda/directory.conf
Original file line number Diff line number Diff line change
@@ -0,0 +1,4 @@
laika.title = Feral
laika.navigationOrder = [
getting-started.md
]
30 changes: 30 additions & 0 deletions docs/lambda/getting-started.md
Original file line number Diff line number Diff line change
@@ -0,0 +1,30 @@
# Feral

AWS offers the ability to consume Kinesis events via an [AWS Lambda](https://docs.aws.amazon.com/lambda/latest/dg/with-kinesis.html).

kinesis4cats offers an @:source(shared.src.main.scala.kinesis4cats.consumer.lambda.KinesisStreamRecordPayload) that maps to the event structure received in the lambda. This can be used in a [Feral](https://github.com/typelevel/feral) instance.

Feral does offer a similar event, in which you can see an example usage [here](https://github.com/typelevel/feral/blob/main/examples/src/main/scala/feral/examples/KinesisLambda.scala). However, one common problem that users have with Kinesis Lambda functions is that they do not perform [record deaggregation](https://github.com/awslabs/kinesis-aggregation#deaggregation). kinesis4cats offers a `deaggregate` function in its `KinesisStreamEvent` class, which users can leverage to resolve this problem.

## Installation

```scala
libraryDependencies += "io.github.etspaceman" %% "kinesis4cats-feral" % "@VERSION@"
```

## Usage

```scala mdoc:compile-only
import cats.effect._
import feral.lambda._

import kinesis4cats.consumer.feral.KinesisStreamEvent

object kinesisHandler extends IOLambda.Simple[KinesisStreamEvent, INothing] {
type Init
def apply(event: KinesisStreamEvent, context: Context[IO], init: Init) = for {
records <- IO.fromTry(event.deaggregate)
_ <- IO.println(s"Received event with ${records.size} records").as(None)
} yield None
}
```
Loading

0 comments on commit b662e40

Please sign in to comment.