このシリーズの最初の部分では、さまざまな AWS サービスを使用してクラウドネイティブの履歴書 Web サイトを構築する手順を説明しました。次に、GitHub Actions を使用して継続的インテグレーションと継続的デプロイメント (CI/CD) を実装することで、プロジェクトを次のレベルに引き上げます。この自動化は、クラウド履歴書を効率的に維持および更新するために非常に重要です。
CI/CD は、アプリ開発の各段階の自動化に重点を置いた最新のソフトウェア開発手法です。 Cloud Resume Challenge のコンテキストでは、これは、履歴書を更新したり、バックエンド コードに変更を加えたり、これらの変更を GitHub にプッシュしたり、AWS インフラストラクチャに自動的にデプロイしたりできることを意味します。
実装に入る前に、CI/CD がなぜそれほど重要なのかを説明しましょう。
このプロジェクトでは、2 つの別個のリポジトリを使用します:
この分離により、フロントエンド コードとバックエンド コードを個別に管理およびバージョン管理できるようになります。
フロントエンドの 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 "/*"
このワークフローは次のことを行います:
バックエンドについても、同様のワークフローを作成します。バックエンド リポジトリ (.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
このワークフロー:
機密情報を安全に保つために、GitHub Secrets を使用します。リポジトリ設定に移動し、[シークレットと変数]、[アクション] の順にクリックし、次のシークレットを追加します:
これらのシークレットは安全に暗号化され、実行中に GitHub Actions ワークフローにのみ公開されます。
秘密を安全に保つ: 機密情報は決してハードコーディングしないでください。常に環境変数またはシークレット管理サービスを使用してください。
堅牢なテストの実装: CI パイプラインに単体テスト、統合テスト、エンドツーエンド テストを含めます。
コードとしてインフラストラクチャを使用する: AWS CDK や CloudFormation などのツールを使用してインフラストラクチャを定義します。これにより一貫性が確保され、インフラストラクチャのバージョン管理が可能になります。
パイプラインを監視する: 失敗したデプロイメントの通知を設定し、CI/CD ログを定期的に確認します。
段階的なロールアウトの実装: より安全なデプロイメントのために、Blue-Green デプロイメントやカナリア リリースなどの手法の使用を検討してください。
CI/CD の実装には課題がなかったわけではありません。ここで学んだ教訓をいくつか紹介します:
IAM 権限: AWS IAM ユーザーがデプロイ用の適切な権限を持っていることを確認してください。これを正しく理解するには、試行錯誤が必要になるかもしれません。
依存関係管理: CI 環境で依存関係を最新の状態に保ちます。このプロセスを自動化するには、Dependabot などのツールの使用を検討してください。
テストは重要です: 包括的なテストの作成に時間を投資します。これらにより、本番環境にバグをデプロイする手間が省けます。
コスト管理: 特に大規模なテストやデプロイメントを頻繁に実行する場合は、CI/CD パイプラインに関連するコストに注意してください。
GitHub Actions を使用して CI/CD を実装することで、Cloud Resume Challenge の開発プロセスが大幅に合理化されました。これにより、デプロイは git プッシュするだけであることがわかり、コードの作成と改善に集中できます。
この経験は、クラウド開発における自動化の重要性を強調し、業界標準の CI/CD 実践の実践的な経験を提供します。個人プロジェクトに取り組んでいる場合でも、大規模なアプリケーションに取り組んでいる場合でも、堅牢な CI/CD パイプラインのセットアップに時間を投資することで、生産性と信頼性が向上します。
CI/CD は 1 回限りのセットアップではないことに注意してください。プロジェクトの進化に合わせて、パイプラインを改良し、テストを追加し、ワークフローを最適化してください。コーディングとデプロイを楽しんでください!
以上がクラウド再開チャレンジの自動化: GitHub アクションを使用した CI/CD の実装の詳細内容です。詳細については、PHP 中国語 Web サイトの他の関連記事を参照してください。