LoginSignup
15
9

More than 5 years have passed since last update.

EC2で動かすDocker ComposeをCodeDeployでデプロイ

Posted at

(ニッチすぎて需要がわからない…)

ある日--。
ローカルではdocker-composeで環境を作っている。
確認用の環境を作りたいけど、ECSはオーバースペックな気がする。

s_AAの画像化.png

そうだ、EC2で動かせばいいんだ。
ついでにCodeDeployでデプロイも簡単にしよう。

IAMロールの作成

CodeDeployからEC2にアクセスする用

  • IAMのコンソールでロール -> ロールの作成
エンティティの種類 AWSサービス
ロールを使用するサービス CodeDeploy
ユースケース CodeDeploy
アタッチするポリシー AWSCodeDeployRole
名称 適当

EC2からS3にアクセスする用

  • IAMのコンソールでロール -> ロールの作成
エンティティの種類 AWSサービス
ロールを使用するサービス EC2
アタッチするポリシー AmazonS3ReadOnlyAccess
名称 適当

# ユーザーの作成

  • IAMのコンソールでユーザー -> ユーザーの追加
ユーザー名 適当
アクセスの種類 プログラムによるアクセス
アクセス許可の設定 既存のポリシーを直接アタッチ
アタッチするポリシー AmazonS3FullAccess, AWSCodeDeployFullAccess

アクセスキーとシークレットキーを、ローカルのaws-cliに設定すること。

EC2のインスタンスを作成

AMI Amazon Linux 2 AMI
IAM ロール 上で作成したEC2用のロール
タグ Nameだけでも設定する
適当

各種インストール

Docker、Docker Compose、CodeDeploy Agentをインストールする。

sudo yum update
sudo yum install docker
sudo curl -L https://github.com/docker/compose/releases/download/1.21.2/docker-compose-$(uname -s)-$(uname -m) -o /usr/local/bin/docker-compose
sudo chmod +x /usr/local/bin/docker-compose
sudo yum install ruby
aws s3 cp s3://aws-codedeploy-ap-northeast-1/latest/install . --region ap-northeast-1
chmod +x ./install
sudo ./install auto

S3バケットを作成

バケットを作るだけ。
名前は控えておくこと。

CodeDeployのアプリケーションを作成

アプリケーション名 適当、控えておくこと
コンピューティングプラットフォーム EC2/オンプレミス
デプロイグループ名 適当、控えておくこと
デプロイタイプ インプレースデプロイ
環境設定 EC2インスタンス -> 上で作成したインスタンス
サービスロール ARN 上で作成したCodeDeploy用ロール

コード

.
│  appspec.yml
│  docker-compose.yml
│
└─scripts
       start.sh
appspec.yml
version: 0.0
os: linux
files:
  - source: /
    destination: /var/app
hooks:
  ApplicationStart:
    - location: scripts/start.sh
      runas: ec2-user
start.sh
#!/bin/sh

docker-compose -p project-name -f /var/app/docker-compose.yml down

docker-compose -p project-name -f /var/app/docker-compose.yml up -d

起動コマンドで、プロジェクト名とdocker-compose.ymlの場所を指定すること。

デプロイ

ローカルのaws-cliを使う。

aws deploy push \
  --application-name 上で作成したアプリケーション名 \
  --ignore-hidden-files \
  --s3-location s3://上で作成したバケット名/application.zip \
  --source . \
  --profile プロファイル名

aws deploy create-deployment \
  --application-name 上で作成したアプリケーション名 \
  --s3-location bucket=バケット名,key=application.zip,bundleType=zip,eTag=deployの戻り値にあるeTag \
  --deployment-group-name 上で作成したデプロイグループ名 \
  --file-exists-behavior OVERWRITE \
  --profile プロファイル名

ECSでいいんじゃないかという気がしてきた。

15
9
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
15
9