Appearance
1. API Backendリソースの削除
デプロイした API Backend リソースの削除手順について解説します。
1-1. QVS Configの編集
QVS Config に記述したリソース宣言をコメントアウトします。
Qmonus Value Stream では、リポジトリに登録されている QVS Config の内容を編集して AssemblyLine を再実行することで、リソースを削除できます。今回は、本チュートリアルで作成した以下の QVS Config を編集します。
- /path/to/repository/.valuestream/azure-api-backend.yaml
- /path/to/repository/.valuestream/azure-shared-infra.yaml
削除するリソースは、QVS Config の
designPatterns
フィールドに記載された Cloud Native Adapter の内容をコメントアウトすることで指定できます。 ここでは、本チュートリアルで作成したリソースを削除するため、以下のように QVS Config を編集します。yamlparams: - name: appName type: string - name: azureSubscriptionId type: string - name: azureResourceGroupName type: string - name: azureDnsZoneResourceGroupName type: string - name: azureDnsZoneName type: string - name: azureDnsARecordName type: string - name: azureStaticIpAddress type: string - name: mysqlCreateDbName type: string - name: azureKeyVaultKeyContainerName type: string - name: clusterIssuerName type: string - name: k8sNamespace type: string - name: imageName type: string - name: port type: string - name: dbHost type: string - name: redisHost type: string - name: redisPasswordSecretName type: string - name: host type: string modules: - name: qmonus.net/adapter/official revision: v0.37.1 designPatterns: - - pattern: qmonus.net/adapter/official/adapters/azure/container/kubernetes/apiBackend - params: - appName: $(params.appName) - imageName: $(params.imageName) - azureDnsZoneResourceGroupName: $(params.azureDnsZoneResourceGroupName) - azureKeyVaultKeyContainerName: $(params.azureKeyVaultKeyContainerName) - redisPasswordSecretName: $(params.redisPasswordSecretName) - k8sNamespace: $(params.k8sNamespace) - azureSubscriptionId: $(params.azureSubscriptionId) - host: $(params.host) - port: $(params.port) - azureDnsARecordName: $(params.azureDnsARecordName) - azureDnsZoneName: $(params.azureDnsZoneName) - dbHost: $(params.dbHost) - mysqlCreateDbName: $(params.mysqlCreateDbName) - clusterIssuerName: $(params.clusterIssuerName) - azureStaticIpAddress: $(params.azureStaticIpAddress) - azureResourceGroupName: $(params.azureResourceGroupName) - redisHost: $(params.redisHost) + # - pattern: qmonus.net/adapter/official/adapters/azure/container/kubernetes/apiBackend + # params: + # appName: $(params.appName) + # imageName: $(params.imageName) + # azureDnsZoneResourceGroupName: $(params.azureDnsZoneResourceGroupName) + # azureKeyVaultKeyContainerName: $(params.azureKeyVaultKeyContainerName) + # redisPasswordSecretName: $(params.redisPasswordSecretName) + # k8sNamespace: $(params.k8sNamespace) + # azureSubscriptionId: $(params.azureSubscriptionId) + # host: $(params.host) + # port: $(params.port) + # azureDnsARecordName: $(params.azureDnsARecordName) + # azureDnsZoneName: $(params.azureDnsZoneName) + # dbHost: $(params.dbHost) + # mysqlCreateDbName: $(params.mysqlCreateDbName) + # clusterIssuerName: $(params.clusterIssuerName) + # azureStaticIpAddress: $(params.azureStaticIpAddress) + # azureResourceGroupName: $(params.azureResourceGroupName) + # redisHost: $(params.redisHost) - pattern: qmonus.net/adapter/official/pipeline/utils/pulumi:refer pipelineParams: jqQueries: - query: selector: '.type == "azure-native:containerregistry:Registry"' path: .outputs.loginServer name: ContainerRegistry - query: selector: '.type == "azure-native:containerregistry:Registry"' path: .outputs.loginServer name: ImageRegistryPath - query: selector: '.type == "kubernetes:cert-manager.io/v1:ClusterIssuer"' path: .outputs.spec.acme.solvers[0].dns01.azureDNS.subscriptionID name: AzureSubscriptionId - query: selector: '.type == "azure-native:resources:ResourceGroup"' path: .outputs.name name: AzureResourceGroupName - query: selector: '.type == "azure-native:network:PublicIPAddress"' path: .outputs.ipAddress name: AzureStaticIpAddress - query: selector: '.type == "azure-native:keyvault:Vault" and (.urn | (type == "string" and endswith("azure-native:keyvault:Vault::keyVault")))' path: .outputs.name name: AzureKeyVaultKeyContainerName - query: selector: '.type == "kubernetes:cert-manager.io/v1:ClusterIssuer"' path: .outputs.metadata.name name: ClusterIssuerName - query: selector: '.type == "azure:mysql/flexibleServer:FlexibleServer"' path: .outputs.fqdn name: DbHost - query: selector: '.type == "azure:redis/cache:Cache"' path: .outputs.hostname name: RedisHost - query: selector: '.type == "azure-native:keyvault:Secret" and (.urn | (type == "string" and endswith("azure-native:keyvault:Secret::redisPrimaryKeySecret")))' path: .outputs.name name: RedisPasswordSecretName - pattern: qmonus.net/adapter/official/pipeline/scan:trivyAzure
yamlparams: - name: appName type: string - name: azureSubscriptionId type: string - name: azureResourceGroupName type: string - name: azureDnsZoneResourceGroupName type: string - name: azureDnsZoneName type: string - name: azureDnsARecordName type: string - name: azureStaticIpAddress type: string - name: mysqlCreateDbName type: string - name: azureKeyVaultKeyContainerName type: string - name: clusterIssuerName type: string - name: k8sNamespace type: string - name: imageName type: string - name: port type: string - name: dbHost type: string - name: redisHost type: string - name: redisPasswordSecretName type: string - name: host type: string modules: - name: qmonus.net/adapter/official revision: v0.37.1 designPatterns: # - pattern: qmonus.net/adapter/official/adapters/azure/container/kubernetes/apiBackend # params: # appName: $(params.appName) # imageName: $(params.imageName) # azureDnsZoneResourceGroupName: $(params.azureDnsZoneResourceGroupName) # azureKeyVaultKeyContainerName: $(params.azureKeyVaultKeyContainerName) # redisPasswordSecretName: $(params.redisPasswordSecretName) # k8sNamespace: $(params.k8sNamespace) # azureSubscriptionId: $(params.azureSubscriptionId) # host: $(params.host) # port: $(params.port) # azureDnsARecordName: $(params.azureDnsARecordName) # azureDnsZoneName: $(params.azureDnsZoneName) # dbHost: $(params.dbHost) # mysqlCreateDbName: $(params.mysqlCreateDbName) # clusterIssuerName: $(params.clusterIssuerName) # azureStaticIpAddress: $(params.azureStaticIpAddress) # azureResourceGroupName: $(params.azureResourceGroupName) # redisHost: $(params.redisHost) - pattern: qmonus.net/adapter/official/pipeline/utils/pulumi:refer pipelineParams: jqQueries: - query: selector: '.type == "azure-native:containerregistry:Registry"' path: .outputs.loginServer name: ContainerRegistry - query: selector: '.type == "azure-native:containerregistry:Registry"' path: .outputs.loginServer name: ImageRegistryPath - query: selector: '.type == "kubernetes:cert-manager.io/v1:ClusterIssuer"' path: .outputs.spec.acme.solvers[0].dns01.azureDNS.subscriptionID name: AzureSubscriptionId - query: selector: '.type == "azure-native:resources:ResourceGroup"' path: .outputs.name name: AzureResourceGroupName - query: selector: '.type == "azure-native:network:PublicIPAddress"' path: .outputs.ipAddress name: AzureStaticIpAddress - query: selector: '.type == "azure-native:keyvault:Vault" and (.urn | (type == "string" and endswith("azure-native:keyvault:Vault::keyVault")))' path: .outputs.name name: AzureKeyVaultKeyContainerName - query: selector: '.type == "kubernetes:cert-manager.io/v1:ClusterIssuer"' path: .outputs.metadata.name name: ClusterIssuerName - query: selector: '.type == "azure:mysql/flexibleServer:FlexibleServer"' path: .outputs.fqdn name: DbHost - query: selector: '.type == "azure:redis/cache:Cache"' path: .outputs.hostname name: RedisHost - query: selector: '.type == "azure-native:keyvault:Secret" and (.urn | (type == "string" and endswith("azure-native:keyvault:Secret::redisPrimaryKeySecret")))' path: .outputs.name name: RedisPasswordSecretName - pattern: qmonus.net/adapter/official/pipeline/scan:trivyAzure
yamlparams: - name: appName type: string - name: azureTenantId type: string - name: azureSubscriptionId type: string - name: azureResourceGroupName type: string - name: azureDnsZoneResourceGroupName type: string - name: dnsZoneName type: string - name: keyVaultAccessAllowedObjectIds type: array - name: applicationGatewayNsgAllowedSourceIps type: array modules: - name: qmonus.net/adapter/official revision: v0.37.1 designPatterns: - - pattern: qmonus.net/adapter/official/adapters/azure/container/kubernetes/apiBackend/sharedInfrastructure - params: - keyVaultAccessAllowedObjectIds: - - $(params.keyVaultAccessAllowedObjectIds[*]) - appName: $(params.appName) - azureDnsZoneResourceGroupName: $(params.azureDnsZoneResourceGroupName) - azureTenantId: $(params.azureTenantId) - dnsZoneName: $(params.dnsZoneName) - azureSubscriptionId: $(params.azureSubscriptionId) - azureResourceGroupName: $(params.azureResourceGroupName) - applicationGatewayNsgAllowedSourceIps: - - $(params.applicationGatewayNsgAllowedSourceIps[*]) + # - pattern: qmonus.net/adapter/official/adapters/azure/container/kubernetes/apiBackend/sharedInfrastructure + # params: + # keyVaultAccessAllowedObjectIds: + # - $(params.keyVaultAccessAllowedObjectIds[*]) + # appName: $(params.appName) + # azureDnsZoneResourceGroupName: $(params.azureDnsZoneResourceGroupName) + # azureTenantId: $(params.azureTenantId) + # dnsZoneName: $(params.dnsZoneName) + # azureSubscriptionId: $(params.azureSubscriptionId) + # azureResourceGroupName: $(params.azureResourceGroupName) + # applicationGatewayNsgAllowedSourceIps: + # - $(params.applicationGatewayNsgAllowedSourceIps[*])
yamlparams: - name: appName type: string - name: azureTenantId type: string - name: azureSubscriptionId type: string - name: azureResourceGroupName type: string - name: azureDnsZoneResourceGroupName type: string - name: dnsZoneName type: string - name: keyVaultAccessAllowedObjectIds type: array - name: applicationGatewayNsgAllowedSourceIps type: array modules: - name: qmonus.net/adapter/official revision: v0.37.1 designPatterns: # - pattern: qmonus.net/adapter/official/adapters/azure/container/kubernetes/apiBackend/sharedInfrastructure # params: # keyVaultAccessAllowedObjectIds: # - $(params.keyVaultAccessAllowedObjectIds[*]) # appName: $(params.appName) # azureDnsZoneResourceGroupName: $(params.azureDnsZoneResourceGroupName) # azureTenantId: $(params.azureTenantId) # dnsZoneName: $(params.dnsZoneName) # azureSubscriptionId: $(params.azureSubscriptionId) # azureResourceGroupName: $(params.azureResourceGroupName) # applicationGatewayNsgAllowedSourceIps: # - $(params.applicationGatewayNsgAllowedSourceIps[*])
変更をステージに追加します。
git add .valuestream/azure-shared-infra.yaml .valuestream/azure-api-backend.yaml
リポジトリに変更をコミットします。
git commit -m "Delete api backend resources"
リポジトリに変更をプッシュします。
git push
Git コミットのハッシュ値を取得します。
git rev-parse HEAD
1-2. AssemblyLineの実行
本チュートリアルでは、先に azure-shared-infra
の AssemblyLine を実行して基盤となるクラウドリソースをデプロイした後、azure-api-backend
の AssemblyLine を実行して API Backend をデプロイしました。 このため、リソースの削除においては、先に azure-api-backend
の AssemblyLine を実行して API Backend のリソースを削除した後、azure-shared-infra
の AssemblyLine を実行して基盤となるクラウドリソースを削除する、という順番で実施します。
左のメニュー一覧の AssemblyLine をクリックして、AssemblyLine 一覧ページに移動します。
チュートリアルで作成した
azure-api-backend
の AssemblyLine を選択します。画面上部の Input Parameters に以下を入力し、
RUN
ボタンを押下して AssemblyLine を実行します。- gitRevision: 1-1で取得した Git コミットのハッシュ値
TIP
AssemblyLine の実行開始後に、scan
Pipeline の image-scan-azure
Task の scan-image
Step の実行が失敗する場合があります。その場合は、画面右上の RETRY
ボタンを押下して再実行してください。
AssemblyLine の実行が完了したら、ログを確認します。
削除に成功すると、
deploy
Pipeline のdeploy
Task のstep-deploy
Step のログから、リソースが削除されたことを確認できます。ログの以下の箇所から、削除されたリソースの総数を確認できます。
Resources: - 14 deleted 1 unchanged
1 unchanged
のリソースについては、Qmonus Value Stream の仕様上出力されているもので、デプロイされたユーザのリソースの削除には影響ありません。AssemblyLine 一覧ページに移動して、
azure-shared-infra
の AssemblyLine を選択します。画面上部の Input Parameters に以下を入力し、
RUN
ボタンを押下して AssemblyLine を実行します。- gitRevision: 1-1で取得した Git コミットのハッシュ値
AssemblyLine の実行が完了したら、ログを確認します。
削除に成功すると、
deploy
Pipeline のdeploy
Task のstep-deploy
Step のログから、リソースが削除されたことを確認できます。Resources: - 47 deleted 1 unchanged
Azure portalにログインして、本チュートリアルで作成したリソースが削除されていることを確認します。
以上で、API Backend リソースの削除は完了です。