Azure Static Web Apps CLIを使ってローカル開発環境を構築する

はじめに

先日、Azure Static Web Apps CLIという存在を知りました。2022年6月にGAになったもののようです。

azure.microsoft.com

これを使ってローカル開発環境を設定するという記事があったので試してみました。

learn.microsoft.com

サンプルアプリ

簡単なHTMLとAzure FunctionsによるAPIから構成されるアプリを動かしてみます。上記の記事ではstaticwebdev/vanilla-apiというGitHubリポジトリをforkすることが提案されていますが、今回は自分で作ってみることにしました。

github.com

といっても元ネタは、Static Web Appsのドキュメントにある以下の記事のものをなぞっただけです。

learn.microsoft.com

CLIのインストールと実行

CLIのインストールは、npm install -g @azure/static-web-apps-cliを実行すればインストールされました。今回試したところ、swaコマンドのバージョンは1.0.3が返ってきました。

その後、swa initコマンドを実行します。これにより、フォルダ内の中身をみてswa-cli.config.jsonというファイルが自動生成されます。中身は以下のようなもの。

{
  "$schema": "https://aka.ms/azure/static-web-apps-cli/schema",
  "configurations": {
    "azure-static-web-apps-local": {
      "appLocation": "src",
      "apiLocation": "api",
      "outputLocation": ".",
      "apiBuildCommand": "npm run build --if-present"
    }
  }
}

ドキュメントにはswa initコマンドの実行は書かれていませんが、その場合はのちに実行するswa startのオプションにて似たような情報を与える必要があります。

あとはswa startコマンドを実行するだけ...と思っていたのですが、どうもうまく動きません。自分はapiフォルダに移動して一度func startAPIだけを起動した後にswa startコマンドを実行するとうまく動くようになりました。Azure Functionsのローカル開発環境では、初回起動時にかなり時間がかかるのでその影響があるのかもしれません。

うまく動いたら、localhost:4280にブラウザでアクセスすると動作確認が取れます。

swa startが動いている間は、ソースコードを修正すると自動的に読み込まれるようです。このため、HTMLファイルやAzure Functionsの関数を修正すると再度swa startコマンドを終了→起動ということはしなくても良いのが地味に嬉しい点かなと思います。

AWS Certified DevOps Engineer - Professional(DOP-C01)に合格した

先日、AWS Certified DevOps Engineer - Professional(DOP-C01)を受験し、合格しました。

ここでは、試験に挑むまでの勉強法などについて記します。

きっかけ

2022年10月にAWS Certified Solutions Architect - Professionalを受験し合格したのですが、試験勉強を通じて色々と知識が身についたこともあり、記憶が新しいうちに別の試験を受けておこうと思ったのがきっかけです。

miyohide.hatenablog.com

またAWS認定再受験無料キャンペーンが開催されていたこともきっかけとなりました。

pages.awscloud.com

試験勉強

あまり試験ガイドを読み込まずに申し込んだので、最初は「Code DeployとかCode Buildとかそういうのが中心でしょ」と思っていたのですが思いのほか試験範囲が幅広く少し後悔しました。サンプル問題や公式練習問題集を確認してまずは雰囲気を掴みます。

Solutions Architect - Professionalでは書籍が2冊出ていたのでそれらを読み込むことにしましたが、DevOps Engineer - Professionalでは日本語の書籍が出ていなかったのも少し焦りました(あらかじめ確認しておけというご意見はごもっとも)。何か参考になる資料はないかなと思っていたところ、udemyにて「AWS Certified DevOps Engineer Professional 2022 - Hands On!」というコースがあったので受講することにしました。

www.udemy.com

この講座は実際のAWS Console画面を操作しながら解説してくれるので、ちょっと試すには(料金的に)ハードルが高いサービスの概要を掴む上で非常に役立ちました。資料や説明は英語ですが、自動生成された日本語字幕がつきますし、繰り返し視聴するとなんとなくわかってくる気がします。

なお、udemyは結構な頻度でセールをやっているので、セールのタイミングで購入するのが良いかなと思います。

あとはAWSサービス別資料、いわゆるBlack Beltの資料に目を通すようにしました。

aws.amazon.com

これらのものを繰り返し読んだり、公式練習問題集を解いたりして試験に臨むことにしました。

試験本番

試験はテストセンターにて受験。もう何度も受験しているので手続き等は慣れたものかなと思っていたのですが、何度受験しても試験前は緊張します。早めにテストセンターに到着し、各種注意事項を入念に確認し、試験に挑みました。

