AWSã§å€§å®¹éã®æ©æ¢°åŠç¿ã¢ãã«ããµãŒãã¬ã¹ã«éçšãã
ã¯ããã«
ãã®èšäºã§ã¯ã倧容éã®æ©æ¢°åŠç¿ã¢ãã«ãåããAWSãµãŒãã¬ã¹ã¢ãŒããã¯ãã£ã®ã¢ãã«ã±ãŒã¹ãšããã®æ§ç¯æ¹æ³ã玹ä»ããŸãã
察象ãšããèªè ã¯ã次ã®ãããªæããæã€æ¹ã§ãã
- 倧容éã¢ãã«ããµãŒãã¹äžã§éçšããã
- æ©æ¢°åŠç¿ç³»ã®ãµãŒãã¹ãå®ãéçšããã
- æ©æ¢°åŠç¿ã¢ãã«ãéçºãã人ãšãå©çšãã人ã®éçºé åãåããŠéçšããã
- äœã§ããããããµã¯ããšBERTã¢ãã«ãéçšã«ã®ããŠã¿ãã
倧容éã¢ãã«ãã®ãããµãŒãã¬ã¹ã¢ãŒããã¯ãã£ãèãã
Lambdaã¯äœ¿ããªã
ããããªãããå
éšã§æ©æ¢°åŠç¿ã¢ãã«ãå©çšããWebãµãŒãã¹ããAWSã§èšèšãããšããããã©ããªã·ã¹ãã æ§æã«ããŸããã
å€ãã®äººããŸãæãæãã®ã¯ãAPIãšããŠå©çšããLambdaå
ã§æ©æ¢°åŠç¿ã¢ãã«ãçšããæ§æã ãšç§ã¯æããŸãã
ããšãã°äžå³ã®ããã«ãS3ã«ãã¹ãã£ã³ã°ããWebããŒãžãªã©ã®ã¯ã©ã€ã¢ã³ããããAPI GatewayãéããŠLambdaãå®è¡ããæ§æã§ãã
AWSã®å
¬åŒãã³ãºãªã³è³æã§ããSageMakerã§ãããã€ããã¢ãã«ãAPIã§å©çšããæ¹æ³ãšããŠããã®Lambdaãçšããæ§æã玹ä»ãããŠããŸãã
ããããLambdaã«ã¢ããããŒãã§ããããã±ãŒãžã«ã¯å¶éãããããã倧容éã¢ãã«ã¯ããã±ãŒãžã«å«ããããšãã§ããŸããã
S3ã«å€§å®¹éã¢ãã«ãæ ŒçŽããŠLambdaã§èªã¿èŸŒãæ¹æ³ãèããããŸãã
ããããæ®å¿µãªããLambdaã®é¢æ°å
ã§äœ¿ããããŒã«ã«ã¹ãã¬ãŒãžã«ã512MBãŸã§ãšããå¶éããããããã¢ãã«ã®ããŒããã§ããŸããã
ãã®ãããLambdaå ã§å€§å®¹éã¢ãã«ãçšããææ³ã¯ãçŸç¶äœ¿ããŸããïŒããããä»åŸãïŒã
ã§ã¯ã倧容éã¢ãã«ãçµã¿èŸŒãAPIã®æ§æã¯ãã©ããªèšèšãããã®ã§ããããã
ããã€ãèããããŸãããç§ãæšãããã®ã¯AWS Elastic BeanstalkïŒä»¥éãEBïŒãšAmazon Elastic File SystemïŒä»¥éãEFSïŒãçšããæ¹æ³ã§ãã
EBãšEFSã䜿ã
EBã¯ããŠãŒã¶ãŒãçšæãããœãŒã¹ã³ãŒãã«åãããŠããµãŒãéçšã«å¿
èŠãªèšå®ïŒããŒããã©ã³ãµãŒãAuto Scalingãªã©ïŒãããEC2ã€ã³ã¹ã¿ã³ã¹ãæ§ç¯ã»ç®¡çã§ãããµãŒãã¹ã§ãã
ãããã€ããã³ãŒã矀ã¯S3ã«ä¿åããã以åã®ç¶æ
ã«revertããã®ãç°¡åã§ãã
è€éãªèšå®ã¯AWSåŽã«ä»»ããŠããšã«ããæ軜ã«ãµãŒããæ§ç¯ã»éçšããã人ã«ãå§ãã®ãµãŒãã¹ã§ãã
ãŸãEFSã¯ãNFSãµãŒãã®ããã«ããããã¯ãŒã¯äžã§ãã¡ã€ã«ãå
±æã§ããã¹ãã¬ãŒãžãæ§ç¯ã»ç®¡çã§ãããµãŒãã¹ã§ãã
ããšãã°ãEFSãã¡ã€ã«ã·ã¹ãã ã§æ§ç¯ããå
±æãã¡ã€ã«ã¹ãã¬ãŒãžãEC2ã«ããŠã³ãããã°ãEC2ã€ã³ã¹ã¿ã³ã¹äžã§ããŒã«ã«ã¹ãã¬ãŒãžã®ããã«å©çšã§ããŸãã
ã€ãŸããEBãšEFSã䜿ãã°ã倧容éããŒã«ã«ã¹ãã¬ãŒãžãå€ä»ãããEC2ã€ã³ã¹ã¿ã³ã¹ããµã¯ããšæã«å ¥ãã®ã§ãã
åç¯ã®Lambdaã眮ãæããŠäžå³ã®ãããªæ§æã«ããã°ãEC2ã§ç«ã¡äžããAPIãµãŒããããEFSã®å ±æãã¡ã€ã«ã¹ãã¬ãŒãžã«æ ŒçŽãã倧容éã¢ãã«ãçŽæ¥åŒã³åºãããšãã§ããŸãã
EFSãéžãã çç±
æ¬çš¿ã§ã¯EFSãããŒã«ã«ã¹ãã¬ãŒãžãšããŠå©çšããã·ã¹ãã æ§æã玹ä»ããŠããŸãããAWSã«ã¯ä»ã«ãAmazon Elastic Block StoreïŒä»¥éãEBSïŒãåæ§ã®æ©èœã«çšããããšãã§ããŸãã
ãã ãEFSã§ã¯è€æ°ã®EC2ã€ã³ã¹ã¿ã³ã¹ããã®åæã¢ã¯ã»ã¹ãå¯èœãªã®ã«å¯ŸããEBSã¯åäžã®ã€ã³ã¹ã¿ã³ã¹ããã®ã¢ã¯ã»ã¹ããæ³å®ãããŠããŸãããïŒåèïŒ
EBSãå©çšããå Žåãã¢ãã«ãå©çšããã€ã³ã¹ã¿ã³ã¹ããšã«ãã¢ãã«ãã¢ããããŒãããå¿
èŠããããŸãã
ãã®éçšã¯ãã¢ãã«ã®ç®¡çãç
©éã«ãªãæãããããŸãã
ããã«å¯ŸããŠEFSã䜿ãã°ãã¢ãã«ã®ç®¡çã¯æ¥œã«ãªããŸãã
ã¢ãã«ã®éçºè
ã¯åžžã«æ±ºãŸã£ãã¹ãã¬ãŒãžã«ã¢ãã«ãã¢ããããŒãããã°è¯ããã¢ãã«ã®å©çšè
ã¯æ±ºãŸã£ãã¹ãã¬ãŒãžã®ã¢ãã«ãåç
§ããã°è¯ãã®ã§ãã
以äžãããè€æ°ã®ã€ã³ã¹ã¿ã³ã¹ããåãã¢ãã«ã«ã¢ã¯ã»ã¹ããå®éã®æ¥åéçšãèæ ®ããŠãä»åã¯EFSãéžã³ãŸããã
倧容éã¢ãã«ãã®ãããµãŒãã¬ã¹ãªAPIãäœãã
ããã§ã¯ãåç¯ã§çŽ¹ä»ããEBãšEFSã䜿ã£ãŠã倧容éã¢ãã«ãå©çšããAPIãæ§ç¯ããŠã¿ãŸãããã
ä»åã¯ãæ¥æ¬èªã§å
¥åãããæç« å士ã®é¡äŒŒåºŠãBERTã¢ãã«ã§èšç®ããŠåºåããAPIããäœã£ãŠã¿ãŸãã
åºæ¬çã«ã¯ãããäžã§éãããããªãœãŒã¹ã䜿ããŸãããããããAWSç¡æå©çšæ ã«åãŸããªãæ§æã§ããã泚æãã ããã
æé ã¯æ¬¡ã®ãšããã§ãã
- æé ïŒïŒå€§å®¹éã¢ãã«ãçšæ
- æé ïŒïŒAPIãæ§ç¯
- æé ïŒïŒEBã«å€§å®¹éã¢ãã«ä»¥å€ããããã€
- æé ïŒïŒEBã§äœæããEC2ã«ããŠã³ãããEFSã®å ±æãã¡ã€ã«ã¹ãã¬ãŒãžã«å€§å®¹éã¢ãã«ãã¢ããããŒã
æé ïŒïŒå€§å®¹éã¢ãã«ãçšæ
ãŸãã¯ã¢ãã«ããŒã¿ãæå
ã«çšæããŸãããã
ä»åã¯yoheikikutaæ°ãå
¬éããŠããBERTã¢ãã«ãšSentencePieceã¢ãã«ãå©çšããŸãã
次ã®æé ã®ã¢ãã«ç®¡çãã£ã¬ã¯ããªã§ç€ºãããŒã¿ïŒwiki-ja.txt
以å€ïŒãããŠã³ããŒãããŠã解åããŠãããŠãã ããã
æé ïŒïŒAPIãæ§ç¯
ããŠã³ããŒãããã¢ãã«ã䜿ã£ãŠãæç« ã®é¡äŒŒåºŠãèšç®ããAPIãæ§ç¯ããŸãã
ç§ã®æ¹ã§BERTã®å
¬åŒGithubãªããžããªã®exampleãå©çšãããµã³ãã«ã³ãŒããçšæããŸããã®ã§ããã¡ããcloneãŸãã¯zipããŠã³ããŒãããŠãããŠãã ããã
çšæãããµã³ãã«ã¯ã次ã®ãããªãã£ã¬ã¯ããªæ§æã«ãªã£ãŠããŸãã
. âââ README.md âââ application.py âââ bert_script â  âââ extract_features.py â  âââ modeling.py â  âââ params.py â  âââ tokenization.py â  âââ util.py âââ efs â  âââ config.json â  âââ sp â  âââ wiki-ja.txt âââ requirements.txt
ãã®ãã£ã¬ã¯ããªã§ããŸãã¯ããŒã«ã«ãµãŒããç«ãŠãŠã¿ãŸãããã
ã¯ããã«ã./efs
ã«æé ïŒã§çšæããã¢ãã«ãé
眮ããŸãã
ã²ãšãŸãã次ã®ããã«åã¢ãã«ãé
眮ããŠãã ããã
efs âââ config.json âââ model â  âââ model.ckpt-1400000.data-00000-of-00001 â  âââ model.ckpt-1400000.index â  âââ model.ckpt-1400000.meta âââ sp âââ wiki-ja.model âââ wiki-ja.txt âââ wiki-ja.vocab
é
眮ãã§ããã ./requirements.txt
ã«æžãããããã±ãŒãžãã€ã³ã¹ããŒã«ãã./application.py
ãå®è¡ããããšã§ãããŒã«ã«ã®FlaskãµãŒããç«ã¡äžãããŸãã
次ã«ãç«ã¡äžãã£ãFlaskãµãŒãã«å¯ŸããŠã次ã®curlã³ãã³ããå®è¡ããŠã¿ãŸãããã
$ curl -X POST -H "Content-Type: application/json" \ -d '{"target":"ç³ã¿èŸŒã¿ã®éæäœ", "texts":["éç³ã¿èŸŒã¿", "転眮ç³ã¿èŸŒã¿"]}' \ http://127.0.0.1:5000/sim
äžèšã¯ã/sim
ãšããã«ãŒãã«å¯Ÿã㊠{"target":"ç³ã¿èŸŒã¿ã®éæäœ", "texts":["éç³ã¿èŸŒã¿", "転眮ç³ã¿èŸŒã¿"]}
ãPOSTã§éä¿¡ããã³ãã³ãã§ãã
ãã®ã³ãã³ããå®è¡ãããšã次ã®ãããªã¬ã¹ãã³ã¹ãFlaskãµãŒãããè¿ã£ãŠããŸãã
{ "context": { "sims": [ 0.8242325821278749, 0.7423576157777433 ], "target": "ç³ã¿èŸŒã¿ã®éæäœ", "texts": [ "éç³ã¿èŸŒã¿", "転眮ç³ã¿èŸŒã¿" ] }, "type": "sentence similarity" }
ã¬ã¹ãã³ã¹ã«ã¯æå®ããæç« ïŒcontext.targetïŒããããã«å¯Ÿããåæç« ïŒcontext.textsïŒã®é¡äŒŒåºŠïŒcontext.simsïŒãªã©ãå«ãŸããŠããŸãã
ãããè¿ã£ãŠããã°ãã²ãšãŸãFlaskãµãŒãå
ã§åãã³ãŒãã®å®è¡ã«ã¯åé¡ããªãã¯ãã§ãã
ãããã³ãŒãã®è©³ãã説æã¯æ¬çš¿ã®è¶£æšãšç°ãªãããé¿ããŸãããäžèšã® curl
ãªã¯ãšã¹ããåãåãããã®ã¬ã¹ãã³ã¹ãè¿ãåŠçã®æµããè¡šãã³ãŒãã ãæç²ããŠè§£èª¬ããŸãã
äžèšã«æç²ããã®ã¯ãFlaskã§HTTPãªã¯ãšã¹ããå¶åŸ¡ãã ./application.py
ãšããã¹ã¯ãªããã®ã¹ããããã§ãã
class convert_to_simlarity: def __init__(self): self.output = {"target": None, "texts": None} def from_texts(self, target, texts): self.output["target"] = target self.output["texts"] = texts self.output["sims"] = self.texts2similarity() return self.output def texts2similarity(self): # get futures per sentence body = [self.output["target"]] + self.output["texts"] raw_features = get_futures(BERT_PRAMS, body) # extract "[CLS]" features cls_features = [] for raw_feature in raw_features: cls_feature = list( filter( lambda layer: layer["token"] == "[CLS]", raw_feature["features"] ) ) cls_features.append(cls_feature[0]) # compute cosine simlarity simlarities = calc_simlarity(cls_features[0], cls_features[1:]) return simlarities req = convert_to_simlarity() ################ ### omission ### ################ application = Flask(__name__) application.add_url_rule( "/sim", "similarity", ( lambda: jsonify( { "type": "sentence similarity", "context": req.from_texts( request.get_json()["target"], request.get_json()["texts"], ), } ) ), methods=["POST"], )
äžèšã§ã¯ãååã§å®çŸ©ããã€ã³ã¹ã¿ã³ã¹ãªããžã§ã¯ãããåŸåã§endpointãšã«ãŒãã£ã³ã°ããlambdaé¢æ°ã«çŽä»ããããŠããŸãã
ååã®ã€ã³ã¹ã¿ã³ã¹ãªããžã§ã¯ãã¯ãåãåã£ãæç« ãåã蟌ã¿è¡šçŸïŒæ°å€ãã¯ãã«ïŒã«å€æãããããããé¡äŒŒåºŠãèšç®ããæ§æã§ãã
ãã ãã[CLS]
ããŒã¯ã³ãäžã€ã®æç« å
šäœã®åã蟌ã¿è¡šçŸãšããŠæ±ããŸããã
ïŒãã®é¡äŒŒåºŠã®ç®åºæ¹æ³ã«ã¯è°è«ããããŸãããBERT CLS similarityããªã©ã§æ€çŽ¢ããŠã¿ãŠãã ããïŒ
ãŸããé¡äŒŒåºŠã®èšç®ã«ã¯ã³ãµã€ã³é¡äŒŒåºŠãçšããŠããŸãã
åŸåã®ã«ãŒãã£ã³ã°ã¯ãFlaskã®add_url_ruleã¡ãœããã«æ²¿ã£ãå
容ã§ãã
/sim
ãšããã«ãŒãã®endpointã§POSTãåãåããšãlambdaé¢æ°ãçºç«ããããã«èšå®ãããŠããŸãã
ãã® ./application.py
ãèµ·ç¹ã«ãBERTã¢ãã«ãçšããé¡äŒŒåºŠã®èšç®ãããAPIãèµ·åããããã§ããã詳ããã¯ã³ãŒããèªãã§ç¢ºèªã¿ãŠããŠãã ããã
æé ïŒïŒEBã«å€§å®¹éã¢ãã«ä»¥å€ããããã€
EBã« efs
ãã£ã¬ã¯ããªäžã«ããã¢ãã«é¡ä»¥å€ã®ãã¡ã€ã«ããããã€ããŸãã
ãã ä»åçšæããŠãããµã³ãã«ã§ã¯ãEBãžãããã€ããåã«ã説æã®äŸ¿å®äžã¢ãã«ã®ãã¹ãå€æŽããŸãã
./bert_script/modeling.py
ã«æžããããã¹ãã次ã®ããã«å€æŽããŠãããŠãã ããã
BERT_PRAMS = { 'vocab_file': '/efs/sp/wiki-ja.txt', 'model_file': '/efs/sp/wiki-ja.model', 'bert_config_file': '/efs/config.json', 'init_checkpoint': '/efs/model/model.ckpt-1400000', ... }
ãããšèŠãŠåããã¥ããã§ãããçžå¯Ÿãã¹ãã絶察ãã¹ã«å€æŽããã ãã§ãã
ãããã€ãŸã§ã®ããã»ã¹ã¯ã次ã®AWSå ¬åŒéçºè ã¬ã€ãã«ç€ºãããŠããã®ã§ããã¡ããåç §ããŠãã ããã
ãã®éãEB CLI
ãäºåã«ã€ã³ã¹ããŒã«ããŠããå¿
èŠããããŸãããã¡ãã®æé ãå
¬åŒã®éçºè
ã¬ã€ããåç
§ããŠãã ããã
æé ïŒïŒEBã§äœæããEC2ã«ããŠã³ãããEFSã®å ±æãã¡ã€ã«ã¹ãã¬ãŒãžã«å€§å®¹éã¢ãã«ãã¢ããããŒã
EBã§äœæããEC2ã€ã³ã¹ã¿ã³ã¹ã«å¯ŸããŠEFSã®å
±æãã¡ã€ã«ã¹ãã¬ãŒãžãããŠã³ããããã®ã¹ãã¬ãŒãžã« efs
ãã£ã¬ã¯ããªäžã«ãã£ãã¢ãã«é¡ãã¢ããããŒãããŸãã
ãŸãã¯å ¬åŒã®éçºè ã¬ã€ãã«åŸã£ãŠãEFSãã¡ã€ã«ã·ã¹ãã ãäœæããŸãã
EFSãã¡ã€ã«ã·ã¹ãã ãäœæãçµãã£ãããäžå³ã§ç€ºããªã³ã¯ã§è¡šç€ºãããã¢ãŒãã«ãéããŠãã ããã
ãã®ã¢ãŒãã«ã«æžãããæ¡å
ã«æ²¿ã£ãŠãEC2ã«å
±æãã¡ã€ã«ã¹ãã¬ãŒãžãããŠã³ãããŸãã
ãã ãã®åã«ãEC2ããEFSã®ãã¡ã€ã«ã¹ãã¬ãŒãžã«æ¥ç¶ã§ããããã«ãã»ãã¥ãªãã£ã°ã«ãŒãã«ã«ãŒã«ãè¿œå ããŠãNFSããŒãïŒ2049çªããŒãïŒãžã®ã€ã³ããŠã³ããã©ãã£ãã¯ãèš±å¯ããå¿ èŠããããŸãã
ãŸãããã®åŸã«èªåã®PCããEC2ã«sshæ¥ç¶ããããã®ã«ãŒã«ãè¿œå ããŸããSSHããŒãïŒ22çªããŒãïŒã«ãã€IPããã®ã€ã³ããŠã³ããã©ãã£ãã¯ãèš±å¯ããŠãããŸãããã
ãããããŸã§EC2ã®ããŒãã¢ãäœæããããšããªãå Žåã¯ãSSHããŒãã®èšå®ã®åã«ã次ã®ã¬ã€ãã«åŸã£ãŠäœæããŠãããŠãã ããã
ããŠãã¢ãŒãã«ã«æžãããæ¡å ã«æ»ããŸããè£è¶³ãå ããæé ã次ã®éãã§ãã
1. EC2ã€ã³ã¹ã¿ã³ã¹ã«sshæ¥ç¶
EB CLIã®eb sshã³ãã³ãã䜿ããšæ¥œã«æ¥ç¶ã§ããã®ã§ãå§ãã
2. ããŠã³ãã«äœ¿ã空ã®ãã£ã¬ã¯ããªãçšæ
sshæ¥ç¶ããEC2å
㧠sudo mkdir efs
ã³ãã³ããå®è¡ããchmod 755 efs
ã³ãã³ãã§ããŒããã·ã§ã³ã解æŸããŠããã
3. EFSããŠã³ããã«ããŒãã€ã³ã¹ããŒã«
sudo yum install -y amazon-efs-utils
ã³ãã³ããå®è¡ããŠã€ã³ã¹ããŒã«ã
4. EFSããŠã³ããã«ããŒã§ããŠã³ã
sudo mount -t efs fs-********:/ efs
ã³ãã³ããå®è¡ããŠããŠã³ãã
äžèšã®æé ãã§ããããsshæ¥ç¶ãããŸãŸ df -h
ã³ãã³ããå®è¡ããŠããŠã³ãã§ããŠããã確èªããŠã¿ãŠãã ããã
/efs
ã«å®¹éã®å€§ããªãã£ã¹ã¯ãããŠã³ããããŠããã°ããã®æé ã¯å®äºã§ãã
ãã ãEC2ã¯AWSã®ã¡ã³ããã³ã¹ãªã©ã§åèµ·åãããããšãããããã®ãŸãŸã§ã¯åèµ·åã®ãã³ã«ããŠã³ããçŽãã¿ã¹ã¯ãçºçããŠããŸããŸãã
ãã®å¯Ÿå¿çãšããŠãèªåããŠã³ãã®èšå®ãããŠãããšåŸã
楜ã§ãã詳ããã¯ãå
¬åŒã®éçºã¬ã€ããåç
§ããŠãã ããã
ãããŸã§ã§ããããexit
ã³ãã³ãã§ãã°ã¢ãŠãããŠããŸã£ãŠãã ããã
æåŸã«ããŠã³ãããå
±æãã¡ã€ã«ã¹ãã¬ãŒãžã«ã¢ãã«é¡ãã¢ããããŒãããŸãã
ã¢ããããŒã㯠scp
ã³ãã³ãã§ãã¢ãã«é¡ãå«ãã efs
ãã£ã¬ã¯ããªãŸãããšè¡ããŸãã
./efs
ãã£ã¬ã¯ããªçŽäžã§ã次ã®ã³ãã³ããå®è¡ããŠãã ããã
$ scp -r \ -i [ããŒãã¢ã§èšå®ããç§å¯éµã®ãã¹ (ex. ~/.ssh/***.pem)] \ . ec2-user@[public IP (ex. xxx.xxx.xxx.xxx)]:/efs
ã¡ãªã¿ã«ç§å¯éµã®ãã¹ãpublic IPã¯ãåã« eb ssh
ã³ãã³ããå®è¡ããçŽåŸã®ã³ãã³ãã©ã€ã³ã«è¡šç€ºãããŠããŸãã
ãã°ã蟿ã£ãŠã³ããŒããŠããŸããŸãããã
以äžã§ãEBãšEFSãçšããã·ã¹ãã æ§æã®æ§æã«åã£ãç°å¢æ§ç¯ãå®äºã§ãããç²ãæ§ã§ããã
å®è¡ãã¹ã
æ§ç¯ããAPIãµãŒãã«å¯ŸããŠãcurlã³ãã³ããå®è¡ããŠã¿ãŸãããã
$ curl -X POST -H "Content-Type: application/json" \ -d '{"target":"ç³ã¿èŸŒã¿ã®éæäœ", "texts":["éç³ã¿èŸŒã¿", "転眮ç³ã¿èŸŒã¿"]}' \ http://app-name.***.region.elasticbeanstalk.com/sim
endpointãšãªãURLã¯ãEBã®ã¢ããªç®¡çç»é¢ããååŸã§ããŸãã
ãããã«
æ¬ç« ã§ã¯ãAWSã§å€§å®¹éã¢ãã«ãéçšãããµãŒãã¬ã¹ã¢ãŒããã¯ãã£ãšããã®æ§ç¯æ¹æ³ã瀺ããŸããã
æ§ç¯æ¹æ³ã¯ãå
·äœäŸãšããŠãæ¥æ¬èªã§å
¥åãããæç« å士ã®é¡äŒŒåºŠãBERTã¢ãã«ã§èšç®ããŠåºåããAPIãã®éçºããæé ã玹ä»ããå®è·µã«å³ããå
容ã«ããŸããã
ãã¡ããå
·äœäŸã§ç€ºããæ¹æ³ä»¥å€ã«ãå®è£
æ¹æ³ã¯è²ã
ããã®ã§ãçããã®å¥œã¿ã®æ¹æ³ã§å®è£
ããŠã¿ãŠãã ããã
è¿œèšïŒ2020/06/25ïŒ
Lambdaã«EFSãããŠã³ãã§ããããã«ãªã£ãããã§ãã
æ©éãå©çšããŠã¿ããšã®äºäŸããããŸãããçŽ æŽãããð