AWS HealthOmics シーケンスストアに ETag が付与されファイルの変更、重複を識別しやすくなりました

2023.11.08

AWS HealthOmics のシーケンスストアへファイル(シーケンスデータ)を保存時にエンティティタグ(ETag)が自動的に付与されるようになり、ファイルの変更を容易に識別できるようになりました。

AWS HealthOmics シーケンスストアで、読み取りセット用に自動計算された ETag が追加

なにが嬉しいのか

エンティティタグ(ETag)はシーケンスストアへ保存したファイル内容(シーケンスデータ)のハッシュです。今回のアップデートによりファイル保存時にハッシュを自動計算し、計算結果は ETag として付与してファイル管理されるようになりました。これによりシーケンスストアへ保存したシーケンスデータの変更、複製を容易に識別できるようになりました。

  • 同じシーケンスデータをシーケンスストアへ別名で保存しても ETag は同じ値で保存されます
  • シーケンスデータに何かしら変更があれば ETag は別の値で保存されます

やってみた

シーケンスストアへファイル保存

ETag が自動計算されるのか試すためにシーケンスストアへファイルを保存してみます。

インポートジョブは成功しファイルが保存され、リードセットが 1 つ追加されました。

追加されたリードセットを開いてみたのですが ETag を確認できる項目がありませんでした。

マネージメントコンソールから確認はできませんでした。

次に AWS CLI からシーケンスストアの単位でリードセットの情報を確認してみました。AWS CLI の実行結果から ETag の表示を確認できました。

$ aws omics list-read-sets --sequence-store-id 4105796119

実行結果

{
    "readSets": [
        {
            "id": "4098818048",
            "arn": "arn:aws:omics:us-east-1:123456789012:sequenceStore/4105796119/readSet/4098818048",
            "sequenceStoreId": "4105796119",
            "subjectId": "DrosophilaMelanogaster",
            "sampleId": "Sample Drosophila melanogaster",
            "status": "ACTIVE",
            "name": "DrosophilaMelanogaster-20231108",
            "referenceArn": "arn:aws:omics:us-east-1:123456789012:referenceStore/7383825511/reference/6329765065",
            "fileType": "FASTQ",
            "sequenceInformation": {
                "totalReadCount": 370156,
                "totalBaseCount": 13325616,
                "alignment": "UNALIGNED"
            },
            "creationTime": "2023-11-08T07:32:47.568000+00:00",
            "creationType": "IMPORT",
            "etag": {
                "algorithm": "FASTQ_MD5up",
                "source1": "51c9b299ef94c2505368ca79a60e2294"
            }
        }
    ]
}

また、リードセット単体で確認するコマンドでも ETag の表示を確認できました。

$ aws omics get-read-set-metadata --sequence-store-id 4105796119 --id 4098818048

実行結果

{
    "id": "4098818048",
    "arn": "arn:aws:omics:us-east-1:123456789012:sequenceStore/4105796119/readSet/4098818048",
    "sequenceStoreId": "4105796119",
    "subjectId": "DrosophilaMelanogaster",
    "sampleId": "Sample Drosophila melanogaster",
    "status": "ACTIVE",
    "name": "DrosophilaMelanogaster-20231108",
    "fileType": "FASTQ",
    "creationTime": "2023-11-08T07:32:47.568000+00:00",
    "sequenceInformation": {
        "totalReadCount": 370156,
        "totalBaseCount": 13325616,
        "alignment": "UNALIGNED"
    },
    "referenceArn": "arn:aws:omics:us-east-1:123456789012:referenceStore/7383825511/reference/6329765065",
    "files": {
        "source1": {
            "totalParts": 1,
            "partSize": 104857600,
            "contentLength": 11320478
        }
    },
    "creationType": "IMPORT",
    "etag": {
        "algorithm": "FASTQ_MD5up",
        "source1": "51c9b299ef94c2505368ca79a60e2294"
    }
}

同じシーケンスデータを保存した場合

同じシーケンスデータを保存した場合は同じ ETag の値になるとのことでしたので確認してみます。同じファイルを同じシーケンスストアへ保存しました。リードセットの ID はユニークな ID が自動的に付与されます。リードセット ID2537315187が新たに保存したファイルです。

$ aws omics list-read-sets --sequence-store-id 4105796119

ETag の値は同じになっていました。同じ内容のシーケンスデータが保存されていると言えます。または手違いで同じデータを重複して登録しているときの判別に利用できます。

実行結果

