ããã«ã¡ã¯ããµãã¿ã ã§ãã
Amazon Web ServicesïŒAWSïŒã¯ãªã¶ãŒããã€ã³ã¹ã¿ã³ã¹ãªã©ã®ãµãŒãã¹ãé€ããŠåŸéæéå¶ãšããããšããããã€ã³ã¹ã¿ã³ã¹ã䜿ããªãéã¯åæ¢ãããŠããã®ãåºæ¬ã§ãã
以åãAWS CLIãå©çšããŠPCã®ãã¹ã¯ãããããEC2ãéå§ãããããã³ãã³ãããã³ãããå©çšããŠåæ¢ããããããæ¹æ³ã«ã€ããŠã玹ä»ãããŸããããäŸãã°å€åºå ã§iPadã䜿ã£ãŠUbuntuã€ã³ã¹ã¿ã³ã¹ã«ãªã¢ãŒããã¹ã¯ãããæ¥ç¶ãããéã«ã¯ãã®æ¹æ³ã䜿ãããçµå±Webã³ã³ãœãŒã«ãã¢ãã€ã«ã¢ããªçµç±ã§EC2管çç»é¢ã§å¯Ÿè±¡ã®ã€ã³ã¹ã¿ã³ã¹ãéå§ãããŠããšæéãããã£ãŠããŸããŸãã
ããã§ãä»åã¯PCããªããŠãLINEãå©çšããã°EC2ãéå§ãããã忢ããããã§ããããã«ãªãæ¹æ³ã«ã€ããŠã玹ä»ãããããšæããŸãã
ãªããä»åã®èšäºã¯ä»¥äžã®ããã°ãåèã«ãããŠããã ããŠãããŸãã
LineããEC2ãæäœããïŒQiitaïŒ
åºæ¬èšèš
ä»åã¯ãAWSã®API GatewayãšLambdaïŒã©ã ãïŒã®2ã€ã®ãµãŒãã¹ãšLINE Botã飿ºãããŠãããŸããã¢ãŒããã¯ãã£ãšããŠã¯äžå³ã®ããã«ãªããŸãã

API Gatewayãšã¯

APIãšã¯ Application Programming InterfaceïŒã¢ããªã±ãŒã·ã§ã³ã»ããã°ã©ãã³ã°ã»ã€ã³ã¿ãŒãã§ãŒã¹ïŒã®ç¥ã§ããœãããŠã§ã¢ãããã°ã©ã å士ãã€ãªãã€ã³ã¿ãŒãã§ãŒã¹ã®ããšã§ãã
äŸãã°ãé£ã¹ãã°ãªã©ã§åºèæ å ±ãèŠããšGoogleããããæ²èŒãããŠããããããšæããŸãããããã¯é£ã¹ãã°ãGoogleãšAPI飿ºããŠãããã衚瀺ã§ããŠãããã§ããã
ãã®ããã«ããããœãããŠã§ã¢ãããã°ã©ã ïŒã¢ããªAïŒãå¥ã®ãœãããŠã§ã¢ãããã°ã©ã ïŒã¢ããªBïŒãšãããšãããŠãã¢ããªAäžã§ã¢ããªBã®æ å ±ã衚瀺ãããããšããã®ãAPI飿ºã§ã§ããããšã§ãã
API Gatewayã¯ãããã£ãAPIã®å ¬éãä¿å®ã管çãªã©ãè¡ãããŒã«ã§ãå€éšããAPI Gatewayãåãããªã¯ãšã¹ããLambdaã«é£æºãããšãã£ãããã¡ã§ããå©çšãããŸãã
Lambdaãšã¯

