Warning: file_get_contents(/data/phpspider/zhask/data//catemap/1/amazon-web-services/13.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Amazon web services 没有加载libssl.so.1.0.0的文件或目录_Amazon Web Services_Go_Apache Kafka_Aws Lambda - Fatal编程技术网

Amazon web services 没有加载libssl.so.1.0.0的文件或目录

Amazon web services 没有加载libssl.so.1.0.0的文件或目录,amazon-web-services,go,apache-kafka,aws-lambda,Amazon Web Services,Go,Apache Kafka,Aws Lambda,我正在尝试在AWS上进行我的第一次尝试: 我的代码很简单: package main import ( "bufio" "context" "fmt" "github.com/aws/aws-lambda-go/events" "github.com/aws/aws-lambda-go/lambda" "github.com/confluentinc/confluent-kafka-go/kafka" "github.com/dround

我正在尝试在AWS上进行我的第一次尝试:

我的代码很简单:

package main

import (
    "bufio"
    "context"
    "fmt"
    "github.com/aws/aws-lambda-go/events"
    "github.com/aws/aws-lambda-go/lambda"
    "github.com/confluentinc/confluent-kafka-go/kafka"
    "github.com/droundy/goopt"
    "os"
    "path/filepath"
)

func badUsage() {
    fmt.Println(goopt.Usage())
    os.Exit(1)
}

func HandleRequest(ctx context.Context, s3Event events.S3Event) {
    for _, record := range s3Event.Records {
        s3 := record.S3
        fmt.Printf("[%s - %s] Bucket = %s, Key = %s \n", record.EventSource, record.EventTime, s3.Bucket.Name, s3.Object.Key)
    }
}

func main() {
    lambda.Start(HandleRequest)
}
注1:我有一些函数使用卡夫卡在卡夫卡中生成一些消息

我在自己的电脑上编译它:

GOOS=linux GOARCH=amd64 go build -tags static -o goklog producer.go
但我总是有一些问题,比如(在cloudwatch上):

编辑2:
我在想你们都不稳定。我试过了,我得到了:

➜  goklog git:(master) ✗ GOOS=linux GOARCH=amd64 go build -tags static_all
# github.com/confluentinc/confluent-kafka-go/kafka
/usr/lib/librdkafka.a(rddl.o): In function `rd_dl_open0':
/home/maathor/dev/librdkafka/src/rddl.c:80: warning: Using 'dlopen' in statically linked applications requires at runtime the shared libraries from the glibc version used for linking
/usr/lib/librdkafka.a(rdaddr.o): In function `rd_getaddrinfo':
/home/maathor/dev/librdkafka/src/rdaddr.c:168: warning: Using 'getaddrinfo' in statically linked applications requires at runtime the shared libraries from the glibc version used for linking
# github.com/confluentinc/confluent-kafka-go/kafka
cannot load imported symbols from ELF file $WORK/github.com/confluentinc/confluent-kafka-go/kafka/_obj/_cgo_.o: no symbol section

这是因为您使用了“github.com/confluent inc/confluent kafka go/kafka”包。这一个需要C库,它假设您的机器上有某些库(如libssl库)可用(请参阅链接中“需求”下的页面)。

我建议在一个类似lambda的docker映像上构建lambda包,如


这样,您构建的librdkafka将依赖于lambda目标主机上可用的相同库。

RC is AWS lambda仅支持glibc运行时动态链接,但librdkafka具有sasl2、openssl、zlib、zstd动态依赖关系。 即使您使用
go build-tags static-o goklog producer.go
来确保librdkafka是静态链接到二进制的,上面4个依赖项也需要动态链接

解决方案: 1.使用
/configure--install deps--source deps only--prefix=/usr&&make&&make install编译librdkafka

  • 编译静态librdkafka以生成libssl.a和libzstd.a
    /configure--启用静态--安装deps--仅源deps--前缀=/usr&&make

  • 编译zlib和cyrus sasl以生成libz.a和libsasl2.a

  • 使用设置LD PATH和PKG路径
  • 将所有.a文件复制到lib文件夹中
  • 建造
  • ldd检查动态链接

  • 顺便说一句,不确定它是否会修复它,但是你可以尝试使用
    static\u all
    build标记,而不是
    static
    标记。我认为static\u all不稳定。我在问题中添加了输出
    ➜  goklog git:(master) ✗ GOOS=linux GOARCH=amd64 go build -tags static_all
    # github.com/confluentinc/confluent-kafka-go/kafka
    /usr/lib/librdkafka.a(rddl.o): In function `rd_dl_open0':
    /home/maathor/dev/librdkafka/src/rddl.c:80: warning: Using 'dlopen' in statically linked applications requires at runtime the shared libraries from the glibc version used for linking
    /usr/lib/librdkafka.a(rdaddr.o): In function `rd_getaddrinfo':
    /home/maathor/dev/librdkafka/src/rdaddr.c:168: warning: Using 'getaddrinfo' in statically linked applications requires at runtime the shared libraries from the glibc version used for linking
    # github.com/confluentinc/confluent-kafka-go/kafka
    cannot load imported symbols from ELF file $WORK/github.com/confluentinc/confluent-kafka-go/kafka/_obj/_cgo_.o: no symbol section
    
    // zlib path
    CFLAGS="-O3 -fPIC" ./configure --libdir=/usr/lib --sharedlibdir=/usr/lib
    make
    make install
    // cyrus-sasl
    ./configure --enable-static --libdir=/usr/lib
    
    export PKG_CONFIG_PATH=($pwd)/lib/pkgconfig 
    export LD_LIBRARY_PATH=($pwd)/lib
    
    cp librdkafka_folder/mklove/deps/dest/libcrypto/usr/lib64/*.a ($pwd)/lib/
    cp librdkafka_folder/mklove/deps/dest/libzstd/usr/lib64/*.a ($pwd)/lib/
    cp /usr/lib/pkgconfig/rdkafka* ($pwd)/lib/pkgconfig/
    cp /usr/lib/librdkafka* ($pwd)/lib/
    cp /usr/lib/libz.a ($pwd)/lib/
    cp /usr/lib/libsasl2.a ($pwd)/lib/
    
    go build -tags static -ldflags "-extldflags '-Lz -Lssl -Lsasl2 -Lzstd'" -o test
    
    ldd test
    // sample output
    linux-vdso.so.1 =>  (0x00007ffea7ee0000)
    libm.so.6 => /lib64/libm.so.6 (0x00007f772c287000)
    libdl.so.2 => /lib64/libdl.so.2 (0x00007f772c083000)
    libpthread.so.0 => /lib64/libpthread.so.0 (0x00007f772be67000)
    librt.so.1 => /lib64/librt.so.1 (0x00007f772bc5f000)
    libc.so.6 => /lib64/libc.so.6 (0x00007f772b892000)
    /lib64/ld-linux-x86-64.so.2 (0x00007f772c589000)