こんにちは。 CI/CD を含むクラウドインフラの構築や技術支援を担当している、クラウドエンジニアの佐藤です。
これまで検証用の E5 ライセンス と Azure サブスクリプション を用意し、 Azure CLI の実行環境 を作り、 カスタムドメインでメール送受信 をして、Azure 検証環境を準備してきました。
そしてもう一つ、準備しておきたいものがあります。
それは、検証で使用した Azure CLI のコードをドキュメントとして管理し再利用可能にしておくことです。
ドキュメント管理に使用するツールや保管場所は、それぞれの作業環境にあわせて選択して問題ありません。私の場合は、検証で使用した Azure CLI のコードを Markdown 形式のドキュメント内でインラインコードとして記述し、Git リポジトリで管理します。
Azure CLI のコードは、検証のために何度も微修正しつつ Azure リソースを作成しては削除して、また作成してを繰り返します。このとき、以前のコードの内容を確認したり、他のメンバーと Markdown ドキュメントを共有する環境として Git リポジトリが適している、というわけです。
それでは、Azure DevOps に Git リポジトリを用意し、GitHub Codespaces から Azure CLI をインラインコードとして書いた Markdown ファイルを管理してみたいと思います。
Azure DevOps には、Azure Boards、Azure Pipelines、Azure Repos、Azure Test Plans、Azure Artifacts の 5 つのサービスがあります。
Azure DevOps にサインアップする というドキュメントを読むと、最初の 5 ユーザーは無料で、Azure Pipelines には毎月 30 時間の無料サービスがあり、Azure Boards が使え、Azure Repos は無制限のプライベートリポジトリで、Azure Artifacts は 2 GiB 無料とあります。
この Azure Pipelines の毎月 30 時間分の無料サービスは、以前はデフォルトで付与されていましたが、現時点ではデフォルトで付与されるケースが Visual Studio サブスクリプション特典の Azure サブスクリプションなどに限られているようです。
並列ジョブの構成と支払い
というドキュメントを読むと、「常に付与されるとは限りません」となっており、別途「要求を送信します」からマイクロソフトに依頼する必要があります。
https://aex.dev.azure.com/
こちらの URL にアクセスし、Visual Studio サブスクリプション特典を付与している Microsoft アカウントでサインインします。
「新しい組織の作成」をクリックします。
Privacy Statement にチェックし、Country/region に「日本」を選択し、「 Continue 」をクリックします。
私の場合は、組織名を「 ceblog 」、使用するリージョンを「 Southeast Asia 」にしました。
画像の中に見えている文字を入力し、「 Continue 」をクリックします。
ちなみに使用するリージョンには、以下のような選択肢がありました。
Project name や Visibility はデフォルトのまま「 Create project 」をクリックします。
ceblog という組織の中に ceblog というプロジェクトが作成されました。
組織の「 ceblog 」をクリックします。
「 Organization settings 」をクリックします。
Time zone を変更し「 Save 」をクリックします。
「 Billing 」をクリックします。
MS Hosted CI/CD に「 1800 minutes 」と表示されていれば 30 時間分の無料サービスが付与されています。
ちなみに、デフォルトで付与されなくなった 30 時間分の無料サービスですが、2021/3/23 のリリースノートを確認すると暗号化マイニングで悪用されたことが理由のようです。
※
無料の許可のAzure Pipelinesに対する変更
Organization Settings の「 Users 」をクリックします。
Azure DevOps にサインアップしたユーザーの Access Level は「 Visual Studio Professional 」であることがわかります。
「 Add users 」をクリックします。
Users には、Azure AD のグローバル管理者ユーザーを入力します。
Access level は「 Basic 」を選択します。
Add to projects には、最初に作成したプロジェクトを選択します。
Azure DevOps Groups は「 Project Administrators 」を選択します。
Send email invites はチェックします。
「 Add 」をクリックします。
ユーザーが追加されました。
別ブラウザ、もしくはプライベートモードでブラウザを開き、グローバル管理者ユーザーのメールを受信します。
下記のような招待メールが届いているので「 Join now 」をクリックします。
Organization Settings の「 Permissions 」をクリックします。
「 Project Collection Administrators 」をクリックします。
Add user and/or groups にグローバル管理者ユーザーを入力します。
「 Save 」をクリックします。
Project Collection Administrators グループにグローバル管理者ユーザーが追加されました。
Type 列には「 aad user 」と表示されています。
右上のユーザーアイコンからグローバル管理者ユーザーを選択するか、「 Sign in with a different account 」をクリックして、グローバル管理者ユーザーとしてサインインしなおします。
組織 URL をクリックします。
「 Organization settings 」をクリックします。
Organization Settings の「 Azure Active Directory 」をクリックします。
「 Connect directory 」をクリックします。
Azure Active Directory で Azure AD テナント名を選択します。
「 Connect 」をクリックします。
Connect success! と表示されれば成功です。
一度サインアウトする必要があるようなので「 Sign out 」をクリックします。
どのアカウントをサインアウトするか聞かれるので、組織アカウントの方をクリックします。
サインアウトしたので、残りの Microsoft アカウントでこのページにアクセスしようとして、アクセス権が無いというようなエラー画面が表示されます。
これは、Azure DevOps と Azure AD を紐づけたため、Azure AD テナントに登録されているユーザーしかアクセスできなくなったからです。
「 Sign out and login with different account 」をクリックします。
組織アカウントの方をクリックします。
Organization Settings の Azure Active Directory を確認すると、無事 Azure AD テナントと紐づける事ができたようです。
Organization Settings の Overview を開き「 Change owner 」をクリックします。
組織アカウントのグローバル管理者ユーザーを選択し「 Change 」をクリックします。
Successfully updated organization owner と表示され、Organization Owner を組織アカウントのグローバル管理者ユーザーに変更する事ができました。
Microsoft アカウントのユーザーが不要になったので削除します。
Organization Settings の Users から Microsoft アカウントユーザーの「 Remove from organization 」をクリックします。
「 Remove 」をクリックします。
ユーザー一覧から Microsoft アカウントユーザーが削除されました。
右上の User settings アイコンから「 Personal access tokens 」をクリックします。
「 New Token 」をクリックします。
Name に適当な名前を入力します。
Code は「 Full 」をチェックします。
「 Create 」をクリックします。
作成されたトークンをコピーして、どこかに保存しておきます。
「 Close 」をクリックします。
※下記に表示されているトークンは全体の半分程度の長さです。
ceblog 組織の ceblog プロジェクトの ceblog という名前の Git リポジトリを開きます。
Repos の「 Files 」をクリックします。
「 Initialize 」をクリックします。
初期化が完了し README.md ファイルが作成され README.md のプレビューが表示されています。
「 Clone 」をクリックします。
コピーアイコンをクリックし、Git リポジトリの URL をコピーします。
GitHub Codespaces 上のターミナルで git clone を試します。
$ git clone https://ceblog@dev.azure.com/ceblog/ceblog/_git/ceblog
Cloning into 'ceblog'...
fatal: Authentication failed for 'https://dev.azure.com/ceblog/ceblog/_git/ceblog/'
認証が失敗するので git の認証設定を確認します。
$ git config -l | grep helper
credential.helper=/.codespaces/bin/gitcredential_github.sh
GitHub 固有の認証が設定されているようなので、設定を削除し、新たに認証トークンが保存されるよう git を設定します。
$ sudo git config --system --unset credential.helper
$ git config --global credential.helper store
もう一度 git clone してみます。
$ git clone https://ceblog@dev.azure.com/ceblog/ceblog/_git/ceblog
Cloning into 'ceblog'...
(省略)
トークンを入力する画面が表示されるので、Auzre DevOps で作成した Personal Access Token を入力します。
git clone が完了したので、README.md を表示してみます。
GitHub Codespaces 上のターミナルで git clone したディレクトリに移動し、Azure Repos の Git リポジトリの最新のコードにアップデートします。
コードやファイルを変更していないので「 Already up to date. 」というメッセージが表示されます。
$ cd ceblog
$ git pull
Already up to date.
create-resource-group.md というファイルを新規に作成します。
$ code create-resource-group.md
以下のような Markdown を書いて保存します。
# Create Resource Group
リソースグループを作成します。
```bash
az group create \
--name test-rg \
--location japaneast
```
git status でローカル git の状態を確認します。
Untracked files として create-resource-group.md ファイルがある事が確認できます。
$ git status
On branch main
Your branch is up to date with 'origin/main'.
Untracked files:
(use "git add <file>..." to include in what will be committed)
create-resource-group.md
nothing added to commit but untracked files present (use "git add" to track)
git add -A でローカル git にある全ての変更を追加します。
$ git add -A
ファイル名の右側にある記号が「 U 」から「 A 」に変わりました。
git commit でローカル git にある全ての変更をコミットします。
-m オプションはコミット時のメッセージです。後でコミット履歴見たときにわかるようなメッセージにすると良いです。
$ git commit -m "add create-resource-group.md"
[main 1320705] add create-resource-group.md
1 file changed, 9 insertions(+)
create mode 100644 create-resource-group.md
ファイル名の色が緑色から白色に変わりました。
git push でローカル git にあるコミット済みの変更を Azure Repos の Git リポジトリにプッシュします。
$ git push
Enumerating objects: 4, done.
Counting objects: 100% (4/4), done.
Delta compression using up to 2 threads
Compressing objects: 100% (3/3), done.
Writing objects: 100% (3/3), 444 bytes | 444.00 KiB/s, done.
Total 3 (delta 0), reused 0 (delta 0)
remote: Analyzing objects... (3/3) (102 ms)
remote: Storing packfile... done (63 ms)
remote: Storing index... done (56 ms)
To https://dev.azure.com/ceblog/ceblog/_git/ceblog
96c6f94..1320705 main -> main
Azure Repos で create-resource-group.md を選択し「 Preview 」をクリックすると Markdown のプレビュー表示が可能です。
最後に Git コマンドをおさらいします。
インフラエンジニアや若手エンジニアにも、これだけは覚えて欲しい Git コマンドです。
// Git リポジトリから全てのコードやファイルを新規にダウンロード
$ git clone < git reposigory url>
// 既にローカルにダウンロードしたディレクトリ配下で Git リポジトリの最新のコードやファイルをダウンロード
// 他の誰かが変更したコードやファイルもダウンロードできる
$ git pull
// ローカル作業で変更されたファイルの状態を確認
$ git status
// ローカル作業で行った変更全てを管理対象に追加
// -A オプションなしでファイル名を指定して個別に追加しても良い
$ git add -A
// ローカル作業で追加変更した状態をコミット
// コミットメッセージにスペースが含まれない場合は前後のダブルクォーテーションは不要
$ git commit -m "< commit message >"
// ローカルのコミットを Git リポジトリにプッシュ
// 自分が作成したコードやファイルを同じ Git リポジトリを使っている人や自分自身が他の環境でダウンロードできる
$ git push
皆さんも自分だけのほぼ無料な Azure 検証環境を作ってみてはいかがでしょうか? ちょっとした動作確認や仕様の確認など、自分だけの検証環境があれば即座に技術検証する事が可能です。 共有環境で検証するとどうしても誰がどれくらいクレジットを消費しているとか、このリソースは誰の?とか気にしなければいけない事が多くなります。 あと注意しなければいけないのは、この検証環境に本番データとか顧客データとか何かしらの業務データは持ち込んではいけません。 あくまで Azure の動作や仕様を確認する技術的な検証用途でご使用ください。
このブログ記事が誰かの何かの参考になればうれしいです。 最後まで読んで頂き、ありがとうございます。