Lambdaã¯PythonãExcelãåŸæãªæ¹ãªãèããããšãããã®ã§ã¯ãªãããšæããŸããããèªèº«ã§æ°ãã颿°ãå®çŸ©ããããšãã§ãã颿°ã®ååã§ããPythonã ãšã©ã ãåŒãšãç¡å颿°ãªããŠåŒã°ããããããŠããŸãã
å眮ããé·ããªããŸããããAWSã®Lambdaã¯äœããã®ã€ãã³ããçºçããéã«èšèŒãããŠããã³ãŒããå®è¡ãããšãããã®ã§ãã
ã§ãã®ã§ãAPI GatewayãšLambdaã飿ºããããšã§ãLambdaããªã¯ãšã¹ããåããšã£ãããšãããªã¬ãŒãšããŠããã°ã©ã ãå®è¡ãããããšããããšã«ãªããŸãã
ãªããLambdaã«ããåŠçæéã®äžéã15åãšæ±ºãŸã£ãŠããŸãã®ã§ã倧éã®ããŒã¿åŠçãªã©ã«ã¯å©çšãããä»åã®ãããªç°¡åãªããã°ã©ã ã®å®è¡çšåºŠã«å©çšããããã«ããŸãããã
LINE Botãšã¯
LINE Botãšã¯ãLINEäžã§èªåçã«å¿çãªã©ã®åŠçãããã¢ã«ãŠã³ãã®ããšã§ããæ£ç¢ºã«ã¯LINE BotãšãããµãŒãã¹ã¯ãªããLINE Developersã«ç»é²ããŠãããçšã®ã¢ã«ãŠã³ããäœæããããšã«ãªããŸãã
ä»åã¯èªåå¿çãªã©ã®æ©èœã¯å«ãããåçŽã«LINEâAPI GatewayâLambdaãšã ãåŠçãæµããããã«ããŠãããŸãã
IAMããŒã«ã®äœæ
äžé£ã®æµããèšå®ããŠããåã«ããŸãã¯Lambdaã«EC2ãæäœããæš©éãäœæããŠãããŸããããæš©éã®ä»äžã«ã€ããŠã¯IAMïŒIdentity and Access ManagementïŒãšãããµãŒãã¹ãå©çšããŸãã

IAMããªã·ãŒã®äœæ
AWSã®ãããžã¡ã³ãã³ã³ãœãŒã«ãããIAMããšå ¥åããŠIAMããã·ã¥ããŒãã衚瀺ãããIAMãªãœãŒã¹ ã®ããŒã«ã«èšèŒãããŠããæ°å€ãã¯ãªãã¯ããŠãã ããã

衚瀺ãããç»é¢å ã®å³äžã«ãã ããªã·ãŒãäœæ ãã¯ãªãã¯ãããµãŒãã¹ã¯ EC2 ãéžæããŠãã ããã
次ã«ã¢ã¯ã·ã§ã³ã®ãèš±å¯ãããã¢ã¯ã·ã§ã³ãEC2ã§æå®ãã§ãstartããšæ€çŽ¢ããŠStartInstances ããã§ãã¯ãåæ§ã«ãstopããšæ€çŽ¢ã㊠StopInstancesããã§ãã¯ããŸãããã
ãªãœãŒã¹ ã§ã¯ ãã¹ãŠã®ãªãœãŒã¹ ããã§ãã¯ã㊠次ã®ã¹ããã ã«é²ãã§ãã ãããã¿ã°ã¯ä»»æã§å ¥åããŠæ¬¡ã«é²ã¿ãåãããããããªã·ãŒåãå ¥åã®ãã ããªã·ãŒã®äœæ ãããŸãããã
IAMããŒã«ã®äœæ
å·Šãã€ã³ã«ãã âŒã¢ã¯ã»ã¹ç®¡ç ãã ããŒã« ãã¯ãªãã¯ããå ã»ã©ã®IAMããŒã«ã®ç»é¢ã«æ»ã£ãŠãã ããã
å³äžã® ããŒã«ãäœæ ãã¯ãªãã¯ãããŠãŒã¹ã±ãŒã¹ã« Lambda ãéžæã æ¬¡ãž ã

å ã»ã©äœæããIAMããªã·ãŒã®å·ŠåŽã«ãããã§ãã¯ããã¯ã¹ããªã³ã«ãã æ¬¡ãž ãã¯ãªãã¯ãããŒã«åã¯ä»»æã§å ¥åãã ããŒã«ãäœæ ãã¯ãªãã¯ããã°IAMããŒã«ã®äœæãå®äºããŸãã
Lambda颿°ã®äœæ
ããã§ã¯ãŸãã¯Lambdaã§åŠçãããã³ãŒãã®èšè¿°ããããšãããããã£ãŠãããŸãããã
AWSã®ãããžã¡ã³ãã³ã³ãœãŒã«ãããlambdaããšå ¥åããŠLambdaã®ç®¡çç»é¢ãéããŠã颿°ãäœæãã¯ãªãã¯ããŠãã ããã
颿°ã®äœæç»é¢ã§ã¯ äžããäœæ ãéžæãã颿°åã¯åãããããååãå ¥åãã©ã³ã¿ã€ã 㯠Python 3.9 ãéžæããŸãããã
次㫠ⶠããã©ã«ãã®å®è¡ããŒã«ã®å€æŽ ãã¯ãªãã¯ããŠå®è¡ããŒã«ã®éžæãã衚瀺ããããæ¢åã®ããŒã«ã䜿çšããããéžæããæ¢åã®ããŒã«ãšããŠå ã»ã©äœæããIAMããŒã«ãéžæããŠãã ããã
ããšã¯ããã©ã«ãã®ãŸãŸå³äžã® 颿°ãäœæ ãã¯ãªãã¯ããŠãã ããã
ãããšãLambdaã®å®è¡ã³ãŒããå ¥åããç»é¢ãšãªããŸãã®ã§ã次ã貌ä»ããŠãã ããïŒå ¥åå 㯠ããã©ã«ãã§lambda_function.py ãšãªã£ãŠããŸãïŒãLINEããéå§ãŸãã¯åæ¢ããããã€ã³ã¹ã¿ã³ã¹ã®IDã貌ä»ããã®ãå¿ããªãããã«ããŸãããã
import json
import boto3
instance = ['i-xxxxxxxxxxxxxxx']
ec2 = boto3.client('ec2', region_name='ap-northeast-1')
def start_ec2():
ec2.start_instances(InstanceIds=instance)
def stop_ec2():
ec2.stop_instances(InstanceIds=instance)
def lambda_handler(event, context):
# TODO implement
text = event['events'][0]['message']['text']
if text == 'éå§':
start_ec2()
elif text == '忢':
stop_ec2()
else:
pass
return {
'statusCode': 200,
}
ã³ãŒãã®äœæãå®äºããããã³ãŒãå
¥åç®æã®äžã«ãã Deploy
ãã¯ãªãã¯ããŠãã ããã
ããã§Lambda颿°ã®äœæã¯å®äºã§ãã
API Gatewayã®äœæ
次㫠API Gateway ã®äœæãšèšå®ãããŠãããŸãããã
Lambda颿°ã®æŠèŠã«ãã ããªã¬ãŒã远å ãã¯ãªãã¯ã

