LoginSignup
10

More than 5 years have passed since last update.

Azure WebAppのREST APIを調査

Posted at

Azure WebAppのまとまったドキュメントが見当たらなくて、CLIの通信をベースに調べることにした。

調査には Burp Proxy を使い、export HTTP_PROXY=http://127.0.0.1:8080した後地道に取得。

共通項

リソースの共通部分を次のようにして記述を省略します。

エンドポイント: https://management.core.windows.net/${サブスクリプションID}

データセンタの場所にあたるwebSpaceNameがURIに含まれるので、適宜次の中から埋めます。

ロケーション(webSpaceName)一覧:

[
  {
    "name": "North Central US",
    "webSpace": "northcentraluswebspace"
  },
  {
    "name": "North Europe",
    "webSpace": "northeuropewebspace"
  },
  {
    "name": "West Europe",
    "webSpace": "westeuropewebspace"
  },
  {
    "name": "South Central US",
    "webSpace": "southcentraluswebspace"
  },
  {
    "name": "East US",
    "webSpace": "eastuswebspace"
  },
  {
    "name": "East Asia",
    "webSpace": "eastasiawebspace"
  },
  {
    "name": "Southeast Asia",
    "webSpace": "southeastasiawebspace"
  },
  {
    "name": "West US",
    "webSpace": "westuswebspace"
  },
  {
    "name": "Central US",
    "webSpace": "centraluswebspace"
  },
  {
    "name": "Japan West",
    "webSpace": "japanwestwebspace"
  },
  {
    "name": "Japan East",
    "webSpace": "japaneastwebspace"
  },
  {
    "name": "East US 2",
    "webSpace": "eastus2webspace"
  },
  {
    "name": "Brazil South",
    "webSpace": "brazilsouthwebspace"
  }
]

CLIとURIの対応表

とりえあず自分が使用すると思うリソースと、CLIでだいたいまともに動いてる感じのリクエストをまとめました。全部じゃないけど。

azure cli method/rescode 対応するURI 一言
site location list GET(200) /services/WebSpaces -
site list GET(200) /services/WebSpaces/{webSpaceName}/sites -
site create [name] POST(200) /services/WebSpaces/{webSpaceName}/sites Body例あり。
site show [name] *GET(200) - config,instanceidsなどの複合リクエストでした。
site showの途中で呼ばれているinstance_id GET(200) /services/WebSpaces/{webSpaceName}/sites/{SiteName}/instanceids CLIでは直接これだけ叩くコマンドはない。
site stop [name] PUT(200) /services/WebSpaces/{webSpaceName}/sites/{SiteName} Body例あり。
site domain list [name] GET(200) /services/WebSpaces/{webSpaceName}/sites/{SiteName} -
site domain add [dn] [name] PUT(200) /services/WebSpaces/{webSpaceName}/sites/{SiteName} Body例あり、事前にCNAME登録必須。
site domain delete [dn] {name} PUT(200) /services/WebSpaces/{webSpaceName}/sites/{SiteName} Body例あり。
site appsetting list [name] GET(200) /services/WebSpaces/{webSpaceName}/sites/{SiteName}/config JSONで返ってくる。
site appsetting show [name] GET(200) /services/WebSpaces/{webSpaceName}/sites/{SiteName}/config すべてとってCLI側でパースしていた。リクエストとしてはlistと同じ。
site appsetting add [name] PUT(200) /services/WebSpaces/{webSpaceName}/sites/{SiteName}/config Body例あり、JSONだ。
site appsetting delete [name] PUT(200) /services/WebSpaces/{webSpaceName}/sites/{SiteName}/config Body例あり、JSON。リクエストとしてはaddと同じ。
site config * - - 古い、appsetting推奨なのでカット。
site scale mode [name] PUT(200) /services/WebSpaces/{webSpaceName}/ServerFarms/{ServerFarmId} Body例あり、ServerFarmIdはsiteをGETした際の情報に含まれている。 (Default4など)
site scale instances [name] - - 成功してない。
site defaultdocument list [name] GET(200) /services/WebSpaces/{webSpaceName}/sites/{SiteName}/config JSONで返ってくる。リクエストとしてはappsetting listと同じ。
site defaultdocument add [name] PUT(200) /services/WebSpaces/{webSpaceName}/sites/{SiteName}/config Body例あり、JSON。
site defaultdocument delete [name] PUT(200) /services/WebSpaces/{webSpaceName}/sites/{SiteName}/config Body例あり、JSON。リクエストとしてはaddと同じ。

