aws-cloudformation - 为 ECS 中运行的架构注册表实例提供主机名

标签 aws-cloudformation confluent-schema-registry aws-msk

我正在使用 ECS 集群为我们的 MSK Kafka 集群构建托管在 Amazon 中的冗余架构注册表。

SchemaRegistry TaskDefinition 需要定义一个主机名,该主机名在运行时对于每个任务都是唯一的。

SchemaRegistryTaskDefinition:
    Type: AWS::ECS::TaskDefinition
    Properties:
      Family: !Ref SchemaRegistryTaskName
      RequiresCompatibilities: [ EC2 ]
      NetworkMode: bridge
      Cpu: !Ref CPUReservation
      Memory: !Ref MemoryReservation
      Volumes: []
      ContainerDefinitions:
        - Name: !Ref SchemaRegistryTaskName
          Image: !Ref SchemaRegistryTaskImage
          Essential: true
          PortMappings:
            - ContainerPort: !Ref SchemaRegistryPort
              HostPort: 0 # Randomly assigned port from the ephemeral port range.
          Environment:
            - Name: AWS_DEFAULT_REGION
              Value: !Ref AWS::Region
            - Name: SCHEMA_REGISTRY_KAFKASTORE_BOOTSTRAP_SERVERS
              Value: !Ref MskBrokerUrls
            - Name: SCHEMA_REGISTRY_HOST_NAME
              Value: $HOSTNAME
          LogConfiguration:
            LogDriver: awslogs
            Options:
              awslogs-group: !Ref 'CloudwatchLogsGroup'
              awslogs-region: !Ref 'AWS::Region'

注意:当通过 cli 直接在 EC2 实例中运行 docker 容器时,使用 $Hostname 是有效的,因为 shell 会替换唯一的完全限定主机名;但我很难弄清楚如何在 ECS 和 CloudFormation 中实现这项工作。

最佳答案

我所做的是在 Docker 镜像中添加 entrypoint 脚本,该脚本将从 ECS 元数据中进行查找,并将值公开为环境 SCHEMA_REGISTRY_HOST_NAME。请找到下面的示例脚本。

#!/bin/sh

#########
# Detect whether this is running in an ECS cluster
#########
curl --max-time 1 -s --fail -o /dev/null http://169.254.169.254/
if [[ 0 -eq $? ]]; then
    echo "AWS environment was detected - looking up HOST IP from metadata"
    SCHEMA_REGISTRY_HOST_NAME=$(curl http://169.254.169.254/latest/meta-data/local-ipv4 -s)
    export SCHEMA_REGISTRY_HOST_NAME
else
    echo "Not running in AWS environment. Will not set SCHEMA_REGISTRY_HOST_NAME"
fi

您还可以看看这个one以及如何进行本地测试/开发。

关于aws-cloudformation - 为 ECS 中运行的架构注册表实例提供主机名,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/58763901/

相关文章:

java - 如何使用 Apache Beam (KafkaIO) 反序列化 avro 数据

docker - Kafka-从命令行生成时出错(字符('<'(代码60)):应为有效值)

python - 使用 python 脚本和 boto3 创建 MSK 主题

amazon-web-services - 如何在CloudFormation yaml模板中引用现有资源?

apache-spark - 将Spark结构化流与Confluent Schema Registry集成

java - AWS Kafka (MSK) - 如何生成 keystore 和信任库并在我的 Spring Cloud Stream 应用程序中使用它们?

makefile - 使用 Makefile 和 JSON 自动检索 MSK 详细信息

amazon-web-services - AWS云信息错误: Deploy error with ImageID

amazon-web-services - 如何将存储库资源作为参数传递给 AWS codepipeline 模板?

amazon-web-services - AWS 云形成 : The security group 'sg-' does not exist in default VPC 'vpc'