0
1

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?

GitHub Actions × TerraformでAWSを自動管理!初心者でもできるCI/CDチュートリアル

Posted at

背景:Infrastructure as Code(IaC)とCI/CDの重要性

近年、インフラ構成の自動化を目的としたInfrastructure as Code(IaC)の重要性が急速に高まっています。なかでもTerraformはクラウドベンダーに依存しない構成管理ツールとして注目されており、多くの企業で導入が進んでいます。一方、開発と運用の自動化を支えるCI/CDツールとしてはGitHub Actionsが非常に人気で、特にGitHubとシームレスに統合できる利点があります。

この2つを組み合わせることで、AWS上のインフラをコードベースで管理し、Git操作をトリガーに本番環境を自動構築・更新する仕組みが構築可能になります。

技術的背景と最近のトレンド

  • GitHub Actionsは2020年以降、Qiitaでも関連記事が急増し、Terraformとの連携記事は特に保存数が多い傾向。
  • TerraformはAWS公式の推奨ツールでもあり、従来のCloudFormationに比べて汎用性・可読性の面で評価されている。
  • Terraform CloudやOpenTofuの登場などで選択肢が広がっているが、学習の第一歩としてGitHub Actionsの活用は依然王道。

よくある課題・エラーとその傾向

  • Terraformの状態管理:ローカル管理だと競合が起きやすく、CIとの相性が悪い。
  • AWS認証エラー:GitHub Actions上でAWSの認証情報を安全に扱う方法を理解していないと、権限不足のエラーが発生。
  • ActionsのYAML構文ミス:慣れないうちはインデントやコマンドの書き方でエラーが頻発。
  • Plan/Applyの分離:PRでPlan結果を確認してからApplyしたい、という運用が難しいケースも。

GitHub Actions + Terraformを使ったAWS構築の手順

以下は、GitHub Actions上でTerraformを使い、S3バケットを作成するシンプルな例です。

# .github/workflows/terraform.yml
name: Terraform on AWS

on:
  push:
    branches:
      - main

jobs:
  terraform:
    name: 'Terraform Apply'
    runs-on: ubuntu-latest

    steps:
      - name: Checkout repository
        uses: actions/checkout@v3

      - name: Configure AWS credentials
        uses: aws-actions/configure-aws-credentials@v2
        with:
          aws-access-key-id: ${{ secrets.AWS_ACCESS_KEY_ID }}
          aws-secret-access-key: ${{ secrets.AWS_SECRET_ACCESS_KEY }}
          aws-region: ap-northeast-1

      - name: Setup Terraform
        uses: hashicorp/setup-terraform@v3

      - name: Terraform Init
        run: terraform init

      - name: Terraform Plan
        run: terraform plan

      - name: Terraform Apply
        run: terraform apply -auto-approve

Terraformファイル(例:main.tf)はこんな感じです。

# main.tf
provider "aws" {
  region = "ap-northeast-1"
}

resource "aws_s3_bucket" "example" {
  bucket = "my-example-bucket-123456"
  acl    = "private"
}

ベストプラクティスと運用のポイント

  • ステート管理はリモート(S3+DynamoDB)に切り替える:チーム開発やCI環境と相性が良い。
  • PRごとにplanのみ実行し、マージ後にapplyを実行するワークフローを採用すると安全。
  • Secretsは必ずGitHubのSecretsに登録し、ワークフロー上にベタ書きしない。
  • applyの前にplan結果をSlack通知する連携もおすすめ。
  • GitHub Actionsランナーに対するIAMロールの制限を忘れずに。

まとめと今後の展望

GitHub ActionsとTerraformの組み合わせは、エンジニアにとって非常に強力な武器になります。特にAWS環境を扱う案件では、コードでのインフラ管理+自動デプロイは今後の必須スキルと言っても過言ではありません。

まずは小さなリソースから始め、Plan→Applyの分離運用Slack連携・PR連動などの高度な自動化へと発展させていきましょう。公式ドキュメントやQiita記事と併せて、自分に合ったCI/CDパターンを構築してみてください。

今後は、Terraform CloudGitHub Actions Runnerのセルフホスト化OpenTofuへの移行なども注目テーマとなるでしょう。

0
1
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
1

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?