Azure Weather Web应用程序AZ-204项目1
#网络开发人员 #python #docker #azure

简介

在当今的数字时代,云服务是许多应用程序的骨干。 Microsoft的云平台Azure提供了大量服务,以立即启动和运行应用程序。在这篇文章中,我将分享我使用Azure的服务阵列创建天气应用程序的旅程。

该项目的GitHub存储库是Github
实际的Web应用程序页面是http://weather.kmcloud.tech

这是与MadebyGps的AZ-204相关项目中的四个中的第一部分。
我将在此过程中进行一些小调整,但我想介绍我学到的与以下项目相关的知识:

Azure应用程序服务网络应用
Azure容器注册表
Azure容器实例
Azure容器应用
Azure功能

创建Azure应用程序服务Web应用

Azure应用程序服务就像Microsoft的工具箱一样,它可以轻松将Web应用程序放在Internet上,而不必担心背景中的所有技术内容。在此项目的开头,我使用此工具箱来设置Web应用程序。我喜欢认为这是在互联网上设置自己的小空间,人们可以在这里居住和访问。

使用Python创建和设置烧瓶应用程序将是简单的,并且通过对Azure App Service的某种配置,我可以将此应用程序启动并可以访问Internet。

开发基本天气应用

在我开始使用Azure的许多工具之前,我首先需要该项目的核心:一个可以与天气API交谈的简单Web应用程序。我使用Python和Flask创建一个简单的网页,其中包含一个文本字段,该网页接受输入,以及在按下按钮时搜索的路由。按下按钮时需要功能,该网站将调用天气API并能够显示相关信息。

我选择的天气API是OpenWeatherMap API。它很简单且易于访问,使我们很容易获得基本的天气细节。这种选择很重要,因为这意味着主要应用程序可以很好地工作,即使我添加了更多的Azure功能。

def get_weather_data(city_name):
    if not city_name:
        return None

    # OpenWeather API details
    API_URL = "http://api.openweathermap.org/data/2.5/weather"
    API_KEY = os.environ.get("WEATHER_API_KEY")

    # Full URL Adding units=metric to get temperature in Celsius.
    full_url = f"{API_URL}?q={city_name}&appid={API_KEY}&units=metric"

    try:
        response = requests.get(full_url)
        data = response.json()

        # Check for valid response from OpenWeather API
        if data.get("cod") != 200:
            return None

        # Process and return the data
        return {
            "city": data["name"],
            "temperature": data["main"]["temp"],
            "description": data["weather"][0]["description"]
        }

    except Exception as e:
        # Handle any exception that arises when making the API call
        print(e)
        return None

容器化

为了确保Web应用程序是隔离和便携式的,我将其进行了容器。使用Docker,我能够将应用程序及其所有依赖项打包,以确保它可以跨不同环境持续运行。

此步骤至关重要,尤其是在使用Azure之类的云平台时,因为它消除了“它在我的机器上工作”问题。通过容器化应用程序,我使管理,部署和扩展变得更容易。容器化应用程序后,我将Docker图像推到Azure容器注册表,确保了容器图像的安全和私人存储。

这种方法简化了部署过程,尤其是当我决定使用Azure容器实例测试应用程序时,然后将其部署到Azure容器应用程序时。这确保了从开发到部署的应用程序效率高,一致且准备就绪。

FROM python:3.8-slim

WORKDIR /app

COPY requirements.txt .
RUN pip install -r requirements.txt

COPY . .

CMD ["flask", "run", "--host=0.0.0.0", "--port=80"]

Azure容器注册表

如上一节所述,ACR是我存储Docker映像的地方。注册表简化了存储和管理这些图像的过程,以确保它们保持在安全的环境中。 ACR的额外好处是它与其他Azure服务的无缝集成。

使用Azure容器注册表中的图像,我能够使用Azure容器实例测试应用程序,然后将其部署到Azure容器应用程序之前进行测试。它不仅可以更快地进行部署和测试,而且还确保了我在需要时准备好了该应用程序的集中式且一致的版本。

Azure容器实例

将Web应用程序容器并将其存储在Azure容器注册表(ACR)中后,必须在全面部署之前对其进行测试。为此,我使用了Azure容器实例(ACI)。与可能需要复杂的设置和配置的传统容器编排不同,ACI提出了一种更简单的方法。它旨在运行容器,而无需管理基础基础架构或精心策划多个容器实例的复杂性。

