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?

【AWS Fargate:第5回その2】運用/削除編:トラブルシューティングからterraform destroyまで

0
Last updated at Posted at 2026-01-23

1. この記事について(6回シリーズ)

この記事は【AWS Fargate】実務的な設計フロー学習シリーズの第5-2弾(最終回) です。

記事 タイトル 内容
第1弾 設計思考編 なぜ設計が先なのか
第2弾 図解編 構成図・フロー図・シーケンス図
第3弾 パラメータ設計編 Terraformパラメータ設計
第4弾 Terraform実装編 コード作成からplan成功まで
第5-1弾 実装編 apply〜アクセス確認
第5-2弾 運用・削除編 トラブルシューティング〜destroy

📁 完全なコードはGitHubで公開GitHub: fargate-iac01


2. はじめに

2-1. この記事の位置づけ

第1弾で学んだ8ステップのうち、この記事ではSTEP 8(実装の後半) を扱います。

STEP 工程 記事 状態
1-7 グランドデザイン〜IaC設計 第1弾〜第3弾 ✅ 完了
8(前半) 実装(コード作成〜plan) 第4弾 ✅ 完了
8(中盤) 実装(apply〜アクセス確認) 第5-1弾 ✅ 完了
8(後半) トラブルシューティング〜destroy 第5-2弾(この記事) 📝 今ここ

今回のゴール:

  • よくある問題の対処法を学ぶ
  • terraform destroyでリソースを削除する
  • コストを確認する

2-2. 前回のおさらい

第5-1弾では、terraform applyを実行し、Apacheコンテナへのアクセスまで成功しました。

達成項目 状態
✅ ECR Repository作成 apply -targetで先行作成
✅ Dockerイメージpush Apache httpdイメージを配置
✅ インフラ構築 VPC、ECS等15個のリソース作成
✅ Fargateタスク起動 コンテナが正常に起動
✅ アクセス確認 ブラウザでApache画面表示

第5-1弾で実現したこと:

  • インターネットからApacheにアクセスできる環境
  • ECRからコンテナイメージを取得してFargateで起動
  • Public IPでHTTPアクセス可能

次は、トラブルシューティングリソース削除を学びます。

2-3. この記事で得られるもの

得られること 説明
トラブルシューティング よくある問題と解決方法
リソース確認 AWS各サービスでの確認方法
destroy実行 安全なリソース削除手順
コスト確認 課金の確認と停止

3. トラブルシューティング

実際の構築では、様々な問題に遭遇します。
よくある問題と解決方法を見ていきましょう。

3-1. ケース1:タスクが起動しない

3-1-1. 症状

fargate-terraform $ aws ecs list-tasks --cluster fargate-terraform-cluster --service-name fargate-terraform-service
{
    "taskArns": []
}

タスクのARNが返ってこない。


3-1-2. 原因と対処法

原因 確認方法 対処法
ECRにイメージがない aws ecr describe-images --repository-name apache-repo イメージをpush
タスク定義が間違っている CloudWatch Logsでエラー確認 タスク定義を修正
IAM Roleの権限不足 CloudWatch Logsでエラー確認 ecsTaskExecutionRoleを確認

3-1-3. CloudWatch Logsで確認

# ロググループを確認
fargate-terraform $ aws logs describe-log-groups \
  --log-group-name-prefix /ecs/fargate-terraform-task

# ログストリームを確認
fargate-terraform $ aws logs describe-log-streams \
  --log-group-name /ecs/fargate-terraform-task \
  --order-by LastEventTime \
  --descending \
  --max-items 1

# ログの内容を確認
fargate-terraform $ aws logs tail /ecs/fargate-terraform-task --follow

よくあるエラー:

CannotPullContainerError: Error response from daemon: 
pull access denied for 123456789012.dkr.ecr.ap-northeast-1.amazonaws.com/apache-repo, 
repository does not exist or may require 'docker login'

→ ECRにイメージがない、またはリポジトリ名が間違っている


3-2. ケース2:アクセスできない(タスクは起動している)

3-2-1. 症状

$ curl http://$PUBLIC_IP
curl: (7) Failed to connect to 54.123.45.67 port 80: Connection refused

3-2-2. 原因と対処法

