자습서: 개발을 위한 Apache Kafka 서비스 만들기 및 사용
이 문서의 내용
Azure Container Apps를 사용하면 개발 및 프로덕션 등급 서비스에 연결하여 애플리케이션에 다양한 기능을 제공할 수 있습니다.
이 자습서에서는 개발 Apache Kafka 서비스를 만들고 사용하는 방법을 알아봅니다.
이 자습서에서는 Azure CLI 명령과 Bicep 템플릿 조각을 소개합니다. Bicep을 사용하는 경우 모든 조각을 단일 Bicep 파일에 추가하고 템플릿을 모두 한 번에 배포 할 수 있습니다.
서비스 및 컨테이너 앱을 배포하기 위한 Container Apps 환경 만들기
Apache Kafka 서비스 만들기
개발 Apache Kafka 서비스를 사용하도록 명령줄 앱 설정
kafka-ui 앱을 배포하여 애플리케이션 데이터 보기
일관되고 예측 가능한 템플릿 배포를 사용하여 모든 리소스를 배포하는 최종 bicep 템플릿을 컴파일합니다.
모든 리소스의 하나의 명령 배포에 azd
템플릿 사용
필수 조건
참고 항목
단일 명령 배포의 경우 마지막 azd
템플릿 단계 로 건너뜁니다.
설정
공통 값에 대한 변수를 정의합니다.
RESOURCE_GROUP="kafka-dev"
LOCATION="northcentralus"
ENVIRONMENT="aca-env"
KAFKA_SVC="kafka01"
KAFKA_CLI_APP="kafka-cli-app"
KAFKA_UI_APP="kafka-ui-app"
다음 변수를 통해 CLI를 사용하여 Bicep 템플릿을 배포할 수 있습니다.
RESOURCE_GROUP="kafka-dev"
LOCATION="northcentralus"
Bicep의 경우 kafka-dev.bicep
이라는 파일을 만들어 시작한 후, 다음 기본값을 사용하여 매개 변수를 추가합니다.
targetScope = 'resourceGroup'
param location string = resourceGroup().location
param appEnvironmentName string = 'aca-env'
param kafkaSvcName string = 'kafka01'
param kafkaCliAppName string = 'kafka-cli-app'
param kafkaUiAppName string = 'kafka-ui'
어느 단계에서나 bicep 템플릿을 배포할 때 az deployment group create
명령을 사용할 수 있습니다.
az deployment group create -g $RESOURCE_GROUP \
--query 'properties.outputs.*.value' \
--template-file kafka-dev.bicep
초기 변수를 정의합니다.
AZURE_ENV_NAME="azd-kafka-dev"
LOCATION="northcentralus"
값을 사용하여 최소 azd
템플릿을 초기화합니다.
azd init \
--environment "$AZURE_ENV_NAME" \
--location "$LOCATION" \
--no-prompt
참고 항목
AZURE_ENV_NAME
은 컨테이너 앱 환경 이름과 다릅니다. 이 컨텍스트에서 azd
의 AZURE_ENV_NAME
은 템플릿의 모든 리소스에 대한 것입니다. 이러한 리소스에는 Container Apps와 연결되지 않은 리소스가 포함됩니다. Container Apps 환경에 대해 다른 이름을 만듭니다.
다음으로, infra/main.bicep
을 만들고 나중에 사용할 수 있도록 매개 변수를 정의합니다.
param appEnvironmentName string = 'aca-env'
param kafkaSvcName string = 'kafka01'
param kafkaCliAppName string = 'kafka-cli-app'
param kafkaUiAppName string = 'kafka-ui'
Azure에 로그인합니다.
az login
CLI를 최신 버전으로 업그레이드합니다.
az upgrade
Bicep을 최신 버전으로 업그레이드합니다.
az bicep upgrade
containerapp
확장자를 추가합니다.
az extension add --name containerapp --upgrade
필수 네임스페이스를 등록합니다.
az provider register --namespace Microsoft.App
az provider register --namespace Microsoft.OperationalInsights
컨테이너 앱 환경 만들기
리소스 그룹을 만듭니다.
az group create \
--name "$RESOURCE_GROUP" \
--location "$LOCATION"
az group create \
--name "$RESOURCE_GROUP" \
--location "$LOCATION"
azd
에서 리소스 그룹을 관리하는 데 특별한 설정이 필요하지 않습니다. azd
명령은 AZURE_ENV_NAME
/--environment
값에서 리소스 그룹을 가져옵니다.
up
명령을 사용하여 최소 템플릿을 테스트할 수 있습니다.
azd up
이 명령을 실행하면 빈 리소스 그룹이 만들어집니다.
컨테이너 앱 환경을 만듭니다.
az containerapp env create \
--name "$ENVIRONMENT" \
--resource-group "$RESOURCE_GROUP" \
--location "$LOCATION"
다음 값을 kafka-dev.bicep
파일에 추가합니다.
resource appEnvironment 'Microsoft.App/managedEnvironments@2023-04-01-preview' = {
name: appEnvironmentName
location: location
properties: {
appLogsConfiguration: {
destination: 'azure-monitor'
}
}
}
Azure CLI는 각 환경에 대한 Log Analytics 작업 영역을 자동으로 만듭니다. Bicep 템플릿을 사용하여 작업 영역을 생성하려면 환경을 명시적으로 선언하고 템플릿에 해당 환경에 연결합니다. 이 단계를 사용하면 약간 장황해지더라도 배포가 더욱 안정적으로 이루어집니다.
환경에 다음 값을 추가합니다.
resource logAnalytics 'Microsoft.OperationalInsights/workspaces@2022-10-01' = {
name: '${appEnvironmentName}-log-analytics'
location: location
properties: {
sku: {
name: 'PerGB2018'
}
}
}
resource appEnvironment 'Microsoft.App/managedEnvironments@2023-04-01-preview' = {
name: appEnvironmentName
location: location
properties: {
appLogsConfiguration: {
destination: 'log-analytics'
logAnalyticsConfiguration: {
customerId: logAnalytics.properties.customerId
sharedKey: logAnalytics.listKeys().primarySharedKey
}
}
}
}
azd
에서 사용하는 템플릿은 bicep 모듈 을 사용합니다.
./infra/core/host
라는 폴더를 만든 후, 다음 콘텐츠로 ./infra/core/host/container-apps-environment.bicep
모듈을 만듭니다.
param name string
param location string = resourceGroup().location
param tags object = {}
resource logAnalytics 'Microsoft.OperationalInsights/workspaces@2022-10-01' = {
name: '${name}-log-analytics'
location: location
tags: tags
properties: {
sku: {
name: 'PerGB2018'
}
}
}
resource appEnvironment 'Microsoft.App/managedEnvironments@2023-04-01-preview' = {
name: name
location: location
tags: tags
properties: {
appLogsConfiguration: {
destination: 'log-analytics'
logAnalyticsConfiguration: {
customerId: logAnalytics.properties.customerId
sharedKey: logAnalytics.listKeys().primarySharedKey
}
}
}
}
output appEnvironmentId string = appEnvironment.id
./infra/main.bicep
파일에서 다음 값을 사용하여 모듈을 로드합니다.
module appEnvironment './core/host/container-apps-environment.bicep' = {
name: 'appEnvironment'
scope: rg
params: {
name: appEnvironmentName
location: location
tags: tags
}
}
템플릿을 배포하려면 azd up
를 실행합니다.
Apache Kafka 서비스 만들기
Apache Kafka 서비스를 만듭니다.
ENVIRONMENT_ID=$(az containerapp env show \
--name "$ENVIRONMENT" \
--resource-group "$RESOURCE_GROUP" \
--output tsv \
--query id)
kafka-dev.bicep
에 다음 값을 추가합니다.
resource kafka 'Microsoft.App/containerApps@2023-04-01-preview' = {
name: kafkaSvcName
location: location
properties: {
environmentId: appEnvironment.id
configuration: {
service: {
type: 'kafka'
}
}
}
}
output kafkaLogs string = 'az containerapp logs show -n ${kafka.name} -g ${resourceGroup().name} --follow --tail 30'
다음 콘텐츠로 ./infra/core/host/container-app-service.bicep
모듈 파일을 만듭니다.
param name string
param location string = resourceGroup().location
param tags object = {}
param environmentId string
param serviceType string
resource service 'Microsoft.App/containerApps@2023-04-01-preview' = {
name: name
location: location
tags: tags
properties: {
environmentId: environmentId
configuration: {
service: {
type: serviceType
}
}
}
}
output serviceId string = service.id
그런 다음, ./infra/main.bicep
모듈 파일을 다음 선언으로 업데이트합니다.
module kafka './core/host/container-app-service.bicep' = {
name: 'kafka'
scope: rg
params: {
name: kafkaSvcName
location: location
tags: tags
environmentId: appEnvironment.outputs.appEnvironmentId
serviceType: 'kafka'
}
}
템플릿을 배포합니다.
az containerapp add-on kafka create \
--name "$KAFKA_SVC" \
--resource-group "$RESOURCE_GROUP" \
--environment "$ENVIRONMENT"
az deployment group create -g $RESOURCE_GROUP \
--query 'properties.outputs.*.value' \
--template-file kafka-dev.bicep
팁
출력 kafkaLogs
는 배포가 완료된 후 kafka 로그를 보는 데 도움이 되는 CLI 명령을 출력합니다. 명령을 실행하여 새 Kafka 서비스의 초기화 로그를 볼 수 있습니다.
Kafka 인스턴스에서 로그 출력 보기
로그 메시지를 보려면 logs
명령을 사용합니다.
az containerapp logs show \
--name $KAFKA_SVC \
--resource-group $RESOURCE_GROUP \
--follow --tail 30
이전 Bicep 예제에는 로그를 보는 명령에 대한 출력이 포함되어 있습니다.
예시:
[
"az containerapp logs show -n kafka01 -g kafka-dev --follow --tail 30"
]
해당 명령이 없으면 서비스 이름을 사용하여 CLI를 통해 로그를 볼 수 있습니다.
az containerapp logs show \
--name $KAFKA_SVC \
--resource-group $RESOURCE_GROUP \
--follow --tail 30
로그 메시지를 보려면 logs
명령을 사용합니다.
az containerapp logs show \
--name kafka01 \
--resource-group $RESOURCE_GROUP \
--follow --tail 30
서비스를 테스트하기 위한 앱 만들기
앱을 만들 때 ./kafka-topics.sh
, ./kafka-console-producer.sh
및 kafka-console-consumer.sh
를 사용하여 Kafka 인스턴스에 연결하도록 설정합니다.
Kafka 서비스에 바인딩되는 kafka-cli-app
앱을 만듭니다.
az containerapp create \
--name "$KAFKA_CLI_APP" \
--image mcr.microsoft.com/k8se/services/kafka:3.4 \
--bind "$KAFKA_SVC" \
--environment "$ENVIRONMENT" \
--resource-group "$RESOURCE_GROUP" \
--min-replicas 1 \
--max-replicas 1 \
--command "/bin/sleep" "infinity"
kafka-dev.bicep
값에 다음을 추가합니다.
resource kafkaCli 'Microsoft.App/containerApps@2023-04-01-preview' = {
name: kafkaCliAppName
location: location
properties: {
environmentId: appEnvironment.id
template: {
serviceBinds: [
{
serviceId: kafka.id
}
]
containers: [
{
name: 'kafka-cli'
image: 'mcr.microsoft.com/k8se/services/kafka:3.4'
command: [ '/bin/sleep', 'infinity' ]
}
]
scale: {
minReplicas: 1
maxReplicas: 1
}
}
}
}
output kafkaCliExec string = 'az containerapp exec -n ${kafkaCli.name} -g ${resourceGroup().name} --command /bin/bash'
팁
kafkaCliExec
출력은 애플리케이션이 올바르게 배포되었는지 확인하기 위해 실행할 수 있는 CLI 명령을 출력합니다.
./infra/core/host/container-app.bicep
아래에 모듈을 만들고 다음 값을 추가합니다.
param name string
param location string = resourceGroup().location
param tags object = {}
param environmentId string
param serviceId string = ''
param containerName string
param containerImage string
param containerCommands array = []
param containerArgs array = []
param minReplicas int
param maxReplicas int
param targetPort int = 0
param externalIngress bool = false
resource app 'Microsoft.App/containerApps@2023-04-01-preview' = {
name: name
location: location
tags: tags
properties: {
environmentId: environmentId
configuration: {
ingress: targetPort > 0 ? {
targetPort: targetPort
external: externalIngress
} : null
}
template: {
serviceBinds: !empty(serviceId) ? [
{
serviceId: serviceId
}
] : null
containers: [
{
name: containerName
image: containerImage
command: !empty(containerCommands) ? containerCommands : null
args: !empty(containerArgs) ? containerArgs : null
}
]
scale: {
minReplicas: minReplicas
maxReplicas: maxReplicas
}
}
}
}
이제 다음 값을 추가하여 ./infra/main.bicep
의 모듈을 사용합니다.
module kafkaCli './core/host/container-app.bicep' = {
name: 'kafkaCli'
scope: rg
params: {
name: kafkaCliAppName
location: location
tags: tags
environmentId: appEnvironment.outputs.appEnvironmentId
serviceId: kafka.outputs.serviceId
containerImage: 'mcr.microsoft.com/k8se/services/kafka:3.4'
containerName: 'kafka-cli'
maxReplicas: 1
minReplicas: 1
containerCommands: [ '/bin/sleep', 'infinity' ]
}
}
azd up
을 사용하여 템플릿을 배포합니다.
azd up
CLI exec
명령을 실행하여 테스트 앱에 연결합니다.
az containerapp exec \
--name $KAFKA_CLI_APP \
--resource-group $RESOURCE_GROUP \
--command /bin/bash
이전 Bicep 예에는 앱 실행 방법을 보여 주는 출력이 포함되어 있습니다.
예시:
[
"az containerapp logs show -n kafka01 -g kafka-dev --follow --tail 30",
"az containerapp exec -n kafka-cli-app -g kafka-dev --command /bin/bash"
]
명령이 없으면 앱 이름을 사용하여 exec
명령을 통해 애플리케이션을 실행할 수 있습니다.
az containerapp exec \
--name $KAFKA_CLI_APP \
--resource-group $RESOURCE_GROUP \
--command /bin/bash
az containerapp exec \
--name kafka-cli-app \
--resource-group $RESOURCE_GROUP \
--command /bin/bash
테스트 앱에서 --bind
또는 serviceBinds
를 사용하면 연결 정보가 애플리케이션 환경에 삽입됩니다. 테스트 컨테이너에 연결하면 env
명령을 사용하여 값을 검사할 수 있습니다.
env | grep "^KAFKA_"
KAFKA_SECURITYPROTOCOL=SASL_PLAINTEXT
KAFKA_BOOTSTRAPSERVER=kafka01:9092
KAFKA_HOME=/opt/kafka
KAFKA_PROPERTIES_SASL_JAAS_CONFIG=org.apache.kafka.common.security.plain.PlainLoginModule required username="kafka-user" password="7dw..." user_kafka-user="7dw..." ;
KAFKA_BOOTSTRAP_SERVERS=kafka01:9092
KAFKA_SASLUSERNAME=kafka-user
KAFKA_SASL_USER=kafka-user
KAFKA_VERSION=3.4.0
KAFKA_SECURITY_PROTOCOL=SASL_PLAINTEXT
KAFKA_SASL_PASSWORD=7dw...
KAFKA_SASLPASSWORD=7dw...
KAFKA_SASL_MECHANISM=PLAIN
KAFKA_SASLMECHANISM=PLAIN
kafka-topics.sh
를 사용하여 이벤트 토픽을 만듭니다.
kafka.props
파일을 만듭니다.
echo "security.protocol=$KAFKA_SECURITY_PROTOCOL" >> kafka.props && \
echo "sasl.mechanism=$KAFKA_SASL_MECHANISM" >> kafka.props && \
echo "sasl.jaas.config=$KAFKA_PROPERTIES_SASL_JAAS_CONFIG" >> kafka.props
quickstart-events
이벤트 토픽을 만듭니다.
/opt/kafka/bin/kafka-topics.sh \
--create --topic quickstart-events \
--bootstrap-server $KAFKA_BOOTSTRAP_SERVERS \
--command-config kafka.props
# Created topic quickstart-events.
/opt/kafka/bin/kafka-topics.sh \
--describe --topic quickstart-events \
--bootstrap-server $KAFKA_BOOTSTRAP_SERVERS \
--command-config kafka.props
# Topic: quickstart-events TopicId: lCkTKmvZSgSUCHozhhvz1Q PartitionCount: 1 ReplicationFactor: 1 Configs: segment.bytes=1073741824
# Topic: quickstart-events Partition: 0 Leader: 1 Replicas: 1 Isr: 1
kafka-console-producer.sh
를 사용하여 토픽에 이벤트를 작성합니다.
/opt/kafka/bin/kafka-console-producer.sh \
--topic quickstart-events \
--bootstrap-server $KAFKA_BOOTSTRAP_SERVERS \
--producer.config kafka.props
> this is my first event
> this is my second event
> this is my third event
> CTRL-C
참고 항목
./kafka-console-producer.sh
명령은 >
를 사용하여 이벤트를 작성하라는 메시지를 표시합니다. 표시된 대로 일부 이벤트를 작성한 다음, CTRL-C
를 눌러 종료합니다.
kafka-console-consumer.sh
를 사용하여 토픽에서 이벤트를 읽습니다.
/opt/kafka/bin/kafka-console-consumer.sh \
--topic quickstart-events \
--bootstrap-server $KAFKA_BOOTSTRAP_SERVERS \
--from-beginning \
--consumer.config kafka.props
# this is my first event
# this is my second event
# this is my third event
기존 앱과 함께 개발 서비스 사용
Apache Kafka를 사용하는 앱이 이미 있는 경우 연결 정보를 로드하는 방법을 변경할 수 있습니다.
먼저 다음 환경 변수를 만듭니다.
KAFKA_HOME=/opt/kafka
KAFKA_PROPERTIES_SASL_JAAS_CONFIG=org.apache.kafka.common.security.plain.PlainLoginModule required username="kafka-user" password="7dw..." user_kafka-user="7dw..." ;
KAFKA_BOOTSTRAP_SERVERS=kafka01:9092
KAFKA_SASL_USER=kafka-user
KAFKA_VERSION=3.4.0
KAFKA_SECURITY_PROTOCOL=SASL_PLAINTEXT
KAFKA_SASL_PASSWORD=7dw...
KAFKA_SASL_MECHANISM=PLAIN
CLI(또는 Bicep)를 사용하면 앱을 업데이트하여 개발 서비스를 사용하도록 --bind $KAFKA_SVC
를 추가할 수 있습니다.
개발 서비스에 바인딩
kafka-ui 를 배포하여 Kafka 인스턴스를 보고 관리합니다.
resource kafkaUi 'Microsoft.App/containerApps@2023-04-01-preview' = {
name: kafkaUiAppName
location: location
properties: {
environmentId: appEnvironment.id
configuration: {
ingress: {
external: true
targetPort: 8080
}
}
template: {
serviceBinds: [
{
serviceId: kafka.id
name: 'kafka'
}
]
containers: [
{
name: 'kafka-ui'
image: 'docker.io/provectuslabs/kafka-ui:latest'
command: [
'/bin/sh'
]
args: [
'-c'
'''export KAFKA_CLUSTERS_0_BOOTSTRAPSERVERS="$KAFKA_BOOTSTRAP_SERVERS" && \
export KAFKA_CLUSTERS_0_PROPERTIES_SASL_JAAS_CONFIG="$KAFKA_PROPERTIES_SASL_JAAS_CONFIG" && \
export KAFKA_CLUSTERS_0_PROPERTIES_SASL_MECHANISM="$KAFKA_SASL_MECHANISM" && \
export KAFKA_CLUSTERS_0_PROPERTIES_SECURITY_PROTOCOL="$KAFKA_SECURITY_PROTOCOL" && \
java $JAVA_OPTS -jar kafka-ui-api.jar'''
]
resources: {
cpu: json('1.0')
memory: '2.0Gi'
}
}
]
}
}
}
output kafkaUiUrl string = 'https://${kafkaUi.properties.configuration.ingress.fqdn}'
Bicep 명령은 URL을 반환합니다. 배포된 사이트를 방문하려면 이 URL을 브라우저에 복사합니다.
다음 값으로 ./infra/main.bicep
을 업데이트합니다.
module kafkaUi './core/host/container-app.bicep' = {
name: 'kafka-ui'
scope: rg
params: {
name: kafkaUiAppName
location: location
tags: tags
environmentId: appEnvironment.outputs.appEnvironmentId
serviceId: kafka.outputs.serviceId
containerImage: 'docker.io/provectuslabs/kafka-ui:latest'
containerName: 'kafka-ui'
maxReplicas: 1
minReplicas: 1
containerCommands: [ '/bin/sh' ]
containerArgs: [
'-c'
'''export KAFKA_CLUSTERS_0_BOOTSTRAPSERVERS="$KAFKA_BOOTSTRAP_SERVERS" && \
export KAFKA_CLUSTERS_0_PROPERTIES_SASL_JAAS_CONFIG="$KAFKA_PROPERTIES_SASL_JAAS_CONFIG" && \
export KAFKA_CLUSTERS_0_PROPERTIES_SASL_MECHANISM="$KAFKA_SASL_MECHANISM" && \
export KAFKA_CLUSTERS_0_PROPERTIES_SECURITY_PROTOCOL="$KAFKA_SECURITY_PROTOCOL" && \
java $JAVA_OPTS -jar kafka-ui-api.jar'''
]
targetPort: 8080
externalIngress: true
}
}
azd up
을 사용하여 템플릿을 배포합니다.
azd up
모든 리소스 배포
모든 리소스를 한 번에 배포하려면 다음 예를 사용합니다.
Bicep
다음 Bicep 템플릿에는 이 자습서의 모든 리소스가 포함되어 있습니다.
이 콘텐츠로 kafka-dev.bicep
파일을 만들 수 있습니다.
targetScope = 'resourceGroup'
param location string = resourceGroup().location
param appEnvironmentName string = 'aca-env'
param kafkaSvcName string = 'kafka01'
param kafkaCliAppName string = 'kafka-cli-app'
param kafkaUiAppName string = 'kafka-ui'
resource logAnalytics 'Microsoft.OperationalInsights/workspaces@2022-10-01' = {
name: '${appEnvironmentName}-log-analytics'
location: location
properties: {
sku: {
name: 'PerGB2018'
}
}
}
resource appEnvironment 'Microsoft.App/managedEnvironments@2023-04-01-preview' = {
name: appEnvironmentName
location: location
properties: {
appLogsConfiguration: {
destination: 'log-analytics'
logAnalyticsConfiguration: {
customerId: logAnalytics.properties.customerId
sharedKey: logAnalytics.listKeys().primarySharedKey
}
}
}
}
resource kafka 'Microsoft.App/containerApps@2023-04-01-preview' = {
name: kafkaSvcName
location: location
properties: {
environmentId: appEnvironment.id
configuration: {
service: {
type: 'kafka'
}
}
}
}
resource kafkaCli 'Microsoft.App/containerApps@2023-04-01-preview' = {
name: kafkaCliAppName
location: location
properties: {
environmentId: appEnvironment.id
template: {
serviceBinds: [
{
serviceId: kafka.id
}
]
containers: [
{
name: 'kafka-cli'
image: 'mcr.microsoft.com/k8se/services/kafka:3.4'
command: [ '/bin/sleep', 'infinity' ]
}
]
scale: {
minReplicas: 1
maxReplicas: 1
}
}
}
}
resource kafkaUi 'Microsoft.App/containerApps@2023-04-01-preview' = {
name: kafkaUiAppName
location: location
properties: {
environmentId: appEnvironment.id
configuration: {
ingress: {
external: true
targetPort: 8080
}
}
template: {
serviceBinds: [
{
serviceId: kafka.id
name: 'kafka'
}
]
containers: [
{
name: 'kafka-ui'
image: 'docker.io/provectuslabs/kafka-ui:latest'
command: [
'/bin/sh'
]
args: [
'-c'
'''export KAFKA_CLUSTERS_0_BOOTSTRAPSERVERS="$KAFKA_BOOTSTRAP_SERVERS" && \
export KAFKA_CLUSTERS_0_PROPERTIES_SASL_JAAS_CONFIG="$KAFKA_PROPERTIES_SASL_JAAS_CONFIG" && \
export KAFKA_CLUSTERS_0_PROPERTIES_SASL_MECHANISM="$KAFKA_SASL_MECHANISM" && \
export KAFKA_CLUSTERS_0_PROPERTIES_SECURITY_PROTOCOL="$KAFKA_SECURITY_PROTOCOL" && \
java $JAVA_OPTS -jar kafka-ui-api.jar'''
]
resources: {
cpu: json('1.0')
memory: '2.0Gi'
}
}
]
}
}
}
output kafkaUiUrl string = 'https://${kafkaUi.properties.configuration.ingress.fqdn}'
output kafkaCliExec string = 'az containerapp exec -n ${kafkaCli.name} -g ${resourceGroup().name} --command /bin/bash'
output kafkaLogs string = 'az containerapp logs show -n ${kafka.name} -g ${resourceGroup().name} --follow --tail 30'
Azure CLI를 사용하여 템플릿을 배포합니다.
RESOURCE_GROUP="kafka-dev"
LOCATION="northcentralus"
az group create \
--name "$RESOURCE_GROUP" \
--location "$LOCATION"
az deployment group create -g $RESOURCE_GROUP \
--query 'properties.outputs.*.value' \
--template-file kafka-dev.bicep
Azure 개발자 CLI
최종 템플릿 은 GitHub에서 사용할 수 있습니다.
azd up
을 사용하여 템플릿을 배포합니다.
git clone https://github.com/Azure-Samples/aca-dev-service-kafka-azd
cd aca-dev-service-kafka-azd
azd up
리소스 정리
완료되면 다음 명령을 실행하여 Container Apps 리소스가 포함된 리소스 그룹을 삭제합니다.
주의
다음 명령은 지정된 리소스 그룹과 그 안에 포함된 모든 리소스를 삭제합니다. 지정된 리소스 그룹에 이 자습서의 범위에 속하지 않는 리소스가 포함된 경우 해당 리소스도 삭제됩니다.
az group delete \
--resource-group $RESOURCE_GROUP