タグ付けされた質問 AWS Lambda
コンテンツの言語: 日本語
並べ替え 最新
以下に記載されている質問と回答を閲覧したり、フィルタリングして並べ替えて結果を絞り込んだりできます。
const Result = await ssm.sendCommand(~).promise();
上記コマンドを実行するとResultにCommandId,DocumentName,InstanceIds,Status: 'Pending',StatusDetails: 'Pending'等が表示されます。
この後Statusを監視して終了次第情報を受け取りたいのですが、(sendCommandResult.status)等でログを見てみても「INFO undefined」と表示されてしまいます。
どのようにしてStatusを受け取ればよいでしょうか、どなたかご助力をお願いします
処理の後続をwhileで回してfulfilledが出たら処理を終わらせることを想定しています
pending(保留): まだ非同期処理は終わっていない
fulfilled(成功): 非同期処理が正常に終了した
rejected(拒否): 非同期処理が失敗した
EC2インスタンス(Windows)にあるbatファイルを、Lambdaで、Systems Manager Run Commandを利用して実行させています。
CloudWatchログにバッチの戻り値(EXIT値)である「9」を出力させたいのですが、現状では、「START RequestId:」と、「END RequestId:」 しか出力されません。
どうコードを修正していけば、状況が改善されますでしょうか。
ご支援をいただけますと幸いに存じます、何卒宜しくお願い致します。
以下コード全文です。
```
exit /b 9
```
```
'use strict';
const AWS = require('aws-sdk')
const ssm = new (require('aws-sdk/clients/ssm'))();
module.exports.handler = async event => {
try {
let params = {
DocumentName: 'AWS-RunPowerShellScript',
InstanceIds: ['対象のインスタンスID'],
Parameters: {
commands: ['chcp 65001; Start-Process -wait test_win.bat'],
workingDirectory:['C:\\Users\\administrator\\temp'],
},
// タイムアウト設定
TimeoutSeconds: 3600 // 1 hour
}
const sendCommandResult = await ssm.sendCommand(params).promise();
} catch(e){
console.log(e);
}
};
```
以上
AWSにてRunCommandの成否をLamdbaで受け取る方法はありますでしょうか。
記事を漁りましたが記述が見つからず、有識者の方おりましたらご教授頂ければ幸いです。
API Gateway と Lambda 等を利用したサービスの構築を計画しており、性能設計のため各種クォータの引き上げの上限を知りたいと思っています。
ドキュメント(https://docs.aws.amazon.com/ja_jp/lambda/latest/dg/gettingstarted-limits.html)によると Lambdaの同時実行数のクォータのデフォルトは1,000で、最大数万まで引き上げ可能と記載されていますが、現実的にはどの程度まで引き上げが認められ得るのでしょうか。
また、API Gateway のスロットリングクォータについても同様に、デフォルトの 10,000 RPS(アカウントのリージョン単位)や 20 RPS(REST API/使用料プランのステージのメソッドレベル)から、最大で、どの程度まで引き上げが可能でしょうか。(https://docs.aws.amazon.com/ja_jp/apigateway/latest/developerguide/limits.html)
ご教示の程よろしくお願い致します。
EC2インスタンス(Linux)にあるshファイルを、Lambdaから EC2 Run Command で、実行させています。
現在実装しているコードは下記になります。
現状非同期呼出が行われており、shファイルの処理結果に関わらず、ClowdWatchに、正常終了のログが出力されています。
この処理を同期呼出に変更して、shファイルの処理結果を返してもらうコードにしたいです。
下記ドキュメントを参考しているのですが、非同期処理でしか現状実現出来ておりません。
どうコードを修正していけば、状況が改善されますでしょうか。 ご協力をお願いします。
同期呼び出し(AWS公式ドキュメント)
https://docs.aws.amazon.com/ja_jp/lambda/latest/dg/invocation-sync.html
そのLambdaの実行…同期?非同期?(Qiita)
https://qiita.com/is_ryo/items/009220083e179272cbda
```
'use strict';
const AWS = require('aws-sdk')
const ssm = new (require('aws-sdk/clients/ssm'))();
module.exports.handler = async event => {
try {
let params = {
DocumentName: 'AWS-RunShellScript',
InstanceIds: ['対象のインスタンスID'],
Parameters: {
commands: ['chcp 65001; sh test_Linux.sh'],
workingDirectory:['/home/user/batch_execution']
},
TimeoutSeconds: 3600 // 1 hour
}
const sendCommandResult = await ssm.sendCommand(params).promise();
} catch(e){
console.log(e);
}
};
```
特定のCloudWatchアラームがアラーム状態になったことを契機に発火するLambdaを実装したいと考えています。
下記の通り、EventBridgeのルールのイベントパターンを入力し、対象のアラームをアラーム状態に遷移させたのですが、ターゲットに設定したLambdaが実行しませんでした。
恐らく、"resouces" の指定の仕方に問題があると考えているのですが、参考情報が見つからず苦慮しています。
修正方法についてご回答いただけますと幸いです。
イベントパターン
```
{
"source": ["aws.cloudwatch"],
"detail-type": ["CloudWatch Alarm State Change"],
"resources": ["arn:aws:cloudwatch:ap-northeast-1:<AWSアカウントID>:alarm:<アラーム名>"],
"detail": {
"state": {
"value": ["ALARM"]
}
}
}
```
以上、よろしくお願いいたします。
AWS マネジメントコンソールのログイン時に数回のパスワードを入力を間違えた後に「アカウント侵害」のメールが届きました。その後、パスワードの変更をしてSupport Centerにて解決済みにした後にLambdaの関数を表示しようとしたところ、添付の画像のような状態になってしまい、登録されいてた関数が1つも表示されなくなってしまいました。
解決方法が分からず困っており、ご教示を頂ければと思います。
よろしくお願いいたします。

EC2インスタンス(Windows)にあるbatファイルを、Lambdaから EC2 Run Command で、実行したいです。
下記記事を参考にコードソースを書きました。
【初心者向け】AWS LambdaからEC2 Run Commandを実行する方法
https://zenn.dev/yokota/articles/3875da641b4cc5
Lambdaのコードの下記パラメータを修正することで、Linux環境では、EC2インスタンス環境のbatを実行することが出来ています。
```
DocumentName: 'AWS-RunPowerShellScript',
InstanceIds: ['対象のインスタンスID'],
commands: ['test_win.bat'],
workingDirectory:['C:\Users\administrator\temp']
```
今度はWindows環境のInstanceIdsに変更して、TestしてみるとStatusはSucceedeとなり、エラーも出ませんでしたが、batが実行できていませんでした。
前提として、記事で紹介されているroleの作成と、EC2インスタンスへのロール割当、Lamdaへのロール割当は行っています。
どうコードを修正していけば、状況が改善されますでしょうか。
ご協力をお願いします。
以下コード全文です。
```
'use strict';
const AWS = require('aws-sdk')
const ssm = new (require('aws-sdk/clients/ssm'))();
module.exports.handler = async event => {
try {
let params = {
DocumentName: 'AWS-RunPowerShellScript',
InstanceIds: ['対象のインスタンスID'],//Windowsインスタンス
Parameters: {
commands: ['test_win.bat'], // EC2コマンド
workingDirectory:['C:\Users\administrator\temp'], // コマンド実行場所
},
// SSMの実行結果をCloudWatchにロギング
CloudWatchOutputConfig: {
CloudWatchLogGroupName: 'SSMLogs',
CloudWatchOutputEnabled: true
},
// タイムアウト設定
TimeoutSeconds: 3600 // 1 hour
}
const sendCommandResult = await ssm.sendCommand(params).promise();
} catch(e){
console.log(e);
}
};
```
Lambdaコンソールを利用して、環境変数を暗号化しました。
環境変数をLambda関数で使用する為に復号したいのですが、提供されているコードのまま利用しても復号化されず、暗号化されたままとなっております。
どの部分が間違っているのでしょうか、ご教示頂ければ幸甚です。
console.log(decrypted)は暗号化された文字列が表示され、
Lambda関数の実行結果としては、status Code 200が返ってきております。
node.js
const AWS = require('aws-sdk');
AWS.config.update({ region: 'REGION' });
//あらかじめ設定している暗号化された環境変数(DB_HOST)
const encrypted_dbhost = process.env.DB_HOST;
let decrypted = \[];
exports.lambdaHandler = async (event, context, callback) => {
const kms = new AWS.KMS();
try {
const test_data = await kms.decrypt({ CiphertextBlob: new Buffer(encrypted_dbhost, 'base64') }).promise();
decrypted = test_data.Plaintext.toString('ascii');
console.log(decrypted);
const response = {
statusCode: 200,
body: JSON.stringify('Hello from Lambda!'),
};
return response;
}catch(e){
throw e;
}
};