一通り問題を解き終わるのに1時間半、全ての問題の見直しをするのに30分ぐらい費やしました。試験時間には余裕があったのですが、かなり疲労感があったので見直し終了。アンケートに答えて合否発表が画面に出てくる...と思ったら出てこず後日ご連絡というメッセージが。仕様変更があったみたいです。

試験後

どきどきのままテストセンターを後にし、メールで通知される試験結果を待つことにします。全然仕事に手がつかないのですが、こればっかりは待つしかないです。 結局、試験から12時間ぐらい経過した後にCredlyからデジタルバッチの配信メールが届き、ほっと一安心。その後、AWS認定アカウントにてスコアレポートを確認しました。スコアが801と合格に必要な750を少し上回る結果でほっとしました。

Azure標準化ガイドラインに目を通す

Azure上でシステムを構築する上でのベストプラクティスである「Azure標準化ガイドライン」というものが先日(と言っても2022年6月公開なので、ほぼ半年前)公開されていました。

www.microsoft.com

上記ページから辿れるGitHubリポジトリのReleasesページからzipファイルをダウンロードして参照します。

github.com

PowerPointを持っていないのですが、Keynoteで開けました。が、フォントの影響でレイアウトが崩れるので、別の手段での配布をお願いしたいところ。

ざっと目を通したところ、いわゆる「当たり前」ってなことを丁寧に書かれているイメージ。それがベストプラクティスってものなのですが、大抵抜け・漏れがあるものなので、このようにしてまとまって書かれていると嬉しいものです。

ただ量はそれなりの数があるので、ちょびちょびと読んでおくと良いかもしれません。

Azure Container Appsで何かあった時に使えるかもしれない機能

ぼけぇ〜とWebページを見ていたら、以下の記事が目に止まりました。

techcommunity.microsoft.com

Azure Container Appsにおける可観測性(Observability)ということで、ログやコンテナの中に入る方法を丁寧に記されています。これを自作のアプリでもやってみました。

ログを見る

Azure Portalからも「ログストリーム」を選択することでログを見ることができますが、コマンドでもaz containerapp logs showで見ることができます。下のスクリーンショットは、「ログストリーム」で表示しているものとaz containerapp logs showで表示したものを同時に写したものです。

ドキュメントにもきちんと書いていました。

learn.microsoft.com

コンソール

実際にコンテナが動いているマシンにsshすることもできます。Azure Portalから「コンソール」を選ぶと接続でき、コマンドを打つことができます。同様のことはaz containerapp execでもできました。

Cloud Shell上で動かしているためかわかりませんが、私の環境の場合az containerapp execでは、プロンプトの後に4;5Rという文字列が付加されていて、コマンド入力前にこれらを消さないといけなかったです。

適当なコマンドを実行してみた結果が以下のスクリーンショットです。

ドキュメントはこちら。

learn.microsoft.com

Azure Container Apps Azure Monitor integrationを試してみたが、うまく動かなかった(2022年11月13日時点)

今日も小ネタ。最近バリューが出せていない😢

Public previewとしてAzure Container Apps Azure Monitor integrationがアナウンスされました。

azure.microsoft.com

今まではログをLog Analyticsに送信するだけだったのですが、Azure storageやEvent Hubsに送信することができるようになるという機能だそうです。

で、やってみました。適当にContainer Appsを作ってみると、Container Apps環境のログオプションに「Azure Monitor(プレビュー)」があるのでそれを選択します。

ただ、これを有効化しようとすると、以下のエラーが出て動きませんでした。

今回、japaneastだけでなく、westus3リージョンでも試してみましたが同じエラーが出て有効化できず...

ちなみに、Log AnalyticsからデータをAzure Storageにエクスポートってできたよなと思うと、Log Analyticsの画面上にもあるのですが...

画面に書かれているように「現在、すべてのリージョンでデータエクスポートを使用できません。」と書かれており、実際ルールを設定してもエクスポートされませんでした。

ドキュメントは以下のもので、特に明記されていないのですが、何もうまくできず残念でした。

learn.microsoft.com

Spring BootアプリをAzure Kubernetes Serviceで動かす(3)- デプロイしたアプリを更新する -

はじめに

先日からAzure Kubernetes Serviceを検証しています。まだまだKubernetesがあまりよくわかっていないのですが、一個ずつ学べていけたらと。

過去のものは以下。

今回はデプロイしたアプリのバージョンアップを行います。

アプリケーションの更新

まずはアプリケーションを更新します。更新する内容は何でもいいのですが、画面に表示する文言が変わったほうがわかりやすいので、第1回目で作成したアプリのGreetingControllerにて、template変数に設定したメッセージを"Hello, %s!"から"Hello, %s! v2"に変更します。

