- 1. AWS CDKで「型 ‘Function’ の引数を型 ‘IFunction’ のパラメーターに割り当てることはできません。」のエラー
- 2. AWS S3 サーバーアクセスログをLambdaで見やすくする
- 3. [Node] requestを使わずに標準ライブラリでPOST
- 4. DynamoDB StreamsとLambdaの話
- 5. MoviePy を AWS Lambda (Chalice) で利用する
- 6. Brightcove LIVE APIからデータ取得する方法(Lambda@Edge)
- 7. NuxtをコンテナにしてLambdaでデプロイするのが超簡単になった2021年
- 8. Pythonのlambda式をなるべく簡単に理解する
- 9. PythonでLINE Botのリッチメニュー を活用したアプリを開発したので学んだことを記す
- 10. AWS lambdaについて調べてみた【初学者向け備忘録】
- 11. NodejsでDynamoDB使ってみた
- 12. aws-vaultを用いてAWS SAMローカル実行をIDE上で行う方法。
- 13. CloudFront FunctionsでBasic認証ができるか試してみた
- 14. AWS Lambda
- 15. [Node]AWS LambdaからDynamoDBを操作する
- 16. PostmanでJSONをPOSTし、DynamoDBに格納したときのメモ
- 17. EC2/Win の Software Inventory を作ってみた。 Describe して DynamoDB に Put。lambda/python 3.8 で。
- 18. EC2 インスタンスの特定の情報を収集する
- 19. ssm inventory を aws lambda / python3.8 でたたいてみた。
- 20. describe 等で取得した情報を Dynamo DB に保存する
AWS CDKで「型 ‘Function’ の引数を型 ‘IFunction’ のパラメーターに割り当てることはできません。」のエラー
# この記事について
AWS CDKのワークショップ(TypeScript)を試した際にでAPI GatewayとLambdaの連携部分でエラーが発生しましたが、日本語での検索しても出てこなかったので同じようにハマる人がいたら参考になればと思います。https://cdkworkshop.com/20-typescript/30-hello-cdk/300-apigw.html
# エラー発生箇所
ワークショップの以下のLambdaRestApiの `handler: hello` でエラー“` lib/cdk-workshop-stack.ts
// defines an API Gateway REST API resource backed by our “hello” function.
new apigw.LambdaRestApi(this, ‘Endpoint’, {
handler: hello
});
“`# エラー内容
“`
型 ‘Function’ の引数を型 ‘IFunction’ のパラメーターに割り当
AWS S3 サーバーアクセスログをLambdaで見やすくする
# サーバーアクセスログ
以下のような書式で出力されるが、見にくい。JSON みたいなキーと値の書式で見たかったので、 PUT をトリガーに Lambda で処理してCloudWatch Logs に見やすくしたログを出力した。
“`
79a59df900b949e55d96a1e698fbacedfd6e09d98eacf8f8d5218e7cd47ef2be awsexamplebucket1 [06/Feb/2019:00:00:38 +0000] 192.0.2.3 79a59df900b949e55d96a1e698fbacedfd6e09d98eacf8f8d5218e7cd47ef2be 3E57427F3EXAMPLE REST.GET.VERSIONING – “GET /awsexamplebucket1?versioning HTTP/1.1” 200 – 113 – 7 – “-” “S3Console/0.4” – s9lzHYrFp76ZVxRcpX9+5cjAnEH2ROuNkd2BHfIa6UkFVdtjf5mKR3/eTPFvsiP/XV/VLi
[Node] requestを使わずに標準ライブラリでPOST
こんにちは take-2405です。
AWS LambdaでSlack botを作成しました。参考にさせていただいた記事
https://qiita.com/rei-ta/items/931caaaef2684c97e4cf
## お急ぎの方用
“`javascript
const https = require(‘https’);
const querystring = require(‘querystring’);
.
.
.
var post_data = querystring.stringify({channel:”,text:}, null);
let options = {
host: ‘slack.com’,
path: ‘/api/chat.postMessage’,
port: 443,
headers: {
‘Content-Type’: ‘application/x-www-form-urlencoded’,
//他にtokenなど
},
DynamoDB StreamsとLambdaの話
# はじめに
下図のような構成の機能があったのですが、データストアのバージョンアップのために、
Lambdaによるデータ投入を一時的に止める必要がありました。
データ投入停止中に発生したDynamoDBの変更をきちんと拾えるような手順が必要です。ここら辺は雰囲気で理解してたので、DynamoDB Streamsを止めて再開したらいい感じにしてくれるんじゃね、とか思ってましたがそうじゃなかったです。
本記事はこの辺りについて調べたものです。![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/296479/0445fcb3-69a7-347d-b14f-08cd430d0f2a.png)
# DynamoDB StreamsとLambdaについて
## DynamoDB Streams概要
DynamoDBの項目(レコード)に対して変更(新規作成、値の変更、削除)を行うと、ストリームデータとして保持してくれるのが**DynamoDB Streams**です。
これにLambdaを関連付
MoviePy を AWS Lambda (Chalice) で利用する
# はじめに
ウェブアプリケーションとしてアップロードしてきた動画を加工することを考えたい。
そのために、Python と [moviepy](https://github.com/Zulko/moviepy) を使いたいが、Chalice (AWS Lambda) で動かしたいと思うとやはり色々と準備が必要になる。 ここではそのためにどのようなことを行ったかを記載する。
なお、Chalice については自前の記事を参照。https://qiita.com/t-kigi/items/d2cb619eca6b0d382ab3
# 動作手順
## 1. ローカルでの検証
まずはちゃんとローカルでの動作検証を行う。 ローカルでは Virtual Box で動かす Ubuntu 20.04 LTS を利用している。
### 初期設定
“`bash
$ pipenv install –python=3.8
$ pipenv install moviepy chalice boto3
$ pipenv run chalice –version
chalice 1.23.0
Brightcove LIVE APIからデータ取得する方法(Lambda@Edge)
# サーバーサイドの実装(Lambda@Edge – node.js)
※注意: GETとPUT(パラメータなし)のみ動作確認しています。
POSTやDELETEはパラメータの書き方が違うはずなので、別途実装する必要があります“`javascript:index.js
/**
* フロントから直接ブライトコーブAPIに問い合わせると、
* CORSポリシー違反でデータ取得ができないため実装した
*
* 2021.05時点ではGETとPUTのみ動作確認済
*
* フロントからAJAX経由で送られてくるHTTPメソッドとURLを用いて
* それに応じたブライトコーブAPIのレスポンス(JSON)を返す
* 例えば、AJAXで次のURLにGETリクエストが届いたら、Lambda@Edge(このindex.js)が発火
*
* https://www.example.com/bc-proxy/redundantgroups/xxxxxxxxxxxxxxxx
*
* bc-proxy以下のURLを切り取ってLambda@Edgeに渡し、ブライトコーブAPIに
NuxtをコンテナにしてLambdaでデプロイするのが超簡単になった2021年
以前書いた[LaravelをコンテナにしてLambdaでデプロイするのが超簡単になった2021年](https://qiita.com/umihico/items/514cf792d30bf3706ef5)のNuxtバージョンです。[Djangoバージョンはこちら](https://qiita.com/umihico/items/4534e1f84e8de5a62db5)
有名どころで[nuxt-serverless](https://github.com/tonyfromundefined/nuxt-serverless)など色々ありますが、こんな手間・デメリットがあったかと思います。
– 静的ファイル用にS3を用意、同期対応
– API GatewayのURLに付与されるステージ変数の対応
– `npx create-nuxt-app`を使ったセットアップを行えないそんな中、[それらのデメリットを脱却できそうな記事](https://www.serverless.com/examples/aws-node-vue-nuxt-ssr/)を見つけたので、create-next-
Pythonのlambda式をなるべく簡単に理解する
Pythonを勉強するにあたり、lambda式と出会いました。
業務で使用することは少ないかもしれないですが、簡略化して書きたいときに使用できると良いかと思い、調べました。
しかし、自分自身なかなか理解できず、この記事にまとめようと思った次第です。
初心者の方の参考になると幸いです。
また、知見のある方で使用方法が誤っている場合はご指摘いただけると幸いです。使用環境
* windows10
* python:3.7.9
* jupyter Notebook#目次
* lambda式とは
* lambda式の定義
* lambda式の初歩
* lambda式でlistを用いる
* lambda式でfor文処理を実装
* lambda式でif文処理を実装## lambda式とは
[ここでは](https://www1.gifu-u.ac.jp/~fujilab/lambda_html/1.html)lambda式とは、
`名前がついていない関数(無名関数)を表現する記法のひとつ`と説明があります。## lambda式の定義
defを用いた場合の関数定義は以下です。“
PythonでLINE Botのリッチメニュー を活用したアプリを開発したので学んだことを記す
## リッチメニューとは何か
リッチメニューはLINE公式アカウントのトーク画面下部に表示されるメニュー機能。
リッチメニューの各領域にリンクを設定することで、LINE公式アカウントの各機能のほか、外部サイトや予約ページなどにユーザーを誘導することができる。![Screen Shot 2021-05-25 at 11.05.26.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/411851/fd0298e2-37a3-669b-12a5-f0c3212d6082.png)
## リッチメニューオブジェクト
“`json:json
{
“size”: {
“width”: 2500,
“height”: 1686
},
“selected”: false,
“name”: “Nice richmenu”,
“chatBarText”: “Tap to open”,
“areas”: [
{
“bounds”: {
“x”:
AWS lambdaについて調べてみた【初学者向け備忘録】
## はじめに
フロントエンドの学習にあたり最近AWS Amplifyを利用し始めました。おそらく昨今のフロントエンドエンジニアはAWSの各種サービスの理解も避けては通れないということでまずはAWS Lambdaについて調べてみました。(2021年5月現在)
## AWS Lambda
https://docs.aws.amazon.com/ja_jp/lambda/latest/dg/welcome.html
AWS Lambdaはサーバーレスでコードの実行環境を提供し、ソースコードをデプロイするだけでプログラムを実行してくれるサービスになります。プログラムとは別にトリガーをというイベントを用意し、イベントが呼ばれるたびにデプロイしたプログラムが実行されます。
例えば、API Gatewayへリクエストがあったときに送られた内容によって外部のDBサービスとやり取りをして結果を返すREST APIのような動きを行ったり、DynamoDBのテーブルが更新されたときに処理を行ったり、S3バケットに画像がアップロードされた時に画像を変化する処理を行ったりと他のAWSサービスと連携し
NodejsでDynamoDB使ってみた
## 背景
はじめて業務でDynamoDBを使用したため、基本的なものだがメモを残して、自身のナレッジとして蓄えようかと## 環境
– node.js
– DynamoDB
– Lambda## 経験した関数
### 登録
– put#### パラメータ
– TableName: テーブル名
– Item: 登録対象“`
ex))
TableName: ‘test-table’,
Item: {
‘id’: 1,
‘name’: ‘test’,
}
“`
### 取得
– get#### パラメータ
– TableName: テーブル名
– Key: AttributeValueのカラム名(一般的なTableのprimary key)“`
ex))
TableName: ‘test-table’,
Key: {
‘id’: 1
‘sort’: 1
}
“`
### 検索
– scan#### パラメータ
– TableName: テーブル名
– FilterExpression: SQLの条件式
– Express
aws-vaultを用いてAWS SAMローカル実行をIDE上で行う方法。
## 事前設定
IDEはPyCharmを使用します。
AWS Toolkit for PyCharmのPluginインストール## アクセスキーによる認証ではなく、aws-vaultにて認証処理
– ~/.aws/config にて[default]にcredential_process追加します。
※credential_processとは外部プロセスの標準出力から認証情報を取得する仕組みとのことです。セキュリティ面の考慮が必要であることに留意してください。– 通常使用しているprofileはそのままで大丈夫です。なければ追記をお願いします。
“`
[default]
region = ap-northeast-1
credential_process = aws-vault exec –json default[profile pycharm-test]
source_profile = default
role_arn = arn:aws:iam::xxxxxxxxxxxxxxxxxxxxxx
region = ap-northeast-1
“`
CloudFront FunctionsでBasic認証ができるか試してみた
# はじめに
結論を申し上げるとできませんでした。悲しみが深いです。
「用法用量を守って正しくお使いください」という言葉がぴったりです。
Basic認証をCloudFrontで実装したいならLambda@Edgeを使いましょう。参考資料:
– [https://michimani.net/post/aws-about-runtime-of-cloudfront-functions/](https://michimani.net/post/aws-about-runtime-of-cloudfront-functions/)
– [https://dev.classmethod.jp/articles/cloudfront-functions-usecases/](https://dev.classmethod.jp/articles/cloudfront-functions-usecases/)
– [https://aws.amazon.com/jp/blogs/news/introducing-cloudfront-functions-run-your-code-at-th
AWS Lambda
#Lambda サーバレス
EC2インスタンスの代わりにコードを実行することで、効率的なアーキテクチャを実現する。
利用者は、ソースコードだけを準備すればすぐに実行できるようになり、自動的にスケール等をおこなてくれる。##Lambdaの特徴
・実行基盤は全てAWSが管理
・AWSサービスと連携させることで簡単にイベントドリブンなアプリケーションを実行可能
・Node.js/javaで書かれたコードを実行可能
・100ミリ秒単位でコード実行時間に対しての課金でありコスト効率が非常に高い
・オートスケール##Lambdaがサポートしている言語
・Node.js
・Ruby
・PowerShell
・Python
・C#
・Java
・Go##Lambda関数
Lambdaを利用するには、Lambda関数という単位で、実行プログラムとその実行トリガーとなるイベントを事前に定義します。実行数に応じて支払いが発生するため、 Lambda関数が無期限に実行されないようにタイムアウト設定がなされています。 指定されたタイムアウトに達するとLambda関数は実行を終了します。そのた
[Node]AWS LambdaからDynamoDBを操作する
こんにちは take-2405です。
今回はnodeでAWS Lambda関数を作成しました。(DymanoDBも触りました)
今後開発する際のテンプレートとして残しておきたいと思います。
(今回はDynamoDBのデータを取得しています)
“`javascript:index.js
const AWS = require(“aws-sdk”);
// DBと接続 (regionを指定するとaws accountに紐づくDynamoDBに接続されます。)
const dynamoDB = new AWS.DynamoDB.DocumentClient({
// region は人によって変わります。日本だとap-northeast-1かな?
region: “ap-northeast-1”
});
exports.handler = async (event) => {
//DynamoDB のクエリを記載する
let getDatas = async (argument) => {
const params = {
PostmanでJSONをPOSTし、DynamoDBに格納したときのメモ
# 概要
Postmanを用いてJSONをPOSTし、JSON内の情報をDynamoDBに格納するための環境を構築したためメモを残します。# 1.DynamoDBのテーブル作成
パーティションキーとソートキーは以下のように設定しました。右下の青い作成ボタンを押すとテーブルが作成されます。
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/1516301/d18c0a13-717d-dd56-63b3-024cd26b76bd.png)# 2.Lambda関数の作成
JSONの情報をDynamoDBに格納する仕事をしてくれるLambda関数を作成します。ランタイムはPython 3.7を用いました。
IAMでLambdaがDynamoDBに書き込みできるようにロールを作成し、適用してください。“`python:data-store.py
import boto3
from decimal import Decimaldynamodb = boto3.resource(‘dy
EC2/Win の Software Inventory を作ってみた。 Describe して DynamoDB に Put。lambda/python 3.8 で。
動作イメージ。
1.ec2/describe_instances を実行し、InstanceIDを取得
2.「1」で取得した InstanceID を引数として、ssm/list_inventory_entries を実行し、Software の Entry を取得
3.「1」と「2」の結果を引数として、dynamodb.put_item を実行し、DDBテーブルに入力。
を繰り返す。以下では、各ステップの動作を確認した上で、最後にがっちゃんこする。
###Step1. EC2のリストを取得してみる。
“`python:lambda
import boto3
import jsondef lambda_handler(event, context):
#EC2クライアント定義
ec2_client = boto3.client(‘ec2’)#EC2インスタンスのリストを取得するため、describe。
response = ec2_client.describe_instances()#インスタンス台数分Inventoryを
EC2 インスタンスの特定の情報を収集する
素人が自分のノートとして書いてますが、改善点あれば是非コメントください
###リージョン指定
ec2クライアント定義時に、region_name = ‘us-west-2’ 。“`python:lambda-python38
import json
import boto3def lambda_handler(event, context):
#ec2 client を定義、引数の region_name = ‘xxx’ でリージョン指定。
ec2client = boto3.client(‘ec2’, region_name = ‘us-west-2’)#describe した値を response に入力
response = ec2client.describe_instances()#response を出力
print(response)
“`### Describeで出力される順番を使った特定のインスタンスを指定。
response[‘Reservati
ssm inventory を aws lambda / python3.8 でたたいてみた。
素人が自分のノートとして書いてますが、改善点あれば是非コメントください
###まず AWS CLI でコマンドを確認
InstanceID と インベントリタイプの指定が必要。“`awscli:aws-cli
aws ssm list-inventory-entries –instance-id i-xxxxxxxxxxxx –type-name AWS:Application
“`
今回リストしたかったのは PV Driver。確認出来た。“`awscli出力:awscli出力(一部抽出)
{
“TypeName”: “AWS:Application”,
“InstanceId”: “i-xxxxxxxxxxxxxxx”,
“SchemaVersion”: “1.1”,
“CaptureTime”: “2021-05-17T10:44:06Z”,
“Entries”: [
{
“Architecture”: “x86_64”,
“Ins
describe 等で取得した情報を Dynamo DB に保存する
素人が自分のノートとして書いてますが、改善点あれば是非コメントください
DynamoDBテーブルに入力する値を渡された関数だけをピックアップ。
“`python:aws-lambda-python3_8
import json
import boto3def lambda_handler():
#DynamoDBテーブルはあらかじめ作ってある前提。本来なら、テーブルが無ければ作るみたいな感じにすべき。
table_name = ‘test’#DynamoDBテーブルに行として追加する情報を item として定義
item = {
“db-instance-id”: ‘i-xxxxxxxxxxxx’,
“db-instance-version”: ‘1.23.3’
}#DynamoDBクライアントを定義
dynamodb_client = boto3.resource(‘dynamodb’)#テーブルにItemを入力
d