LAC WATCH

セキュリティとITの最新情報

RSS

株式会社ラック

メールマガジン

サイバーセキュリティや
ラックに関する情報をお届けします。

ラックピープル | 

GitHub Actionsを活用した、社内向けの「CI/CD研修」のご紹介

皆さん、こんにちは。クラウドインテグレーションサービス部AWS推進チームです。普段は、AWSなどのクラウドを活用する案件に携わっており、最近ではコンテナやCI/CDなどの技術を取り扱っています。

AWSなどのクラウドサービスをコードで管理をする目的で、Infrastructure as Code(IaC)を導入する機会が増えていると思います。作成したコードの管理にGitHubやAWS CodeCommitなどのリポジトリサービスを利用していると、開発環境や本番環境へデプロイをするときに、リポジトリからコードをダウンロードし、TerraformやCloudFormationなどのツールを手動で実行している現場も多いのではないでしょうか。

実はコードをGitHubで管理をしている場合、簡単にデプロイの自動化=CI/CDを実現できます。

※ ソフトウェア開発プロセスの一環であり、「Continuous Integration(継続的インテグレーション)」と「Continuous Delivery(継続的デリバリー)」または「Continuous Deployment(継続的デプロイメント)」の略。

そこで今回、社内向けの研修として3月頃に公開予定のCI/CDの研修プランを準備しました。本記事では研修の概要を紹介します。

CI/CD研修の開発経緯

クラウドインテグレーションサービス部では、社内のクラウドスキルの向上のため、AWSやTerraformなどのクラウド技術の研修を社内向けに提供しています。

研修を受けた社員から、実践的なコード管理の方法や、CI/CDを学びたいという要望があり、AWSやTerraformを習得した社員の次の研修としてCI/CD研修を開催することが決まりました。

研修で使用するCI/CDの製品としては、AWSのコードファミリーやTerraform Cloudなどいくつか候補に上がりました。今回は、デプロイツールとしてTerraformと、比較的自由度の高いGitHub Actionsを使用して研修を行うことになりました。

CI/CD研修の構成

研修では、受講生一人ひとりが手順書を参照しながら、下記の構成を構築します。CI/CDの動作確認として、実際にAWS上にリソースをデプロイするためのTerraformコードをGitHubにプッシュし、AWS上にリソースがデプロイされることを確認します。

CI/CD研修の構成
CI/CD研修の構成

CI/CDの導入により、常に各ブランチのコードと、各環境のインフラストラクチャーの構成情報が等しく保たれます。研修プランでは、検証や開発を行うためのDEV環境と、それ以降の環境面としてITG/STG/本番の合計4つの環境面を準備しました。GitHubの各ブランチにCI/CDのワークフローを適用し、動作確認を研修内で実施します。

GitHubから安全にAWSにアクセスする方法

AWSと外部サービスを連携させる場合に考慮が必要な点として、AWSにアクセスするためのクレデンシャル情報の管理が挙げられます。しかし、AWSで払い出したアクセスキーやシークレットなどを、外部サービスに登録することに抵抗を感じる方もいるかと思います。

今回の研修プランでは、GitHubからAWSへアクセスする際の認証の仕組みとして、「OpenID Connect(OIDC)」を使用しました。

※ OpenID(オープンアイディー)は、ウェブ上のユーザー認証のためのオープンな標準プロトコルの一つです。このプロトコルは、ユーザーが複数のウェブサイトやサービスに同じ認証情報を使用できるようにすることを目的としています。

通常、ユーザーはOpenIDプロバイダーと呼ばれるサービスに登録し、そこでユーザーアカウントを作成します。その後、他のウェブサイトやサービスでログインする際に、OpenIDを使用して認証を行います。ユーザーは自身のOpenIDプロバイダーにログインするだけで、他のサイトへのアクセスが可能となります。

OpenIDは、ユーザーにとっては単一の認証情報を管理しやすくし、ウェブサイトやサービスにとってはユーザーの認証を外部に委託できる、便利でセキュアな認証の仕組みを提供しています。

How OpenID Connect Works - OpenID Foundation

今回の場合、AWSがOpenIDプロバイダーとなり、GitHubからAWSにサインインし、指定したIAMロールの権限を取得します。これにより、GitHubからAWSへのアクセスが可能になります。

GitHub Actionsの活用

今回の研修プランでは、CI/CDのプラットフォームとしてGitHub Actionsを使用しました。GitHub ActionsはYAML形式でワークフローを記述し、リポジトリの所定の位置にファイルを配置するだけで、簡単にリポジトリにワークフローを導入できるサービスです。

ワークフローの例
ワークフローの例

※ GitHub Actionsは、GitHubが提供する継続的インテグレーション(CI)および継続的デリバリー(CD)のための自動化プラットフォームです。GitHubリポジトリ内でのイベント(コードの変更、プッシュ、プルリクエストなど)に基づいて、ワークフローを定義し、それを実行することができます。

主な特徴として以下の点が挙げられます。

ワークフローの定義 .github/workflowsディレクトリにYAML形式でワークフローを定義できます。これにより、ビルド、テスト、デプロイなどのステップを柔軟に設定できます。
イベントトリガー 特定のGitHubイベント(プッシュ、プルリクエスト、マージなど)が発生したときにワークフローをトリガーできます。
ジョブとステップ ワークフローはジョブから成り立ち、ジョブは複数のステップで構成されます。各ステップはコマンドやアクションを実行します。
共有アクション GitHubコミュニティや他のユーザーが作成したアクションを利用できます。アクションは再利用可能で、異なるプロジェクトで使い回すことができます。
ビルトイン環境変数 ワークフロー実行中にGitHub Actionsが提供するビルトイン環境変数を利用して、実行中のコンテキストや情報にアクセスできます。

GitHub Actionsを使用することで、ソフトウェア開発プロセスを自動化し、コードの品質を維持しやすくすることができます。

Actions | GitHub

今回の研修プランでは、イベントトリガーとしてプルリクエストの作成をし、ブランチへのプッシュをトリガーとしてワークフローを実行、そしてTerraformでAWSのインフラストラクチャーをデプロイするようにしています。

ワークフローの実行画面
ワークフローの実行画面

実行環境としてはGitHub上でホストされた仮想マシンである「GitHubホステッドランナー」を使用していますが、利用環境の制約などでクラウド内の仮想マシンやオンプレ環境内で実行が可能になる「セルフホステッドランナー」を選択することも可能です。

さいごに

研修プランではTerraformを使用していますが、他のデプロイツールや、定型的な作業の実行環境としてもGitHub Actionsは利用可能です。実際にGitHub Actionsを使用してCI/CDが手軽に構築できることを、ぜひ一度お試しください。

ラックでは、研修を通した社員の成長をアシストするために、最新の研修や勉強会を積極的に開催しています。今後も、社員に役立つ研修の企画を継続していきます。

プロフィール

CCoE部AWS推進チーム

CCoE部AWS推進チーム
CCoE部AWS推進チームではAWSの各サービスを最大限活用するために日々技術検証や教育プログラムの検討を行っております。その活動のなかで得られた有益な情報を外部へ発信していきます。

この記事は役に立ちましたか?

はい いいえ

関連記事

LAC WATCH

関連記事をご紹介します

  • Terraform Cloudの認証情報にIAMロールを使用してAWSを構築する

  • Terraformerで既存AWS環境をIaC化してみた

  • 4大パブリッククラウドの活用と課題を考える~社内イベント「マルチクラウドNight!」開催レポート