{
    "readSets": [
        {
            "id": "2537315187",
            "arn": "arn:aws:omics:us-east-1:123456789012:sequenceStore/4105796119/readSet/2537315187",
            "sequenceStoreId": "4105796119",
            "subjectId": "DrosophilaMelanogaster",
            "sampleId": "Sample Drosophila melanogaster",
            "status": "ACTIVE",
            "name": "DrosophilaMelanogaster-20231108",
            "referenceArn": "arn:aws:omics:us-east-1:123456789012:referenceStore/7383825511/reference/6329765065",
            "fileType": "FASTQ",
            "sequenceInformation": {
                "totalReadCount": 370156,
                "totalBaseCount": 13325616,
                "alignment": "UNALIGNED"
            },
            "creationTime": "2023-11-08T10:21:42.140000+00:00",
            "creationType": "IMPORT",
            "etag": {
                "algorithm": "FASTQ_MD5up",
                "source1": "51c9b299ef94c2505368ca79a60e2294"
            }
        },
        {
            "id": "4098818048",
            "arn": "arn:aws:omics:us-east-1:123456789012:sequenceStore/4105796119/readSet/4098818048",
            "sequenceStoreId": "4105796119",
            "subjectId": "DrosophilaMelanogaster",
            "sampleId": "Sample Drosophila melanogaster",
            "status": "ACTIVE",
            "name": "DrosophilaMelanogaster-20231108",
            "referenceArn": "arn:aws:omics:us-east-1:123456789012:referenceStore/7383825511/reference/6329765065",
            "fileType": "FASTQ",
            "sequenceInformation": {
                "totalReadCount": 370156,
                "totalBaseCount": 13325616,
                "alignment": "UNALIGNED"
            },
            "creationTime": "2023-11-08T07:32:47.568000+00:00",
            "creationType": "IMPORT",
            "etag": {
                "algorithm": "FASTQ_MD5up",
                "source1": "51c9b299ef94c2505368ca79a60e2294"
            }
        }
    ]
}

S3 経由してインポート・エクスポート

シーケンスストアにファイルを保存するとき、シーケンスストアからファイルを取り出すときは基本的には S3 を経由することが多いです。S3 は S3 で ETag の計算されるのですが、インポートしたときのファイルと、エクスポートしたときのファイルの ETag に違いはあるのか気になりました。

先ほどインポートしたファイルをエクスポートし、ETag の値を比較してみます。ファイルのエクスポート操作は以下のブログをご参考ください。

AWS HealthOmics のシーケンスストアからファイルを取り出す方法 | DevelopersIO

エクスポートジョブを実行します。

aws omics start-read-set-export-job \
    --sequence-store-id 4105796119 \
    --destination s3://omics-work/export/ \
    --role-arn arn:aws:iam::123456789012:role/OmicsStorageServiceRole \
    --sources readSetId=4098818048

実行結果

{
    "id": "8650862745",
    "sequenceStoreId": "4105796119",
    "destination": "s3://omics-work/export/",
    "status": "SUBMITTED",
    "creationTime": "2023-11-08T10:07:17.531000+00:00"
}

エクスポートジョブの完了を確認します。

aws omics get-read-set-export-job --sequence-store-id 4105796119 --id 8650862745

実行結果

{
    "id": "8650862745",
    "sequenceStoreId": "4105796119",
    "destination": "s3://omics-work/export/",
    "status": "COMPLETED",
    "statusMessage": "The job completed successfully.",
    "creationTime": "2023-11-08T10:07:17.531000+00:00",
    "completionTime": "2023-11-08T10:08:34.681000+00:00",
    "readSets": [
        {
            "id": "4098818048",
            "status": "FINISHED",
            "statusMessage": "The source job has completed successfully."
        }
    ]
}

確認結果

インポート、エクスポートで S3 へ保存されたオブジェクトの ETag は異なりました。

シーケンスストアへインポートしたオブジェクトの ETag は11351a8a609b8200f33fc9240da92e1d-2

シーケンスストアからエクスポートしたオブジェクトの ETag はcd4924df8fdb0de4a2af798ca4746778-1

シーケンスストアへ保存されたときの ETag の値とも異なります。ちなみにシーケンスストアの方は保存されたファイルの拡張子によっても計算方法が異なります。

How ETags are calculated - AWS HealthOmics

おわりに

シーケンスストアに ETag の自動計算が追加され、ゲノムデータの整合性の確認、データ監査、重複データの識別が容易になるアップデートでした。扱うデータが特殊なこともあり、監査対応や改ざんがないかの検証に役立つのはないでしょうか。

筆の遅いアップデート職人のためアップデートから 1 か月経過しての検証でした。HealthOmics のアップデートはひとまず試すようにはしていますのでまた何かあればご紹介します。

参考