LoginSignup
40
27

More than 3 years have passed since last update.

ECS-CLIを使ってDocker ComposeでAWS ECSに簡単デプロイ(ハマり実況)

Last updated at Posted at 2018-08-21

結論

docker-compose.ymlをecs-cli用に書き直すことは必要だけどとりあえず、デプロイまではできた
build ディレクティブなどが書けないようなので注意
チュートリアル: ECS CLI を使用して EC2 タスクのクラスターを作成する(公式)

用意するもの

  • docker-compose 実行環境(開発環境)
  • ecs-cli (Amazon ECSのコマンドラインツール) - aws-cliみたいなもの
  • AWS Access key ID
  • AWS Secret Access Key
  • AWS EC2のキーペア:KEY_NAME(ECSのベースとなるEC2インスタンスを起動するため)

開発環境の用意

  • docker-compose.ymlをせこせこつくる

Docker HubにあるPHP(Apache)とかMySqlとかのコンテナイメージを
公式を優先して組み合わせ
environmentsでパスワードなどを書ける(←本番のときやばいやつ)

手前味噌ですが、Dockerで作るWordPressテーマローカル開発環境

ecs-cli のインストール

$ brew install amazon-ecs-cli

でインストールできました。とのことです。@takarakeさんコメントありがとうございました。
記事投稿当時は $ brew install ecs-cl でインストールしました

AWS アカウントの確認

IAMとかなんとか

ECS CLI実行

Configureで最初の設定

  • リージョン
  • AWS Access key ID
  • AWS Secrete Access Key
  • (Configure出力フォーマット)

AWS CLI のデフォルト環境設定

$ aws configure
AWS Access Key ID [None]: AKXXXXXXXDXXXXXGXFXA
AWS Secret Access Key [None]: fxxqxxxxxxL2xxctxxxxxrgn7WxxxxRx34tcEL
Default region name [None]: ap-northeast-1
Default output format [None]: text

対話式でAWS Access key ID・AWS Secrete Access Keyを設定
(Default output formatはtextでOK、なにもしなければjsonになる)

.aws/config に記載されます

.aws/config
[default]
output = text
region = ap-northeast-1

[test]
output = text
region = ap-northeast-1

.aws/credentials に記載されます

.aws/credentials
[default]
aws_access_key_id = AKXXXXXXXDXXXXXGXFXA
aws_secret_access_key = fxxqxxxxxxL2xxctxxxxxrgn7WxxxxRx34tcEL

[test]
aws_access_key_id = AKXXXXXXXDXXXXXGXNVQ
aws_secret_access_key = 8xxqxxxxxxL2xxctxxxxxrgn7WxxxxRx34trGZ

AWSのアカウントを個人用・会社用など複数持っているときは、profileとして
別のIAMアカウントを登録することができます
AWS CLI の設定 » 名前付きプロファイル(公式)

ECS CLIのデフォルト環境設定

$ ecs-cli configure --region ap-northeast-1 --cluster ecs-cli-test

リージョンの選択と、クラスタ名は適当に

ECS 起動

$ ecs-cli up --keypair KEY_NAME --capability-iam --size 2 --instance-type t2.micro

5分くらいかかる

怒られた

reason="The key pair ‘KEY_NAME’ does not exist (Service: AmazonAutoScaling; Status Code: 400; Error Code: ValidationError; Request ID: cfd012c3-8450-11e8-b993-599e5d2091a0)" resourceType="AWS::AutoScaling::LaunchConfiguration"

AWS Auto Scaling is not available in アジアパシフィック (東京). Please select another region.

ap-northeast-1aはAutoScalingに対応していないらしい –azs オプションでリージョンを限定
再度実行するときはクラスタ名が同じになるので、 --force オプションで上書き

$ ecs-cli up --keypair KEY_NAME --capability-iam --size 2 --instance-type t2.micro -azs ap-northeast-1b,ap-northeast-1c --force

また怒られた

reason="Value (ap-northeast-1b) for parameter availabilityZone is invalid. Subnets can currently only be created in the following availability zones: ap-northeast-1d, ap-northeast-1a, ap-northeast-1c. (Service: AmazonEC2; Status Code: 400; Error Code: InvalidParameterValue; Request ID: e82814f4-6472-46fc-8932-8216da502760)" resourceType="AWS::EC2::Subnet"

ap-northeast-1bはVPCあかんみたいなこと言ってる
参考:20170308 古参AWSユーザーが悩むap-northeast-1bからの脱却

えい、ap-northeast-1b つかわずにいけ

$ ecs-cli up --keypair KEY_NAME --capability-iam --size 2 --instance-type t2.micro --force -azs ap-northeast-1c,ap-northeast-1d

まただめですね

reason="The key pair 'sugimotokey' does not exist (Service: AmazonAutoScaling; Status Code: 400; Error Code: ValidationError; Request ID: 80e0d755-8457-11e8-81ce-ef05996f82c3)" resourceType="AWS::AutoScaling::LaunchConfiguration"

コンソールのEC2でAutoScalingの起動設定ってのがあるので、
KEY_NAMEで指定しているキーペアでちょっと作成してみた
なんだかよくわからないけどAutoScalingグループを追加

$ ecs-cli up --keypair KEY_NAME --capability-iam --size 2 --instance-type t2.micro --force

なぜかAWSコンソールEC2のキーペアで作成した鍵ではだめだったので、
aws-cliで新しい鍵を作成

$ aws ec2 describe-key-pairs --key-name KEY_NAME
$ ecs-cli up --keypair KEY_NAME --capability-iam --size 2 --instance-type t2.micro --force

行けた。

ちなみにここまで書いてきた KEY_NAME は任意

ECS上でコンテナ起動

$ ecs-cli compose -f docker-compose.yml up
ERRO[0000] Unable to open ECS Compose Project            error="Volume driver is not supported"
FATA[0000] Unable to create and read ECS Compose Project  error="Volume driver is not supported"

トップレベルでのvolumesはサポートされてない・・・。
docker-composeを書き直してどうにかこうにか成功。

後始末

コンテナ落とす

$ ecs-cli compose -f docker-compose.yml down

サービスとして起動

サービスを定義することにより、オートスケールやコンテナがコケた場合の再起動が可能になります。

$ ecs-cli compose -f docker-compose.yml  service up

サービス削除

$ ecs-cli compose -f ./docker-compose.yml service rm

コンテナ全消し

$ ecs-cli down --force

参考記事

ローカルで使用したdocker-compose.ymlを使ってECS上でコンテナを起動する

40
27
1

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
40
27