SCM関連のエンドポイントとCLI対応

SCM関連は普通のAPIエンドポイントに送るリクエストとサイト専用のSCMエンドポイントにリクエストが分かれます。

azure cli method/rescode 対応するURI 一言
site deployment github [name] POST(200) /services/WebSpaces/{webSpaceName}/sites/{SiteName}/repository POSTのBODYが空で投げられて、サイト側にベアリポジトリを作成する。。いわゆるローカルGitリポジトリで作られる設定。コマンド名となんか違う。
site deployment user set [username] [pass] PUT(??) /services/WebSpaces?properties=publishingCredentials 検証していたアカウントがco-adminsだったので400で蹴られた。あまりAPIからつつくものでは無いかも。

一部のリクエストでサイトごとに割り振られたSCMエンドポイント({SiteName}.scm.azurewebsites.net )が使用される。
hogehoge31ならhogehoge31.scm.azurewebsites.netだった。

次のリクエストはSCMエンドポイントに送る。

azure cli method/rescode 対応するURI 一言
site deployment list [name] GET(200) /api/deployments/ JSONのアレイで返ってくる。コミットIDを含む。
site deployment redeploy [options] [name] PUT(204) /api/deployments/{commit_id(sha1)} BODYは空。任意のコミットIDをデプロイできる。これ204。
site log tail [name] GET(200) /logstream ログがストリーミングで渡ってくる。
site log download [name] GET(200) /dump CLIではdiagnostics.zip一式としてダウンロード。

POST/PUT時のリクエスト集

以下、Bodyのサンプル。

site create

<?xml version="1.0" encoding="utf-8" standalone="yes"?>
<Site xmlns="http://schemas.microsoft.com/windowsazure">
  <Name>hogehoge31</Name>
  <ServerFarm/>
  <WebSpaceToCreate>
    <GeoRegion>Japan East</GeoRegion>
    <Name>japaneastwebspace</Name>
    <Plan>VirtualDedicatedPlan</Plan>
  </WebSpaceToCreate>
</Site>

site stop/start

サイトhogehoge31をstopした時のリクエスト。

<?xml version="1.0" encoding="utf-8" standalone="yes"?>
<Site xmlns="http://schemas.microsoft.com/windowsazure">
  <State>Stopped</State>
</Site>

Startの場合はRunning。CLIのrestartはStoppedとRunningを続けて送信する。

site domain add

hogehoge31にhogehoge31.higan.worksを付与した時。

<?xml version="1.0" encoding="utf-8" standalone="yes"?>
<Site xmlns="http://schemas.microsoft.com/windowsazure" xmlns:a="http://schemas.microsoft.com/2003/10/Serialization/Arrays">
  <HostNames>
    <a:string>hogehoge31.azurewebsites.net</a:string>
    <a:string>hogehoge31.higan.works</a:string>
  </HostNames>
</Site>

site domain delete

hogehoge31からhogehoge31.higan.worksを削除した時。

<?xml version="1.0" encoding="utf-8" standalone="yes"?>
<Site xmlns="http://schemas.microsoft.com/windowsazure" xmlns:a="http://schemas.microsoft.com/2003/10/Serialization/Arrays">
  <HostNames>
    <a:string>hogehoge31.azurewebsites.net</a:string>
  </HostNames>
</Site>

site appsetting add/delete

setting add MYCONF="HOGEHOGE" hogehoge31 とした時のリクエスト。delete時は該当のキーバリューを削除して送る。

