AWS LightsailとGitHub Actionsを活用してCI/CD環境構築してみた
AWS LightsailとGitHub Actionsの概要
AWS Lightsailについて
AWS Lightsailは、小規模なビジネスや個人開発者に最適なクラウドプラットフォームです。使いやすく、低コストで、インスタンス、コンテナサービス、データベースなどを手軽に利用できます。特に、LightsailのコンテナサービスはDockerコンテナの簡単なデプロイと管理を実現し、柔軟なスケーリングが可能です。
GitHub Actionsとの連携
GitHub Actionsは、コードの変更に基づく自動ビルドやデプロイを行うCI/CDツールです。GitHubと直接統合されており、開発プロセスを効率的かつ迅速に自動化することが可能です。
どんなプロジェクトに最適か?
スタートアップや小規模ビジネス:低コストで手軽に始められ、成長に合わせて簡単にスケールアップできるため。
リソースが限られたプロジェクト:費用対効果が高く、最小限のリソースで効率的な開発を実現できるため。
迅速な開発とリリースが求められるプロジェクト:GitHub Actionsによる自動ビルドとデプロイで、開発サイクルを短縮できるため。
クラウド技術に慣れていない開発者:直感的な操作でインフラストラクチャを管理でき、技術的な障壁が低いため。
環境設定
AWS Lightsailでのコンテナサービスのセットアップ
Lightsailダッシュボードにアクセス
コンテナサービスの作成:「コンテナ」タブから新しいコンテナサービスを作成。
イメージとデプロイメントの設定:Dockerイメージを選択し、必要に応じて環境変数やポート設定を行う。
サービスのデプロイ:設定を確認し、サービスをデプロイ。
Lightsailデータベース(PostgreSQL)の構成
データベースの作成:Lightsailダッシュボードで「データベース」タブから新しいデータベースを作成。
データベースの設定:インスタンスのサイズ、リージョン、データベース名などを設定。
アクセス制御の設定:セキュリティグループを設定してアクセス制御を行う。
データベースの接続と使用:提供される接続情報を使用してデータベースにアクセスし、アプリケーションに統合。
Dockerfileの構成
概要
ベースイメージの選択:PHPを実行するための基本イメージ(例:`php:8.1-apache`)を指定します。
依存関係のインストール:必要なパッケージや拡張機能をインストールします。例えば、`libpq-dev`や`postgresql-client`など。
アプリケーションソースのコピー:アプリケーションのソースコードをイメージにコピーします。
Composerの使用:PHPの依存関係管理ツールであるComposerを使用して、必要なライブラリをインストールします。
ポートの公開:アプリケーションが外部からアクセスできるようにポートを公開します(例:`EXPOSE 80 443`)。
実行コマンドの指定:コンテナが起動時に実行するコマンドを定義します。
Dockerfileの実装例
以下は、PHPとApacheを使用するアプリケーションのためのDockerfileの実装例です。
# ベースイメージの指定
FROM php:8.1-apache
# 必要なパッケージのインストール
RUN apt-get update && apt-get install -y \
libpq-dev \
postgresql-client \
locales \
git \
&& docker-php-ext-install pdo pdo_pgsql \
&& apt-get clean \
&& rm -rf /var/lib/apt/lists/*
# Composerのインストール
RUN php -r "copy('https://getcomposer.org/installer', 'composer-setup.php');" \
&& php composer-setup.php --install-dir=/usr/local/bin --filename=composer \
&& php -r "unlink('composer-setup.php');"
# アプリケーションソースのコピー
COPY . /var/www/html/
# Composerを使用して依存関係をインストール
RUN composer install --working-dir=/var/www/html
# ポートの公開
EXPOSE 80 443
# コンテナ起動時のコマンド(Apacheを前景で実行)
CMD ["apache2-foreground"]
このDockerfileは、PHPの拡張機能のインストール、Composerによる依存関係の管理、アプリケーションソースのコピーなど、基本的なステップを含んでいます。また、80番ポートと443番ポートを公開し、Apacheサーバーを前景で実行するように設定しています。
CI/CD環境の構築
GitHubワークフローとは?
GitHub Workflowは、GitHub Actionsを使用して自動化されたプロセスを構築するための仕組みです。これにより、コードのビルド、テスト、デプロイなどの一連の作業を自動的に実行できます。ワークフローはYAMLファイルで定義し、GitHubリポジトリ内に保存します。トリガー(例えば、プッシュやプルリクエスト)が発生すると、定義されたジョブやステップが順番に実行され、ビルドやテスト、デプロイまで自動で実行されます。
ワークフローの実装例
ワークフローの概要
トリガー: `main`ブランチに対する`push`イベント。
環境: Ubuntu
ステップ:
リポジトリのチェックアウト: GitHubリポジトリからコードを取得。
Dockerイメージのビルド: `myapplication:latest`としてDockerイメージをビルド。
AWS認証設定: AWSの認証情報をセットアップ。
DockerイメージのLightsailへのプッシュ: ビルドしたイメージをAWS Lightsailにプッシュ。
最新イメージタグの取得: Lightsailにプッシュした最新のイメージタグを取得。
Lightsailコンテナサービスへのデプロイ: 取得したイメージタグを使って、指定されたポートとヘルスチェック設定でLightsailコンテナサービスにデプロイ。
実装例
以下のファイルをリポジトリの`.github/workflows`に配置します。
name: Deploy to MyApplication
on:
push:
branches:
- main
jobs:
deploy:
runs-on: ubuntu-latest
steps:
- name: Checkout repository
uses: actions/checkout@v2
- name: Build Docker image
run: |
docker build -t myapplication:latest .
- name: AWS credentials setup
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: ap-northeast-1
- name: Push Docker image to Lightsail
run: |
aws lightsail push-container-image --service-name myapplication-service --label app --image myapplication:latest
- name: Retrieve latest image tag
run: |
echo "IMAGE_TAG=$(aws lightsail get-container-images --service-name myapplication-service --query 'containerImages[0].image' --output text)" >> $GITHUB_ENV
- name: Deploy to Lightsail Container Service
run: |
aws lightsail create-container-service-deployment --service-name myapplication-service --containers '{"app-container":{"image":"${{ env.IMAGE_TAG }}"}}' --public-endpoint '{"containerName":"app-container","containerPort":80,"healthCheck":{"path":"/"}}'
GitHubシークレットについて
GitHubシークレットとは
GitHubワークフローでは、GitHubのシークレットを使用して機密情報を管理し、セキュアにCI/CDプロセスを実行できます。このワークフローではAWSの認証情報はGitHubシークレットを介して提供され、Lightsailにイメージをプッシュする際に使用されます。これにより、安全かつ効率的にアプリケーションのデプロイメントを自動化することが可能です。
設定手順
GitHubリポジトリへアクセス:GitHubで対象のリポジトリを開きます。
設定に移動:リポジトリページの上部にある「Settings」タブをクリックします。
シークレットへ移動:左側のサイドバーから「Secrets」を選択し、「New repository secret」ボタンをクリックします。
シークレットの作成:シークレットの名前を入力し、値に機密情報(例:AWSのアクセスキー)を入力します。
保存:「Add secret」ボタンをクリックしてシークレットを保存します。
この手順により、GitHubワークフロー内で安全に機密情報を使用することができます。シークレットはワークフロー内で環境変数として参照され、CI/CDプロセスに組み込まれます。
まとめ
AWS LightsailとGitHub Actionsを使用したCI/CD環境構築のプロセスを詳細に解説しました。AWS Lightsailでのコンテナサービスとデータベースのセットアップ、Dockerfileの構成、そしてGitHub Actionsのワークフローの実装とGitHubシークレットの利用方法について紹介しました。スタートアップやスモールビジネス、リソースに制限のあるプロジェクトにとっては、コスト効率と高速な開発サイクルを実現する手段の1つになるのではないでしょうか。
この記事が気に入ったらサポートをしてみませんか?