🐈
Azure CLI からWeb App をデプロイした際のポータルからのSSH接続
はじめに
Web App for Containerを Azure CLIを使用してデプロイした際にポータルのSSH(SCM)を使用できるようにデプロイします。
普通にデプロイすると以下のようにアクセスできません。
そこで、デプロイする際にSSH用の設定を追加で行っていきます。
ディレクトリ
.
├── src
├── app.py
├── Dockerfile
├── sshd_config
├── init.sh
App Serivceのデプロイ
リソース等の設定値を定義します。
LOCATION=japaneast
RESOURCEGROUP_NAME=4kzknt-webapp-rg
ACR_NAME=4kzkntacr
ACR_SKU=Basic
DOCKER_TAG_NAME=4kzknt-tag-name
ASP_NAME=4kzkntwebappPlan
ASP_SKU=B1
APPSERVICE_NAME=4kzknt-webapp
リソースグループの作成
az group create --l $LOCATION -n $RESOUCE_GROUP_NAME
Dockerfileの作成
公式ドキュメントにも記載がありますとおり、コンテナーのポート2222を公開します。
Python アプリを作成してみます。
requirements.txt
の内容を以下にします。
Flask
gunicorn
app.py
の内容を以下にします。
from flask import Flask
app = Flask(__name__)
@app.route('/')
def hello():
return {'message': 'Hello world.'}
Dockerfile
を以下の内容にします。
FROM python:3.10
WORKDIR /app
COPY . .
RUN pip install -r requirements.txt
# ssh setting
ENV SSH_PASSWD "root:Docker!"
RUN apt-get update \
&& apt-get install -y --no-install-recommends dialog \
&& apt-get update \
&& apt-get install -y --no-install-recommends openssh-server \
&& echo "$SSH_PASSWD" | chpasswd
# ssh用ファイルのコピー
COPY sshd_config /etc/ssh/
# プログラム起動用ファイルのコピーと権限付与
COPY init.sh /usr/local/bin/
RUN chmod u+x /usr/local/bin/init.sh
EXPOSE 8000 2222
ENTRYPOINT ["init.sh"]
スタートコマンドをinit.sh(スタートアップスクリプト)
に記載しておきます。
#!/bin/bash
set -e
echo "Starting SSH ..."
service ssh start
gunicorn -w 2 -b 0.0.0.0 src.app:app
sshd_confg
ファイルを作成します。
Port 2222
ListenAddress 0.0.0.0
LoginGraceTime 180
X11Forwarding yes
Ciphers aes128-cbc,3des-cbc,aes256-cbc,aes128-ctr,aes192-ctr,aes256-ctr
MACs hmac-sha1,hmac-sha1-96
StrictModes yes
SyslogFacility DAEMON
PasswordAuthentication yes
PermitEmptyPasswords no
PermitRootLogin yes
Docker イメージを ACR にプッシュします。
az acr create --resource-group $RESOURCEGROUP_NAME --name $ACR_NAME --sku $ACR_SKU --admin-enabled true --location $LOCATION
az acr login --name $ACR_NAME
az acr credential show --resource-group $RESOURCEGROUP_NAME --name $ACR_NAME
docker build -t $ACR_NAME.azurecr.io/$DOCKER_TAG_NAME:latest .
docker tag $DOCKER_TAG_NAME $ACR_NAME.azurecr.io/$DOCKER_TAG_NAME:latest
docker push $ACR_NAME.azurecr.io/$DOCKER_TAG_NAME:latest
Web App For Container の作成
以下コマンドより、Web App for Container を作成します。
az appservice plan create --name $ASP_NAME --resource-group $RESOUCE_GROUP_NAME --sku $ASP_SKU --is-linux
az webapp create --resource-group $RESOUCE_GROUP_NAME --plan $ASP_NAME --name $APPSERVICE_NAME --deployment-container-image-name $ACR_NAME.azurecr.io/$DOCKER_TAG_NAME:latest
az webapp config appsettings set --resource-group $RESOUCE_GROUP_NAME --name $APPSERVICE_NAME --settings WEBSITES_PORT=80
az webapp identity assign --resource-group $RESOUCE_GROUP_NAME --name $APPSERVICE_NAME --query principalId --output tsv
Web App が作成されたら、いったん https://<app-name>.azurewebsites.net/ にアクセスすると以下のページが表示されます。
SSHアクセス
ポータルより、App service -> 開発ツール -> SSH で SSHにアクセスすると以下のようにアクセスできます。
リソースのクリーンアップ
リソースグループの削除します。
az group delete -n $RESOUCE_GROUP_NAME
おわりに
Web App for Container をデプロイする際にSSHを公開しないとポータルより、SSH使用できないので、公開していただき、SSHサービスを実行していただければ今回のように使用できます。
Discussion