LoginSignup
1
0

More than 5 years have passed since last update.

AWSとDockerを雰囲気で触ってきたのでまとめる(インスタンス作成->docker runまで)

Posted at

AWS上でDockerを使ったサーバー構築をする

雰囲気的な持ち物

  1. AWSアカウント
  2. AWS client toolの用意(AWS CLI)
  3. Githubアカウント(既存のプロジェクトクローンする用)
  4. Docker実行環境

持ち物の用意

AWS CLI -> ローカルからインスタンスに接続するためのコマンドラインインターフェース。

pythonでpipを落とす brewでもいい

python get-pip.py

sudo pip install aws cli

あとで

aws configure
接続先のインスタンスの情報設定を行う

AWS Access Key ID [None]: ①後の手順のcredential.csvを参照する
AWS Secret Access Key [None]: ①後の手順のcredential.csvを参照する
Default region name [None]: ②立てたインスタンスのリージョン
Default output format [None]: ③json, text, table形式が選択できる こだわりがなければjson
Dockerのインストール

DockerCommunityに新規登録後dmgが落とせます
https://store.docker.com/editions/community/docker-ce-desktop-mac

構築作業

1, IAM権限の設定, credential.csvのダウンロード, aws configure(持ち物2.を参照)
2, Dockerfileをローカルのプロジェクトに落とす
3, リポジトリの作成
4, クラスターの作成
5, タスク定義
6, タスクの実行
7, EC2上のDockerコンテナに入る

1, AWS コンソールを開く

AWSサービス -> IAM -> ユーザー

ユーザー名:なんでもいい
アクセスの種類:プログラムによるアクセス

アクセス権限

ポリシーのフィルタ横から
AmazonEC2FullAccess
AmazonEC2ContainerRegistryFullAccess
AmazonECS_FullAccess
AmazonEC2ContainerServiceFullAccess
AmazonEC2ContainerServiceRole
AdministratorAccess
をそれぞれ検索してチェック, 確認

2回目以降であれば
既存のポリシーを直接アタッチ->設定に飛ぶ

ユーザーの作成に成功すると.csvが落ちてくる
拾い忘れるとCLIから入れないので注意

2, ローカルのコマンドライン

既存のプロジェクトをcloneもしくは自作する

プロジェクト内で
docker build -t project_nameで構成をビルドする
docker run -d 80:80 --name project_name project_name:latest
仮想サーバが起動する
* -d ホストのポート:コンテナのポート, 最後の引数はインスタンスのタグらしい

3, AWSコンソールに戻る

サービス -> ElasticContainerService
Amazon ECR -> リポジトリ

リポジトリの作成

リポジトリ名:必ずDockerfileのあるプロジェクトと同名。
後々sshする時に設定がめんどくさいらしい。

完了は押さずに下記をコマンドラインで実行。

aws ecr get-login --no-include-email --region us-east-2
cliからログイン

docker build -t test .

docker tag test:latest ************.dkr.ecr.us-east-2.amazonaws.com/test:latest
イメージとコンテナを紐つけ

docker push ************.dkr.ecr.us-east-2.amazonaws.com/test:latest
Dockerイメージをプッシュ

完了

4, そのままAWSコンソール

Amazon ECS -> クラスター
クラスターの作成

EC2Linux + ネットワーキングを選択

クラスター名:プロジェクトと同名
プロビジョニング:オンデマンドインスタンス(従量課金)
EC2インスタンスタイプ:t2.micro(最小)
インスタンス数:1
キーペア: EC2コンソールのリンクをクリック

識別しやすい名前で作成 pemはプロジェクトの適当な場所に置いておく
更新 -> 作成したキーペアを選択

5, そのままAWSのコンソール

AmazonECS -> タスク定義
新しいタスク定義の作成

起動タイプ互換性 EC2を選択

Fargate ?

EC2を立ち上げずにコンテナを立ち上げる仕組み <= new!!

  fargate使うとsshが使えない CLIコンテナの中にアクセスする方法がない
  コンテナだけ立ち上がるため
  今回はEC2 Linux + ネットワーキングを選択する
  クラウドウォッチでログが出力される プロジェクト単位のログ管理はプログラムから実装する必要がある

タスク定義名:プロジェクト名と同名で良い
タスクサイズ:タスクメモリ:128GB(お試しサイズ)
コンテナの追加:プロジェクト名と同名で良い

メモリ制限:128GB

ポートマッピング:ホスト80:コンテナ80:tcp
セキュリティに80はよく使うのでよろしくないかも
任意

CPUユニット数:1

で作成。

6, そのまま(略)

クラスター -> タスク タブ

起動タイプ:EC2
タスク定義:さっき作成した名前:1
タスクの実行

パブリックDNSをポチってプロジェクトの画面が見えればおけ。

7,

ElasticContainerInstance -> ネットワーク&セキュリティ
セキュリティグループ -> さっき立てたインスタンスに対してチェック -> アクション
インバウンドルールの編集

http, tcp, 80
リソースは カスタム, 0.0.0.0/0に設定,保存

コマンドラインに戻る

chmod 400 さっきの.pem
ssh -i "さっきの.pem" ec2-user@インスタンスDNS URIで接続

入れたらdocker psで動いているプロセスの確認ができる

おまけ

インスタンスの削除

インスタンスのみの削除はできない(起動・停止・削除はできる)
クラスターグループが動いている限りまた起動する可能性があるので
クラスターグループの削除で完全にインスタンスを削除できる

感想

  • ポリシーが1年365日に迫る勢いで用意されている、怖い。(用途が把握しきれなそう)
  • 個人的にはGCPよりも導線が難しいと感じる
  • IAMの設定は完全に雰囲気だった(しかし設定し忘れるとpushができない、危険)
1
0
0

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
1
0