※ご注意
本記事は「とりあえず動けばOK!」をモットーにした個人学習のアウトプットとして書いています。
前提の環境情報や権限の詳細、セキュリティ設定などは省略している箇所があります。
はじめに
今回の背景
以下の記事に動機を掲載しています。
詳しい背景はそちらを参照ください
[URL]
本記事の目的
- 依存関係のセットアップからGitHub→AWSまでのCI/CDパイプライン構築の流れを示す
- 動かしてみた後での個人的理解度整理
手順実施後の状態
CI/CDパイプライン構築完了
- ローカル環境:開発者がコードを編集・コミット
- GitHub リポジトリ:push をトリガーに CI/CD(GitHub Actions 等)が動作
- AWS (us-east-1):cdk deploy によってデプロイされるターゲット。現状は CDK Metadata だけを保持
初回デプロイcdk bootstrap
が完了し、CloudFormationにてスタックのステータスが完了。
各リソースが作成されていること。
ユーザー定義リソースは、CDKMetadata
のみ。
CDKToolkitは、AWS CDK の cdk bootstrap
コマンドを実行したときに CloudFormation を使って 必ず作成される「ブートストラップ用の環境準備スタック」
ローカルからリモートリポジトリへpush
した際に、GitHubからAWS へデプロイされること
(.venv) PS C:\Users\XXXXXX> git push origin master
最終的なローカル環境
依存関係整理
コンポーネント | 説明 |
---|---|
NVM for Windows | Windows 環境で使える Node.js のバージョン管理ツール。 特定のバージョンの Node.js をインストールできる。 |
Node.js | JavaScript 実行環境。npm や AWS CDK CLI の実行に必要。 |
npm | Node.js のパッケージマネージャ。ライブラリのインストール・管理を行う。 |
AWS CDK CLI | AWS CDK アプリの synth/deploy を行う CLI ツール。 |
AWS CLI | AWS アカウントとの認証設定および AWS API 呼び出しに利用。 |
Git | ソースコード管理ツール。リポジトリの初期化やコミット管理を行う。 |
GitHub CLI (gh) | GitHub 上のリポジトリ作成やプルリクエスト操作を CLI から実行可能にするツール。 |
Python | CDK(Python)アプリやスクリプト実行環境。 |
pip | Python のパッケージマネージャ。venv 上へのライブラリインストールに利用。 |
仮想環境 (.venv) | プロジェクト固有の Python 仮想環境。pip install で依存を隔離。 |
手順
1.ローカル環境セットアップ
1-1.NVM for Windows インストール
1-2.Node.js (LTS)インストール
1-3.AWS CLI v2 インストール
認証情報設定
1-4.Python インストール
(任意)Python 仮想環境作成
1-5.Git for Windows インストール
1-6.AWS CDK v2 CLIインストール
npm install -g aws-cdk
2.CDK プロジェクト初期化
2-1.プロジェクト用ディレクトリ作成
2-2.CDK プロジェクト初期化
cd cdk init app --language python
2-3.依存パッケージをインストール
pip install -r requirements.txt
CDK デプロイ確認
ここまで完了すれば、cdk deploy
が可能
#デプロイ前の生成内容確認コマンド
cdk synth
#現在のデプロイ済みスタックとcdk synthで生成されたテンプレとの差分確認
cdk diff
#初回デプロイ前に1度だけ実施すればOK
#CDK デプロイ時に利用する「ブートストラップ用リソース群」の初期セットアップ
cdk bootstrap aws://<ACCOUNT>/<REGION>
#cdk synth→CloudFormation実行→リソースのプロビを自動で行い、スタックをデプロイする
cdk deploy
cdk deploy
実行後、CloudFormationスタックと各種リソースが作成される
3.Git/GitHub連携
3-1.GitHub CLI(gh)のインストール
3-2.GitHubリポジトリ作成 & 初回push
GitHub連携設定
gh auth login
ローカルPCからCLIでリポジトリ作成 & 初回push
gh repo create [リポジトリ名] --private --source=. --remote=origin --push
4.CI/CDパイプライン構築
4-1.GitHubリポジトリにSecretsを設定
GitHubからAWSにデプロイ出来るよう、認証情報を設定する
GitHub
Settings > Secrets and variables > Actions > New repository secret
- AWS_ACCESS_KEY_ID:デプロイ用 IAM ユーザーのアクセスキー
- AWS_SECRET_ACCESS_KEY:シークレットキー
4-2.GitHub Actions ワークフロー作成
- 目的:CI/CDの自動化
-
master
にプッシュするだけでAWSにインフラ定義が反映される
-
- トリガー:
master
ブランチへのコードのプッシュ - ジョブ:
ubuntu-latest
上で必要なパッケージをインストールし、cdk deploy
を実行
リポジトリ直下に.github/workflows/deploy.yml
を作成し、以下を記載する。
name: CDK Deploy
on:
push:
branches:
- master
jobs:
deploy:
runs-on: ubuntu-latest
steps:
- uses: actions/checkout@v3
- name: Set up Node.js
uses: actions/setup-node@v3
with:
node-version: '20'
- name: Install CDK CLI
run: npm install -g aws-cdk@2.x
- name: Set up Python
uses: actions/setup-python@v4
with:
python-version: '3.12'
- name: Install dependencies
run: |
pip install --upgrade pip
pip install -r requirements.txt
- name: CDK Deploy
run: cdk deploy --require-approval never
env:
AWS_ACCESS_KEY_ID: ${{ secrets.AWS_ACCESS_KEY_ID }}
AWS_SECRET_ACCESS_KEY: ${{ secrets.AWS_SECRET_ACCESS_KEY }}
AWS_REGION: us-east-1
# AWS_ACCOUNT_ID: ${{ secrets.AWS_ACCOUNT_ID }} ← 設定していれば追加
CI/CDパイプライン動作確認
#スタック定義ファイルをadd
git add stack.py
#commit
git commit -m "コミットメッセージ"
#リモートリポジトリへpush
git push origin master
設定したGitHub Actionsのmaster
ブランチへのプッシュをトリガーにデプロイが完了すればOK
あとはAWSコンソールもしくはCLIで意図したリソースが作成されていればOK!
今回はS3バケットで確認
class Ec2AvailDashStack(Stack):
#略
results_bucket = s3.Bucket(
self,
"AthenaResultsBucket",
bucket_name="ec2-avail-dash-results",
encryption=s3.BucketEncryption.S3_MANAGED,
removal_policy=RemovalPolicy.DESTROY,
auto_delete_objects=TRUE
)
#略
以上!
完了
これで冒頭の最終構成まで完了です。
ローカルでスタックファイルを編集して、リモートリポジトリへpushすると自動でAWSにデプロイされる仕組みが完成しました!
感想
依存関係やバージョンの問題がいくつか実施している過程でぶつかりました。
整理してみてもなかなか覚えるのが難しそうですね(笑)
この機会にMermaid記法を使ってみたり、気になっていたGitHubとの連携も経験できて満足してしまいました。
次回は実用的なスタック定義からデプロイまでに挑戦してみたいと思います。
参考資料