LoginSignup
5
3

More than 5 years have passed since last update.

LambdaからDAX(DynamoDB Accelerator)にアクセスしたときの備忘録

Posted at

DynamoDBにめっちゃ書き込んで、めっちゃ読み込むサービスの設計のためにDAXの調査をしていました。

LambdaとDAXを連携させるメリットはここにもある通り、

For serverless applications, DAX provides an additional benefit: Lower latency results in shorter Lambda execution times, which means lower costs.

そう、Lambdaの実行時間が減ればやすくなるよね!ということ。
早速試してみました

環境

  • AWS Lambda(node.js8.1)

【困ったこと】LambdaではデフォでDAXを扱うライブラリが入っていない。

ここにあるとおりDAXの利用はnodejsでは下記のライブラリを使います。

amazon-dax-client

これは、Lambdaにデフォで入っていません。
なので、amazon-dax-clientが入ったものをzip化してアップロードするしかありません。

【苦戦】DAXにつながらない

結論からいうとLambdaの実行ロールであるIAMポリシーに下記のポリシーが足りていませんでした。

{
    "Version": "2012-10-17",
    "Statement": [
        {
            "Action": [
                "dax:*"
            ],
            "Effect": "Allow",
            "Resource": [
                "*"
            ]
        },
        {
            "Action": [
                "dynamodb:*"
            ],
            "Effect": "Allow",
            "Resource": [
                "*"
            ]
        }
    ]
}

これは、AmazonDynamoDBFullAccess を紐付けることで解決します。

なぜ四苦八苦したのか。

それは自分のエラーメッセージ理解力が問題でした。

表示されていたメッセージたち

UnhandledPromiseRejectionWarning: Error: NoRouteException: No endpoints available
{ Error: NoRouteException: not able to resolve address: [{"host":"***************","port":8111}]
Failed to pull from ********.dax.apne1.cache.amazonaws.com (10.0.1.47): { Error: Client does not have permission to invoke Endpoints

これをSecurityGroupまわりの設定ミスなのか? :tired_face: いや合っているはずなんだけどな :tired_face: とドツボにハマってました。

SecurityGroupはTCP、ポート8111、許可するもの(IP、セキュリティグループID)でオッケーです。

5
3
0

Register as a new user and use Qiita more conveniently

  1. You get articles that match your needs
  2. You can efficiently read back useful information
  3. You can use dark theme
What you can do with signing up
5
3