(ニッチすぎて需要がわからない…)
ある日--。
ローカルではdocker-composeで環境を作っている。
確認用の環境を作りたいけど、ECSはオーバースペックな気がする。
そうだ、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でいいんじゃないかという気がしてきた。