SlackTweetこんにちは!MLエンジニアの野澤(@takapy0210)です。10月から軽減税率が始まりましたね。みなさんの身の回りで混乱は起きていませんでしょうか?そんな中、軽減税率に関するこんな記事を見ました。専門家の人たちでも判断に困る事例があるようなので、難しいですね。slackを使って、DDLの自動実行フローを構築した話をできればと思っています。!DDLって何?リレーショナルデータベースを対象として、テーブルなどの構造を制御することができる言語です。「CREATE」「DROP」「ALTER」などが書いてあるアレです。コネヒトでは、SchemafileでDBスキーマを管理することができるRidgepoleというツールを用いています。ECS上のサービスとして稼働しています。従来のフローDBは開発環境(以下、dev環境)本番環境(以下、prd環境)に分かれており、dev環境での実行は開発者、prd環境での実行は権限のあるオペレーターに依頼して実行してもらう、というフローになっていました。下記が詳細な手順です。最新のコミットに対してタグをpush(prd環境にECSデプロイが走る)オペレーターに依頼し、prd環境でdry-runの実行dry-runの内容に問題がなければprd環境でridgepole(DDL)の実行ごちゃごちゃ書きましたが、煩雑な雰囲気だけでも伝わって頂ければと思います。部分を自動化しましたので、次章以降で詳細をお伝えできればと思います。自動化のアーキテクチャは下記のようになっています。dry-run実行フローとDDL実行フローの2パターンに分けて説明します。Taskでdry-runスクリプトを実行し、結果をslackに通知してくれます。slackへ通知するメッセージは、下記のようにdry-runの内容とDDL実行の可否を問うボタンで構成されています。slack通知メッセージ上記でdry-runの結果を確認し、問題なければOKボタンを押下するだけで、dev環境へのDDLが実行できます!めっちゃ便利!ちなみに、prd環境のDDL実行はオペレーターが手動で行う運用としているため、dry-runの結果通知のみにしています。slack通知メッセージ次に、上記のslackメッセージでOKボタンを押下した後のDDL実行フローについてご紹介します。Functionsを起動しています。TaskでDDL実行スクリプトを実行し、結果をslackに通知します。自動化して何が嬉しかったかDDL実行の都度、実行環境にSSH接続して、dry-runを実行して、結果を確認して、、、という手順が省略されたことが大きいと思います。prd環境で実行する際はオペレーターがdry-runを実行して開発者に対して、dry-runの結果に誤りがないか確認して同意がとれたら実行するという手順を踏まなければならなかったのが、dry-runの結果は自動的にslackに通知されるので、都度開発者にdry-runの整合性を確認する必要がなくなりました。dry-run結果のメッセージに返信する形で「prd環境で実行お願いします!」と一言伝えるだけでOKになったのも、作業負荷の軽減に繋がっていると思います。下記のように省略されました。Taskで実行しているため、コストの観点からも恩恵を受けることができそうです。アーキテクチャ構築のポイント上記フローを構築する際の注意点をいくつかあげてみます。Functionsの定義でセキュリティグループを設定しないと、デフォルトのセキュリティーグループが自動で割り当てられる(?)ようなので、想定するセキュリティーグループを指定する必要があります。下記に例を載せておきます。Functionsに付与するIAMロールに、EcsTask実行ポリシーを追加する必要があるのですが、自動的に追加されるポリシーには、EcsTaskを実行するRoleにアクセスする権限が付与されません。FunctionsのIAMロールに追加する必要があります。Gatewayの連携の注意点ここが一番大変でした・・・ネットにもあまり情報がないので、トライ&エラーを繰り返し、なんとか実装できました。今回はLambdaを呼び出すので、下記のように指定します。POSTメソッドの作成すると下記のようなAPIが作成されます。次に、アクションボタンからAPIをデプロイします。APIのデプロイすると、下記のようなURL(エンドポイント)が取得できます。APIを作成する時に必要になりますので、メモしておいてください。Gatewayを呼ぶ時に必要となります。下記に手順を示します。Permissionsの設定まず初めに、Tokenを取得します。slackに下記のようなボタン付きメッセージを投稿する際に使用します。ボタン付きメッセージTokenの取得Tokenの取得ちなみにLambdaからは下記のようにTokenを設定してリクエストを投げます。\n問題なければ「OK」ボタンを押下してDDL実行してください。res最後に、然るべきPermissionを設定し、対象のチャンネルに今回作成したAppをintegrationとして追加すれば終了です!まとめ今回はDDL自動実行フローの構築ということで、DevOps的な取り組みについてご紹介しました。このフローに関しては、構築に少し手間がかかりますが、一度構築してしまえばそれ以降半永久的に恩恵を受けることができます。同じような悩み・課題を感じている方がいれば、一度試してみてはいかがでしょうか。!コネヒトでは、成長中のサービスを一緒に支えるために働く仲間を探しています。コネヒトでiOSエンジニアをやっているYoshitakaです。用いたデプロイフローの改善こんにちは。本日はコ...2021-05-18家族ノートを支えるBigQuery+StepFunctionsで作るデータレイクこんにちは。インフラエンジニアの永井(shnagai)です。(2)書いたメンバーid:taxa_programid:katsutomu0124id:sasashuuuid:NahomiTakahashiid:toc8id:yoshitaka465id:yanamuraid:ryoutakaya3623id:azuki_mihomihoid:takflifeid:nagaisid:aboy_perryid:laugh_kid:connehito-mkashiwagiid:tommy_kwid:itosho525id:su-kun1899id:ohayoukenchanid:satoshieid:plane25id:connehitoid:fortkleお問い合わせコネヒト株式会社Wantedly引用をストックしましたストック一覧を見る閉じる引用するにはまずログインしてくださいログイン閉じる引用をストックできませんでした。再度お試しください閉じる限定公開記事のため引用できません。