如何使用 Azure Python SDK 编辑 Azure 应用服务?

How to edit Azure App Service using Azure Python SDK?

我按照此处的示例 https://docs.microsoft.com/en-us/azure/developer/python/azure-sdk-example-web-app?tabs=cmd#4-write-code-to-provision-and-deploy-a-web-app 尝试使用 Python SDK 更新现有应用服务。

这是我的代码

from azure.mgmt.web import WebSiteManagementClient
from azure.common.client_factory import get_client_from_cli_profile
import os

def insert_access_restriction():
    rg_name = os.environ.get('RESOURCE_GROUP_NAME', None)
    location = os.environ.get('LOCATION', None)
    sp_name = os.environ.get('SERVICE_PLAN_NAME', None)
    web_app_name = os.environ.get('WEB_APP_NAME', None)
    sub_id = os.environ.get('AZURE_SUBSCRIPTION_ID', None)
    
    app_service_client = get_client_from_cli_profile(WebSiteManagementClient)
    poller = app_service_client.app_service_plans.create_or_update(rg_name,
        sp_name,
        {
            "location": location,
            "reserved": True,
            "sku" : {"name" : "S1"}
        }
    )
    plan_result = poller.result()
    
    poller = app_service_client.web_apps.create_or_update(rg_name,
        web_app_name,
        {
            "location": location,
            "server_farm_id": plan_result.id,
            "site_config": {
                "ip_restriction": {
                    "ip_address": "3.3.3.3/32"
                },
                "ip_restriction": {
                    "ip_address": "4.4.4.4/32"
                }                    
            }
        }
    )

这个函数的调用app_service_client.app_service_plans.create_or_updatereturns

azure.mgmt.web.v2019_08_01.models._models_py3.DefaultErrorResponseException: Operation returned an invalid status code 'Bad Request'

我的位置是centralus。该程序的目标是在将新的 ip 地址列表添加到存储容器时,以编程方式从 Function App 更新对现有应用程序服务的 ip 限制。错误非常模糊,如何获取现有的应用服务计划及其应用服务,然后使用 Python SDK 更新应用服务?

如果您想使用python sdk更新现有应用服务的ip限制设置,请参考以下代码

  1. 创建服务主体并将 Contributor 分配给 sp
az login
# create sp and assign Contributor role to the sp at subscription level
az ad sp create-for-rbac -n "MyApp"
  1. 代码
client_id = 'your sp appId'
secret = 'your sp password'
tenant = 'your sp tenant'
credentials = ServicePrincipalCredentials(
        client_id = client_id,
        secret = secret,
        tenant = tenant
)

Subscription_Id = ''

web_client=WebSiteManagementClient(
    credentials,
    Subscription_Id
)
resorurce_group_name='your appservice group name'
name='you appservice name'

web_client.web_apps.create_or_update_configuration(resorurce_group_name, name,{

    'ip_security_restrictions':[

        {
            'ip_address': "0.0.0.0/0", 
            'action': "Allow", 
            'priority': 30, 
            'name': "test"
        }
    ]
})

详情请参考here and here


#更新

如果要运行Azure函数中的脚本,请参考以下步骤。

  1. 创建 Azure 函数

  2. 为 Azure 函数启用 Azure MSI

  3. 为 MSI 分配角色

  4. 代码(我使用 HTTP 触发器来获取 Web 应用程序配置)

import logging
import pyodbc
import json
import azure.functions as func
from msrestazure.azure_active_directory import MSIAuthentication
from azure.mgmt.web import WebSiteManagementClient

async def main(req: func.HttpRequest) -> func.HttpResponse:
    logging.info('Python HTTP trigger function processed a request.')
    
    creds =MSIAuthentication()
    Subscription_Id = 'e5b0fcfa-e859-43f3-8d84-5e5fe29f4c68'
    group_name='0730BowmanWindowAndLinux2'
    name='413Bowman'

    web_client=WebSiteManagementClient(
        creds,
        Subscription_Id
    )
    result =web_client.web_apps.get_configuration(group_name, name,raw=True)
    return func.HttpResponse(json.dumps(result.response.json()))