はじめに
AWSのFargateを使ってみたいけど、何から始めていいかわからない...という方へ。
一緒に超シンプルな構成を試して「これがFargateか😃」を体感してみましょう!の第2弾です。
具体的には、パブリックサブネットにECSを構築しDjangoとNginxの2つのコンテナを起動します。
ちなみに、第1弾はこちら。
Dockerfileとhtmlファイルを使ってNginxコンテナを起動しました。
第1弾は魔法ファイルをCloudFormationにアップロードしてVPCやセキュリティグループ、ロールなどを自動で構築しましたが、今回はコンソール画面で作っていきますよ。
AWS ECS on Fargateを使って簡易アプリを動かすまでの手順をまとめました。
やってみよう
前提 : AWSにログインしている。GitとLinuxコマンドチョット分かる
以下の手順で進めます。作業にかかる時間は50分ほどです。
ゴールはFargateでコンテナ起動し「Hello,World!」の画面を表示することです。
1.ロールを作成する
2.VPCとセキュリティグループを作成する
3.ECRにリポジトリを作成
4.CloudWatchにロググループを作成する
5.GitHubから簡易アプリをクローンする
6.リポジトリにDockerイメージをプッシュする
7.タスク定義を作成する
8.クラスターを作成する
9.サービスを作成する
10.「これがFargateか😃」を体感
11.CloudWatchのログを見てみよう
それではチュートリアルスタートです。
1.ロールを作成する
IAM → ロール →「ロールを作成」をクリック
ロール名は「ecsTaskExecutionRole」にしてください。後で作成するタスク定義と合わせるためです。
2.VPCとセキュリティグループを作成する
VPC-> 「VPCを作成」をクリックし、画像のようにVPCを作成します
3.ECRにリポジトリを作成
Django用とNginx用に2つのリポジトリを作成します。
リポジトリ名はそれぞれ「reverse-proxy-django-app」と「reverse-proxy-django-nginx」にしてください。後で作成するタスク定義に合わせるためです。
4.CloudWatchにロググループを作成する
どの画面でも構いませんので、画面左下にあるCloudShellを開いてください。
CloudShellで下記コマンドを実行します
aws logs describe-log-groups --query "logGroups[*].logGroupName"
aws logs create-log-group --log-group-name "/aws/ecs/reverse-proxy-cluster"
5.GitHubから簡易アプリをクローンする
以下のGitHubリポジトリを使用させていただきます
CloudShellで下記コマンドを実行します
git clone https://github.com/free-honda/reverse-proxy-django-prd.git
6.リポジトリにDockerイメージをプッシュする
ECS → リポジトリ → 「reverse-proxy-django-app」をクリック → CloudShellを開き、CloudShell内でdjango_appディレクトリに移動してください
コンソール画面の「プッシュコマンドを表示」をクリックし、4つのコマンドを実行します
更新ボタンを押してみてください
「reverse-proxy-django-app」リポジトリにイメージをプッシュできました
次は「reverse-proxy-django-nginx」リポジトリにイメージをプッシュします
リポジトリ → 「reverse-proxy-django-nginx」をクリック → CloudShellを開き、CloudShell内でreverse-proxy-django-prdディレクトリに移動
再度「プッシュコマンドを表示」のコマンドを実行しますが、
2つ目のコマンドの代わりに下記を実行してください
docker build -t reverse-proxy-django-nginx -f nginx.Dockerfile .
「reverse-proxy-django-nginx」リポジトリにイメージをプッシュできました
7.タスク定義を作成する
ECS → タスク定義 → 新しいタスク定義の作成 → JSONを使用した新しいタスク定義の作成
編集画面内に下記のJSONをペーストします
ただし「xxx」の部分はご自身のアカウントIDに変更してください。3カ所あります。
{
"family": "reverse-proxy-task",
"executionRoleArn": "arn:aws:iam::xxx:role/ecsTaskExecutionRole",
"networkMode": "awsvpc",
"requiresCompatibilities": ["FARGATE"],
"cpu": "1024",
"memory": "2048",
"containerDefinitions": [
{
"name": "django",
"image": "xxx.dkr.ecr.ap-northeast-1.amazonaws.com/reverse-proxy-django-app",
"cpu": 512,
"memory": 1024,
"portMappings": [
{
"containerPort": 8000,
"protocol": "tcp"
}
],
"essential": true,
"environment": [
{
"name": "DJANGO_SETTINGS_MODULE",
"value": "mysite.settings"
},
{
"name": "DJANGO_SECRET_KEY",
"value": "your-secret-key"
},
{
"name": "STATIC_ROOT",
"value": "/app/staticfiles"
}
],
"logConfiguration": {
"logDriver": "awslogs",
"options": {
"awslogs-group": "/aws/ecs/reverse-proxy-cluster",
"awslogs-region": "ap-northeast-1",
"awslogs-stream-prefix": "ecs"
}
}
},
{
"name": "nginx",
"image": "xxx.dkr.ecr.ap-northeast-1.amazonaws.com/reverse-proxy-django-nginx",
"cpu": 512,
"memory": 1024,
"portMappings": [
{
"containerPort": 80,
"protocol": "tcp"
}
],
"essential": true,
"logConfiguration": {
"logDriver": "awslogs",
"options": {
"awslogs-group": "/aws/ecs/reverse-proxy-cluster",
"awslogs-region": "ap-northeast-1",
"awslogs-stream-prefix": "ecs"
}
}
}
]
}
8.クラスターを作成する
9.サービスを作成する
VPCやセキュリティグループは自分で作成したものに変更してください
10.「これがFargateか😃」を体感
2つのコンテナが起動できているのを確認して、パブリックIPアドレスでアクセスします
11.CloudWatchのログを見てみよう
CloudWatch → ロググループ → ロググループ名をクリック
お金かかるので使い終わったら削除してね
- ECSのタスク、サービス、クラスター
- VPC
- CloudWatchのログストリーム
まとめ
最後までお付き合いくださりありがとうございます。
今回はタスク定義以外のリソースを作成してみました。
自分の詰まりポイントとしては、IAMユーザのロール設定とCloudWatchのロググループの作成ですかね。
これであなたも「Fargateチョットワカル」気なりましたか?
参考文献