LINE から EC2 むンスタンスを開始・停止させおみよう【API Gateway + Lambda】

圓ペヌゞのリンクには広告が含たれおいたす。

こんにちは、ふじみや です。

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です。

API゚ンドポむントはLambdaから確認する

怜蚌埌は 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ですので、皆さんも是非詊しおみおくださいね。

それではたた。

この蚘事が気に入ったら
フォロヌしおね

コメント

コメントする

目次