如何使用Java快速部署Azure功能?

eiee3dmh  于 2023-10-22  发布在  Java
关注(0)|答案(1)|浏览(122)

我是Azure云的新手,所以有几个与Azure云及其服务相关的问题。首先,让我给予你一个关于我正在开发的特性的简介,以及为什么需要azure。
问题陈述:我正在构建一个微服务,在Java spring-boot中,我应该创建一个Azure函数。在Azure函数中,我需要执行一个“.jar”文件。“.jar”包含将在私有Kubernetes集群上执行某些任务的代码,因此我的Azure函数将接收有关Kubernetes集群的输入请求,Azure vnet详细信息(使用Azure虚拟网络来保护Kubernetes集群)。“.jar”文件将部署在Azure的blob存储服务上。Azure函数应该读取“.jar”文件并执行它。
上面提到的一切都需要通过Azure SDK API以编程方式完成。
我希望问题陈述是明确的。现在,一切都需要以编程方式完成。为此,我需要探索Azure SDK,但我没有找到关于相同的好文档。
到目前为止,我遇到的解决方案是Azure门户,Azure插件和Azure工具包插件(我使用“Azure toolkit for IntelliJ”为一些POC创建了一个Azure函数)。但是当我构建一个微服务时,我希望一切都是编程式的,并且正在探索Azure SDK for Java,但没有找到API。
如果有人知道API,请分享相关文档。谢谢你,谢谢

1hdlvixo

1hdlvixo1#

很遗憾,AFAIK目前无法执行该文件。
我能够创建一个Azure函数应用程序,并从存储帐户在函数中部署Jar文件。
但不幸的是,不可能以编程方式执行该文件。
我的代码创建函数应用程序和获取文件内容形式的存储帐户.
为了运行jar文件,我创建了hello_jar.zip文件,并在其中包含了我的hello_jar.jar文件。
用于参考检查Azure Java SDK

functionapp.java

import com.azure.resourcemanager.appservice.AppServiceManager;
import com.azure.resourcemanager.appservice.models.FunctionApp;
import com.azure.resourcemanager.appservice.models.JavaVersion;
import com.azure.storage.blob.*;
import com.azure.storage.blob.sas.BlobSasPermission;
import com.azure.storage.blob.sas.BlobServiceSasSignatureValues;
import java.time.OffsetDateTime;
import com.azure.core.credential.TokenCredential;
import com.azure.core.management.AzureEnvironment;
import com.azure.core.management.profile.AzureProfile;
import com.azure.identity.DefaultAzureCredentialBuilder;

public class functionapp {
    public static void main(String[] args) {

        String subscriptionId = "xxxxxxxxxxxxxxxxxxxx";

        String resourceGroupName = "Vivek-JavaFunc";

        String functionAppName = "javasdkfuncapp";

        String tenantId = "xxxxxxxxxxxxxxxxxxxxxxxxxx";

        String conn ="DefaultEndpointsProtocol=https;AccountName=jarfilestorage;AccountKey=xxxxxxxxxxxxxxxxxxxxxxx==;EndpointSuffix=core.windows.net";

        // Create DefaultAzureCredential using the default settings (e.g., managed identity, environment variables, etc.)
        TokenCredential credential= new DefaultAzureCredentialBuilder()
            .build();

        AzureProfile profile = new AzureProfile(tenantId, subscriptionId, AzureEnvironment.AZURE);
        
        // Initialize the Azure AppServiceManager
        AppServiceManager manager = AppServiceManager
            .configure()
            .authenticate(credential,profile);

        BlobServiceClient blobclient = new BlobServiceClientBuilder().connectionString(conn).buildClient();
        
        BlobContainerClient container = blobclient.getBlobContainerClient("test");

        BlobClient file= container.getBlobClient("hello_jar.zip");

        BlobServiceSasSignatureValues SAS= new BlobServiceSasSignatureValues(
            OffsetDateTime.now().plusDays(1), 
            BlobSasPermission.parse("racwd")
        );

        // Define the Function App
        FunctionApp functionApp  =  manager
                .functionApps()
                .define(functionAppName)
                .withRegion("East US") // Set your desired Azure region
                .withNewResourceGroup(resourceGroupName)
                .withNewConsumptionPlan()
                .withLatestRuntimeVersion()
                .withRuntime("java")
                .withJavaVersion(JavaVersion.JAVA_11)
                .withWebContainer(null)
                .create();

        System.out.println("Azure Function App created with name: " + functionApp.name());

        String SAStoken = file.generateSas(SAS);

        String SASurl = file.getBlobUrl()+"?"+SAStoken;

        functionApp.update()
            .withAppSetting("WEBSITE_RUN_FROM_PACKAGE", SASurl)
            .apply();
    
        System.out.println("Setting has been updated in function: " + functionApp.name());

    }

}

pom.xml

<?xml version="1.0" encoding="UTF-8"?>
<project xmlns="http://maven.apache.org/POM/4.0.0" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
    xsi:schemaLocation="http://maven.apache.org/POM/4.0.0 http://maven.apache.org/xsd/maven-4.0.0.xsd">
    <modelVersion>4.0.0</modelVersion>
    <groupId>com.example</groupId>
    <artifactId>Java</artifactId>
    <version>1.0-SNAPSHOT</version>
    
    <properties>
        <maven.compiler.source>11</maven.compiler.source>
        <maven.compiler.target>11</maven.compiler.target>
        <project.build.sourceEncoding>UTF-8</project.build.sourceEncoding>
        <azure.sdk.version>1.10.1</azure.sdk.version>
    </properties>

    <dependencies>
        <dependency>
            <groupId>com.azure</groupId>
            <artifactId>azure-identity</artifactId>
            <version>1.10.1</version>
        </dependency>
        <dependency>
            <groupId>com.azure</groupId>
            <artifactId>azure-core-management</artifactId>
            <version>1.11.5</version>
        </dependency>
        <dependency>
            <groupId>com.azure</groupId>
            <artifactId>azure-core</artifactId>
            <version>1.43.0</version>
        </dependency>
        <dependency>
            <groupId>com.azure.resourcemanager</groupId>
            <artifactId>azure-resourcemanager-appservice</artifactId>
            <version>2.30.0</version>
        </dependency>
        <dependency>
            <groupId>com.azure.resourcemanager</groupId>
            <artifactId>azure-resourcemanager</artifactId>
            <version>2.30.0</version>
        </dependency>
        <dependency>
            <groupId>com.azure</groupId>
            <artifactId>azure-storage-blob</artifactId>
            <version>12.24.0</version>
        </dependency>        
    </dependencies>
    <build>
        <plugins>
            <plugin>
                <groupId>org.codehaus.mojo</groupId>
                <artifactId>exec-maven-plugin</artifactId>
                <version>3.0.0</version>
                <executions>
                    <execution>
                        <phase>test</phase>
                        <goals>
                            <goal>java</goal>
                        </goals>
                    </execution>
                </executions>
                <configuration>
                    <mainClass>functionapp</mainClass>
                </configuration>
            </plugin>
        </plugins>
    </build>
</project>

我的.jar文件目录

hello_jar.zip/
    hello_jar.jar

Output

手动执行。

相关问题