@RestController
public class GreetingController {
    // 下の値を変えただけ
    private static final String template = "Hello, %s! v2";
    private final AtomicLong counter = new AtomicLong();

    @GetMapping("/")
    public Greeting greeting(@RequestParam(value = "name", defaultValue = "World") String name) {
        return new Greeting(counter.incrementAndGet(), String.format(template, name));
    }
}

build.gradleversion0.0.2に変更し、あとはDockerイメージを作成して、Azure Container Registryにpushしておきます。以下のコマンドを打てばpushされます。

az acr login -n Azure Container Registryの名前 && ./gradlew jib

Azure Kubernetes Service上で最初のバージョンをデプロイする

デプロイは第2回目のようにYAMLファイルを書かないでデプロイしてみます。

まず、以下のコマンドで作成したAzure Kubernetes Serviceクラスターに接続するようkubectlを設定します。

az aks get-credentials --resource-group リソースグループ名 --name Azure Kubernetes Serviceの名前

あとは、Deploymentを以下のコマンドで作成します。イメージとして古いバージョンを指定しておきます。

kubectl create deployment sbapp --image=Azure Container Registry名.azurecr.io/spring_boot_on_k8s:0.0.1

次にServiceを作成します。

kubectl create service loadbalancer sbapp --tcp=80:8080

これで最初のバージョンが動くようになります。

アプリケーションを更新する

アプリケーションの更新は以下のドキュメントを参考にやってみます。

learn.microsoft.com

上記の処理ではまったところは、kubectl set image deploymentを発行する部分です。最初、kubectl set image deployment sbapp sbapp=Azure Container Registry名.azurecr.io/spring_boot_on_k8s:0.0.2と実行していたのですが、error: unable to find container sbappと出てうまく動きませんでした。

結局、sbapp=Azure Container Registry名.azurecr.io/spring_boot_on_k8s:0.0.2の部分が間違っており、ワークロードブレードのsbappをたどって...

以下の画面で出てくるコンテナーの名前を指定する必要がありました。

つまりは、以下のコマンドを実行する必要がありました。

kubectl set image deployment sbapp spring-boot-on-k8s-xxxxxxx=Azure Container Registry名.azurecr.io/spring_boot_on_k8s:0.0.2

これを実行すると、無事、バージョンアップを行うことができました。

ここまでのソース

ここまでのソースです。

github.com

AWS Certified Solutions Architect - Professionalに合格した

はじめに

先日、AWS Certified Solutions Architect - Professionalを受験して、合格しました。

ここでは、試験合格に向けて実施した内容を記します。 なお、受験した時はまだ試験内容はSAP-C01のものだったのですが、2022年11月15日からは新しいバージョンになるらしいので、これから受験される方は注意かもしれません。

aws.amazon.com

勉強

まずは書籍を探します。日本語で読めるのは以下2冊がありましたので両方購入しました。

AWS認定ソリューションアーキテクト-プロフェッショナル ~試験特性から導き出した演習問題と詳細解説」は問題集という形で、それぞれのサービスの特徴についてはあまり記されていませんでした。どのような問題が出るのかの参考にしました。

出版が新しいSBクリエイティブ社による「AWS認定資格試験テキスト&問題集 AWS認定ソリューションアーキテクト - プロフェッショナル」のほうが最新サービスを反映した記載になっており、サービスのイメージがつきやすかったです。ただ、この本だけでは難しく、AWSサービス別資料のスライドを見ながら理解を深めました。

aws.amazon.com

また、Udemyで対策コースがありましたのでこれにも目を通しました。

www.udemy.com

英語ではあるのですが、日本語字幕が出ますし、ダウンロードできるスライドは復習にかなり役立ちました。

問題対策

試験公式のページからサンプル問題や公式練習問題集が無料で利用できるので、それを活用します。

aws.amazon.com

一通り問題を解いて、出てきたサービスの資料を読み込んだりして理解を深めました。

また、試験時間が75問で180分で1問あたり2分弱という計算になります。思いのほか時間がないなかで長文の問題を読んで問題を解くことは結構大変でした。

試験本番

私はテストセンターに行って受験しました。遅れないように余裕を持って時間前に会場に到着し、手続きを済ませすぐ受験。試験時間不足にならないように10問ごとに残り時間を確認するようにしました。

最初の75問は1時間半ぐらいで解き終わり、その後は全問見直しを実施しました。合計2時間弱かかり、集中力も切れお腹も減ったことから試験終了。無事合格することができました。