AWS ECS チュートリアル
ECS の起動自体は下記のURLの通りで、マウスを何度かカチカチすれば、AWS で用意されているデフォルトコンテナが起動し、Webページを参照できるため、詳細は割愛。
- AWS Fargate での Amazon ECS の開始方法
- Amazon ECS入門 〜公式のDockerイメージを使って10分で構築してみる〜
- [初心者向け]コンテナのメリットをおさらいしながら、Amazon ECSでお手軽サービス作成してみた
オリジナルコンテナを使用する
作業流れ
-
AWS CLI 利用ユーザの追加
-
Docker実行環境で コンテナイメージを作成する
AWS EC2 に Docker をインストールしても良いし、オンプレで Docker 環境を用意するでもOK。 -
作成したイメージを Amazon Elastic Container Registry(AWS ECR) に登録
- この作業は GUI が用意されていないかもしれない。
- aws-cli で Private / Public リポジトリを作り分ける方法がわからなかった。。。
-
AWS ECR に登録したコンテナイメージから AWS ECS クラスタ作成
-
AWS ECS の撤収
-
AWS ECR の撤収
1. AWS CLI 利用ユーザの追加
AWS ECS 利用ユーザに付与するポリシーについては、Amazon Elastic Container Service アイデンティティベースのポリシーの例 に IAM 管理ポリシーの内容っぽい設定例が紹介されている。が、使い方よくわからない 設定が面倒そうなので、Amazon ECS でのセットアップ のところで、ルートユーザ的な権限を付与する方法が紹介されていたので、それで IAM 管理ポリシー問題を、一旦、回避。
2. Dcoker コンテナイメージの作成
-
Dockerfile の準備
DockerfileFROM ubuntu:18.04 # Install dependencies RUN apt-get update && \ apt-get -y install apache2 # Install apache and write hello world message RUN echo 'Hello Work...orz' > /var/www/html/index.html # Configure apache RUN echo '. /etc/apache2/envvars' > /root/run_apache.sh && \ echo 'mkdir -p /var/run/apache2' >> /root/run_apache.sh && \ echo 'mkdir -p /var/lock/apache2' >> /root/run_apache.sh && \ echo '/usr/sbin/apache2 -D FOREGROUND' >> /root/run_apache.sh && \ chmod 755 /root/run_apache.sh EXPOSE 80 CMD /root/run_apache.sh
-
イメージ作成
$ docker build -t hello-work .
-
動作確認
$ docker run -t -i -p 80:80 hello-work
確認が終わったら
Ctrl+c
でコンテナを停止します。
3. AWS ECR への登録
-
awscli のインストール
$ curl "https://awscli.amazonaws.com/awscli-exe-linux-x86_64.zip" -o "awscliv2.zip" && \ unzip awscliv2.zip && \ sudo ./aws/install $ echo 'complete -C aws_completer aws' >> $HOME/.bashrc
$HOME/.barhrc のような感じで、aws_completer を設定しておくと、aws コマンドのサブコマンドで tab 補完が使えるようになります。
-
awscli の初期設定
$ aws configure AWS Access Key ID [None]: {アクセスキー(各自)} AWS Secret Access Key [None]: {シークレットアクセスキー(各自)} Default region name [None]: ap-northeast-1 Default output format [None]: json
AWSのアカウントが複数ある場合は、
aws configure --profile userid
で、ユーザIDごとに設定できます。 -
AWS ECR リポジトリの準備
-
AWS ECR リポジトリ作成
$ aws ecr create-repository --repository-name hello-repository
AWS CLI で作る ECRリポジトリはプライベートリポジトリっぽいです。Private/Public を切り替えるサブコマンドが見つからなかった。
この辺は、リポジトリ作った後に Private/Public を確認したほうがいいかもです。リポジトリが作成されると、リポジトリの登録情報が表示されます。その中で、
repositoryUri
の情報を控えておきます。 -
コンテナイメージのタグ付け
3.1 で控えておいた
repositoryUri
で、コンテナイメージにタグ付けをします。$ docker tag hello-work <repositoryUri>
-
-
AWS ECR にコンテナを登録
$ aws ecr get-login-password | docker login --username AWS --password-stdin <aws_account_id.dkr.ecr.region.amazonaws.com> $ docker push <repositoryUri>
docker login
で指定する URL は ドメイン のところだけで、リポジトリ名までは含めません。
ドメインで認証して、ドメイン内のリポジトリを指定して push する、という感じです。
4. AWS ECS クラスタ作成
- コンテナの定義
-
custom
の 設定 ボタン押下
-
項目 | 設定値 |
---|---|
コンテナ名 | 適当 |
イメージ | repositoryUri:イメージタグ |
メモリ | 128 MB |
TCPポート | 80 |
詳細コンテナ設定 | デフォルト(何も設定しない)のまま |
- サービスを定義する
- ロードバランサーの種類
- Application Load Balancer を選択
- ロードバランサーの種類
ロードバランサーに ALB を指定しないと プライベートIP、パブリックIP がセットされなかった。
カスタムコンテナの場合は ALB 無しの運用はできないのだろうか。。。
5. AWS ECS の撤収作業
- AWS ECS
- クラスター
- 作成したクラスター名を選択
- 作成したクラスターの詳細画面の
クラスターの削除
ボタンを押下-
delete me
を入力して削除
ボタン押下
-
- 作成したクラスターの詳細画面の
- 作成したクラスター名を選択
- クラスター
CloudFormation の方から削除する方法もあるらしい。
6. AWS ECR の撤収作業
Amazon ECR イメージの試用を終了したら、レポジトリを削除し、イメージストレージに対して課金されないようにします。
$ aws ecr delete-repository --repository-name hello-repository --force