サーバーレス
サーバーレスは、イノベーションを起こし、変化に迅速に対応できるように、より機敏なアプリケーションを構築させるサービス、実践、および戦略を説明する方法です。サーバーレスコンピューティングでは、キャパシティのプロビジョニングやパッチ適用などのインフラストラクチャ管理タスクが AWS によって処理されるので、顧客のためのコード作成のみに集中できます。
最近の質問
すべてを表示1/12
- Redshift ServerlessのRPUスケールの挙動を確認したく、以下のような実験をしました。 Redshift Serverlessのクラスタを先日指定できるようになったBase Capacity= 8で作成。 このクラスタにテストデータを投入し、テストクエリを実行。 以下のような結果になりました。 1.テストクエリを一つだけ実行->50秒程度かかる 2.同じテストクエリを5つ同時に実行->それぞれのクエリが3分程度かかる どちらの実行時でもRPU(Compute Capacityのメトリクス)はBase Capacityとして指定した"8"のまま変化なしでした。 期待値としては、1も2も自動でRPUがスケールし、さらに2ではSQLを並行実行しても1と同じ程度の実行時間で済む、だったのですが、どちらでもRPUのスケールは発生せず、並行処理はそのまま時間が長くなってしまいました。 結果だけ見ると、期待通り動いていませんが、RPUのスケールが発生するようなデータとクエリの条件をうまくつくれなかった可能性もあると思っています。 そこで質問ですが、 ・Redshift ServerlessのRPUがスケールする様子を観測できるようなテスト方法(SQLと実行方法)、テストデータの作り方(有用な公開データとそれをつかったテストテーブルの作成方法)はありますか ・どのような条件でRPUはスケールするか、参考となる実例はありますか よろしくおねがいします。
- EventBridgeにてターゲットタイプ「EventBridge API の宛先」を選択し、API送信先エンドポイントへEC2で作成したWebサーバのURLを指定しています。 テストで上記のカスタムイベントバスへメッセージを送信すると全てデッドレターキューへ入ってしまいます。 **EventBridgeのルールのターゲットに指定したデッドレターキューのメッセージの属性に以下のようなエラーが表示されています。** | 名前| タイプ | 値 | | --- | --- | --- | | ERROR_CODE | String | SDK_CLIENT_ERROR | | ERROR_MESSAGE | String | Unable to invoke ApiDestination endpoint: The request failed due to an internal validation error. | | RULE_ARN | String | arn:aws:events:・・・・ | | TARGET_ARN | String | arn:aws:events:・・・・ | ロールは、EventBridgeから作成したので問題ないと思っているのですが、他に見直すべき個所がありましたらご教授いただければ幸いです。
- 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つも表示されなくなってしまいました。 解決方法が分からず困っており、ご教示を頂ければと思います。 よろしくお願いいたします。 
- S3に、ファイルA、ファイルBの2つのファイル両方が、同日中に、アップロードされたことを契機に、Lambdaを実行したいと考えています。 特定の1ファイルがアップロードされた場合のLambda実行は下記のイベントパターンで、実装できました。 ※片方だけだった場合には発火されない仕様としたいです。 ※S3へのファイルアップロードは日に1回、それぞれ別のタイミングでアップロードされます。 下記 "key" を 複数指定すればよいのかとも考えましたが、うまくいっておりません。 実現可否、可能なら方法についてご回答いただけますと幸いです。 Amazon EventBridgeイベントパターン ``` { "source": ["aws.s3"], "detail-type": ["Object Created"], "detail": { "bucket": { "name": ["s3-trigger-test"] }, "object": { "key": [{ "prefix": "trigger/test.txt" }] } } } ``` 以上です、よろしくお願いいたします。
- 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; } };
情報センターの最新コンテンツ
すべてを表示1/18
- AWS公式更新しました 4ヶ月前
人気ユーザー
すべてを表示1/18
Brettski-AWS
エキスパートkentrad
エキスパートUri
エキスパートskinsman
エキスパートIndranil Banerjee AWS
エキスパートGreg_B
エキスパートalatech
エキスパートiwasa
エキスパートTushar_J
エキスパートMatt-B
エキスパートFabrizio@AWS
エキスパートMichaelDombrowski-AWS
エキスパートAWS-User-Chirag
サポートエンジニアMassimilianoAWS
エキスパートAWS-User-Nitin
エキスパートChris_G
エキスパート