ECSでアプリケーションのアクションによって新たなサービスを起動することはできますか?

0

ECS上にデプロイされたアプリケーション内でユーザーが特定のアクションを行った場合に、同一クラスター内に新たなサービスを起動する方法はありますか? 具体的には、laravelアプリケーション内で、ユーザーがUI上で、「公開」ボタンを押下することで、新たなサービスが起動し、nnext.jsのコンテナを立ち上げたいと考えています。 また、立ち上げたコンテナ内に、Githubから自動デプロイを行いたいと考えています。 どなたかアドバイスをいただけると幸いです。よろしくお願いいたします。

2回答
0

実際に検証してはいないですが、案だけ出してみます。 githubから自動デプロイしたいとのことなので、簡素なCI/CDパイプラインみたいなものが必要になりそうです。 codepipelineを使いたくなりますが、codepipelineは基本的に特定の「固定の」リポジトリをソースにするものなので、ユーザーごとにgithubURLが異なってくる今回のケースでは都度都度パイプラインを作成する必要が出てきそうなので大変そうです。

githubリポジトリはパブリックになっているものとして、アプリケーションで「公開」ボタンを押されたときに対象githubリポジトリのURLをdynamoDB等に格納、dynamoDBストリームを使ってlambdaを呼び出しlambdaからcodebuildを起動、buildspec.yml内でdynamoDBからgithubリポジトリURL取得、git clone、docker build, ECRへのpushを行い、ECRへのpushまでが完了したことをEventbridge等で検知して、lambdaを使って、ecsタスク及びecsサービスを作成・・みたいなことをすれば可能かもしれません。

PHPなら、aws SDK for PHPを使ってdynamoDBへの書き込みをすることになるでしょう。 https://docs.aws.amazon.com/aws-sdk-php/v3/api/

上記のやり方で実現できるかもしれませんが、そもそも本当にアプリケーションからECSサービスを立ち上げる必要があるのかといった点は検討したほうがよろしいかと思います。作成されようとしているサービスの性質がインターネットに公開するようなパブリックなものであれば、他人がいくらでもあなたのAWSリソースを使えるということになりかねないですし、社内利用を想定したプライベートなものであれば、こんな大掛かりな仕組みが必要なのかは疑問です。 以上、よろしくお願いします。

profile picture
Kikuchi
回答済み 2年前
0

ご回答いただきありがとうございます。公開されるたびに、サービスを立ち上げる仕様については、見直す必要があると感じました。

回答済み 2年前

ログインしていません。 ログイン 回答を投稿する。

優れた回答とは、質問に明確に答え、建設的なフィードバックを提供し、質問者の専門分野におけるスキルの向上を促すものです。

質問に答えるためのガイドライン