結論
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
に記載されます
[default]
output = text
region = ap-northeast-1
[test]
output = text
region = ap-northeast-1
.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