Qiita Teams that are logged in
You are not logged in to any team

Log in to Qiita Team
Community
OrganizationAdvent CalendarQiitadon (β)
Service
Qiita JobsQiita ZineQiita Blog
0
Help us understand the problem. What is going on with this article?
@y4u0t2a1r0

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

0
Help us understand the problem. What is going on with this article?
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
y4u0t2a1r0
React, TypeScript, AWS
pa-rk
Webアプリ、スマホアプリの開発を手掛ける技術者集団です。

Comments

No comments
Sign up for free and join this conversation.
Sign Up
If you already have a Qiita account Login
0
Help us understand the problem. What is going on with this article?