見出し画像

Azure App ServiceにAPIをデプロイする

Microsoft AzureのApp Service使って自作のAPIを公開しようと思います。
APIはDockerコンテナに格納されていて、そのDockerコンテナをPaaSのApp Serviceにデプロイします。

コードはこのような感じです。Go言語のGinというフレームワークを使い、APIは静的なJSONを返す簡単なものです。

package main

import "github.com/gin-gonic/gin"

type Customer struct {
  Name string `json:"name"`
  PhoneNo string `json:"phone_no"`
  Email string `json:"email"`
}

func main() {
  r := gin.Default()
  r.GET("/customers", func(c *gin.Context){
    var customers []Customer
    customers = append(customers,
      Customer{
        Name: "John",
        PhoneNo: "09011111111",
        Email: "john@example.com",
      },
      Customer{
        Name: "Beth",
        PhoneNo: "09022222222",
        Email: "beth@example.com",
      },
    )
    c.JSON(200, gin.H{
      "customers": customers,
    })
  })
  r.Run()
}

こちらがDockerfileです。
軽量なAlpine Linuxを採用し、デプロイ時にコンパイルするように設定しておきます。

FROM golang:1.17.5-alpine3.15

RUN mkdir /app
WORKDIR /app

COPY . ./
RUN go mod download
RUN go build .

EXPOSE 8080

CMD [ "./gin-sample" ]

次にDockerコンテナを登録するためにAzureにコンテナーレジストリを作成します。

コンテナーレジストリにログインします。

$ az acr login --name customerservicego
Login Succeeded

Dockerイメージをビルドします。

$ docker build -t customerservicego.azurecr.io/customers:v1.0.0 .
[+] Building 17.0s (12/12) FINISHED                                                                                  
 => [internal] load build definition from Dockerfile                                                            0.0s
 => => transferring dockerfile: 185B                                                                            0.0s
 => [internal] load .dockerignore                                                                               0.0s
 => => transferring context: 2B                                                                                 0.0s
 => [internal] load metadata for docker.io/library/golang:1.17.5-alpine3.15                                     2.2s
 => [auth] library/golang:pull token for registry-1.docker.io                                                   0.0s
 => CACHED [1/6] FROM docker.io/library/golang:1.17.5-alpine3.15@sha256:4918412049183afe42f1ecaf8f5c2a88917c2e  0.0s
 => [internal] load build context                                                                               0.1s
 => => transferring context: 3.67kB                                                                             0.0s
 => [2/6] RUN mkdir /app                                                                                        0.4s
 => [3/6] WORKDIR /app                                                                                          0.0s
 => [4/6] COPY . ./                                                                                             0.1s
 => [5/6] RUN go mod download                                                                                   4.4s
 => [6/6] RUN go build .                                                                                        8.1s
 => exporting to image                                                                                          1.7s
 => => exporting layers                                                                                         1.7s
 => => writing image sha256:2b50b322c2d82dd4e286269ab6d733af645dac861797fe739e8c1c4e9f083909                    0.0s
 => => naming to customerservicego.azurecr.io/customers:v1.0.0                                                  0.0s

Use 'docker scan' to run Snyk tests against images to find vulnerabilities and learn how to fix them

Dockerイメージをコンテナーレジストリにアップロードします。

$ docker push customerservicego.azurecr.io/customers:v1.0.0
The push refers to repository [customerservicego.azurecr.io/customers]
c0e0f58047a1: Pushed 
c8aaa6bd771b: Pushed 
0d59f3e6b54e: Pushed 
5f70bf18a086: Pushed 
74ed92ca381e: Pushed 
97aa26b4fc43: Pushed 
715cbda62b79: Pushed 
b6f786c730a9: Pushed 
63a6bdb95b08: Pushed 
8d3ac3489996: Pushed 
v1.0.0: digest: sha256:4b50a062a99d88626c447fbd98c1f6c4079c77450b6fa26217a8f513e1547384 size: 2413

アップロードができました。

レジストリの管理者ユーザーを有効にします。

最後に登録したコンテナを使ってApp Serviceを作成し公開します。

公開にDockerコンテナーを選択し、SKUは無料のF1を選択します。

イメージソースにAzure Container Registryを選択し、先ほど登録したコンテナを指定します。

デプロイが完了しました。

PostmanからもAPIが呼び出せています。


この記事が気に入ったらサポートをしてみませんか?