原因 確認方法 対処法
Security Groupで80番が閉じている aws ec2 describe-security-groups --group-ids sg-xxx ingress ruleを確認
パブリックIPが割り当てられていない aws ec2 describe-network-interfaces --network-interface-ids eni-xxx assign_public_ip = true を確認
コンテナが起動していない CloudWatch Logsでエラー確認 コンテナの設定を確認

3-2-3. Security Groupの確認

# Security Groupのルールを確認
fargate-terraform $ aws ec2 describe-security-groups \
  --group-ids $(terraform output -raw security_group_id) \
  --query 'SecurityGroups[0].IpPermissions'

[
    {
        "FromPort": 80,
        "IpProtocol": "tcp",
        "IpRanges": [
            {
                "CidrIp": "0.0.0.0/0"
            }
        ],
        "ToPort": 80
    }
]

80番ポートが開いている


3-3. ケース3:タスクが頻繁に再起動する

3-3-1. 症状

fargate-terraform $ aws ecs describe-services \
  --cluster fargate-terraform-cluster \
  --services fargate-terraform-service \
  --query 'services[0].events[0:5]'

[
    {
        "message": "service fargate-terraform-service has reached a steady state.",
        "createdAt": "2024-01-15T12:35:00+09:00"
    },
    {
        "message": "(service fargate-terraform-service) has stopped 1 running tasks",
        "createdAt": "2024-01-15T12:34:30+09:00"
    },
    ...
]

3-3-2. 原因と対処法

原因 対処法
ヘルスチェック失敗 ALB使用時はTarget Groupの設定を確認
メモリ不足 タスク定義のメモリを増やす
コンテナの異常終了 CloudWatch Logsでエラー確認

4. terraform destroy(リソース削除)

4-1. destroy前の確認

確認項目 内容
⚠️ ECRイメージ destroyではECRイメージは削除されない
⚠️ CloudWatch Logs destroyではログは削除されない
⚠️ tfstateファイル バックアップを取る

4-2. ECRイメージの削除

# ECRイメージを削除
fargate-terraform $ aws ecr batch-delete-image \
  --repository-name apache-repo \
  --image-ids imageTag=latest

{
    "imageIds": [
        {
            "imageDigest": "sha256:xxxxxxxxxx...",
            "imageTag": "latest"
        }
    ],
    "failures": []
}

4-3. destroy実行

fargate-terraform $ terraform destroy

Terraform used the selected providers to generate the following execution plan.
Resource actions are indicated with the following symbols:
  - destroy

Terraform will perform the following actions:

  # aws_vpc.main will be destroyed
  - resource "aws_vpc" "main" {
      - cidr_block = "10.0.0.0/16" -> null
      ...
    }

  # ... (他のリソースも表示)

Plan: 0 to add, 0 to change, 12 to destroy.

Do you really want to destroy all resources?
  Terraform will destroy all the resources in your state file.

  Enter a value: yes

aws_ecs_service.main: Destroying... [id=arn:aws:ecs:ap-northeast-1:123456789012:service/fargate-terraform-cluster/fargate-terraform-service]
aws_ecs_service.main: Still destroying... [10s elapsed]
aws_ecs_service.main: Still destroying... [20s elapsed]
aws_ecs_service.main: Destruction complete after 28s

aws_ecs_task_definition.main: Destroying...
aws_ecs_cluster.main: Destroying...
aws_security_group.fargate: Destroying...

aws_ecs_task_definition.main: Destruction complete after 1s
aws_ecs_cluster.main: Destruction complete after 1s
aws_security_group.fargate: Destruction complete after 2s

aws_subnet.public: Destroying...
aws_route_table_association.public: Destroying...
aws_internet_gateway.main: Destroying...

aws_subnet.public: Destruction complete after 1s
aws_internet_gateway.main: Destruction complete after 2s
aws_vpc.main: Destroying...
aws_vpc.main: Destruction complete after 1s

Destroy complete! Resources: 12 destroyed.

所要時間: 約30秒〜1分


4-4. destroy後の確認

# リソースの確認
fargate-terraform $ terraform state list
aws_ecr_repository.main #=> ECRリポジトリが残っている