ããªã¬ãŒã®èšå® ã§ã¯ãœãŒã¹ã« API Gateway ãéžæã㊠Intent 㯠Create a new API ãéžæãAPI Type 㯠REST API ãéžæãæåŸã« Security 㯠Open ã«ããããã®éžæãå®äºããã 远å ãã¯ãªãã¯ããŠæ¬¡ã«é²ãã§ãã ããã

Lambdaã®ç»é¢ã«æ»ã£ãã API Gateway ã®ååãã¯ãªãã¯ããŠèšå®ç»é¢ã«ç§»åã

ã¢ã¯ã·ã§ã³
ãã¯ãªãã¯ã ã¡ãœããã®äœæ ãéžæã

æ°ãã远å ãããã¡ãœããã POST ãšããçµ±åãã€ã³ãã®èšå®ã§ã¯ Lambdaãããã·çµ±åã®äœ¿çš ããã§ãã¯ãããšãšãã« Lambda颿° ãå ¥åããŠä¿åããŠãã ããã

äžèšã®èšå®å®äºåŸã¯ã¢ã¯ã·ã§ã³
ãã¯ãªãã¯ã APIã®ããã〠ãéžæããããã€ãããã¹ããŒãž 㯠default ãšããŠãããã€ãããŠãã ããã
API Gatewayã®èšå®ã¯ããã§å®äºã§ãã
LINEãšã®é£æº
æåŸã«ãLINEãšAPI Gatewayã飿ºã§ããããã«ããŸãããã
LINE Developersã®å©çš
LINE Developersã¯äŒæ¥ãéçºè ã«åããŠLINEã®ãµãŒãã¹ãšã®é£æºãå¯èœã«ãªãAPIïŒä»¥éãLINE APIãšåŒã³ãŸãïŒãæäŸããŠããŸããLINEã䜿ã£ãBotãªã©ãéå¶ããå Žåã«å©çšãããµãŒãã¹ãšãã£ãçšåºŠã«ãèªèããã ããã°åé¡ãããŸããã
LINE Developersãå©çšããããã«ã¯ãµã€ãå³äžã«ãã ãã°ã€ã³ ãã¯ãªãã¯ããŠLINE Business IDã®ãã°ã€ã³ç»é¢ã衚瀺ãããŠãã ãããLINEã®ã¢ã«ãŠã³ãããæã¡ã®æ¹ã§ããã°ãLINEã¢ã«ãŠã³ãã§ãã°ã€ã³ãã¯ãªãã¯ããŠãèªèº«ã®LINEã¢ã«ãŠã³ããšé£æºãããŸãããããªãããèªèº«ã®LINEã¢ã«ãŠã³ããšé£æºããããLINE Business IDçšã®ã¢ã«ãŠã³ããäœæããããšãå¯èœã§ãã
ãã°ã€ã³æ¹æ³ã«è©°ãŸã£ãå ŽåãLINE Developersã³ã³ãœãŒã«ãžã®ãã°ã€ã³ããåç §ãã ããã
ãããã€ããŒã®äœæ
LINEã®èªèšŒãå®äºãããšã³ã³ãœãŒã«ã衚瀺ãããŸããããã®ãšãã³ã³ãœãŒã«ãè±èªè¡šèšã®å Žåã«ã¯ãå³äžã«èšèªèšå®ããããŸãã®ã§ æ¥æ¬èª ãéžæããŸãããã
ãŸãã¯Botã管çãããããã€ããŒãäœæããŸãããã