{
   "DefaultDocuments" : [
      "Default.htm",
      "Default.html",
      "Default.asp",
      "index.htm",
      "index.html",
      "iisstart.htm",
      "default.aspx",
      "index.php",
      "hostingstart.html"
   ],
   "RoutingRules" : [],
   "LogsDirectorySizeLimit" : 35,
   "DetailedErrorLoggingEnabled" : false,
   "ConnectionStrings" : [],
   "AlwaysOn" : false,
   "WebSocketsEnabled" : false,
   "NumberOfWorkers" : 1,
   "PhpVersion" : "5.4",
   "NetFrameworkVersion" : "v4.0",
   "HttpLoggingEnabled" : false,
   "HandlerMappings" : [],
   "AppSettings" : [
      {
         "Name" : "WEBSITE_NODE_DEFAULT_VERSION",
         "Value" : "0.10.32"
      },
      {
         "Value" : "HOGEHOGE",
         "Name" : "MYCONF"
      }
   ],
   "RemoteDebuggingEnabled" : false,
   "SiteAuthEnabled" : false,
   "RequestTracingEnabled" : false,
   "Metadata" : [],
   "ScmType" : "None",
   "ManagedPipelineMode" : 0,
   "Use32BitWorkerProcess" : true
}

site scale mode

site hogehoge31をbasicにした時のリクエスト。

<?xml version="1.0" encoding="utf-8" standalone="yes"?>
<ServerFarm xmlns="http://schemas.microsoft.com/windowsazure">
  <SKU>basic</SKU>
</ServerFarm>

site defaultdocument delete/add

hogehoge31からdefault.aspxを取り除いたリクエスト例。

{
   "DetailedErrorLoggingEnabled" : false,
   "WebSocketsEnabled" : false,
   "HandlerMappings" : [],
   "SiteAuthEnabled" : false,
   "DefaultDocuments" : [
      "Default.htm",
      "Default.html",
      "Default.asp",
      "index.htm",
      "index.html",
      "iisstart.htm",
      "index.php",
      "hostingstart.html"
   ],
   "NumberOfWorkers" : 1,
   "LogsDirectorySizeLimit" : 35,
   "HttpLoggingEnabled" : false,
   "RoutingRules" : [],
   "RemoteDebuggingEnabled" : false,
   "Use32BitWorkerProcess" : true,
   "ManagedPipelineMode" : 0,
   "RequestTracingEnabled" : false,
   "AppSettings" : [
      {
         "Name" : "WEBSITE_NODE_DEFAULT_VERSION",
         "Value" : "0.10.32"
      }
   ],
   "PhpVersion" : "5.4",
   "ConnectionStrings" : [],
   "RemoteDebuggingVersion" : "VS2012",
   "NetFrameworkVersion" : "v4.0",
   "Metadata" : [],
   "ScmType" : "None",
   "AlwaysOn" : false
}

site deployment user set

user: sawaploy, pass: yourpasswordで共通デプロイユーザを作るときのXML。
これは管理者でしか作れないのと、全サイトにまたがる設定になるので最初にポータルから作れば十分。

<?xml version="1.0" encoding="utf-8" standalone="yes"?>
<User xmlns="http://schemas.microsoft.com/windowsazure">
  <PublishingPassword>yourpassword</PublishingPassword>
  <PublishingUserName>sawaploy</PublishingUserName>
</User>

CLI単独では直接取れないリソースのレスポンス

CLIには対応するサブコマンドが無いんだけども、site configなどの複合出力が読んでいるのを見つけた。とりあえず1つ。

...{SiteName}/instanceids

Appのホスティングに割り当てられているインスタンスのIDが取れた。

<ArrayOfstring xmlns="http://schemas.microsoft.com/2003/10/Serialization/Arrays" xmlns:i="http://www.w3.org/2001/XMLSchema-instance">
  <string>c316b60c7926f2ebXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX</string>
  <string>1da71d92d8f9da7dXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXc</string>
</ArrayOfstring>

Register as a new user and use Qiita more conveniently

  1. You get articles that match your needs
  2. You can efficiently read back useful information
  3. You can use dark theme
What you can do with signing up
10