用語集サイトを CI/CD 管理した話
こんにちは。ラーニングサービス本部トレーニング2部のたかやまです。
3月2日に実に5年ぶりとなるリアル JAWS DAYS 2024 が開催されました。トレノケートは Lunch サポーターとして参加していて、ランチセッションも行いました。(レポートはこちら)
また、サポーター用のノベルティ配布テーブルにおいては、オリジナルチョコを配布していました。限定105個だったので手に入れられなかった方もいるかも知れません。
実は、このチョコ。ラッピングを自由に作成できる DECOチョコさんで作成しています。
パッケージに表示されている QR コードを読み込むと AWS Cloud Practitioner Essentials 用語集サイトへリンクしています。 AWS Cloud Practitioner Essentials とは、座学中心の研修で、AWSを初めて学ぶ方やAWS初心者の方におすすめです。AWSでは馴染みのない用語がたくさんあります。それらの用語を解説しているのが、この用語集サイトです。
AWS Cloud Practitioner Essentials 用語集
この用語集サイトは、CodeCommit + CodePipeline によって Markdown から HTML への変換 と PDF の生成、サイトの公開まで自動化しています。
用語集サイトのアーキテクチャ
全体のアーキテクチャは下図のようになっています。
今回のコンテンツは、Markdown 記法で記述しています。執筆担当者は、自身の分を書き終わると CodeCommit のブランチにプッシュし、プルリクエストを作成します。レビュープロセスを経て Main ブランチにマージされると、CodePipeline が動き出します。
CodePipeline:ビルドフェーズ
ビルドフェーズでは、MkDocs を利用して Markdown から HTML への変換と PDF の書き出しを行っています。利用している buildspec.yml は以下の通りです。
version: 0.2
phases:
install:
runtime-versions:
python: 3.11
commands:
- python3 -m pip install --upgrade pip
- pip install -r requirements.txt
build:
commands:
- echo Build started on `date`
- mkdocs build
- ls -la site
post_build:
commands:
- echo Build completed on `date`
artifacts:
base-directory: site
files:
- '**/*'
cache:
paths: []
最初に構築したときは Python 3.9 のランタイム環境を使っていたのですが、ランタイムをアップデートしようと 3.10 に変えたら 3.10 はランタイム環境の OS がUbuntu しかサポートしていないということで、3.11 に変えてます。
MkDocs で利用する mkdocs.yml はこんな感じです。
site_name: AWS Cloud Practitioner Essentials Glossary
site_url: <https://cpe.aws.trainocate.biz/>
theme:
name: material
language: ja
font:
text: Noto Sans Japanese
logo: images/trainocate-logo.png
favicon: images/trainocate-logo.png
features:
- search.suggest
- search.highlight
extra_css:
- "<https://fonts.googleapis.com/earlyaccess/notosansjp.css>"
- "<https://fonts.googleapis.com/css?family=Open+Sans:600,800>"
- "css/main.css"
extra:
generator: false
search:
language: 'jp'
social:
- icon: fontawesome/brands/x-twitter
link: <https://twitter.com/TrainocateJ>
- icon: fontawesome/brands/facebook
link: <https://www.facebook.com/search/top?q=%E3%83%88%E3%83%AC%E3%83%8E%E3%82%B1%E3%83%BC%E3%83%88%E6%A0%AA%E5%BC%8F%E4%BC%9A%E7%A4%BE%EF%BC%88trainocate%20japan%2C%20ltd.%EF%BC%89>
- icon: fontawesome/brands/linkedin
link: <https://jp.linkedin.com/company/trainocate-japan>
use_directory_urls: false
copyright: Copyright © 2024 Trainocate, Ltd.
markdown_extensions:
- def_list
nav:
- Home: 'index.md'
- Common: common.md
- Module 1: module1.md
- Module 2: module2.md
- Module 3: module3.md
- Module 4: module4.md
- Module 5: module5.md
- Module 6: module6.md
- Module 7: module7.md
- Module 8: module8.md
- Module 9: module9.md
- Download PDF: pdf/aws-cpe-glossary.pdf
plugins:
- search
- with-pdf:
author: Trainocate, Ltd.
copyright: Copyright 2024 Trainocate, Ltd.
cover: true
cover_title: AWS Cloud Practitioner Essentials
cover_subtitle: Glossary
debug_html: false
show_anchors: false
toc_title: 目次
toc_level: 3
two_columns_level: 3
output_path: pdf/aws-cpe-glossary.pdf
日本語フォントを指定しないと PDF の日本語が文字化けしたので、Google Fonts を読み込んでます。
CodePipeline:デプロイフェーズ
デプロイフェーズでは、CodeDeploy は使わずに直接 Amazon S3 のバケットに保存しています。このバケットは、コンテンツ公開用の別アカウントに用意しています。
通常、別のアカウントの S3 バケットに CodePipeline は書き込みできませんが、CodePipeline が利用するサービスロールに対して、公開アカウント側の IAM ロールを AssumeRole できるようにしてあげることで実現しています。
このやり方は、AWS re:Post のこの記事を参考にしました。奥が深いですね。
また、クロスアカウントデプロイには、パイプラインを実行するアカウントに KMS のカスタマーマネージドキーが必要で、公開される側のアカウントのポリシーに、その鍵を利用できる権限が必要になります。
この辺の設定も先程の記事を参考にして設定しました。ありがたい。
トレノケートのAWS研修(AWS認定トレーニング)
トレノケートのAWS認定トレーニングでは、AWS社の厳格なテクニカルスキル及びティーチングスキルチェックに合格した認定トレーナーがコースを担当します。AWS初心者向けの研修や、AWS認定資格を目指す人向けの研修をご提供し、皆様のAWS知識修得のサポートをいたします。
・トレノケートのAWS研修(AWS認定トレーニング)はこちら
▼AWS初心者の方は、
AWS Cloud Practitioner Essentials から!
座学中心の研修で、AWSを初めて学ぶ方や、営業などで提案に関わる方におすすめです。
「AWS Certified Cloud Practitioner」資格取得を目指す方の基礎知識修得にも最適です。
→ 詳細・日程はこちらから
▼実践スキルを磨くなら、AWS Technical Essentials で
!
実機演習が中心の研修です。仕事で構築作業を行う方や、シナリオベースの演習を通じて、実際に手を動かしながら各サービスの特徴を学びたい方におすすめのAWS研修です。
→ 詳細・日程はこちらから
いきなりの有償コースに抵抗がある方やまずはお試しをしてみたい方は、トレノケートが実施している無料セミナーがおすすめです。詳細はセミナーページよりご確認ください。
▼無料セミナーの詳細はこちらから
まとめ
開発アカウントと公開アカウントを分離して CI/CD パイプラインを回すニーズは比較的多いと思います。
生成されたアーティファクトを自分のアカウントの S3 バケットにデプロイして公開アカウントにコピーさせる仕組みを作ってもいいのですが、CodePipeline の標準機能だけで出来るのがいいところです。