Auroraのtestテーブルにinsertをしたら、lambdaが呼ばれる仕組みを検証しております。
フローとしては、
MySQL [agent]> desc test; +-------+---------+------+-----+---------+----------------+ | Field | Type | Null | Key | Default | Extra | +-------+---------+------+-----+---------+----------------+ | id | int(11) | NO | PRI | NULL | auto_increment | | name | text | YES | | NULL | | +-------+---------+------+-----+---------+----------------+
このようなテーブルがあり。
以下のようなtriggerとprocedureがあります。
▼trigger DELIMITER ;; CREATE TRIGGER TR_test AFTER INSERT ON test FOR EACH ROW BEGIN SELECT CONCAT('New test from ', NEW.id), NEW.name INTO @id, @name; CALL ES_Send_Record(@id, @name); END ;; DELIMITER ; ▼プロシージャ DROP PROCEDURE IF EXISTS ES_Send_Record; DELIMITER ;; CREATE PROCEDURE ES_Send_Record (IN id integer, IN name TEXT) LANGUAGE SQL BEGIN CALL mysql.lambda_async('arn:aws:lambda:ap-northeast-1:000000000:function:test-lambda', CONCAT('{ "id" : "', id, '", "name" : "', name, '" }') ); END ;; DELIMITER ;
- insert into test(name) values('test');でテストデータを投入
- triggerが走り、procedureが呼ばれて、procedureの中でlambdaをキックします
また、RDSには以下のロールが割り当てられていることは確認できます。
MySQL [agent]> show variables like '%_role%'; +----------------------------+--------------------------------------------------------------+ | Variable_name | Value | +----------------------------+--------------------------------------------------------------+ | aurora_load_from_s3_role | | | aurora_select_into_s3_role | | | aws_default_lambda_role | arn:aws:iam::000000000:role/trigger-procedure-call-lambda | | aws_default_s3_role | | +----------------------------+--------------------------------------------------------------+
※独自にパラメータグループがクラスタに割り当てており、そのパラメータグループのaws_default_lambda_roleの値に実行させたいLambdaのarnを設定しております。
しかし、実際にinsertすると、
MySQL [agent]> insert into test(name) values('test'); ERROR 63996 (HY000): Lambda API returned error: Missing Credentials: Cannot instantiate Lambda Client
となってしまいます。。。
どこの何を修正すればLambdaが実行できるようになるのでしょうか。。
ご教示頂けますと幸いです。
[追記]
パラメータグループのロールを外して、つけ直したら状況変わりました。
MySQL [agent]> insert into test(name) values('test'); ERROR 63996 (HY000): Lambda API returned error: Network Connection. Unable to connect to endpoint
[さらに追記]
FullAccessLambdaのロールに切り替えたらNetworkのエラーに変わりました。
ロールの付け替えは即時とあるけど、show variableで見たほうが良い。ラグがある。
また上記だけでなく、クラスターのIAMロールの管理で「LambdaFullAccess」のロールもつけないと、また「Missing Credentials」に戻りました。
RDSクラスターのIAMは、クラスタ詳細画面の「IAMロールの管理」なのか、パラメータグループなのか、どっちがどっちなのか理解不能です。。
[追記]
NetworkErrorはRDSをprivate subnetに配置しているため。
NAT Gatewayで内から外の通信のみを許容する

回答1件
あなたの回答
tips
プレビュー
バッドをするには、ログインかつ
こちらの条件を満たす必要があります。
2019/06/19 03:11