ホームページ  >  記事  >  ウェブフロントエンド  >  クラウド再開チャレンジの自動化: GitHub アクションを使用した CI/CD の実装

クラウド再開チャレンジの自動化: GitHub アクションを使用した CI/CD の実装

WBOY
WBOYオリジナル
2024-08-09 09:19:52589ブラウズ

クラウド再開チャレンジ - パート 2

導入

このシリーズの最初の部分では、さまざまな AWS サービスを使用してクラウドネイティブの履歴書 Web サイトを構築する手順を説明しました。次に、GitHub Actions を使用して継続的インテグレーションと継続的デプロイメント (CI/CD) を実装することで、プロジェクトを次のレベルに引き上げます。この自動化は、クラウド履歴書を効率的に維持および更新するために非常に重要です。

CI/CD は、アプリ開発の各段階の自動化に重点を置いた最新のソフトウェア開発手法です。 Cloud Resume Challenge のコンテキストでは、これは、履歴書を更新したり、バックエンド コードに変更を加えたり、これらの変更を GitHub にプッシュしたり、AWS インフラストラクチャに自動的にデプロイしたりできることを意味します。

Automating the Cloud Resume Challenge: Implementing CI/CD with GitHub Actions

クラウド開発において CI/CD が重要な理由

実装に入る前に、CI/CD がなぜそれほど重要なのかを説明しましょう。

  1. 一貫性: 自動展開により、すべての変更がインフラストラクチャ全体に一貫して適用されることが保証されます。
  2. 効率: 手動による導入は時間がかかり、人的ミスが発生しやすくなります。自動化により時間を節約し、間違いを減らします。
  3. 迅速なイテレーション: CI/CD を使用すると、新機能とバグ修正を迅速かつ安全にデプロイできます。
  4. ベスト プラクティス: CI/CD を実装すると、頻繁なコミット、包括的なテスト、コード レビューなどの適切な開発プラクティスが奨励されます。
  5. スケーラビリティ: プロジェクトの成長に合わせて、CI/CD パイプラインを簡単に拡張して、より複雑なデプロイメント プロセスに対応できます。

GitHub リポジトリのセットアップ

このプロジェクトでは、2 つの別個のリポジトリを使用します:

  1. フロントエンド リポジトリ: 静的 Web サイトの HTML、CSS、および JavaScript ファイルが含まれています。
  2. バックエンド リポジトリ: Lambda 関数、API ゲートウェイ、および DynamoDB テーブルの AWS CDK コードを格納します。

この分離により、フロントエンド コードとバックエンド コードを個別に管理およびバージョン管理できるようになります。

フロントエンドのCI/CDの実装

フロントエンドの GitHub Actions ワークフローを設定することから始めましょう。フロントエンド リポジトリの .github/workflows/deploy-frontend.yml:
に新しいファイルを作成します。

name: Deploy Frontend

on:
  push:
    branches: [ main ]

jobs:
  deploy:
    runs-on: ubuntu-latest
    steps:
    - uses: actions/checkout@v3

    - name: Configure AWS Credentials
      uses: aws-actions/configure-aws-credentials@v1
      with:
        aws-access-key-id: ${{ secrets.AWS_ACCESS_KEY_ID }}
        aws-secret-access-key: ${{ secrets.AWS_SECRET_ACCESS_KEY }}
        aws-region: us-east-1

    - name: Deploy to S3
      run: aws s3 sync . s3://${{ secrets.S3_BUCKET }} --delete

    - name: Invalidate CloudFront
      run: |
        aws cloudfront create-invalidation --distribution-id ${{ secrets.CLOUDFRONT_DISTRIBUTION_ID }} --paths "/*"

このワークフローは次のことを行います:

  1. メインブランチへのプッシュをトリガーします
  2. AWS 認証情報を設定します (GitHub シークレットで構成します)
  3. リポジトリの内容を S3 バケットに同期します
  4. 最新バージョンが確実に提供されるように CloudFront キャッシュを無効化します

バックエンドの CI/CD の実装

バックエンドについても、同様のワークフローを作成します。バックエンド リポジトリ (.github/workflows/deploy-backend.yml:
) に新しいファイルを作成します。

name: Deploy Backend

on:
  push:
    branches: [ main ]

