feat: 新規作成。コードベースは実装検証時のものを利用。
This commit is contained in:
parent
b3dc77fa44
commit
54d5961614
19
lambda/transfer-medpass-data/Dockerfile
Normal file
19
lambda/transfer-medpass-data/Dockerfile
Normal file
@ -0,0 +1,19 @@
|
||||
FROM python:3.9
|
||||
|
||||
ENV TZ="Asia/Tokyo"
|
||||
|
||||
WORKDIR /function
|
||||
COPY Pipfile Pipfile.lock ${WORKDIR}
|
||||
RUN \
|
||||
apt update -y && \
|
||||
# パッケージのセキュリティアップデートのみを適用するコマンド
|
||||
apt install -y unattended-upgrades && \
|
||||
unattended-upgrades && \
|
||||
pip install --upgrade pip wheel setuptools && \
|
||||
pip install pipenv --no-cache-dir && \
|
||||
pipenv install --system --deploy && \
|
||||
pip uninstall -y pipenv virtualenv-clone virtualenv
|
||||
COPY src ./
|
||||
|
||||
ENTRYPOINT [ "/usr/local/bin/python", "-m", "awslambdaric" ]
|
||||
CMD [ "transfer-medpass-data.handler" ]
|
||||
16
lambda/transfer-medpass-data/Pipfile
Normal file
16
lambda/transfer-medpass-data/Pipfile
Normal file
@ -0,0 +1,16 @@
|
||||
[[source]]
|
||||
url = "https://pypi.org/simple"
|
||||
verify_ssl = true
|
||||
name = "pypi"
|
||||
|
||||
[packages]
|
||||
awslambdaric = "*"
|
||||
boto3 = "*"
|
||||
pyzipper = "*"
|
||||
|
||||
[dev-packages]
|
||||
autopep8 = "*"
|
||||
flake8 = "*"
|
||||
|
||||
[requires]
|
||||
python_version = "3.9"
|
||||
292
lambda/transfer-medpass-data/Pipfile.lock
generated
Normal file
292
lambda/transfer-medpass-data/Pipfile.lock
generated
Normal file
@ -0,0 +1,292 @@
|
||||
{
|
||||
"_meta": {
|
||||
"hash": {
|
||||
"sha256": "aedbb7748f654696e0433a6c30f5bee011d6cf0acff5d4cc6fe8b4a6d7c617aa"
|
||||
},
|
||||
"pipfile-spec": 6,
|
||||
"requires": {
|
||||
"python_version": "3.9"
|
||||
},
|
||||
"sources": [
|
||||
{
|
||||
"name": "pypi",
|
||||
"url": "https://pypi.org/simple",
|
||||
"verify_ssl": true
|
||||
}
|
||||
]
|
||||
},
|
||||
"default": {
|
||||
"awslambdaric": {
|
||||
"hashes": [
|
||||
"sha256:04d4d4b63cef0e9aad3adea95a5cf3f81634bccde625f104ff025f764a3e8874",
|
||||
"sha256:0a9922690eb7722417cbac55b913ab070c88444ab83290293debf29d5d9ca371",
|
||||
"sha256:0e55a815caef1258ed7a9b0adad54e5f1b2ca63966d21342dc5da5b55dd471ef",
|
||||
"sha256:2566a9db2c613fddddc22aedb45e74dbcd5c1a044da6992424680be719db80c9",
|
||||
"sha256:34a3e8d27b84ccc9535086487eed50425c0db7a016bf91cf24d8d6cc853faec3",
|
||||
"sha256:403109390f1a9856f8f6d5f0d5e7f2f83bdec99a62d024e433bff50eda2ed373",
|
||||
"sha256:4dbd3e2262d080327a90e1ac9d087d7616e8b5be6da83be9fd3ca1b5ae575173",
|
||||
"sha256:506f004ca08a2f43a898b65dad9d6dd2b2a4910ebe43dcc6682dc5ca0267c24a",
|
||||
"sha256:662b95b6079b563d3e2ef4fda7bcb20e360901eae7a646425612ef2f4e5d6bdf",
|
||||
"sha256:6de8d5ea0fc8cb780e060fc06a84328fda3ed329faf97606db59287814490ade",
|
||||
"sha256:6f298068e2791b0ec5c420ef27cdf8aaba23486dfa5917b6c3067e30c97dde4f",
|
||||
"sha256:7699c822197f98cc22c262af2368c99d69b43a73113099be52545b195c5e0064",
|
||||
"sha256:7b75376d62a294e37d96507a68290dd94ce83f5b1a597c42d29242545e1ee126",
|
||||
"sha256:98b16b4752f16b6a0562cfc1db2e6ce63b2a41ffa97c27e784c3ae5e8c2dc91d",
|
||||
"sha256:bf57203ebeb4d718b34cd168f6b5ef497bfd2481adf848c5252faf38dccd7bf1",
|
||||
"sha256:bf824aeff2cde789db1167c377573f1dbf2bf01e75eeb31651de00786ef09ed0",
|
||||
"sha256:d3438bf0be646d61f8a60fb668c0c3b103963611462f35bf2db11ef50242f54f",
|
||||
"sha256:d530ab882984188436f3869a2fc172086ab6b43a5f7502a86b241347a5441de3",
|
||||
"sha256:e4be962e90035f362511eac65ad5c0242da15f73cfae27716de42b47f9d0a2a8",
|
||||
"sha256:e5145fa63560901d7dbe26c5ee0dd5977f3783ab799fa04f50c50c207be78305",
|
||||
"sha256:eb1a13c130a8a2ffc1c127a2bd581f45b9f10ec32a3892e41b5b1bdc9788b92d",
|
||||
"sha256:ed798ab90f5230fe11079b269c3748bd875bc218c2ad4528ae2b4a04a0cd92b5",
|
||||
"sha256:f55cf42cea67661ccea604b7774ba8cb1e467dadaf3d4c4b7f4e029faf43a46b"
|
||||
],
|
||||
"index": "pypi",
|
||||
"version": "==2.0.11"
|
||||
},
|
||||
"boto3": {
|
||||
"hashes": [
|
||||
"sha256:684cba753d64978a486e8ea9645d53de0d4e3b4a3ab1495b26bd04b9541cea2d",
|
||||
"sha256:db7bbb1c6059e99b74dcf634e497b04addcac4c527ae2b2696e47c39eccc6c50"
|
||||
],
|
||||
"index": "pypi",
|
||||
"version": "==1.34.92"
|
||||
},
|
||||
"botocore": {
|
||||
"hashes": [
|
||||
"sha256:4211a22a1f6c6935e70cbb84c2cd93b29f9723eaf5036d59748dd104f389a681",
|
||||
"sha256:d1ca4886271f184445ec737cd2e752498648cca383887c5a37b2e01c8ab94039"
|
||||
],
|
||||
"markers": "python_version >= '3.8'",
|
||||
"version": "==1.34.92"
|
||||
},
|
||||
"jmespath": {
|
||||
"hashes": [
|
||||
"sha256:02e2e4cc71b5bcab88332eebf907519190dd9e6e82107fa7f83b1003a6252980",
|
||||
"sha256:90261b206d6defd58fdd5e85f478bf633a2901798906be2ad389150c5c60edbe"
|
||||
],
|
||||
"markers": "python_version >= '3.7'",
|
||||
"version": "==1.0.1"
|
||||
},
|
||||
"pycryptodomex": {
|
||||
"hashes": [
|
||||
"sha256:0daad007b685db36d977f9de73f61f8da2a7104e20aca3effd30752fd56f73e1",
|
||||
"sha256:108e5f1c1cd70ffce0b68739c75734437c919d2eaec8e85bffc2c8b4d2794305",
|
||||
"sha256:19764605feea0df966445d46533729b645033f134baeb3ea26ad518c9fdf212c",
|
||||
"sha256:1be97461c439a6af4fe1cf8bf6ca5936d3db252737d2f379cc6b2e394e12a458",
|
||||
"sha256:25cd61e846aaab76d5791d006497134602a9e451e954833018161befc3b5b9ed",
|
||||
"sha256:2a47bcc478741b71273b917232f521fd5704ab4b25d301669879e7273d3586cc",
|
||||
"sha256:59af01efb011b0e8b686ba7758d59cf4a8263f9ad35911bfe3f416cee4f5c08c",
|
||||
"sha256:5dcac11031a71348faaed1f403a0debd56bf5404232284cf8c761ff918886ebc",
|
||||
"sha256:62a5ec91388984909bb5398ea49ee61b68ecb579123694bffa172c3b0a107079",
|
||||
"sha256:645bd4ca6f543685d643dadf6a856cc382b654cc923460e3a10a49c1b3832aeb",
|
||||
"sha256:653b29b0819605fe0898829c8ad6400a6ccde096146730c2da54eede9b7b8baa",
|
||||
"sha256:69138068268127cd605e03438312d8f271135a33140e2742b417d027a0539427",
|
||||
"sha256:6e186342cfcc3aafaad565cbd496060e5a614b441cacc3995ef0091115c1f6c5",
|
||||
"sha256:76bd15bb65c14900d98835fcd10f59e5e0435077431d3a394b60b15864fddd64",
|
||||
"sha256:7805830e0c56d88f4d491fa5ac640dfc894c5ec570d1ece6ed1546e9df2e98d6",
|
||||
"sha256:7a710b79baddd65b806402e14766c721aee8fb83381769c27920f26476276c1e",
|
||||
"sha256:7a7a8f33a1f1fb762ede6cc9cbab8f2a9ba13b196bfaf7bc6f0b39d2ba315a43",
|
||||
"sha256:82ee7696ed8eb9a82c7037f32ba9b7c59e51dda6f105b39f043b6ef293989cb3",
|
||||
"sha256:88afd7a3af7ddddd42c2deda43d53d3dfc016c11327d0915f90ca34ebda91499",
|
||||
"sha256:8af1a451ff9e123d0d8bd5d5e60f8e3315c3a64f3cdd6bc853e26090e195cdc8",
|
||||
"sha256:8ee606964553c1a0bc74057dd8782a37d1c2bc0f01b83193b6f8bb14523b877b",
|
||||
"sha256:91852d4480a4537d169c29a9d104dda44094c78f1f5b67bca76c29a91042b623",
|
||||
"sha256:9c682436c359b5ada67e882fec34689726a09c461efd75b6ea77b2403d5665b7",
|
||||
"sha256:bc3ee1b4d97081260d92ae813a83de4d2653206967c4a0a017580f8b9548ddbc",
|
||||
"sha256:bca649483d5ed251d06daf25957f802e44e6bb6df2e8f218ae71968ff8f8edc4",
|
||||
"sha256:c39778fd0548d78917b61f03c1fa8bfda6cfcf98c767decf360945fe6f97461e",
|
||||
"sha256:cbe71b6712429650e3883dc81286edb94c328ffcd24849accac0a4dbcc76958a",
|
||||
"sha256:d00fe8596e1cc46b44bf3907354e9377aa030ec4cd04afbbf6e899fc1e2a7781",
|
||||
"sha256:d3584623e68a5064a04748fb6d76117a21a7cb5eaba20608a41c7d0c61721794",
|
||||
"sha256:e48217c7901edd95f9f097feaa0388da215ed14ce2ece803d3f300b4e694abea",
|
||||
"sha256:f2e497413560e03421484189a6b65e33fe800d3bd75590e6d78d4dfdb7accf3b",
|
||||
"sha256:ff5c9a67f8a4fba4aed887216e32cbc48f2a6fb2673bb10a99e43be463e15913"
|
||||
],
|
||||
"markers": "python_version >= '2.7' and python_version not in '3.0, 3.1, 3.2, 3.3, 3.4'",
|
||||
"version": "==3.20.0"
|
||||
},
|
||||
"python-dateutil": {
|
||||
"hashes": [
|
||||
"sha256:37dd54208da7e1cd875388217d5e00ebd4179249f90fb72437e91a35459a0ad3",
|
||||
"sha256:a8b2bc7bffae282281c8140a97d3aa9c14da0b136dfe83f850eea9a5f7470427"
|
||||
],
|
||||
"markers": "python_version >= '2.7' and python_version not in '3.0, 3.1, 3.2, 3.3'",
|
||||
"version": "==2.9.0.post0"
|
||||
},
|
||||
"pyzipper": {
|
||||
"hashes": [
|
||||
"sha256:0adca90a00c36a93fbe49bfa8c5add452bfe4ef85a1b8e3638739dd1c7b26bfc",
|
||||
"sha256:6d097f465bfa47796b1494e12ea65d1478107d38e13bc56f6e58eedc4f6c1a87"
|
||||
],
|
||||
"index": "pypi",
|
||||
"version": "==0.3.6"
|
||||
},
|
||||
"s3transfer": {
|
||||
"hashes": [
|
||||
"sha256:5683916b4c724f799e600f41dd9e10a9ff19871bf87623cc8f491cb4f5fa0a19",
|
||||
"sha256:ceb252b11bcf87080fb7850a224fb6e05c8a776bab8f2b64b7f25b969464839d"
|
||||
],
|
||||
"markers": "python_version >= '3.8'",
|
||||
"version": "==0.10.1"
|
||||
},
|
||||
"simplejson": {
|
||||
"hashes": [
|
||||
"sha256:01f426ee9e3a2d205aa4c22c3da996b51f2de75c4199ef703258a28b304dea8c",
|
||||
"sha256:03de1ec4ad734f28ca49b0a758b997d752be0d089ed30360157c4e8811999c8f",
|
||||
"sha256:041dd69026284d10f035cefb4a75026d2cfcef31f31e62585eeb2b7776e7e047",
|
||||
"sha256:05a668d4a93816fb8a644e90e7987aa3beeb9d2112ca50a474d41e6acb5bb88a",
|
||||
"sha256:094275b1b8f003afce1167c8a674cd1ee2fd48c566632dac5d149901d5012ff8",
|
||||
"sha256:097e48686e49026836ef384c7c10ca670acc023cb16a976a689c2eb6c1852df4",
|
||||
"sha256:0cc9a47bf8cde85c99db5f4a919bb756e62427ade0f2e875a6ec89ae8492d486",
|
||||
"sha256:0cdb5069870f7d26a34e5adc30672d0a7b26e652720530a023bb3a8d8a42e37f",
|
||||
"sha256:0dcc54e7cfbd9674ec4ca181e26eaa5b038446601faeaa6c83d146ddef2f2652",
|
||||
"sha256:16fbebfc38ad4285c256d2430797fd669b0437d090e985c6d443521d4303b133",
|
||||
"sha256:1844d7782652f859d9648531778582d4842d80cfff8d334eb23bb8da0d22a1b0",
|
||||
"sha256:2362c66d2c633925d90f2f177f05e0570d320d986130d34dff9ad6edbf7be8ac",
|
||||
"sha256:29a86bc9c8a913a4e0ffab85c563a7505cdf4bd13fba05342f8314facc0b7586",
|
||||
"sha256:2a6e5c0e0817fb20dbb880c83caebbd4ef39f1901f6f8e53b73a3c74de4e5172",
|
||||
"sha256:2d1b47f768e1f4c1c8a9457effabed735939401e85c0ddcdf68444c88a9242e6",
|
||||
"sha256:30e381471158290ccb79bd31e7bbda4c8f2cf7e1a5f6b557c1b97d6036ccd05b",
|
||||
"sha256:313dfd911723dc3022fed7050a7b315d5d0681cd56eee08e44e2cbd39fd9ad81",
|
||||
"sha256:32de1672f91a789cc9e1c36c406b2d75457a242d64e9e73a70b9b814ef00095e",
|
||||
"sha256:340b7d085b4a5063aacb8664b1250e4a7426c16e1cc80705c548a229153af147",
|
||||
"sha256:34d95ad8e27754f0d91917600d6ea273e05c82a71021f168c45be48637d9502f",
|
||||
"sha256:3d549efc7e8f9a180c59462b124991b690ff25c235d5cf495c3246c66a7679cd",
|
||||
"sha256:3dbfaa79b1c0efdb768392a19110f1aff793f3e8d43f57e292f46734b8affb45",
|
||||
"sha256:44058bea97429cfa0d6fb1d8eb0736a77022f34a326d5bc64fd6fed8d9304571",
|
||||
"sha256:46b8cc86204b51eddcf157cbaf3c44a20f24393030442af0909eeb961186cb67",
|
||||
"sha256:47509775a5c41ec2a6cd17c9c00fc14965cad8e6670059663872ba5e39332f57",
|
||||
"sha256:4b5df4ee48403885046c6f4fd8adc84c4ac0adec69482f22a17bd4ba52876341",
|
||||
"sha256:544e5607142d66a469ecf78a3154ec0f915834dc3b8cfdb2677a78ca58319ad6",
|
||||
"sha256:56d36f47bc7c7684504f0f18feb161a0b1162546b3622e45aa6155f8285180ac",
|
||||
"sha256:5b217201efc007166e24e9a282007cc208a2d059350a7c5bd0b0303460ad3019",
|
||||
"sha256:5c4f59dd358c3a99efa46d62dc1583be3a1c37171f5240c4cbdc2d5838870902",
|
||||
"sha256:5d45ed9452a42064805143480397b586ea2ea322f4b8b69034c51181e7f38342",
|
||||
"sha256:6197cfebe659ac802a686b5408494115a7062b45cdf37679c4d6a9d4f39649b7",
|
||||
"sha256:65de5876e34780b43f92d9d2539de16ecc56d16f56e56e59b34adfa1cebe064f",
|
||||
"sha256:676e8c182f8079851f12ae1cee2fcebe04def2da2a5703a9d747ab125af47732",
|
||||
"sha256:682b202f56d9d9e1bb22eaca3e37321002223fd5ddef7189b9233e3c14079917",
|
||||
"sha256:695da62e494e4689ab78fae173a78390a175b6a5ccc4292277ce0f8dba3945d5",
|
||||
"sha256:6d65ea4582b47d77e9094c22eb0aeded0ebd96c1df86e988870b40c6514c6e21",
|
||||
"sha256:706a7fc81ceeb321a1040d008b134056012188f95a5c31ad94fb03153b35cc84",
|
||||
"sha256:7339bd6203351555c1e728acd601ba95ebce0f6041ebdb386e025f00af3f1769",
|
||||
"sha256:7701a289d45fdfeb37f1d15cf638801cea439df667a613379443772a86e82936",
|
||||
"sha256:7f27a079cb009ba569983061a50a9270b7e1d35f81e4eeaf0e26f8924027e550",
|
||||
"sha256:827ddc3b3603f7d0421b054388da6face7871d800c4b3bbedeedc8778e4085ea",
|
||||
"sha256:8ccc982197982cdda19e3e5ba4ef7f6ad6bed3eb39bb423bfbf7fa2cd29488ab",
|
||||
"sha256:8f381747c2edebe3c750a571e55103bfcc33b2707a9b91ae033ab9ba718d976a",
|
||||
"sha256:93ba80fbf959b5852554f23201a5f4b30885930c303546ffa883859a435ea3cf",
|
||||
"sha256:9a50a9da1cf93e35f26c4ddee162abf3184a340339ec2d4001c34607b87e71b4",
|
||||
"sha256:a1163bfe5d043c20adeb5c4c8e89dd1dd39b375c8ca6f1c1e35ec537ad7a12e7",
|
||||
"sha256:a2285609b4edbf9957440642493788ebef6583042b3fb96217c2e71f29bc6d80",
|
||||
"sha256:a255d30cda6334ba780eb40a56e8134efd3453948b995d3966e45212e34bf018",
|
||||
"sha256:a3bba99178f1b25878752a8bc6da2f93fbae754ebd4914d2ac4b869b9fb24102",
|
||||
"sha256:a56005332d70b8d02d476d4a85818b27b01e51dac1a21d5c1a1d8a5df2efb4a6",
|
||||
"sha256:a89d7fe994b115f0a792e6673f387af3db812a1760d594abad51e0ea11d3e470",
|
||||
"sha256:a8ac155e3fd3b54a63040df024e57e62c130b15a2fc66eff3c2a946f42beed52",
|
||||
"sha256:ab5941e1fd509fc151258477ef4b663fe14c94f8faf3581827bf4b02080fd4ba",
|
||||
"sha256:ab64f087c5863ac621b42e227e5a43bd9b28de581afe7be12ad96562b9be8203",
|
||||
"sha256:ad37f25fd8dfbed80815c3281b82a165be2a74e663856b9a50099d18789987bc",
|
||||
"sha256:b17026f3f349a6e87818cd3531e3bbb5cc78a6f4b2b6718f574a8e0512d71e08",
|
||||
"sha256:b43d3c2e204d709af955bdb904ae127fe137363ace87fbf7dc8fe6017f7f8449",
|
||||
"sha256:b482d1fdd8f860e743c7de8cd6dfe54fb9fe8cd6ccba29e2966912ac89e17b2f",
|
||||
"sha256:b6c6cfc492710d8f0303705fa1ff7bb3d6a145f523384e45a6f3b13ada37021f",
|
||||
"sha256:b9893852c559998f667e6434d2c2474518d4cdfd1b9cec8e57b3c9d577ba55c1",
|
||||
"sha256:bd694c465cc61fa8e599355e535b6eb561279834d9883aeef08d0e86c44c300c",
|
||||
"sha256:c0444423129df448788edc66a129bc7560ad7d6a661d74f0900959c0b44349a1",
|
||||
"sha256:c37b092d29741096c4723f48924a80b1d3de62ca1de254ce88178fa083dd520c",
|
||||
"sha256:ced906b172bfad62736a27cfafcb6e24bc9938533b0529ff8150f7926fe35b54",
|
||||
"sha256:d0d3b9f7cee233368d92c89746dde74313abafaa3ec1f0c06a3f4f164dc27bcc",
|
||||
"sha256:d5f67bffa6fc68e391b2250e1feb43d534ded64a7b918eb89cf7e3e679759d94",
|
||||
"sha256:d9f0dfde448611f4f818da05f9b544a78f29355dc39151b0dad8e7c65c513e4f",
|
||||
"sha256:da6dc0cb00ef1e1a8daf285074ca8b2bb89591170c42ceab0c37bcdb9adc802c",
|
||||
"sha256:dc74a9ef4d61e18ee6f1886b6ef1fe285b1f432885288afacfb7402f7d469448",
|
||||
"sha256:deb71e6166e4f1264174d78b5b88abd52b14c6649e6eabaf9cf93cb1c7362850",
|
||||
"sha256:e042ae053e05fe193514d51d6b0f0243729961901e9a75f8b596bfaf69522c52",
|
||||
"sha256:e2f87a483c4ab0bb2a9adc9ca09173e7f7cf3696e4fa67bd45a6b33181e57921",
|
||||
"sha256:e2fa1ee5ca34ab2ecfbe3f7a7e952a1ecaebb5b4818f002b5b146324912ac3d5",
|
||||
"sha256:e7d3f7cd57ce0c6a5bb8133f8ed5c3d1be0473a88b7d91a300626298f12d0999",
|
||||
"sha256:edb334cab35dcd90eb563fdacb085f10e5dd0b1acb57fa43f8933308b42a8f88",
|
||||
"sha256:efae49d0148ec68b6e012f1b9e19bd530f4dced378ba919e3e906ae2b829cc31",
|
||||
"sha256:f1085cadec0f7e76377951d7a87744628c90ac6cc634fc97eecce0c4d41ec563",
|
||||
"sha256:f15f56b3119fb71fa57eb4613bcd87eb7df6c2f3547de7d341853d3e50cef97e",
|
||||
"sha256:f1b425a857ce52e651739314e4118fc68bd702ef983148b8fd5cb6f68bb6a020",
|
||||
"sha256:f31e126204ec38f92dee119af87cf881044ef7dea6f7477ef774ed3d84199c24",
|
||||
"sha256:f5e0a03e533313eee9437ccc6c4eab47369f17bc919b57df4a20ccd8bc85d8fd",
|
||||
"sha256:f85d87986ca375b8305b5c4f166783b8db383a6469e8b99b8dba22878388f234",
|
||||
"sha256:fa6fe8fa94a831886ee164ac03514f361e1387a62a1b9da32fde5c0c1f27fa8d",
|
||||
"sha256:fb0f8b35c11fd8e4b924f974d331b20fa54555282451db7f2a3b24bd2d33cc11"
|
||||
],
|
||||
"markers": "python_version >= '2.5' and python_version not in '3.0, 3.1, 3.2, 3.3'",
|
||||
"version": "==3.18.4"
|
||||
},
|
||||
"six": {
|
||||
"hashes": [
|
||||
"sha256:1e61c37477a1626458e36f7b1d82aa5c9b094fa4802892072e49de9c60c4c926",
|
||||
"sha256:8abb2f1d86890a2dfb989f9a77cfcfd3e47c2a354b01111771326f8aa26e0254"
|
||||
],
|
||||
"markers": "python_version >= '2.7' and python_version not in '3.0, 3.1, 3.2, 3.3'",
|
||||
"version": "==1.16.0"
|
||||
},
|
||||
"urllib3": {
|
||||
"hashes": [
|
||||
"sha256:34b97092d7e0a3a8cf7cd10e386f401b3737364026c45e622aa02903dffe0f07",
|
||||
"sha256:f8ecc1bba5667413457c529ab955bf8c67b45db799d159066261719e328580a0"
|
||||
],
|
||||
"markers": "python_version < '3.10'",
|
||||
"version": "==1.26.18"
|
||||
}
|
||||
},
|
||||
"develop": {
|
||||
"autopep8": {
|
||||
"hashes": [
|
||||
"sha256:1fa8964e4618929488f4ec36795c7ff12924a68b8bf01366c094fc52f770b6e7",
|
||||
"sha256:2bb76888c5edbcafe6aabab3c47ba534f5a2c2d245c2eddced4a30c4b4946357"
|
||||
],
|
||||
"index": "pypi",
|
||||
"version": "==2.1.0"
|
||||
},
|
||||
"flake8": {
|
||||
"hashes": [
|
||||
"sha256:33f96621059e65eec474169085dc92bf26e7b2d47366b70be2f67ab80dc25132",
|
||||
"sha256:a6dfbb75e03252917f2473ea9653f7cd799c3064e54d4c8140044c5c065f53c3"
|
||||
],
|
||||
"index": "pypi",
|
||||
"version": "==7.0.0"
|
||||
},
|
||||
"mccabe": {
|
||||
"hashes": [
|
||||
"sha256:348e0240c33b60bbdf4e523192ef919f28cb2c3d7d5c7794f74009290f236325",
|
||||
"sha256:6c2d30ab6be0e4a46919781807b4f0d834ebdd6c6e3dca0bda5a15f863427b6e"
|
||||
],
|
||||
"markers": "python_version >= '3.6'",
|
||||
"version": "==0.7.0"
|
||||
},
|
||||
"pycodestyle": {
|
||||
"hashes": [
|
||||
"sha256:41ba0e7afc9752dfb53ced5489e89f8186be00e599e712660695b7a75ff2663f",
|
||||
"sha256:44fe31000b2d866f2e41841b18528a505fbd7fef9017b04eff4e2648a0fadc67"
|
||||
],
|
||||
"markers": "python_version >= '3.8'",
|
||||
"version": "==2.11.1"
|
||||
},
|
||||
"pyflakes": {
|
||||
"hashes": [
|
||||
"sha256:1c61603ff154621fb2a9172037d84dca3500def8c8b630657d1701f026f8af3f",
|
||||
"sha256:84b5be138a2dfbb40689ca07e2152deb896a65c3a3e24c251c5c62489568074a"
|
||||
],
|
||||
"markers": "python_version >= '3.8'",
|
||||
"version": "==3.2.0"
|
||||
},
|
||||
"tomli": {
|
||||
"hashes": [
|
||||
"sha256:939de3e7a6161af0c887ef91b7d41a53e7c5a1ca976325f429cb46ea9bc30ecc",
|
||||
"sha256:de526c12914f0c550d15924c62d72abc48d6fe7364aa87328337a31007fe8a4f"
|
||||
],
|
||||
"markers": "python_version < '3.11'",
|
||||
"version": "==2.0.1"
|
||||
}
|
||||
}
|
||||
}
|
||||
204
lambda/transfer-medpass-data/src/transfer-medpass-data.py
Normal file
204
lambda/transfer-medpass-data/src/transfer-medpass-data.py
Normal file
@ -0,0 +1,204 @@
|
||||
import datetime
|
||||
import logging
|
||||
import os
|
||||
from zoneinfo import ZoneInfo
|
||||
|
||||
import boto3
|
||||
import pyzipper
|
||||
from pyzipper.zipfile import BadZipFile
|
||||
|
||||
# 環境変数
|
||||
# mbj-newdwh2021-staging-data
|
||||
DATA_IMPORT_BUCKET = os.environ["DATA_IMPORT_BUCKET"]
|
||||
# mbj-newdwh2021-staging-backup-medpass
|
||||
MEDPASS_BACKUP_BUCKET = os.environ["MEDPASS_BACKUP_BUCKET"]
|
||||
MEDPASS_TARGET_FOLDER = os.environ["MEDPASS_TARGET_FOLDER"] # medpass/target
|
||||
# /staging/s3/medpassZipExtractPassword
|
||||
MEDPASS_ZIP_PASSWORD_PARAMETER_STORE_KEY = os.environ["MEDPASS_ZIP_PASSWORD_PARAMETER_STORE_KEY"]
|
||||
LOG_LEVEL = os.environ["LOG_LEVEL"]
|
||||
TZ = os.environ["TZ"]
|
||||
|
||||
# 定数
|
||||
# 多重起動抑制用のコントロールファイルの拡張子
|
||||
EXCLUSIVE_CONTROL_FILE_EXT = '.doing'
|
||||
# tmpフォルダパス
|
||||
PATH_TMP = '/tmp'
|
||||
# 拡張子
|
||||
ZIP_FILE_EXT = 'zip'
|
||||
CSV_FILE_EXT = 'csv'
|
||||
|
||||
# S3クライアント
|
||||
s3_client = boto3.client('s3')
|
||||
# SystemsManagerクライアント
|
||||
ssm_client = boto3.client('ssm')
|
||||
|
||||
# logger設定
|
||||
logger = logging.getLogger()
|
||||
|
||||
|
||||
def log_datetime_convert_tz(*arg):
|
||||
"""ログに出力するタイムスタンプのロケールを変更する(JST指定)"""
|
||||
return datetime.datetime.now(ZoneInfo(TZ)).timetuple()
|
||||
|
||||
|
||||
formatter = logging.Formatter(
|
||||
'[%(levelname)s]\t%(asctime)s\t%(message)s\n',
|
||||
'%Y-%m-%d %H:%M:%S'
|
||||
)
|
||||
formatter.converter = log_datetime_convert_tz
|
||||
for handler in logger.handlers:
|
||||
handler.setFormatter(formatter)
|
||||
|
||||
level = logging.getLevelName(LOG_LEVEL)
|
||||
if not isinstance(level, int):
|
||||
level = logging.INFO
|
||||
logger.setLevel(level)
|
||||
|
||||
|
||||
def extract_zip_with_password(zip_filepath: str, extract_to_folder: str, password: str):
|
||||
"""
|
||||
暗号化ZIPを解凍する。
|
||||
|
||||
:param zip_filepath: ZIPファイルが保管されているフォルダパス
|
||||
:param extract_to_folder: ZIPファイルの解凍先フォルダ
|
||||
:param password: ZIPパスワード
|
||||
"""
|
||||
# ZIPを解凍
|
||||
try:
|
||||
with pyzipper.AESZipFile(zip_filepath) as z:
|
||||
# ZIP内のファイルは1つのみ
|
||||
inner_filename = z.filelist[0].filename
|
||||
z.extractall(path=extract_to_folder, pwd=password.encode())
|
||||
except BadZipFile as e:
|
||||
pass
|
||||
except Exception as e:
|
||||
pass
|
||||
|
||||
logger.info(f'解凍先フォルダ: {os.listdir("/tmp")}')
|
||||
logger.info(f'解凍ファイルパス: {os.path.join(extract_to_folder, inner_filename)}')
|
||||
return os.path.join(extract_to_folder, inner_filename)
|
||||
|
||||
|
||||
def get_s3_event_parameter(event: dict):
|
||||
s3_event = event["Records"][0]["s3"]
|
||||
event_bucket_name = s3_event["bucket"]["name"]
|
||||
event_object_key = s3_event["object"]["key"]
|
||||
event_file_name = os.path.basename(event_object_key)
|
||||
event_folder_name = os.path.dirname(event_object_key).split('/')[0]
|
||||
|
||||
return event_bucket_name, event_object_key, event_file_name, event_folder_name
|
||||
|
||||
|
||||
def get_ssm_params(parameter_key: str, with_decryption: bool = True):
|
||||
response = ssm_client.get_parameter(
|
||||
Name=parameter_key, WithDecryption=with_decryption)
|
||||
parameter_value = response['Parameter']['Value']
|
||||
return parameter_value
|
||||
|
||||
|
||||
def delete_doing_file(event_bucket_name: str, event_object_key: str):
|
||||
# ⑨ メモリに保持したバケット名/フォルダ名内の「受信データファイル名.doing」ファイルを削除する
|
||||
s3_client.delete_object(
|
||||
Bucket=event_bucket_name, Key=f'{event_object_key}{EXCLUSIVE_CONTROL_FILE_EXT}')
|
||||
|
||||
|
||||
def handler(event, context):
|
||||
try:
|
||||
# ① 処理開始ログを出力する
|
||||
logger.info('I-01-01 処理開始 medパスデータ解凍・復号化・転送処理')
|
||||
|
||||
# ② 処理開始時に受け取ったイベント情報をログに出力する
|
||||
# バケット名・フォルダ名・受信データファイル名をメモリに保持
|
||||
(
|
||||
event_bucket_name,
|
||||
event_object_key,
|
||||
event_file_name,
|
||||
event_folder_name
|
||||
) = get_s3_event_parameter(event)
|
||||
logger.info(f'I-02-01 受信バケット:{event_bucket_name}')
|
||||
logger.info(f'I-02-01 フォルダ名:{event_folder_name}')
|
||||
logger.info(f'I-02-01 ファイル名:{event_file_name}')
|
||||
# ③ S3イベントによるLambdaの重複発火防止の為、メモリに保持したバケット名/フォルダ名内に、「受信データファイル名.doing」ファイルが存在するかチェックする
|
||||
try:
|
||||
s3_client.head_object(
|
||||
Bucket=event_bucket_name, Key=f'{event_object_key}{EXCLUSIVE_CONTROL_FILE_EXT}')
|
||||
logger.error(
|
||||
f'E-01-01 {event_bucket_name}/{event_object_key}は現在処理中です。処理を終了します。')
|
||||
return
|
||||
except Exception:
|
||||
# .doingファイルが見つからなかった場合は、処理を続行する
|
||||
# メモリに保持したバケット名/フォルダ名内に、「受信データファイル名.doing」ファイルを作成する
|
||||
logger.info('I-03-01 medパスデータの解凍・復号化・転送を開始します')
|
||||
s3_client.put_object(
|
||||
Bucket=event_bucket_name, Key=f'{event_object_key}{EXCLUSIVE_CONTROL_FILE_EXT}', Body=b'')
|
||||
|
||||
# ④ S3から暗号化ZIPファイルを読み込む
|
||||
try:
|
||||
logger.info(
|
||||
f'I-04-01 暗号化ZIPファイル読込 読込元:{event_bucket_name}/{event_object_key}')
|
||||
s3_client.download_file(
|
||||
event_bucket_name, event_object_key, os.path.join(PATH_TMP, event_file_name))
|
||||
logger.info('I-04-02 暗号化ZIPファイルをダウンロードしました')
|
||||
except Exception as e:
|
||||
logger.exception(f'E-04-01 暗号化ZIPファイルのダウンロードに失敗しました エラー内容:{e}')
|
||||
raise e
|
||||
|
||||
# ⑤ ZIP解凍パスワードをSSM パラメータストアから取得する
|
||||
try:
|
||||
logger.info(
|
||||
f'I-05-01 ZIP解凍パスワードを読み込み 読込元:{MEDPASS_ZIP_PASSWORD_PARAMETER_STORE_KEY}')
|
||||
zip_password = get_ssm_params(
|
||||
MEDPASS_ZIP_PASSWORD_PARAMETER_STORE_KEY)
|
||||
except Exception as e:
|
||||
logger.exception(f'E-05-01 ZIP解凍パスワードの読み込みに失敗しました エラー内容:{e}')
|
||||
raise e
|
||||
|
||||
# ⑥ ZIPファイルを解凍してローカルに保存
|
||||
try:
|
||||
logger.info(f'I-06-01 ZIP解凍開始')
|
||||
extracted_zip_file_path = extract_zip_with_password(
|
||||
os.path.join(PATH_TMP, event_file_name), PATH_TMP, zip_password)
|
||||
except Exception as e:
|
||||
logger.exception(f'E-06-01 ZIPの解凍に失敗しました エラー内容:{e}')
|
||||
raise e
|
||||
logger.info(f'I-06-02 ZIP解凍成功')
|
||||
# ⑦ バックアップS3バケットにコピー
|
||||
copy_source = {'Bucket': event_bucket_name, 'Key': event_object_key}
|
||||
execute_date_yyyymm = datetime.date.today().strftime('%Y/%m/%d')
|
||||
s3_client.copy_object(
|
||||
Bucket=MEDPASS_BACKUP_BUCKET,
|
||||
Key=f'{execute_date_yyyymm}/{event_file_name}',
|
||||
CopySource=copy_source
|
||||
)
|
||||
logger.info(
|
||||
f'I-07-01 medパス受信データのバックアップ完了:{MEDPASS_BACKUP_BUCKET}/{execute_date_yyyymm}/{event_file_name}')
|
||||
|
||||
# ⑧ データ登録S3バケットにアップロード
|
||||
csv_file_name = extracted_zip_file_path.split('/')[-1]
|
||||
logger.info(csv_file_name)
|
||||
s3_client.upload_file(
|
||||
extracted_zip_file_path,
|
||||
Bucket=DATA_IMPORT_BUCKET,
|
||||
Key=f'{MEDPASS_TARGET_FOLDER}/{csv_file_name}'
|
||||
)
|
||||
|
||||
# アップロード後、元のバケットからは削除する
|
||||
s3_client.delete_object(Bucket=event_bucket_name, Key=event_object_key)
|
||||
logger.info(
|
||||
f'I-08-01 Encise受信データの転送完了:{DATA_IMPORT_BUCKET}/{MEDPASS_TARGET_FOLDER}/{csv_file_name}')
|
||||
|
||||
# ⑨ メモリに保持したバケット名/フォルダ名内の「受信データファイル名.doing」ファイルを削除する
|
||||
delete_doing_file(event_bucket_name, event_object_key)
|
||||
|
||||
logger.info('I-08-09 処理終了 Medpass受信データ転送処理')
|
||||
|
||||
except Exception as e:
|
||||
logger.exception(f'想定外のエラーが発生しました。処理を終了します。 例外内容:{e}')
|
||||
(
|
||||
event_bucket_name,
|
||||
event_object_key,
|
||||
_,
|
||||
_
|
||||
) = get_s3_event_parameter(event)
|
||||
delete_doing_file(event_bucket_name, event_object_key)
|
||||
raise e
|
||||
Loading…
x
Reference in New Issue
Block a user