ãã£ãã«ã®äœæ
ãããã€ããŒäœæåŸã«ãã£ãã«éžæç»é¢ã衚瀺ãããŸãã®ã§ Messaging API ãéžæããŠãã ããã

æ°èŠãã£ãã«äœæç»é¢ã§ã¯å ¥åå¿ é ã®é ç®ã«ã¯ããŒã¯ããããŠããŸãã®ã§ãå ¥åããŠãã£ãŠãã ããããã£ãã«åãªã©ã¯ãèªèº«ã§åããããã«ä»ããŠé ããã°ååã§ããå ¥ååŸã¯èŠçŽã«åæãããŠ äœæ ã確èªç»é¢ã衚瀺ãããŸãã®ã§ãããã OK ãã¯ãªãã¯ãæ å ±å©çšã«ã€ããŠã åæ ãããŸãããã

Messaging APIã®èšå®ïŒWebhookïŒ
ãã£ãã«ã®åºæ¬èšå®ãå®äºãããæ¬¡ã« Messaging APIã®èšå® ãããŸãããã
Messaging APIèšå®ã®äžã«ãã Webhook URL ãç·šé
ã衚瀺ãããURLã« API Gateway ã® APIãšã³ããã€ã³ã ãå
¥åããŠ æŽæ° ãã¯ãªãã¯ãæŽæ°åŸã¯æ¥ç¶ãåºæ¥ãã æ€èšŒ ãã¯ãªãã¯ã㊠æå ãšåºãã°OKã§ãã

æ€èšŒåŸã¯ Webhookã®å©çšããªã³ã«ããŠãã ããïŒWebhookã®åéãšãšã©ãŒã®çµ±èšæ å ±ã¯ã奜ã¿ã§ïŒã
æ€èšŒæã«ãšã©ãŒãçºçããå Žå
æ€èšŒãã¯ãªãã¯ããéã«ã502 Bad Gatewayãã®ãšã©ãŒãçºçããæ€èšŒã倱æããããšããããŸãããã®å ŽåãAPI Gatewayã®èšå®ç»é¢ã«ãŠ POST ã® çµ±åãªã¯ãšã¹ã ãã¯ãªãã¯ããLambdaãããã·çµ±åã®äœ¿çš ã®ãã§ãã¯ãå€ããŠã¿ãŠãã ããïŒãã§ãã¯ãå€ããåŸã¯å¿ããã«ãããã€ããŠãã ãããïŒã

Messaging APIã®èšå®ïŒLINEå ¬åŒã¢ã«ãŠã³ãæ©èœïŒ
LINEå ¬åŒã¢ã«ãŠã³ãã®æ©èœã«ã€ããŠã¯å³åŽã«ãã ç·šé ãã¯ãªãã¯ãæ©èœã®å©çš ã«ãŠãã°ã«ãŒãã»è€æ°äººããŒã¯ãžã®åå ãèš±å¯ãããã«å€æŽãããŸããããåçãåç»ã®åãåããLIVE VROOMé¢é£æ©èœã¯å©çšãããŸããã®ã§ãããããåãåããªãããå©çšããªããããã§ãã¯ããŠãããŸãã
次ã«ã¢ã«ãŠã³ãèšå®ã®å·Šãã€ã³ã«ããå¿çèšå®ãã¯ãªãã¯ãããããã€ã¡ãã»ãŒãžãšå¿çã¡ãã»ãŒãžããããããªãã«ããŠãããŸãããã
ããã§LINE Developersã®èšå®ã¯å®äºã§ãã
ãŸãšã
æåŸã«LINE BotãMessaging APIèšå®ã®äžéšã«ããQRã³ãŒãããåéã«è¿œå ããŠãã¹ããããŠã¿ãŸããããLINEããBotã«å¯ŸããŠãéå§ããšã¡ãã»ãŒãžãæã€ãšå¯Ÿè±¡ã®ã€ã³ã¹ã¿ã³ã¹ãèµ·åãããŠããã°å®æã§ãïŒ
ããã§LINEã䜿ããç°å¢ã§ããã°ç°¡åã«EC2ãéå§ãããã忢ããããããããšãã§ããããã«ãªããŸããã
äœæ°ã«äœ¿ããBotã§ãã®ã§ãçãããæ¯é詊ããŠã¿ãŠãã ãããã
ããã§ã¯ãŸãã
ã³ã¡ã³ã