2020年5月1日金曜日

はじめてのAWS LAMBDA CPPサンプル

https://aws.amazon.com/jp/blogs/compute/introducing-the-c-lambda-runtime/
に従ってサンプルを動かしてみました。

■必要となるライブラリのインストール
cmake/g++/libcur..等、次々に文句を言ってきますが、言ってきた時点で、ubuntu用のライブラリインストールの仕方を検索インストールを行いました。

■aws-sdk-cppのmake
失敗しました。同じ関数を2回アクセスしているところ、2回目は、betterAccessKeyを期待しているようですが、goodAccessKeyが却っているようでした。原因は分かりません。とりあえず、コメントアウトして無理やりmakeを通しました。→ubuntu20.04 WSL1にsleepが効かない問題があるようです。色々パッチを充てる必要がありそうです

TEST(InstanceProfileCredentialsProviderTest, TestThatProviderRefreshes)

{

    auto mockClient = Aws::MakeShared(AllocationTag);

    const char* validCredentials = "{ \"AccessKeyId\": \"goodAccessKey\", \"SecretAccessKey\": \"goodSecretKey\", \"Token\": \"goodToken\" }";

    mockClient->SetMockedCredentialsValue(validCredentials);

    InstanceProfileCredentialsProvider provider(Aws::MakeShared(AllocationTag, mockClient), 10);

    ASSERT_EQ("goodAccessKey", provider.GetAWSCredentials().GetAWSAccessKeyId());

    ASSERT_EQ("goodSecretKey", provider.GetAWSCredentials().GetAWSSecretKey());

    const char* nextSetOfCredentials = "{ \"AccessKeyId\": \"betterAccessKey\", \"SecretAccessKey\": \"betterSecretKey\", \"Token\": \"betterToken\" }";

    mockClient->SetMockedCredentialsValue(nextSetOfCredentials);

    std::this_thread::sleep_for(std::chrono::milliseconds(100));

 

    //ASSERT_EQ("betterAccessKey", provider.GetAWSCredentials().GetAWSAccessKeyId());

    //ASSERT_EQ("betterSecretKey", provider.GetAWSCredentials().GetAWSSecretKey());

}

■LAMBDAの登録がタイムアウト
次のコマンドで登録しようとしたのですが、タイムアウトで切断されてしまいました。
10MB以上は、S3経由で、アップロードすることが推奨されているようでしたので、S3で作ったバケットに置いたのですが、CLIでは、上手く呼び出すことができませんでした。なので、WEBコンソールで、関数の作成を行いアップロード、ロールの指定を行いました。

 aws lambda create-function \
--function-name encode-file \
--role <specify the same role arn used in the prior Lambda> \
--runtime provided \
--timeout 15 \
--memory-size 128 \
--handler encoder \
--zip-file fileb://encoder.zip

 ■CLIで起動
$ aws lambda invoke --function-name encode-file --payload '{"s3bucket": "your_bucket_name", "s3key":"your_file_key" }' base64_image.txt
で、base64_image.txtが出来ることを確認しました。中身のテキストをネット上のbase64decoderに通すと、S3バケットに置いたファイルの中身が再現していることを確認しました。

■まとめ
とりあえず、C++でLambdaFunctionをコンソール上から呼び出すことができました。
必要なライブラリ、aws-lambda-cpp,aws-sdk-cppを使いこなすことで、AWS上での操作が出来るようです。


0 件のコメント:

コメントを投稿