0
0

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?

WindowsでDockerを使ってみた3(on AWS)

Posted at

内容
◉趣旨目標
◉前回の記事からの続き。
◉現状の構成
◉作りたい構成
◉作りたい構成の細部
・VPCの作成
・セキュリティグループの設定
・ECRにイメージをプッシュ。
・ECS(クラスター)作成
・タスク定義
・サービスの作成
・【参考】タスクの実行

趣旨目標

前回の記事のアップデート。WindowsでDockerを構築し、MySQLを連携させてデータベースにレコードを追加することができたので、今回は、コンテナをAWS上のEC2,ECSを使用し、コンテナを設置、データベースにレコードを追加するところまで行う。

前回の記事からの続き。

前回の記事:
https://qiita.com/nikorasu277/items/18faba6be13a92628644

現状の構成

image.png

作りたい構成

image.png

作りたい構成の細部

VPCの作成

EC2インズタンス上でタスクを実行させるために先んじてVPCを作成。
今回はFargateではなく、EC2を使用する。
・作成するリソース「VPCなど。」
・名前タグ「keiji」
・IPv4 CIDR ブロック10.0.0.0/16
・マルチAZ
・パブリックサブネットを2つ。
・プラベートサブネットはなし。
・DNS解決を有効化(独自DNSを使用していない。)
image.png

セキュリティグループの設定

作成したVPCのセキュリティグループを設定する。
・インバウンド80番を解放
image.png

ECRにイメージをプッシュ。

ECRのリポジトリ作成
・可視性設定「プライベート」
image.png
・ローカルのDockerコンテナイメージのプッシュ。
AWS CLIがインストールされているか確認

aws --version

インストールされていない場合、AWS CLIをインストール。
https://docs.aws.amazon.com/ja_jp/cli/latest/userguide/getting-started-install.html

AWS CLIのインストールが初回で、かつLinuxの場合

curl "https://awscli.amazonaws.com/awscli-exe-linux-x86_64.zip" -o "awscliv2.zip"
unzip awscliv2.zip
sudo ./aws/install

あとは、赤枠内をクリックし、指示に従って表示されているコマンドを素直にAWS CLIにそのままコピペする。
image.png
ここで初めてAWS CLIを使用する場合、次のエラーが返されます。
image.png
エラーで示されたとおり、AWS CLIで次のコマンドを実行して、アクセスキーとシークレットキーを入力してセットアップする必要があります。
【参考】アクセスキーとシークレットキーの作成方法:
https://docs.aws.amazon.com/ja_jp/IAM/latest/UserGuide/id_credentials_access-keys.html#Using_CreateAccessKey_CLIAPI
※キーの作成はIAMのマネジメントコンソールからでも作成可能です。

aws configure

このコマンドを実行したら、順次キーを入力しましょう。
以下は私の場合です。
ローカルからAWS CLIによってログインするコマンド。

aws ecr get-login-password --region us-east-1 | docker login --username AWS --password-stdin 851725271515.dkr.ecr.us-east-1.amazonaws.com

image.png

ローカルにあるdockerfileに任意のタグ名を付けて、イメージをビルド。
※必ずdockerfileが存在するディレクトリで実行します。

もし、dockerfileが見つからない場合
find / -name Dockerfile

このコマンドを実行し、見つかった時点でコマンドの実行を停めてあげましょう。

イメージビルドはこちら
docker build -t keiji-ecr .

ローカルで作成したイメージに名前付け。

docker tag keiji-ecr:latest 851725271515.dkr.ecr.us-east-1.amazonaws.com/keiji-ecr:latest

ローカルで作成したイメージをプッシュします。

docker push 851725271515.dkr.ecr.us-east-1.amazonaws.com/keiji-ecr:latest

こんな感じで流れます。
image.png
ECRのコンソールでアクションから、「イメージ」がプッシュできたか再確認できます。
image.png

ECS(クラスター)作成

・EC2を選択
image.png

タスク定義

・80番ポート開放
・起動タイプEC2を選択
・先程作成したイメージURIでコンテナ設定
・コンテナポート80番解放
・ネットワークモード awsvpc
・タスクロール、実行ロール ecsTaskExecutionRole
・ログ収集 チェックを外す。
image.png

サービスの作成

・先程作成したクラスターを選択
・ALBを選択
・必要なタスク「1」
・サービスタイプ「レプリカ」
・デプロイサーキットブレーカー 無効

サービス作成完了!
image.png

【参考】タスクの実行

AWS CLI
aws ecs run-task --cluster <クラスター名> --task-definition <タスク名> --network-configuration "awsvpcConfiguration={subnets=[subnet-1234567890,subnet-0987654321],securityGroups=[sg-1234567890],assignPublicIp=ENABLED}"

image.png
そもそも単発でのタスク実行はECSではなくAWS Lambdaと組み合わせて構成するのが最適なのかなと考えました。また、EC2かFargateの選択も要件に合わせて構成ですね。あと今回の場合DBへのレコード追加を手動でPythonコードを実行するコードなので、CI/CDと組み合わせてもっとアップグレードできそうですね!簡単にはできませんが(^^;勉強になりました。

では!

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

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?