1. y4u0t2a1r0

    Posted

    y4u0t2a1r0
Changes in title
+CloudFormationで作るECSとAutoScalingの3分クッキング
Changes in tags
Changes in body
Source | HTML | Preview
@@ -0,0 +1,94 @@
+
+# 前提
+
+- gitがインストールされている
+- dockerがインストールされている
+- aws-cliがインストールされている
+
+
+# クッキング開始
+
+まず、以下のリポジトリをクローンしてください。
+https://github.com/yutaro1204/ecs-autoscaling-demo
+
+そして、付属の`ecrRepository.yaml`を利用してAWSにスタックを作成します。
+parameterに指定するRepositoryNameは以降で作成するイメージと合わせる必要があります。
+
+```shell
+$ aws cloudformation create-stack --stack-name sampleECRRepository --template-body file://ecrRepository.yaml --no-disable-rollback --parameters ParameterKey=RepositoryName,ParameterValue=php_demo_image
+```
+
+このスタックにはECRのリポジトリが含まれ、ここに自作したイメージをプッシュします。
+
+自分でイメージを作るのがめんどくさい方は、
+
+```shell
+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
+<?php echo "HealthCheck TEST";
+```
+
+```shell
+$ docker build -t php_demo_image .
+```
+
+でこのイメージを作成します。
+最初にECRリポジトリを作成した時に指定したRepositoryNameと同じ名前でbuildしています。
+
+次にこの作成したイメージをECRのリポジトリにプッシュします。
+
+```shell
+$ aws ecr get-login --no-include-email --region ${AWS.Region}
+```
+
+でログインコマンドを取得し、これをそのまま実行します(以下は例)。
+
+```shell
+$ docker login -u AWS -p XXXXXX.......
+```
+
+で、先ほど作ったイメージにタグづけをして、
+
+```shell
+$ docker tag php_demo_image:latest ${AWS.AccountId}.dkr.ecr.${AWS.Region}.amazonaws.com/php_demo_image:latest
+```
+
+タグづけされたイメージをECRへプッシュします。
+
+```shell
+$ docker push ${AWS.AccountId}.dkr.ecr.${AWS.Region}.amazonaws.com/php_demo_image:latest
+```
+
+AWSコンソールなどでイメージがちゃんとプッシュされているか確認してみて下さい。
+
+あとは`microservices.yaml`の`ECSTaskDefinition`の`ContainerDefinitions`を以下のように修正して、
+
+```yaml
+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のデモページへと飛ぶことができるようになっているかと思います!
+
+# クッキング終了
+
+リソースの設定値を色々といじってみて自分にあった構成を試してみてください。
+たとえば、タスクやAutoScalingGroupに含まれるEC2インスタンスを意図的に削除してみたりとか。
+
+タスクはECSのServiceが自動復旧してくれるし、EC2インスタンスもALBが認識してAutoScalingが立て直してくれると思います。