2021年10月、Amazonからメールが届く。タイトルは、
[要対応] AWS Lambda 関数の「状態」の拡張について| [Action Required] AWS Lambda Extending State to All Functions
Lambda関数の作成、更新、または呼び出しが確認されたため、このタイトルのメールが送られてきたらしい。メールを読んでもリンク先が英語だったのでよく理解できず。
そんなとき、解説してくれているサイトを発見。
【アップデート】AWS Lambda 関数の「状態」の拡張
https://www.sunnycloud.jp/column/20211018-01-2/
2021年12月6日以降、すべてのLamda関数に適用される話だそうで、自分に関係しそうな所を要約すると、こんな感じ。
・現在Lambda関数を使っていても、呼び出しが数週間無いと「Inactive状態」になる
・Inactive状態でLambda関数を呼び出すと、Pending > Active と状態が移る
・状態の確認には、CLI(コマンドラインツール)かSDKが必要
iOS版100マス計算にてLambdaを使っているので対象で、毎日呼び出されているのでInactive状態になることはないだろうし、影響はないとは思うけど、念の為、Lamda関数の状態を確認してみることにした。
管理画面からLamda関数の状態を確認できないかとログインしてみる。
管理画面から状態はわからない。
説明にある通り、CLIツールを使ってみることにした。
あと、Node.js 10 はサポート対象外になったので更新しないといけないけど、それは後回し。
はじめに、CLIをPCにインストールするところから。
macOS での AWS CLI バージョン 2 のインストール、更新、アンインストール:
https://docs.aws.amazon.com/ja_jp/cli/latest/userguide/install-cliv2-mac.html
AWS CLI バージョン2をインストール。
---------------------------------------------
$ curl "https://awscli.amazonaws.com/AWSCLIV2.pkg" -o "AWSCLIV2.pkg"
$ sudo installer -pkg AWSCLIV2.pkg -target /
---------------------------------------------
これでインストールできたので、インストールの確認。
---------------------------------------------
$ which aws
/usr/local/bin/aws
$ aws --version
aws-cli/2.3.2 Python/3.8.8 Darwin/20.4.0 exe/x86_64 prompt/off
---------------------------------------------
念のため、アンインストールの手順も抜粋(今回はインストールだけ)。
---------------------------------------------
$ which aws
$ ls -l /usr/local/bin/aws
$ sudo rm /usr/local/bin/aws
$ sudo rm /usr/local/bin/aws_completer
$ sudo rm -rf /usr/local/aws-cli
---------------------------------------------
こんなに簡単にCLIが使えるようになるとは思わなかった。
いざ、CLIを使ってみようと思ったけど、その前に設定が必要だった。
設定コマンド:
https://docs.aws.amazon.com/ja_jp/cli/latest/userguide/cli-configure-quickstart.html#cli-configure-quickstart-creds
CLIのコマンド(aws configure)を使うときに、IAMのアクセスキーとシークレットキーが必要とのこと。
管理画面からIAMを確認してみる。
そもそもアクセスキーが存在しなかったので、「アクセスキーの作成」ボタンを押してアクセスキーを作成。
そこから、アクセスキーとシークレットキーを取得。
いざCLIを使ってみる。
---------------------------------------------
$ aws configure
AWS Access Key ID [None]: [アクセスキー]
AWS Secret Access Key [None]: [シークレットキー]
Default region name [None]: ap-northeast-1 ※使用しているリージョン
Default output format [None]: text
---------------------------------------------
これで準備が整ったので、Lambda関数の状態を確認してみる。
Lambda関数の状態確認:
https://docs.aws.amazon.com/ja_jp/lambda/latest/dg/functions-states.html
---------------------------------------------
$ aws lambda get-function-configuration --function-name [Lambda関数名]
※※※※※※※※ 100マス計算の記録更新のAPPからの受信用 arn:aws:lambda:ap-northeast-1:※※※※※※※:function:[Lambda関数名] [Lambda関数名] ※※※※※※ 20XX-0X-XXTXX:XX:XX.XXX+0000 Successful 128 Zip ※※※※※※※※※※:aws:iam::※※※※※※※※※:role/※※※※※※※※※※ nodejs10.x Active X $LATEST
ARCHITECTURES ※※※※
TRACINGCONFIG ※※※※
VPCCONFIG
---------------------------------------------
↑大事なところは※※※やXXXで隠した。
出力結果を見ると、「Active」があるのでちゃんと動作してるっぽい。
これでいいのかなー。
あとは、Node.js10 を最新版に上げて、2021年12月6日以降も無事に動作することを祈るのみ。
変化する状況に対応していくって、大変だー。
2021年11月02日
[AWS] Lambda 関数の「状態」の確認手順
posted by be-style at 00:20| Comment(0)
| Web
2019年07月14日
[さくら] サブドメインの追加
さくらのレンタルサーバーを使っているのですが、独自ドメインのサブドメインの
追加方法をすっかり忘れていたのでメモ。
まずはコントロールパネルにログイン。
https://secure.sakura.ad.jp/rscontrol/rs/
今は新しいコントロールパネルがリリースされているので、そっちに切り替える。
左メニューの ドメイン/SSL > ドメイン/SSL を選択。
ドメイン一覧が表示されるので、その上にある「ドメイン新規追加」を選択。
画面が切り替わったら、下の方にある「他社で取得したドメインを移管せずに使う」を選択。
希望するサブドメイン名と独自ドメイン名を入力して、「追加」を押せば完了。
やってみれば簡単だけど、この方法を探し当てるまで3日もかかってしまった。。。
追加方法をすっかり忘れていたのでメモ。
まずはコントロールパネルにログイン。
https://secure.sakura.ad.jp/rscontrol/rs/
今は新しいコントロールパネルがリリースされているので、そっちに切り替える。
左メニューの ドメイン/SSL > ドメイン/SSL を選択。
ドメイン一覧が表示されるので、その上にある「ドメイン新規追加」を選択。
画面が切り替わったら、下の方にある「他社で取得したドメインを移管せずに使う」を選択。
希望するサブドメイン名と独自ドメイン名を入力して、「追加」を押せば完了。
やってみれば簡単だけど、この方法を探し当てるまで3日もかかってしまった。。。
posted by be-style at 19:34| Comment(0)
| Web
2017年04月10日
[AWS] Lambda 関数にトリガーを設定しようとすると「The requested resource exceeds the maximum number allowed」が出る
Lambda関数を指定した時間で起動したいとき、トリガーを設定することで
実現できます。
トリガーには、クーロンと同じように「0 * * * MON-WED *(毎週月曜から水曜の0時」
といった「ルール」を設定できます。
同じルールを他のLambda関数にも適用できるので、どんどん適用していったのですが、
6つ目から、
--------------------------------------------------
トリガー [ルール名] を有効にできませんでした:
The requested resource exceeds the maximum number allowed.
--------------------------------------------------
というメッセージが出るようになりました。
これは「1つのルールにつき対象(ターゲット)は5つまで」という制限があるからでした。
このメッセージを無視してLambda関数に適用していったので、6つ目以降のLambda関数は
時間になっても発動しなかったのでした。
各ルールにどんな対象(ターゲット)が設定されているのかは、
Cloud Watch > ルール
の画面で確認することができます。
また、ルールを編集したり追加したりしたいときは、
CloudWatch > ルール > 該当ルールを追加(編集) > ターゲットを追加(編集)
で行えます。
実現できます。
トリガーには、クーロンと同じように「0 * * * MON-WED *(毎週月曜から水曜の0時」
といった「ルール」を設定できます。
同じルールを他のLambda関数にも適用できるので、どんどん適用していったのですが、
6つ目から、
--------------------------------------------------
トリガー [ルール名] を有効にできませんでした:
The requested resource exceeds the maximum number allowed.
--------------------------------------------------
というメッセージが出るようになりました。
これは「1つのルールにつき対象(ターゲット)は5つまで」という制限があるからでした。
このメッセージを無視してLambda関数に適用していったので、6つ目以降のLambda関数は
時間になっても発動しなかったのでした。
各ルールにどんな対象(ターゲット)が設定されているのかは、
Cloud Watch > ルール
の画面で確認することができます。
また、ルールを編集したり追加したりしたいときは、
CloudWatch > ルール > 該当ルールを追加(編集) > ターゲットを追加(編集)
で行えます。
posted by be-style at 09:35| Comment(0)
| Web
2016年08月30日
[Web] AWS Lambda から DynamoDB にアクセスしてアイテムを更新してみた
前回の[Unity] AWS Lambda をUnityから実行してみた(iPhoneから実行も)で、iPhoneからAWS Lambdaにアクセスすることができました。
今回は、この3点をやってみます。
・管理画面からDynamoDBにアイテムを追加する
・LambdaからDynamoDBにアクセスする(node.js)
・DynamoDBのアイテムを更新する
Lambdaでnode.jsを使って色々できるとなったら、Lambdaが動いているサーバー上に
記録を残したいときがあります。
memocached や ファイル書き出し等はできないようです。
そこで、永続的にデータを保存できるAWSサービスのRDBとDynamoDBを考えました。
今回は、後々データが増えたときに扱いやすそうなDynamoDBを触ってみます。
DynamoDB の基礎知識とまとめ:
http://qiita.com/hshimo/items/e5ad98b21786d796f1da
AWSの管理画面から、サービス > データベース > DynamoDB を選択します。
はじめてDynamoDBを触ったときの画面になります。
Create table
を選びます。
テーブルの設定画面になります。
・テーブル名 : Test
・プライマリキー : key1(文字列)
・デフォルト設定の使用 : オフ
・セカンダリインデックス : なし
・プロビジョニングされたキャパシティ 読み込み/書き込み容量ユニット : 1
にして"作成"を押します。
テーブルができました!
それでは項目(アイテム)を追加してみましょう。
画面右の"項目"メニュー > 項目の作成 を選びます。
項目の作成画面に移るので、プライマリキーに"aaa"を入力します。
要素を追加するので、"+"ボタン > Append > String を選びます。
key2 として、値に vvv を入力します。
その後、画面右下の"保存"を押します。
テーブルに項目が追加されました。
AWS LambdaからDynamoDBにアクセスするために、ロールの設定の変更が必要になります。
ここで、作成したテーブルの"Amazonリソースネーム(ARN)"をコピーして覚えておきます。
サービス > IAM の画面に移り、ロールの画面を開きます。
前回のhelloWorldで使ったロール(Cognito_AllZeroPuzzleUnauth_Role)を開きます。
インラインポリシー > ロールポリシーの作成 を選びます。
"選択"を押します。
アクセス許可の編集画面になりますので、
・AWSサービス : Amazon DynamoDB
・アクション : Scan, UpdateItem
・ARN : 先ほどコピーしたARN
を設定して、"ステートメントを追加"を押します。
ステートメントの内容を確認(Scan, UpdateItemがある)して、"次のステップ"を押します。
ポリシーの確認画面では特になにもせず"ポリシーの適用"を選びます。
ポリシー一覧の画面に戻ると、先ほど作ったポリシーが追加されています。
サービス > AWS Lambda の画面に移り、以前作成した helloWorld を選びます。
以前のプログラムを、DynamoDB用に書き換えます。
node.jsによるLambda操作のサンプル
https://docs.aws.amazon.com/ja_jp/amazondynamodb/latest/gettingstartedguide/GettingStarted.NodeJs.03.html
管理画面で実行してみると、DynamoDBの項目の中身を取得できました。
では、key2 の "vvv" を "moji" に置き換えてみましょう。
Lambdaのプログラムを変更します。
実行すると、"成功"と出たので、置き換えがうまくいったようです。
サービス > DynamoDB の画面に移り、先ほど作成した Testテーブルの中身を確認すると、
ちゃんと更新されていました。
これで、これからアプリに追加する機能に必要なことは揃いました。
よかったよかった。
今回は、この3点をやってみます。
・管理画面からDynamoDBにアイテムを追加する
・LambdaからDynamoDBにアクセスする(node.js)
・DynamoDBのアイテムを更新する
Lambdaでnode.jsを使って色々できるとなったら、Lambdaが動いているサーバー上に
記録を残したいときがあります。
memocached や ファイル書き出し等はできないようです。
そこで、永続的にデータを保存できるAWSサービスのRDBとDynamoDBを考えました。
今回は、後々データが増えたときに扱いやすそうなDynamoDBを触ってみます。
DynamoDB の基礎知識とまとめ:
http://qiita.com/hshimo/items/e5ad98b21786d796f1da
AWSの管理画面から、サービス > データベース > DynamoDB を選択します。
はじめてDynamoDBを触ったときの画面になります。
Create table
を選びます。
テーブルの設定画面になります。
・テーブル名 : Test
・プライマリキー : key1(文字列)
・デフォルト設定の使用 : オフ
・セカンダリインデックス : なし
・プロビジョニングされたキャパシティ 読み込み/書き込み容量ユニット : 1
にして"作成"を押します。
テーブルができました!
それでは項目(アイテム)を追加してみましょう。
画面右の"項目"メニュー > 項目の作成 を選びます。
項目の作成画面に移るので、プライマリキーに"aaa"を入力します。
要素を追加するので、"+"ボタン > Append > String を選びます。
key2 として、値に vvv を入力します。
その後、画面右下の"保存"を押します。
テーブルに項目が追加されました。
AWS LambdaからDynamoDBにアクセスするために、ロールの設定の変更が必要になります。
ここで、作成したテーブルの"Amazonリソースネーム(ARN)"をコピーして覚えておきます。
サービス > IAM の画面に移り、ロールの画面を開きます。
前回のhelloWorldで使ったロール(Cognito_AllZeroPuzzleUnauth_Role)を開きます。
インラインポリシー > ロールポリシーの作成 を選びます。
"選択"を押します。
アクセス許可の編集画面になりますので、
・AWSサービス : Amazon DynamoDB
・アクション : Scan, UpdateItem
・ARN : 先ほどコピーしたARN
を設定して、"ステートメントを追加"を押します。
ステートメントの内容を確認(Scan, UpdateItemがある)して、"次のステップ"を押します。
ポリシーの確認画面では特になにもせず"ポリシーの適用"を選びます。
ポリシー一覧の画面に戻ると、先ほど作ったポリシーが追加されています。
サービス > AWS Lambda の画面に移り、以前作成した helloWorld を選びます。
以前のプログラムを、DynamoDB用に書き換えます。
node.jsによるLambda操作のサンプル
https://docs.aws.amazon.com/ja_jp/amazondynamodb/latest/gettingstartedguide/GettingStarted.NodeJs.03.html
var AWS = require("aws-sdk");
var dynamo = new AWS.DynamoDB.DocumentClient();
exports.handler = function(event, context) {
var param = {
TableName : "Test",
FilterExpression : "key1 = :val",
ExpressionAttributeValues : {":val" : "aaa"}
};
dynamo.scan(param, function(err, data) {
if (err) {
console.log("エラー = " + err);
context.fail(err); // エラー時
} else {
console.log("成功 = " + data);
context.succeed(data); // 正常時
}
});
};
管理画面で実行してみると、DynamoDBの項目の中身を取得できました。
では、key2 の "vvv" を "moji" に置き換えてみましょう。
Lambdaのプログラムを変更します。
var AWS = require("aws-sdk");
var dynamo = new AWS.DynamoDB.DocumentClient();
exports.handler = function(event, context) {
var params = {
TableName: 'Test',
Key: {
"key1": "aaa" // Hashキー
},
AttributeUpdates: {
"key2": {
'Action': 'PUT', // 置き換え
'Value': "moji" // 文字列
}
}
};
dynamo.update(params, function (err, data) {
if (err) {
console.log("失敗" + err);
} else {
console.log("成功");
}
});
};
実行すると、"成功"と出たので、置き換えがうまくいったようです。
サービス > DynamoDB の画面に移り、先ほど作成した Testテーブルの中身を確認すると、
ちゃんと更新されていました。
これで、これからアプリに追加する機能に必要なことは揃いました。
よかったよかった。
posted by be-style at 21:37| Comment(0)
| Web
2016年08月28日
[Web] AWS Lambda のHello Worldをやってみた
個人開発のアプリでAWSのEC2を利用しているのですが、
非常にアクセス数が少ないのに、利用時間による従量課金になっています。
AWS EC2の料金表:
https://aws.amazon.com/jp/ec2/pricing/
t2.micro だと、$0.02/時間 なので、1年だと
1日の料金(0.02 x 24) x 365 = 175.2$
かかります。
ほとんど使われないのに、EC2を起動し続けているために毎年これくらいの
費用がかかってしまいます。
そうなると「使うときだけ料金が発生してくれたらなー」と考えてしまいます。
そこで登場するのが「AWS Lambda」というサービスです。
簡単にいうと、
・利用したときだけ料金が発生する
・サーバーを持つ必要がなくメンテナンスの必要がない
・アクセス数が急増してもAWS側で自動で対応してくれる
というサービスです。
AWS Lambdaについてのamazonの説明:
https://aws.amazon.com/jp/lambda/
初めてのAWS Lambda:
https://codezine.jp/article/detail/8446
AWS Lambdaの料金については、
メモリ128MB で、1ヶ月の無料利用枠の秒数が 3,200,000秒(約37日)
それを超えると100 ミリ秒単位の価格が0.000000208$ です。
現状の少ないアクセス数ならば、Lambdaの実行時間が1秒だとしても
無料枠で十分まかなえます。
AWS Lambdaの料金表
https://aws.amazon.com/jp/lambda/pricing/
これは利用しなければ!
ということで、Hello World をやってみましたので、記録として残しておきます。
----------------------------------
ここからは「AWSのアカウントを開設している」ことが前提になっています。
AWSのアカウントを開設していない方は、開設してからお進みください。
----------------------------------
管理画面のサービスの中から Lambda を選びます。
Get Started Now を選びます。
blue print(青写真)を選ぶ画面になったら、画面中央の">"を押して青写真一覧の次のページを
表示します。
hello-world の青写真があるので、選択します。
ここは何もせず"Next"を選択。
ファンクション名が必須なので、"helloWorld"とします。
他はデフォルトのままです。
画面を下に進めると"Lambda function handler and role"の欄で"Role"を設定する必要があります。
Roleを作っていないので、ここでRoleを作ります。
Roleのプルダウンメニューの中から、"Create a custom role"を選択します。
Roleを作成する画面に移ったら、デフォルト設定のまま"許可"を押します。
Lambdaの画面に戻ると、RoleとExisting roleの欄が先ほど作ったRoleで埋まっています。
他の設定はデフォルトのまま"Next"を押します。
確認画面になりますので、"Create function"を押します。
Lambdaのダッシュボード画面に切り替わると、Hello Worldのコードの内容が表示されます。
今回はそのまま、画面上の"Test"を押して実行してみす。
ダッシュボード画面の下の方に、実行結果が表示されます。
さらに詳しいログを見るときは、"Click here"を押します。
CloudWatchの画面に移ります。先ほどのログが表示されています。
ログを選択します。
詳しいログを確認することができます。
Hello World の流れは以上です。
次は、Unityとの連携をしてみます。
続きの記事:
[Unity] AWS Lambda をUnityから実行してみた(iPhoneから実行も)
非常にアクセス数が少ないのに、利用時間による従量課金になっています。
AWS EC2の料金表:
https://aws.amazon.com/jp/ec2/pricing/
t2.micro だと、$0.02/時間 なので、1年だと
1日の料金(0.02 x 24) x 365 = 175.2$
かかります。
ほとんど使われないのに、EC2を起動し続けているために毎年これくらいの
費用がかかってしまいます。
そうなると「使うときだけ料金が発生してくれたらなー」と考えてしまいます。
そこで登場するのが「AWS Lambda」というサービスです。
簡単にいうと、
・利用したときだけ料金が発生する
・サーバーを持つ必要がなくメンテナンスの必要がない
・アクセス数が急増してもAWS側で自動で対応してくれる
というサービスです。
AWS Lambdaについてのamazonの説明:
https://aws.amazon.com/jp/lambda/
初めてのAWS Lambda:
https://codezine.jp/article/detail/8446
AWS Lambdaの料金については、
メモリ128MB で、1ヶ月の無料利用枠の秒数が 3,200,000秒(約37日)
それを超えると100 ミリ秒単位の価格が0.000000208$ です。
現状の少ないアクセス数ならば、Lambdaの実行時間が1秒だとしても
無料枠で十分まかなえます。
AWS Lambdaの料金表
https://aws.amazon.com/jp/lambda/pricing/
これは利用しなければ!
ということで、Hello World をやってみましたので、記録として残しておきます。
----------------------------------
ここからは「AWSのアカウントを開設している」ことが前提になっています。
AWSのアカウントを開設していない方は、開設してからお進みください。
----------------------------------
管理画面のサービスの中から Lambda を選びます。
Get Started Now を選びます。
blue print(青写真)を選ぶ画面になったら、画面中央の">"を押して青写真一覧の次のページを
表示します。
hello-world の青写真があるので、選択します。
ここは何もせず"Next"を選択。
ファンクション名が必須なので、"helloWorld"とします。
他はデフォルトのままです。
画面を下に進めると"Lambda function handler and role"の欄で"Role"を設定する必要があります。
Roleを作っていないので、ここでRoleを作ります。
Roleのプルダウンメニューの中から、"Create a custom role"を選択します。
Roleを作成する画面に移ったら、デフォルト設定のまま"許可"を押します。
Lambdaの画面に戻ると、RoleとExisting roleの欄が先ほど作ったRoleで埋まっています。
他の設定はデフォルトのまま"Next"を押します。
確認画面になりますので、"Create function"を押します。
Lambdaのダッシュボード画面に切り替わると、Hello Worldのコードの内容が表示されます。
今回はそのまま、画面上の"Test"を押して実行してみす。
ダッシュボード画面の下の方に、実行結果が表示されます。
さらに詳しいログを見るときは、"Click here"を押します。
CloudWatchの画面に移ります。先ほどのログが表示されています。
ログを選択します。
詳しいログを確認することができます。
Hello World の流れは以上です。
次は、Unityとの連携をしてみます。
続きの記事:
[Unity] AWS Lambda をUnityから実行してみた(iPhoneから実行も)
posted by be-style at 14:46| Comment(0)
| Web