0
0

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?

More than 3 years have passed since last update.

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

Last updated at Posted at 2020-06-14

前提

  • 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が立て直してくれると思います。

0
0
0

Register as a new user and use Qiita more conveniently

  1. You get articles that match your needs
  2. You can efficiently read back useful information
  3. You can use dark theme
What you can do with signing up
0
0

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?