这使ACI成为我用例的绝佳选择;它使我能够快速旋转容器,并在现实世界中的Azure环境中看到该应用程序中的应用程序。通过与ACI进行测试,我确保该应用程序已准备好应对现场环境的挑战,并确保其稳定性和性能。此步骤至关重要,因为它提供了洞察力并突出了任何潜在的问题,从而确保我决定在Azure容器应用程序上部署该应用程序时的过渡。

Azure函数

深入研究Azure的功能,我决定通过使用Azure功能为应用程序提供扩展的功能。这种无服务器的解决方案使我们能够建立一个警报机制,该机制在满足特定天气条件时会触发,特别是该网页将显示温度是否低于20°Celsius触发毛衣警报。

Azure功能的美丽在于其事件驱动的性质,使应用程序不仅基于搜索提供了信息,而且可以主动提供对天气状况的见识并主动提醒。

Azure函数的集成

使用烧瓶,我能够增强基本的Web应用程序,以引入动态毛衣警报机制。在烧瓶路线和模板中仅进行了几次调整,我将警报无缝集成到网页中。

Azure容器应用

要使容器应用程序启动并运行,我首先利用Azure CLI。使用AZ登录登录Azure后,我使用AZ ContainerApp Create浏览了项目的细节。在初始设置之后,我使用 - 图像参数将应用程序指向Azure容器注册表中的图像。

与容器实例相比,容器应用程序在使用环境的使用中具有更多的颗粒状控制。例如,您可以在同一环境中调整网络设置或让应用程序共享日志分析工作空间。设置环境是必须设置和运行容器应用程序的必要条件。

从那里提供了一个URL,该URL是集装箱应用程序启动和运行的地方,但我想将网站包括在我的KMCloud.tech.tech -Tech -Techâ生态系统中。从Azure门户网站,我创建了一个自定义域条目,并使用我的DNS提供商验证了DNS。

推到github

实现版本控制并使CI/CD进程更有意义,我将代码库放到GitHub上。这也为与其他开发人员和工程师合作的机会打开了我的代码,有可能为该项目提供建议甚至贡献的机会。


Git add .
Git commit -m “First commit”
Git push 

CI/CD实施

要简化部署过程,我实施了CI/CD管道,将从代码库到实时应用程序的过程自动化。使用GitHub动作,我开发了一种两管齐下的方法来解决Docker和Azure功能。

在最佳实践可以完成之前,我需要创建一个将与Azure服务互动的服务主帐户。这将允许在不提供用户/管理凭据的情况下使用订阅中使用服务的程序化方法。

docker Process .yml文件的结构是从存储库中随附的Dockerfile构建Docker映像。此.yml文件有助于设置环境并安装依赖关系。然后,它将新鲜容器图像推向Azure容器注册表。为了促进这一点,我将凭据(包括服务校长)存储为GitHub存储库中的秘密。这样可以确保安全性,同时允许GITHUB操作通过编程为Azure Services进行身份验证。

对于Azure函数,我开发了一个单独的.yml管道。此.yml文件首先设置环境,然后在GitHub存储库中使用存储的秘密(以及服务原理),GitHub操作将github Actions登录到Azure中,从而使管道以编程方式部署Azure函数。最后,通过从Azure登录来清理GitHub动作。

通过集成这些CI/CD管道,并用存储的秘密加强,我可以优化部署工作流程。这确保了Web应用程序,容器映像和Azure功能保持与最新更改同步。

文档

最后但并非最不重要的一点是,我写了这篇博客文章,以记录我所做的事情,以使所有内容启动并运行。这应该使其他人更容易复制此过程,了解设计选择并为项目做出贡献。

结论

旋转这个项目和相关的Azure资源是一次很棒的学习体验。我能够了解有关Azure容器,包括注册表,实例和应用程序,以及对Azure功能的更深入了解。我还能够了解有关AZ CLI工具的更多信息,可以在其中使用单个命令部署服务,而不是在Azure Portal中单击。

在不久的将来,我将返回该项目,并用Terraform实施IAC,以使对云资源的更详细控制。我可以实现的另一件事是测试和产品环境的CI/CD分裂。我知道有一种方法可以区分何时上传测试图像以及何时上传产品,但这需要进行一些研究。

我希望您在旅途中学到了一些东西,这是很多反复试验,然后才能正确运行并正确运行。使用该项目的技能和资源,我将进入“具有到期和CDN集成的Azure文档保险库(开发用于Azure存储)”

请继续关注该博客文章。
感谢您的阅读,
-Be Intonton