jobs:
  deploy:
    runs-on: ubuntu-latest
    steps:
    - uses: actions/checkout@v3

    - name: Set up Node.js
      uses: actions/setup-node@v3
      with:
        node-version: '16'

    - name: Install dependencies
      run: npm ci

    - name: Run tests
      run: npm test

    - name: Configure AWS Credentials
      uses: aws-actions/configure-aws-credentials@v1
      with:
        aws-access-key-id: ${{ secrets.AWS_ACCESS_KEY_ID }}
        aws-secret-access-key: ${{ secrets.AWS_SECRET_ACCESS_KEY }}
        aws-region: us-east-1

    - name: Deploy to AWS
      run: npx cdk deploy --require-approval never

このワークフロー:

  1. メインブランチへのプッシュをトリガーします
  2. Node.js をセットアップします
  3. 依存関係をインストールします
  4. テストを実行します (実装する必要があります)
  5. AWS 認証情報をセットアップします
  6. CDK スタックをデプロイします

シークレットの管理

機密情報を安全に保つために、GitHub Secrets を使用します。リポジトリ設定に移動し、[シークレットと変数]、[アクション] の順にクリックし、次のシークレットを追加します:

  • AWS_ACCESS_KEY_ID
  • AWS_SECRET_ACCESS_KEY
  • S3_BUCKET
  • CLOUDFRONT_DISTRIBUTION_ID

これらのシークレットは安全に暗号化され、実行中に GitHub Actions ワークフローにのみ公開されます。

クラウドネイティブ アプリケーションにおける CI/CD のベスト プラクティス

  1. 秘密を安全に保つ: 機密情報は決してハードコーディングしないでください。常に環境変数またはシークレット管理サービスを使用してください。

  2. 堅牢なテストの実装: CI パイプラインに単体テスト、統合テスト、エンドツーエンド テストを含めます。

  3. コードとしてインフラストラクチャを使用する: AWS CDK や CloudFormation などのツールを使用してインフラストラクチャを定義します。これにより一貫性が確保され、インフラストラクチャのバージョン管理が可能になります。

  4. パイプラインを監視する: 失敗したデプロイメントの通知を設定し、CI/CD ログを定期的に確認します。

  5. 段階的なロールアウトの実装: より安全なデプロイメントのために、Blue-Green デプロイメントやカナリア リリースなどの手法の使用を検討してください。

課題と学んだ教訓

CI/CD の実装には課題がなかったわけではありません。ここで学んだ教訓をいくつか紹介します:

  1. IAM 権限: AWS IAM ユーザーがデプロイ用の適切な権限を持っていることを確認してください。これを正しく理解するには、試行錯誤が必要になるかもしれません。

  2. 依存関係管理: CI 環境で依存関係を最新の状態に保ちます。このプロセスを自動化するには、Dependabot などのツールの使用を検討してください。

  3. テストは重要です: 包括的なテストの作成に時間を投資します。これらにより、本番環境にバグをデプロイする手間が省けます。

  4. コスト管理: 特に大規模なテストやデプロイメントを頻繁に実行する場合は、CI/CD パイプラインに関連するコストに注意してください。

結論

GitHub Actions を使用して CI/CD を実装することで、Cloud Resume Challenge の開発プロセスが大幅に合理化されました。これにより、デプロイは git プッシュするだけであることがわかり、コードの作成と改善に集中できます。

この経験は、クラウド開発における自動化の重要性を強調し、業界標準の CI/CD 実践の実践的な経験を提供します。個人プロジェクトに取り組んでいる場合でも、大規模なアプリケーションに取り組んでいる場合でも、堅牢な CI/CD パイプラインのセットアップに時間を投資することで、生産性と信頼性が向上します。

CI/CD は 1 回限りのセットアップではないことに注意してください。プロジェクトの進化に合わせて、パイプラインを改良し、テストを追加し、ワークフローを最適化してください。コーディングとデプロイを楽しんでください!

以上がクラウド再開チャレンジの自動化: GitHub アクションを使用した CI/CD の実装の詳細内容です。詳細については、PHP 中国語 Web サイトの他の関連記事を参照してください。

声明:
この記事の内容はネチズンが自主的に寄稿したものであり、著作権は原著者に帰属します。このサイトは、それに相当する法的責任を負いません。盗作または侵害の疑いのあるコンテンツを見つけた場合は、admin@php.cn までご連絡ください。