{"id":22503561,"url":"https://github.com/brainstorm/s3-rust-noodles-bam","last_synced_at":"2025-07-25T09:36:48.346Z","repository":{"id":39987145,"uuid":"352053908","full_name":"brainstorm/s3-rust-noodles-bam","owner":"brainstorm","description":"Rust+AWS+S3+Lambda+Noodles = Serverless Bioinformatics","archived":false,"fork":false,"pushed_at":"2022-09-14T05:49:06.000Z","size":4283,"stargazers_count":5,"open_issues_count":1,"forks_count":2,"subscribers_count":3,"default_branch":"master","last_synced_at":"2024-12-06T05:20:56.592Z","etag":null,"topics":["aws","bioinformatics","lambda","rust"],"latest_commit_sha":null,"homepage":"","language":"Rust","has_issues":true,"has_wiki":null,"has_pages":null,"mirror_url":null,"source_name":null,"license":null,"status":null,"scm":"git","pull_requests_enabled":true,"icon_url":"https://github.com/brainstorm.png","metadata":{"files":{"readme":"README.md","changelog":null,"contributing":null,"funding":null,"license":null,"code_of_conduct":null,"threat_model":null,"audit":null,"citation":null,"codeowners":null,"security":null,"support":null}},"created_at":"2021-03-27T11:20:29.000Z","updated_at":"2024-11-28T02:45:07.000Z","dependencies_parsed_at":"2022-08-25T18:31:36.828Z","dependency_job_id":null,"html_url":"https://github.com/brainstorm/s3-rust-noodles-bam","commit_stats":null,"previous_names":["brainstorm/s3-rust-noodles-bam"],"tags_count":0,"template":false,"template_full_name":null,"repository_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/brainstorm%2Fs3-rust-noodles-bam","tags_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/brainstorm%2Fs3-rust-noodles-bam/tags","releases_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/brainstorm%2Fs3-rust-noodles-bam/releases","manifests_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/brainstorm%2Fs3-rust-noodles-bam/manifests","owner_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/owners/brainstorm","download_url":"https://codeload.github.com/brainstorm/s3-rust-noodles-bam/tar.gz/refs/heads/master","host":{"name":"GitHub","url":"https://github.com","kind":"github","repositories_count":228540811,"owners_count":17934029,"icon_url":"https://github.com/github.png","version":null,"created_at":"2022-05-30T11:31:42.601Z","updated_at":"2022-07-04T15:15:14.044Z","host_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub","repositories_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories","repository_names_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repository_names","owners_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/owners"}},"keywords":["aws","bioinformatics","lambda","rust"],"created_at":"2024-12-06T23:34:51.585Z","updated_at":"2024-12-06T23:34:52.142Z","avatar_url":"https://github.com/brainstorm.png","language":"Rust","funding_links":[],"categories":[],"sub_categories":[],"readme":"# Read BAM header on an AWS lambda with Noodles\n\nThis is a small Bioinformatics proof of concept that bundles [noodles](http://github.com/zaeleus/noodles) into an AWS Lambda.\n\nA previous lambda was written using the C-bindgen-based [rust-htslib](https://github.com/brainstorm/s3-rust-htslib-bam). This iteration gets rid of the `unsafe` interfacing with the C-based [htslib](https://github.com/samtools/htslib).\n\n# Quickstart\n\nThis README assumes the following prerequisites:\n\n1. You are already authenticated against AWS in your shell.\n2. You have a [functioning Rust(up) installation](https://rustup.rs/).\n3. You have adjusted the KEY, BUCKET, REGION constants in `main.rs`\n4. You have installed cargo-lambda and prerequisites via `cargo install cargo-lambda`.\n5. You should prepare [small test BAM](https://github.com/umccr/ega-submit/tree/master/test) in some S3 bucket. See `event.json`\n\n## Local Run\n\nJust run the following commands on **separate terminal sessions**.\n\nBuild Local:\n```\ncargo build\n```\n\nStart Local Server:\n```\ncargo lambda start\n```\n\nInvoke Lambda with event or by pointing it to BAM file:\n```\ncargo lambda invoke s3-rust-noodles-bam --data-file events/event.json | jq\ncargo lambda invoke s3-rust-noodles-bam --data-ascii '{\"bam\": \"s3://some/key.bam\"}' | jq\n```\n\nInvoke Http Lambda with APIGateway mock event:\n\n```\ncargo lambda invoke apigw --data-file events/mock_event.json | jq\ncargo lambda invoke apigw --data-file events/mock_event_big.json | jq\ncargo lambda invoke apigw --data-file events/mock_event_empty.json | jq\n```\n\n## Deployment\n\nInstall CDK dependencies:\n\n```\nnpm install cdk\n```\n\nBuild fresh and deploy:\n```\ncargo clean\ncdk diff\ncdk deploy\n```\n\n\n## Testing\n\nCall Main Lambda Function:\n```\naws lambda invoke --function-name \u003cs3-rust-noodles-bam-...\u003e out.json\n```\n\n\u003e NOTE: `awscurl` requires AWS credentials\n\nCall Endpoint:\n```\nawscurl -H \"Accept: application/json\" --region ap-southeast-2 \"https://\u003cmy-apigw-ep\u003e.execute-api.ap-southeast-2.amazonaws.com/prod/\" | jq\n```\n\nCall Endpoint with POST payload:\n```\nawscurl -X POST -d \"@event_big.json\" -H \"Content-Type: application/json\" --region ap-southeast-2 \"https://\u003cmy-apigw-ep\u003e.execute-api.ap-southeast-2.amazonaws.com/prod/\" | jq\n```\n","project_url":"https://awesome.ecosyste.ms/api/v1/projects/github.com%2Fbrainstorm%2Fs3-rust-noodles-bam","html_url":"https://awesome.ecosyste.ms/projects/github.com%2Fbrainstorm%2Fs3-rust-noodles-bam","lists_url":"https://awesome.ecosyste.ms/api/v1/projects/github.com%2Fbrainstorm%2Fs3-rust-noodles-bam/lists"}