# AWS上でも確認
fargate-terraform $ aws ecs list-clusters
{
    "clusterArns": []
}

fargate-terraform $ aws ec2 describe-vpcs --filters "Name=tag:Name,Values=fargate-terraform-vpc"
{
    "Vpcs": []
}

全リソースが削除された


4-5. ECRリポジトリの削除

# ECRリポジトリを削除(イメージ削除後)
fargate-terraform $ aws ecr delete-repository \
  --repository-name apache-repo \
  --force

{
    "repository": {
        "repositoryArn": "arn:aws:ecr:ap-northeast-1:123456789012:repository/apache-repo",
        "registryId": "123456789012",
        "repositoryName": "apache-repo",
        "repositoryUri": "123456789012.dkr.ecr.ap-northeast-1.amazonaws.com/apache-repo"
    }
}

5. シリーズ総括:設計→実装の流れを振り返り

5-1. 全5回で学んだこと

記事 学んだこと
第1弾 なぜGUIから始めてはいけないのか、設計7割・実装3割の考え方
第2弾 4種類の図(基本構成図、詳細構成図、フロー図、シーケンス図)の使い分け
第3弾 Terraformパラメータ設計、変数化の判断基準、outputs.tfの考え方
第4弾 Terraformコード作成、terraform plan
第5弾 terraform apply、ECR操作、アクセス確認、トラブルシューティング、terraform destroy

5-2. 実務で使えそうな成果物

成果物 用途
グランドデザイン 要件整理
基本構成図 全体像の把握
詳細構成図 技術要素の理解
フロー図 データの経路確認
シーケンス図 処理順序の理解
GUI版パラメータ表 GUI実装時の参照
Terraform用パラメータ表 IaC実装時の参照
Terraformコード 実際の実装

5-3. 設計工程を料理で振り返る

料理のたとえ 設計フローの対応
何人分?どんな味? グランドデザイン(要件整理)
キッチンの間取り 基本構成図
調理台の詳細配置 詳細構成図
食材の動線 フロー図
調理のタイムテーブル シーケンス図
材料の分量表 パラメータ表
レシピの清書 Terraformコード
実際の調理 terraform apply
味見 アクセス確認
後片付け terraform destroy

6. 次の学習テーマ考察(備忘録)

6-1. マルチAZ化

項目 変更内容
Subnet Public Subnet × 2(1a、1c)
タスク数 desired_count = 2
ALB Application Load Balancer追加
Target Group ヘルスチェック設定

6-2. 本番環境への展開

項目 変更内容
Private Subnet Private Subnet × 2追加
NAT Gateway NAT Gateway × 2追加
RDS データベース追加
S3 静的コンテンツ配信
CloudFront CDN追加
Route53 独自ドメイン設定

6-3. Terraformのベストプラクティス

項目 内容
tfstateのリモート管理 S3 + DynamoDB でstate管理
モジュール化 dev/stg/prdで共通モジュール使用
変数の階層化 環境別のtfvarsファイル
CI/CD GitHub Actions / GitLab CI でterraform plan/apply自動化
セキュリティ tfstateの暗号化、変数の管理

7. まとめ

7-1. この記事で実践したこと

項目 内容
✅ terraform apply 15個のリソースを作成
✅ ECR操作 Dockerイメージのpush
✅ アクセス確認 ブラウザでApacheにアクセス
✅ トラブルシューティング よくある問題と解決方法
✅ terraform destroy 全リソースを削除

7-2. 実務で活きる場面

この設計フローは、以下のような実務シーンで活きてきます:

シーン 活用方法
新規案件 要件定義・設計フェーズでグランドデザイン・構成図作成
設計レビュー 構成図とパラメータ表でレビュー
実装 パラメータ表をもとにGUI/Terraform実装
トラブル対応 フロー図・シーケンス図で切り分け
引き継ぎ ドキュメント(図・パラメータ表・コード)で説明

7-3. 設計7割、実装3割の意味

フェーズ 時間配分 理由
設計 70% 後戻りを防ぐ、レビューしやすい、再利用できる
実装 20% 設計があればスムーズ
テスト 10% 設計通りか確認

設計に時間をかけることで、実装がスムーズになり、全体の工数が減る


8. 参考リンク


(シリーズ完結)

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?