🎼

AKS の自動デプロイ機能で生成される GitHub Actions コードを見てみた

2022/08/22に公開

AKS にて、自動デプロイ設定がプレビュー提供されています。

ドキュメントを確認する限り、ポチポチやるだけでイメージビルド~デプロイの GitHub Actions がサクッと構成できるみたいですね。

下記のドキュメント (自分で GitHub Actions を構成する際のもの) との差も少し気になったので、試してみました。

環境・準備

やってみた

AKS の左ペインにある「自動デプロイ」から構成します。手順としては、冒頭のドキュメントの通りに実施すれば、特に迷うことは無いかと。

今回は構成される GitHub Actions を確認してみたいだけなので、ある程度エイヤで設定していきますw

Azure Portal 側での作業が一通りできると、GitHub 側にプルリクエストが作成されますので、承認すれば OK です。間違えて fork 元リポジトリにプルリクを上げないように注意しましょう。

なお、GitHub Actions のコードを確認するだけなら承認の必要も無いです。

作成された GitHub Actions コードの確認

GitHub 下記のようなコードが生成されました。

.github/workflows/aks-autodeploy-test-1.yaml
name: aks-autodeploy-test-1
"on":
    push:
        branches:
            - master
    workflow_dispatch: {}
env:
    ACR_RESOURCE_GROUP: <リソースグループ名>
    AZURE_CONTAINER_REGISTRY: <コンテナレジストリ名>
    CLUSTER_NAME: <AKS クラスタ名>
    CLUSTER_RESOURCE_GROUP: <リソースグループ名>
    CONTAINER_NAME: vote001
    DEPLOYMENT_MANIFEST_PATH: |
        ./azure-vote-all-in-one-redis.yaml
jobs:
    buildImage:
        permissions:
            contents: read
            id-token: write
        runs-on: ubuntu-latest
        steps:
            - uses: actions/checkout@v3
            - uses: azure/login@v1.4.3
              name: Azure login
              with:
                client-id: ${{ secrets.AZURE_CLIENT_ID }}
                subscription-id: ${{ secrets.AZURE_SUBSCRIPTION_ID }}
                tenant-id: ${{ secrets.AZURE_TENANT_ID }}
            - name: Build and push image to ACR
              run: az acr build --image ${{ env.CONTAINER_NAME }}:${{ github.sha }} --registry ${{ env.AZURE_CONTAINER_REGISTRY }} -g ${{ env.ACR_RESOURCE_GROUP }} -f ./azure-vote/Dockerfile ./
    deploy:
        permissions:
            actions: read
            contents: read
            id-token: write
        runs-on: ubuntu-latest
        needs:
            - buildImage
        steps:
            - uses: actions/checkout@v3
            - uses: azure/login@v1.4.3
              name: Azure login
              with:
                client-id: ${{ secrets.AZURE_CLIENT_ID }}
                subscription-id: ${{ secrets.AZURE_SUBSCRIPTION_ID }}
                tenant-id: ${{ secrets.AZURE_TENANT_ID }}
            - uses: azure/aks-set-context@v3
              name: Get K8s context
              with:
                cluster-name: ${{ env.CLUSTER_NAME }}
                resource-group: ${{ env.CLUSTER_RESOURCE_GROUP }}
            - uses: Azure/k8s-deploy@v4
              name: Deploys application
              with:
                action: deploy
                images: ${{ env.AZURE_CONTAINER_REGISTRY }}.azurecr.io/${{ env.CONTAINER_NAME }}:${{ github.sha }}
                manifests: ${{ env.DEPLOYMENT_MANIFEST_PATH }}
                namespace: namespace-workflow-1661177743344

buildImage ジョブでイメージをビルドし、deploy ジョブで対象の Kubernetes (AKS) にデプロイしていますね。自分で構成する際のドキュメントと比較すると、だいたい同じですがジョブが分割されているので多少分かりやすくなっています。

認証情報などは GitHub Actions の secret を構成してくれています。当たり前品質の箇所ではありますが、嬉しい自動化。

まとめ

ということで、予想通りではありますがポチポチっとするだけで GitHub Actions によるデプロイ自動化の構成が簡単にできました。

コードのリポジトリ内に Kubernetes マニフェストまで一式揃えてデプロイまで一気通貫するので、GitOps (コードリポジトリとマニフェストのリポジトリは分けたり) まで視野に入っている場合は少し注意が必要そうです。

自動化チャレンジの取っ掛かりとか、テスト環境等で時間をかけずに構成したい場合には良さそうですね!

Discussion