nodeアプリケーションをECSデプロイするまでの道のり docker / ECR / ECS設定
🔖 bookmark
ECS deploy
docker
docker
PCのlocalhost
docker.for.mac.localhost
を使うんじゃ
version: '3.7'
services:
api:
build:
context: ..
dockerfile: ./docker/Dockerfile
ports:
- '8080:8080'
environment:
- PORT=8080
- DB_HOST=docker.for.mac.localhost
...
AWS
Multi Account
CLI
コマンドラインから複数のAWSアカウントを使用するにはどうすればよいですか?
AWS
Deploy
ECS Deployツール、手段は多種多様
クロスアカウント問題
ホストアカウントから他のアカウントのリソースへアクセスしたい。
Route 53
ホストアカウントのドメイン -> ほかアカウントのELBへの設定方法。
AレコードにDNS名を追加すればおk。
https化
ホストアカウントのドメイン -> 他アカウントのACMへの設定方法。
copilot
init
initするとインタラクションでどんどん作られていく!
作られるものは👇!
- VPC
- Application Load Balancer
- ECS
- ECR: Create & Push Container Image
- AWS Fargate Service
copilot init
profile 切り替え
MissingRegion: could not find region configuration
環境変数にAWS_REGION
を設定する
export AWS_REGION=ap-northeast-1
Deploy Error
iam:PassRole
が無いから、作ったサービスリソースにpass roleできない!
✘ deploy service: check if changeset is empty: create change set copilot-ZZZZZZZ-ZZZZZZZ for stack test-test: AccessDenied: User: arn:aws:sts::ZZZZZZZ:assumed-role/test-EnvManagerRole/ZZZZZZZ is not authorized to perform: iam:PassRole on resource: arn:aws:iam::ZZZZZZZ:role/test-test-CFNExecutionRole
Terraform で ECS
Terraform とは
Terraform実行環境
dockerでTerraform環境用意できるよ!
Command
wip
# terraform init
# terraform plan
# terraform apply
ECS
Terraform 0.11 -> 0.14
# docker run v0.12
terraform init
terraform 0.12upgrade
# docker run v0.13
terraform init
terraform 0.13upgrade
terraform plan
# Error修正
# docker run v0.14
terraform plan
Terraform directory structur
複数サブネットを一度に作る
Examples
AWS
Network 設計
サブネット計算
TerraformでAZをリストで展開する方法
Terraformでresourceリストからarrayを生成する
// subnets = [aws_subnet.public_1a.id, aws_subnet.public_1c.id, aws_subnet.public_1d.id]
subnets = aws_subnet.public.*.id
TerraformでRDSを削除するとき
RDSにはインスタンス削除時にスナップショットをとるか設定できる項目skip_final_snapshotがあります。
サンプルコードではインスタンス作成時はこの値をfalseにし、削除するときはtrueにすると書いています。
しかし、私は誤ってfalseのままdestoryを実施してしまいました。(ログを残していなかったので、推測ではありますが)
インスタンス削除時にスナップショットをとる(skip_final_snapshot = false)ならば、
合わせてfinal_snapshot_identifierの設定が必要であり、この設定をしていないまま削除(destroy)を実行すると以下のエラーがでます。
Terraform × mysql parameter_group
Terraform で aws mysqlを削除できないとき
Session Managerを使用してEC2に接続する
EC2のLinux上にmysql-cliをinstallする
ecspresso
export AWS_SDK_LOAD_CONFIG=true
export AWS_PROFILE=xxxx
ecspresso init --config config.yaml --region ap-northeast-1 --cluster xxx --service xxx
既存からインポートケース
新規パターン
ecspressoでmigration
run
コマンドで、既存コンテナをコマンドだけ上書きしてワンオフ実行する
ecspresso --config staging/config.yaml run \
--overrides='{"containerOverrides":[{"name":"hoge", "command":["yarn", "run", "migration"], "memory": 1024 }]}'
aws-cli
Create log group
aws --profile=hoge logs create-log-group --log-group-name /aws/ecs/stg/migration
- ecs fargateでproxy
eip -> nat -> route_table はprivateサブネットのとき、ecrからpullするためには必須だった。。。