英文:
mvn azure-functions:deploy creates 'not valid storage account name'
问题
我正在按照下面的微软教程,并尝试使用 mvn azure-functions:deploy 命令部署我的 Azure 函数。我的函数应用名称/ArtifactID 是 ci-cd-demo:
https://azure.microsoft.com/en-us/resources/videos/azure-friday-java-in-azure-functions/
然而,我收到了一个错误:
[ERROR] Failed to execute goal com.microsoft.azure:azure-functions-maven-plugin:1.4.1:deploy (default-cli) on project ci-cd-demo: ci-cd-demod9632762a is not a valid storage account name. Storage account name must be between 3 and 24 characters in length and use numbers and lower-case letters only.
我登录到 Azure 门户并创建了一个存储帐户。我还通过 Azure CLI 在命令行中手动执行了这个操作。存储帐户的名称是 "cicddemo777"。
看起来当我运行 mvn azure-functions:deploy 时,项目无法找到存储帐户,因此它创建了一个并在我的函数应用名称的末尾附加了一些数字。我在我的 pom.xml 文件的 azure-functions-maven-plugin 下有函数应用名称、资源组、应用服务计划和区域变量。
有没有办法在我的项目中定义 Azure 存储帐户的属性变量,以便我可以成功运行 azure-functions:deploy 命令而不出现此错误?
英文:
I'm following this microsoft tutorial below and trying to deploy my azure function using the mvn azure-functions:deploy command. My function app name/artifactid is ci-cd-demo:
https://azure.microsoft.com/en-us/resources/videos/azure-friday-java-in-azure-functions/
However, I receive an error:
[ERROR] Failed to execute goal com.microsoft.azure:azure-functions-maven-plugin:1.4.1:deploy (default-cli) on project ci-cd-demo: ci-cd-demod9632762a is not a valid storage account name. Storage account name mu
st be between 3 and 24 characters in length and use numbers and lower-case letters only.
I logged into the azure portal and created a Storage account. I also did this manually through the Azure CLI in command line. The storage account is "cicddemo777".
It looks as if when I run mvn azure-functions:deploy , the project cannot find the storage account , so it creates one and appends a bunch of numbers to the end of my function app name. I have the function app name , resource group, appservice plan and region variables in my pom.xml under the azure-functions-maven-plugin.
Is there a way to define the property variable for my azure storage account inside my project so I can successfully run the azure-functions:deploy command with this error?
答案1
得分: 1
更新:
感谢 ennth 的分享。这个错误是由于 functionAppName 的更改引起的。
(由于在部署时,FunctionAppName 需要在全球范围内唯一,它将默认生成一串数字字符串。)
原始答案:
mvn azure-functions:deploy
主要用于第一次部署,因为它生成的文件未指定。它会生成随机资源,这是设计如此。
请参阅这个链接:
使用 mvn azure-functions:deploy
不应该出现问题。您是否在 pom.xml 中设置了某些内容?存储账户名称中不能有字符 -
。
这是我的 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">
<!-- ... 省略其余部分 ... -->
</project>
在大多数情况下,您应该选择 func azure functionapp publish <FunctionAppName>
来部署您的函数应用程序。首先,在 Azure 上创建一个 FunctionApp,然后将其部署到这个应用程序。这是文档链接:
英文:
Update:
Thanks for ennth's sharing. This error comes from changing of functionAppName.
(Since FunctionAppName need unique in all of the world when deployed, it will generate a string of numbers by default.)
Original Answer:
mvn azure-functions:deploy
is mainly used for the first time, because the files it produces are not specified. It will It generates random resources, which is by design.
Have a look of this:
Use mvn azure-functions:deploy
should not face problem. Have you set something in pom.xml? There must be no character like -
in storage account name.
This is my pom.xml, and it is no problem:
<?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.function</groupId>
<artifactId>ci-cd-demo</artifactId>
<version>1.0-SNAPSHOT</version>
<packaging>jar</packaging>
<name>Azure Java Functions</name>
<properties>
<project.build.sourceEncoding>UTF-8</project.build.sourceEncoding>
<maven.compiler.source>1.8</maven.compiler.source>
<maven.compiler.target>1.8</maven.compiler.target>
<azure.functions.maven.plugin.version>1.4.1</azure.functions.maven.plugin.version>
<azure.functions.java.library.version>1.3.1</azure.functions.java.library.version>
<functionAppName>ci-cd-demo-20200406102526581</functionAppName>
<stagingDirectory>${project.build.directory}/azure-functions/${functionAppName}</stagingDirectory>
</properties>
<repositories>
<repository>
<id>maven.snapshots</id>
<name>Maven Central Snapshot Repository</name>
<url>https://oss.sonatype.org/content/repositories/snapshots/</url>
<releases>
<enabled>false</enabled>
</releases>
<snapshots>
<enabled>true</enabled>
</snapshots>
</repository>
</repositories>
<pluginRepositories>
<pluginRepository>
<id>maven.snapshots</id>
<name>Maven Central Snapshot Repository</name>
<url>https://oss.sonatype.org/content/repositories/snapshots/</url>
<releases>
<enabled>false</enabled>
</releases>
<snapshots>
<enabled>true</enabled>
</snapshots>
</pluginRepository>
</pluginRepositories>
<dependencyManagement>
<dependencies>
<dependency>
<groupId>org.junit.jupiter</groupId>
<artifactId>junit-jupiter</artifactId>
<version>5.4.2</version>
</dependency>
<dependency>
<groupId>org.mockito</groupId>
<artifactId>mockito-core</artifactId>
<version>2.23.4</version>
</dependency>
<dependency>
<groupId>com.microsoft.azure.functions</groupId>
<artifactId>azure-functions-java-library</artifactId>
<version>${azure.functions.java.library.version}</version>
</dependency>
</dependencies>
</dependencyManagement>
<dependencies>
<dependency>
<groupId>com.microsoft.azure.functions</groupId>
<artifactId>azure-functions-java-library</artifactId>
</dependency>
<!-- Test -->
<dependency>
<groupId>org.junit.jupiter</groupId>
<artifactId>junit-jupiter</artifactId>
<scope>test</scope>
</dependency>
<dependency>
<groupId>org.mockito</groupId>
<artifactId>mockito-core</artifactId>
<scope>test</scope>
</dependency>
</dependencies>
<build>
<pluginManagement>
<plugins>
<plugin>
<groupId>com.microsoft.azure</groupId>
<artifactId>azure-functions-maven-plugin</artifactId>
<version>${azure.functions.maven.plugin.version}</version>
</plugin>
<plugin>
<groupId>org.apache.maven.plugins</groupId>
<artifactId>maven-resources-plugin</artifactId>
<version>3.1.0</version>
</plugin>
<plugin>
<groupId>org.apache.maven.plugins</groupId>
<artifactId>maven-dependency-plugin</artifactId>
<version>3.1.1</version>
</plugin>
<plugin>
<groupId>org.apache.maven.plugins</groupId>
<artifactId>maven-clean-plugin</artifactId>
<version>3.1.0</version>
</plugin>
</plugins>
</pluginManagement>
<plugins>
<plugin>
<groupId>com.microsoft.azure</groupId>
<artifactId>azure-functions-maven-plugin</artifactId>
<configuration>
<!-- function app name -->
<appName>${functionAppName}</appName>
<!-- function app resource group -->
<resourceGroup>java-functions-group</resourceGroup>
<!-- function app service plan name -->
<appServicePlanName>java-functions-app-service-plan</appServicePlanName>
<!-- function app region-->
<!-- refers https://github.com/microsoft/azure-maven-plugins/tree/develop/azure-functions-maven-plugin#supported-regions for all valid values -->
<region>westus</region>
<!-- function pricingTier, default to be consumption if not specified -->
<!-- refers https://github.com/microsoft/azure-maven-plugins/tree/develop/azure-functions-maven-plugin#supported-pricing-tiers for all valid values -->
<!-- <pricingTier></pricingTier> -->
<runtime>
<!-- runtime os, could be windows, linux or docker-->
<os>windows</os>
<!-- for docker function, please set the following parameters -->
<!-- <image>[hub-user/]repo-name[:tag]</image> -->
<!-- <serverId></serverId> -->
<!-- <registryUrl></registryUrl> -->
</runtime>
<appSettings>
<property>
<name>FUNCTIONS_EXTENSION_VERSION</name>
<value>~3</value>
</property>
</appSettings>
</configuration>
<executions>
<execution>
<id>package-functions</id>
<goals>
<goal>package</goal>
</goals>
</execution>
</executions>
</plugin>
<plugin>
<groupId>org.apache.maven.plugins</groupId>
<artifactId>maven-resources-plugin</artifactId>
<executions>
<execution>
<id>copy-resources</id>
<phase>package</phase>
<goals>
<goal>copy-resources</goal>
</goals>
<configuration>
<overwrite>true</overwrite>
<outputDirectory>${stagingDirectory}</outputDirectory>
<resources>
<resource>
<directory>${project.basedir}</directory>
<includes>
<include>host.json</include>
<include>local.settings.json</include>
</includes>
</resource>
</resources>
</configuration>
</execution>
</executions>
</plugin>
<plugin>
<groupId>org.apache.maven.plugins</groupId>
<artifactId>maven-dependency-plugin</artifactId>
<executions>
<execution>
<id>copy-dependencies</id>
<phase>prepare-package</phase>
<goals>
<goal>copy-dependencies</goal>
</goals>
<configuration>
<outputDirectory>${stagingDirectory}/lib</outputDirectory>
<overWriteReleases>false</overWriteReleases>
<overWriteSnapshots>false</overWriteSnapshots>
<overWriteIfNewer>true</overWriteIfNewer>
<includeScope>runtime</includeScope>
<excludeArtifactIds>azure-functions-java-library</excludeArtifactIds>
</configuration>
</execution>
</executions>
</plugin>
<!--Remove obj folder generated by .NET SDK in maven clean-->
<plugin>
<artifactId>maven-clean-plugin</artifactId>
<version>3.1.0</version>
<configuration>
<filesets>
<fileset>
<directory>obj</directory>
</fileset>
</filesets>
</configuration>
</plugin>
</plugins>
</build>
</project>
In most cases, you should choose func azure functionapp publish <FunctionAppName>
to deploy your function app. First, create a FunctionApp on Azure, and then deploy to this App. This is the doc:
通过集体智慧和协作来改善编程学习和解决问题的方式。致力于成为全球开发者共同参与的知识库,让每个人都能够通过互相帮助和分享经验来进步。
评论