はじめに
デプロイメント
AWSへのデプロイ
Amazon Web Services (AWS)にCaseBenderをデプロイする
概要
このガイドでは、Amazon ECS(Elastic Container Service)とFargateを使用して、事前に構築されたDockerイメージでCaseBenderをAWSにデプロイする方法を説明します。
前提条件
ステップ1: 初期設定
AWS CLIのインストールと設定
Copy
# Homebrewを使用
brew install awscli
# AWS CLIの設定
aws configure
# ECR用のDockerの設定
aws ecr get-login-password --region us-east-1 | docker login --username AWS --password-stdin $(aws sts get-caller-identity --query Account --output text).dkr.ecr.us-east-1.amazonaws.com
ステップ2: AWSインフラストラクチャの設定
ストレージ用のS3バケットの作成
Copy
# S3バケットの作成
aws s3 create-bucket \
--bucket casebender-storage \
--region us-east-1
# バージョニングの有効化(オプション)
aws s3api put-bucket-versioning \
--bucket casebender-storage \
--versioning-configuration Status=Enabled
# S3アクセス用のIAMユーザーの作成
aws iam create-user --user-name casebender-storage-user
# ポリシーの作成と添付
aws iam create-policy \
--policy-name casebender-storage-policy \
--policy-document '{
"Version": "2012-10-17",
"Statement": [
{
"Effect": "Allow",
"Action": [
"s3:PutObject",
"s3:GetObject",
"s3:DeleteObject",
"s3:ListBucket"
],
"Resource": [
"arn:aws:s3:::casebender-storage",
"arn:aws:s3:::casebender-storage/*"
]
}
]
}'
# ユーザーへのポリシーの添付
aws iam attach-user-policy \
--user-name casebender-storage-user \
--policy-arn arn:aws:iam::YOUR_ACCOUNT_ID:policy/casebender-storage-policy
# アクセスキーの作成
aws iam create-access-key --user-name casebender-storage-user
VPCの作成
Copy
# VPCの作成
aws ec2 create-vpc \
--cidr-block 10.0.0.0/16 \
--tag-specifications 'ResourceType=vpc,Tags=[{Key=Name,Value=casebender-vpc}]'
# DNSホスト名の有効化
aws ec2 modify-vpc-attribute \
--vpc-id <vpc-id> \
--enable-dns-hostnames
サブネットの作成
Copy
# パブリックサブネットの作成
aws ec2 create-subnet \
--vpc-id <vpc-id> \
--cidr-block 10.0.1.0/24 \
--availability-zone us-east-1a \
--tag-specifications 'ResourceType=subnet,Tags=[{Key=Name,Value=casebender-public-1a}]'
aws ec2 create-subnet \
--vpc-id <vpc-id> \
--cidr-block 10.0.2.0/24 \
--availability-zone us-east-1b \
--tag-specifications 'ResourceType=subnet,Tags=[{Key=Name,Value=casebender-public-1b}]'
RDS(PostgreSQL)のセットアップ
Copy
# DBサブネットグループの作成
aws rds create-db-subnet-group \
--db-subnet-group-name casebender-db-subnet \
--db-subnet-group-description "Subnet group for CaseBender RDS" \
--subnet-ids "<subnet-1-id>" "<subnet-2-id>"
# RDSインスタンスの作成
aws rds create-db-instance \
--db-instance-identifier casebender-db \
--db-instance-class db.t3.medium \
--engine postgres \
--master-username superadmin \
--master-user-password <your-secure-password> \
--allocated-storage 20 \
--db-subnet-group-name casebender-db-subnet
ElastiCache(Redis)のセットアップ
Copy
# キャッシュサブネットグループの作成
aws elasticache create-cache-subnet-group \
--cache-subnet-group-name casebender-cache-subnet \
--cache-subnet-group-description "Subnet group for CaseBender Redis" \
--subnet-ids "<subnet-1-id>" "<subnet-2-id>"
# Redisクラスターの作成
aws elasticache create-cache-cluster \
--cache-cluster-id casebender-redis \
--engine redis \
--cache-node-type cache.t3.micro \
--num-cache-nodes 1 \
--cache-subnet-group-name casebender-cache-subnet
ステップ3: ECRリポジトリの作成
Copy
# 各サービス用のリポジトリを作成
aws ecr create-repository --repository-name casebender/app
aws ecr create-repository --repository-name casebender/workflow-processor
aws ecr create-repository --repository-name casebender/misp-processor
# AWSアカウントIDの取得
AWS_ACCOUNT_ID=$(aws sts get-caller-identity --query Account --output text)
# CaseBenderイメージのプル
docker pull casebender/casebender:latest
docker pull casebender/workflow-processor:latest
docker pull casebender/misp-processor:latest
# ECR用のイメージのタグ付け
docker tag casebender/casebender:latest ${AWS_ACCOUNT_ID}.dkr.ecr.us-east-1.amazonaws.com/casebender/app:latest
docker tag casebender/workflow-processor:latest ${AWS_ACCOUNT_ID}.dkr.ecr.us-east-1.amazonaws.com/casebender/workflow-processor:latest
docker tag casebender/misp-processor:latest ${AWS_ACCOUNT_ID}.dkr.ecr.us-east-1.amazonaws.com/casebender/misp-processor:latest
# イメージをECRにプッシュ
docker push ${AWS_ACCOUNT_ID}.dkr.ecr.us-east-1.amazonaws.com/casebender/app:latest
docker push ${AWS_ACCOUNT_ID}.dkr.ecr.us-east-1.amazonaws.com/casebender/workflow-processor:latest
docker push ${AWS_ACCOUNT_ID}.dkr.ecr.us-east-1.amazonaws.com/casebender/misp-processor:latest
ステップ4: ECSクラスターの作成
Copy
# ECSクラスターの作成
aws ecs create-cluster --cluster-name casebender-cluster
# タスク実行ロールの作成
aws iam create-role \
--role-name ecsTaskExecutionRole \
--assume-role-policy-document file://task-execution-assume-role.json
# ポリシーの添付
aws iam attach-role-policy \
--role-name ecsTaskExecutionRole \
--policy-arn arn:aws:iam::aws:policy/service-role/AmazonECSTaskExecutionRolePolicy
ステップ5: タスク定義の作成
各サービス用のタスク定義JSONファイルを作成します:
Copy
{
"family": "casebender-app",
"networkMode": "awsvpc",
"requiresCompatibilities": ["FARGATE"],
"cpu": "1024",
"memory": "2048",
"executionRoleArn": "arn:aws:iam::<aws-account-id>:role/ecsTaskExecutionRole",
"containerDefinitions": [
{
"name": "app",
"image": "<aws-account-id>.dkr.ecr.us-east-1.amazonaws.com/casebender/app:latest",
"portMappings": [
{
"containerPort": 3000,
"protocol": "tcp"
}
],
"environment": [
{
"name": "POSTGRES_PRISMA_URL",
"value": "postgresql://superadmin:password@casebender-db.xxxxx.region.rds.amazonaws.com:5432/casebender"
},
{
"name": "REDIS_URL",
"value": "redis://casebender-redis.xxxxx.region.cache.amazonaws.com:6379"
},
{
"name": "AWS_S3_BUCKET",
"value": "casebender-storage"
},
{
"name": "AWS_S3_REGION",
"value": "us-east-1"
}
],
"secrets": [
{
"name": "AUTH_SECRET",
"valueFrom": "arn:aws:secretsmanager:region:account:secret:auth-secret"
},
{
"name": "AUTH_SALT",
"valueFrom": "arn:aws:secretsmanager:region:account:secret:auth-salt"
}
],
"logConfiguration": {
"logDriver": "awslogs",
"options": {
"awslogs-group": "/ecs/casebender",
"awslogs-region": "us-east-1",
"awslogs-stream-prefix": "app"
}
}
}
]
}
タスク定義を登録します:
Copy
# タスク定義の登録
aws ecs register-task-definition --cli-input-json file://app-task-definition.json
aws ecs register-task-definition --cli-input-json file://workflow-processor-task-definition.json
aws ecs register-task-definition --cli-input-json file://misp-processor-task-definition.json
ステップ6: アプリケーションロードバランサーの作成
Copy
# ALBの作成
aws elbv2 create-load-balancer \
--name casebender-alb \
--subnets <subnet-1-id> <subnet-2-id> \
--security-groups <security-group-id>
# ターゲットグループの作成
aws elbv2 create-target-group \
--name casebender-tg \
--protocol HTTP \
--port 3000 \
--vpc-id <vpc-id> \
--target-type ip
# リスナーの作成
aws elbv2 create-listener \
--load-balancer-arn <alb-arn> \
--protocol HTTPS \
--port 443 \
--certificates CertificateArn=<certificate-arn> \
--default-actions Type=forward,TargetGroupArn=<target-group-arn>
ステップ7: ECSサービスの作成
Copy
# メインアプリ用のサービスの作成
aws ecs create-service \
--cluster casebender-cluster \
--service-name casebender-app \
--task-definition casebender-app \
--desired-count 2 \
--launch-type FARGATE \
--network-configuration "awsvpcConfiguration={subnets=[<subnet-1-id>,<subnet-2-id>],securityGroups=[<security-group-id>],assignPublicIp=ENABLED}" \
--load-balancers "targetGroupArn=<target-group-arn>,containerName=app,containerPort=3000"
# プロセッサー用のサービスの作成
aws ecs create-service \
--cluster casebender-cluster \
--service-name workflow-processor \
--task-definition casebender-workflow-processor \
--desired-count 1 \
--launch-type FARGATE \
--network-configuration "awsvpcConfiguration={subnets=[<subnet-1-id>,<subnet-2-id>],securityGroups=[<security-group-id>],assignPublicIp=ENABLED}"
aws ecs create-service \
--cluster casebender-cluster \
--service-name misp-processor \
--task-definition casebender-misp-processor \
--desired-count 1 \
--launch-type FARGATE \
--network-configuration "awsvpcConfiguration={subnets=[<subnet-1-id>,<subnet-2-id>],securityGroups=[<security-group-id>],assignPublicIp=ENABLED}"
ステップ8: Route 53のセットアップ(オプション)
カスタムドメインを使用する場合:
Copy
# ホストゾーンの作成(存在しない場合)
aws route53 create-hosted-zone \
--name yourdomain.com \
--caller-reference $(date +%s)
# Aレコードの作成
aws route53 change-resource-record-sets \
--hosted-zone-id <zone-id> \
--change-batch '{
"Changes": [{
"Action": "CREATE",
"ResourceRecordSet": {
"Name": "yourdomain.com",
"Type": "A",
"AliasTarget": {
"HostedZoneId": "<alb-hosted-zone-id>",
"DNSName": "<alb-dns-name>",
"EvaluateTargetHealth": true
}
}
}]
}'
モニタリングとメンテナンス
CloudWatchアラームの設定
Copy
# CPU使用率アラームの作成
aws cloudwatch put-metric-alarm \
--alarm-name casebender-cpu-alarm \
--alarm-description "CPU utilization exceeded 80%" \
--metric-name CPUUtilization \
--namespace AWS/ECS \
--statistic Average \
--period 300 \
--threshold 80 \
--comparison-operator GreaterThanThreshold \
--dimensions Name=ClusterName,Value=casebender-cluster \
--evaluation-periods 2 \
--alarm-actions <sns-topic-arn>
ログの表示
Copy
# サービスログの表示
aws logs get-log-events \
--log-group-name /ecs/casebender \
--log-stream-name app/<container-id>
サービスの更新
Copy
# 新しいタスク定義でサービスを更新
aws ecs update-service \
--cluster casebender-cluster \
--service casebender-app \
--task-definition casebender-app:NEW_REVISION
コスト最適化
- 重要でないワークロードにはFargate Spotを使用
- メトリクスに基づいた自動スケーリングの実装
- 適切なインスタンスサイズの選択
- 予測可能なワークロードにはリザーブドインスタンスを使用
セキュリティのベストプラクティス
- 機密データにはAWS Secrets Managerを使用
- WAFルールの実装
- VPC Flow Logsの有効化
- セキュリティグループの定期的な監査
- AWS GuardDutyの有効化
次のステップ
- AWS CodePipelineでCI/CDパイプラインを設定
- バックアップ戦略の構成
- モニタリングとアラートの実装
- セキュリティのベストプラクティスの確認
このページの内容
- 概要
- 前提条件
- ステップ1: 初期設定
- AWS CLIのインストールと設定
- ステップ2: AWSインフラストラクチャの設定
- ストレージ用のS3バケットの作成
- VPCの作成
- サブネットの作成
- RDS(PostgreSQL)のセットアップ
- ElastiCache(Redis)のセットアップ
- ステップ3: ECRリポジトリの作成
- ステップ4: ECSクラスターの作成
- ステップ5: タスク定義の作成
- ステップ6: アプリケーションロードバランサーの作成
- ステップ7: ECSサービスの作成
- ステップ8: Route 53のセットアップ(オプション)
- モニタリングとメンテナンス
- CloudWatchアラームの設定
- ログの表示
- サービスの更新
- コスト最適化
- セキュリティのベストプラクティス
- 次のステップ
アシスタント
Responses are generated using AI and may contain mistakes.