Help us understand the problem. What is going on with this article?

CloudFormationで作るECSとAutoScalingの3分クッキング

前提

  • gitがインストールされている
  • dockerがインストールされている
  • aws-cliがインストールされている

クッキング開始

まず、以下のリポジトリをクローンしてください。
https://github.com/yutaro1204/ecs-autoscaling-demo

そして、付属のecrRepository.yamlを利用してAWSにスタックを作成します。
parameterに指定するRepositoryNameは以降で作成するイメージと合わせる必要があります。

$ aws cloudformation create-stack --stack-name sampleECRRepository --template-body file://ecrRepository.yaml --no-disable-rollback --parameters ParameterKey=RepositoryName,ParameterValue=php_demo_image

このスタックにはECRのリポジトリが含まれ、ここに自作したイメージをプッシュします。

自分でイメージを作るのがめんどくさい方は、

git clone https://github.com/aws-samples/ecs-demo-php-simple-app.git
cd ecs-demo-php-simple-app

でPHPのデモアプリをクローンして中に入り、

src内に以下の内容のhealthcheck.phpを配置して(src/healthcheck.phpをヘルスチェックの対象としてます)、

<?php echo "HealthCheck TEST";
$ docker build -t php_demo_image .

でこのイメージを作成します。
最初にECRリポジトリを作成した時に指定したRepositoryNameと同じ名前でbuildしています。

次にこの作成したイメージをECRのリポジトリにプッシュします。

$ aws ecr get-login --no-include-email --region ${AWS.Region}

でログインコマンドを取得し、これをそのまま実行します(以下は例)。

$ docker login -u AWS -p XXXXXX.......

で、先ほど作ったイメージにタグづけをして、

$ docker tag php_demo_image:latest ${AWS.AccountId}.dkr.ecr.${AWS.Region}.amazonaws.com/php_demo_image:latest

タグづけされたイメージをECRへプッシュします。

$ docker push ${AWS.AccountId}.dkr.ecr.${AWS.Region}.amazonaws.com/php_demo_image:latest

AWSコンソールなどでイメージがちゃんとプッシュされているか確認してみて下さい。

あとはmicroservices.yamlECSTaskDefinitionContainerDefinitionsを以下のように修正して、

ECSTaskDefinition:
  Type: AWS::ECS::TaskDefinition
  Properties:
    ContainerDefinitions:
      - Image: '${さっきイメージをプッシュしたECRのARN}:latest'

以下のコマンドでCloudFormationのスタックを作成します。

$ aws cloudformation create-stack --stack-name sampleECSClusterWithAutoScaling --template-body file://microservices.yaml --no-disable-rollback --capabilities CAPABILITY_NAMED_IAM

数分でロードバランサーのDNSNameからPHPのデモページへと飛ぶことができるようになっているかと思います!

Screenshot 0002-06-14 at 22.46.25.png

クッキング終了

リソースの設定値を色々といじってみて自分にあった構成を試してみてください。
たとえば、タスクやAutoScalingGroupに含まれるEC2インスタンスを意図的に削除してみたりとか。

タスクはECSのServiceが自動復旧してくれるし、EC2インスタンスもALBが認識してAutoScalingが立て直してくれると思います。

y4u0t2a1r0
React, TypeScript, AWS
pa-rk
Webアプリ、スマホアプリの開発を手掛ける技術者集団です。
https://www.pa-rk.co.jp
Why not register and get more from Qiita?
  1. We will deliver articles that match you
    By following users and tags, you can catch up information on technical fields that you are interested in as a whole
  2. you can read useful information later efficiently
    By "stocking" the articles you like, you can search right away
Comments
No comments
Sign up for free and join this conversation.
If you already have a Qiita account
Why do not you register as a user and use Qiita more conveniently?
You need to log in to use this function. Qiita can be used more conveniently after logging in.
You seem to be reading articles frequently this month. Qiita can be used more conveniently after logging in.
  1. We will deliver articles that match you
    By following users and tags, you can catch up information on technical fields that you are interested in as a whole
  2. you can read useful information later efficiently
    By "stocking" the articles you like, you can search right away
ユーザーは見つかりませんでした