概要

以下の記事で、ヘルスチェックを行う方法について記述しました。

また、Virtuosoが停止した際の再起動のためのコマンドを以下に記述しました。

今回は、Amazon SNSを用いた通知に合わせて、Virtuosoを再起動してみます。

方法

EC2インスタンスにsudo rm -rf /usr/local/var/lib/virtuoso/db/virtuoso.lck && ...のようなコマンドを送信するには、SSM(AWS Systems Manager)に関する設定が必要でした。

IAMロールとポリシー

IAMロールを新規に作成して、AmazonSSMFullAccessというポリシーを許可しました。はじめ、AmazonSSMManagedInstanceCoreというポリシーを許可していましたが、後述するlambda実行時に以下のようなエラーが発生して、うまく動作させることができませんでした。

Anerroroccurred(InvalidInstanceId)whencallingtheSendCommandoperation:Instances[[i-xxxxxx]]notinavalidstateforaccountxxxxxx

EC2インスタンスの「IAMロールを変更」から、作成したIAMロールを選択して更新しました。

AWS SAM: lamda関数の作成

AWS SAMを用いました。以下でのプロジェクトを作成します。

saminit

hello_world/app.pyを以下のように作成しました。instance_idの部分には、要修正です。

iidmmeppfoorrl#e#i#ri#c#srtcop#s}rttacnefoseiouriemE2sEsDmSmsmmtiEmtbtbCtCplemS_pempnxpuoid2=a2oeprfaMcoIDP.auCIttl""rtmaEnnnreinlnnoasnton(riOEnoe_bCcs(itndisscrldms"afur3ho2eernueeetuae_=mtcitrsat_etr=nammeiaatepoinoi=s(ntEt=neepdsnndurmd3dpfh'Ccnt(sdco_t"pl.eo"es2=sete1=mIenr":lec=cnusINr._dIle:irl2scdbmdas0rc=dysof(iI'.eooo_sm=)elc=pouieeDid[mtc=e{sioitoutevn-e'mrol[='pemnhntpdetxsIam3ii'conmsespu_n(xcnn.enAontateutrt'xrs{d-cnsWms.na"nt[e,exitirlttSmegdn)e=['scxbantfi.a-a[e_cc'Spc2xensoesnRn'tiee{Stoo'x_ct/necudC_d_stann)xieabutnensoc,isanst'nSnes(d_S'modandeestcr'_ih:mm,rdaxtaee/scdeamyartat_xlso]l[nard)nuieomm,lcdnidE:csdcc'mSo'dnOree}ua)acm]_fur_stlnrm[iotos'e/dia'nrprt]dv(pnCvmuCa)atdooatotor']mctCnu=n/,}maiots=latone(tinintnI0"hbdoetn:)e/Infn'svd(rt]tii'o',anr]m]nst,ctuteaohInsedcose/o=du[(btiepn.vusgitt.ra,tnucroees_soit.dal]rc)tks&o&ftswuadroe)/usr/local/bin/virtuoso-t+configfile/usr/local/var/lib/virtuoso/db/virtuoso.ini'

また、hello_word/requirements.txtにboto3を追記しました。

boto3

ローカルでのテストは以下で行います。デフォルト以外のprofileを使用する場合には、xxxxに適切なプロファイル名を与えます。

sambuild&&samlocalinvoke-profilexxxx

AWS SAM: template.yamlの更新

SNSの通知に合わせて、lambda関数が実行されるように、template.yamlを修正します。

ATD#GROWreleuSascSMoFsVtVVTncjaobuoipiiesr-mranTMurTPurDVrDVmfivpelciertyrtteateapopilstmmcupoCHRA##Esuslusllrtrei:ieoeoepoaurv:ocuocuamitnoorss:ednnc-TreMsresret:ouSfnuy:oredthhenyoi:oi:enoAo:tSRAtUliixictSTPRpRpFA:sM:ieWiremt8sesNyret!et!oWoazsSeiree6i:SpoTsiGsiGrS>-Tb1et:s:::c_pvTepotoetoem:reo5:a::t6rer:epantanta:emurSvapu4osirir:Ar:AtSspt1teipyrpgStcttttVetl2errpteeagNi:e"te"teraaG8rvt.hsreSerVrIrvrtl:eulo:tmrsa:iVImVseteoroanye::rriapiirblsm3sntrmlrolfaeob.as:utRitneols_d9saaouocu:srssrasgwsolios::e_oesosets'-r:shc,:o:o22ehFtaisRRIR00stuanatneeAe11ttnrdthsssMs06apctlee:ttt--rst/esuaaRa01t:irLsrror90i/ota-ttlt--n/nhmeeeee03ggibarrr91i#sds.cR'VtatLAroihML-arelruoaf1mnaetbrmu:bt.u.ebnxdeAocdcxadrsoiatxnomnixFf/ffoxuoiaoun:nrnwnxcssacixtVtlbtsxiiaaoixornbuoixntcstnnue/vAossFwo#RseuikNornte"vchdReteritSslohNteneSasrsRSt-eNeasSrpoputAflroRuicpNnceica:cttiihdootenntf"-pimsno:ed/de/lga/ibbtolhvouebb,/.mcsaoosmt/teahrwa/stdloawcbhsse//ngselevorebvraelrtslh.eerssstt-oappipclication-model/blob/master/versions/2016-10-31.md#awsserverlessfunction

「既存のSNSトピックのARN」は適切なものに修正してください。また、先に示したlambda関数を格納するフォルダ名をhello_wordからvirtuoso_restartに変更しています。

AWS SAM: デプロイ

デプロイは以下で行います。

sambuild&&samdeploy-profilexxxx

まとめ

SSM(AWS Systems Manager)の利用が初めてだったので、エラーを解消させるまで時間がかかりましたが、便利な機能だと思いました。

他の方の参考になりましたら幸いです。