Package: aws-lambda-ci
Continuous integration pipeline for aws lambda functionFeatures✅ Supports the two famous lambda runtimes python and nodejs.✅ Supports installing custom packages that does not exist in lambda runtime passed to CI process as a
package’s descriptor file path in git repository.✅ Supports installing custom pip/npm dependencies that does not exist in lambda runtime and passed to CI process as a
package’s descriptor file path,packages.jsonorrequirements.txt.✅ The integration/deployment process is fast thanks to code and dependencies caching.✅ The lambda dependencies packages are built in a sandboxed local environment that replicates the live AWS Lambda
environment almost identically – including installed software and libraries.✅ The pipeline does not break the currently published version and traffic shifting between the  current and new
deployment is seamless.RequirementsIAM PermissionsThe user/role that call this pipeline should have these permissions attached to it.{"Version":"2012-10-17","Statement":[{"Sid":"","Effect":"Allow","Action":["s3:ListBucket","s3:GetObject"],"Resource":["arn:aws:s3:::artifacts-bucket-name/*","arn:aws:s3:::artifacts-bucket-name"]},{"Sid":"","Effect":"Allow","Action":["s3:PutObject","s3:GetObject"],"Resource":["arn:aws:s3:::artifacts-bucket-name/lambda-ci/function-name/*","arn:aws:s3:::artifacts-bucket-name/lambda-ci/function-name"]},{"Sid":"","Effect":"Allow","Action":["lambda:UpdateFunctionConfiguration","lambda:UpdateFunctionCode","lambda:UpdateAlias","lambda:PublishVersion","lambda:GetFunction"],"Resource":"arn:aws:lambda:us-east-1:YOUR_ACCOUNT_ID:function:function-name"},{"Sid":"","Effect":"Allow","Action":["lambda:PublishLayerVersion","Lambda:ListLayerVersions"],"Resource":"arn:aws:lambda:us-east-1:YOUR_ACCOUNT_ID:layer:function-layer-name"},{"Sid":"","Effect":"Allow","Action":"lambda:GetLayerVersion","Resource":"arn:aws:lambda:us-east-1:YOUR_ACCOUNT_ID:layer:function-layer-name:*"}]}Packagespython3dockerUsageInstallationpip3installaws-lambda-ciArgumentsThese are the available arguments:ARGUSAGE–app-s3-bucketThe s3 bucket name that will hold the application code and dependenciesRequiredDefault: NoneAllowed: existing S3 bucket name–function-nameAWS lambda function nameRequiredDefault: NoneAllowed: existing lambda function name–function-runtimeAWS lambda function runtime (eg: python3.7)OptionalDefault:python3.8Allowed:pythonX.x``|``nodejsX.x–function-alias-nameAWS Lambda alias name (eg: latest)OptionalDefault:latestAllowed: version tag (eg:latest,qa,prod…)–function-layer-nameAWS Lambda layer name (eg: demo-lambda-dependencies)OptionalDefault:{function-name}-depsAllowed: a valid layer name–app-src-pathLambda function sources directory that will be archived (eg: demo-lambda/src)OptionalDefault: current directoryAllowed: an existing directory with source code–app-packages-descriptor-pathPackages descriptor path (eg: demo-lambda/requirements.txt)OptionalDefault:requirements.txtAllowed: an existing and validrequirements.txtorpackage.json–source-versionThe unique revision id (eg: github commit sha, or SemVer tag)OptionalDefault: Random hashAllowed:commithash |tagver–aws-profile-nameAWS profile name (if not provided, will use default aws env variables)OptionalDefault: NoneAllowed: existing aws profile name–watch-log-streamWatch lambda log stream in realtime after publishing the functionOptionalDefault: TrueAllowed: BooleanExampleaws-lambda-ci\--app-s3-bucket"kodhive-prd-useast1-ippan-core-artifacts"\--function-name"useast1-mimoto-api-v1-codeless"\--function-runtime"python3.7"\--function-alias-name"latest"\--function-layer-name"useast1-mimoto-api-v1-codeless-deps"\--app-src-path"app/api/src"\--app-packages-descriptor-path"app/api/src/requirements/lambda.txt"\--source-version"1.0.1"\--aws-profile-name"kodhive_prd"\--watch-log-streamDemosCode and dependencies changesIf both code and dependencies changed, the pipeline will publish both changes.Just code changedIf code changed but not dependencies, the pipeline with publish new code and the dependencies will be left intact.Nothing changedIf both code and dependencies not changed, the pipeline will not publish anything.