- 1. AWS LambdaのDestinationsを試してみる
- 2. やねうら王を AWS Lambda で動かす
- 3. Serverless Frameworkでevent scheduleをステージ毎に切り替える
- 4. Node.jsでGlobal Secondary Indexを使用して特定条件のレコードを抽出する
- 5. aws-sdkでAPIGatewayとLambdaの統合をセットアップする
- 6. AWS APIGateway + Lambda プロキシ統合 の利用でCORS設定にはまった話
- 7. Lambda + S3 + Transcribe で、日本語で自動音声吹き替え機能を作ろう!
- 8. [Lambda]割当メモリ一覧
- 9. AWS LambdaでECSのRunTaskを実行する
- 10. LambdaからBigQueryを実行する
- 11. Greengrass(v1.9.4)上でNode.js(v8.10)のLambdaのデプロイができない問題の解決法
- 12. 【AWS】CloudFormation::Macroを使って多数のIPを接続許可する
- 13. LambdaからSystems Managerを実行してEC2のバックアップを取得する
- 14. Serverless Framework で 自身のAPIのURLを取得したい
- 15. JenkinsからAWS Lambdaをデプロイする
- 16. LambdaからLightsail上のコンテナDB(MariaDB)へとアクセスする
- 17. IAMの既存ポリシーの名前に惑わされない
- 18. AWS Lambda を CloudFormation でサクッと作って awscli から実行する
- 19. LambdaでElasticsearch Serviceの手動スナップショットを取得する仕組みをCFnで一括デプロイ
- 20. [AWS]インスタンス起動時にIPアドレスを自動でRoute53に登録する
AWS LambdaのDestinationsを試してみる
AWSから割とすごい機能が発表されました。
Introducing AWS Lambda Destinations
https://aws.amazon.com/jp/blogs/compute/introducing-aws-lambda-destinations/![スクリーンショット 2019-11-27 6.51.44.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/102769/8dcc8bb4-f376-17ae-1ccf-b64739c3289b.png)
Lambdaの実行結果に従って次のアクション(AWSサービス)を指定できる、というものです。
成功/失敗の条件で流れを制御したい場合には、Step Functionsを使う必要もなく、Lambdaだけで完結することができるようになりました。早速試してみます。
# 呼び出し元のLambdaを適当に定義
こんな感じのPythonを書きます。(Python 3.7を利用)
“`python
import json
impor
やねうら王を AWS Lambda で動かす
[やねうら王](https://github.com/yaneurao/YaneuraOu) は 2019 年現在最も強い将棋 AI の一つです。AWS Lambda 上で実行できれば、API Gateway と連携したりして夢が広がります。
やねうら王 V4.88 を AWS Lambda 向けにビルドしてみよう。# 実行環境
AWS Lambda の実行環境 OS は Amazon Linux 2 なので、Amazon Linux 2 上でビルドすれば十分です。
SIMD 拡張命令は 2017 年時点で SSE 4.2 が動くらしい。– [AWS Lambda ランタイム](https://docs.aws.amazon.com/ja_jp/lambda/latest/dg/lambda-runtimes.html)
– [AWS LambdaのCPUを見てみる](https://qiita.com/kurimoto/items/eca091cccc54d7c07634)# ビルド
[Amazon Linux の Docker イメージ](https://hub.d
Serverless Frameworkでevent scheduleをステージ毎に切り替える
## 環境
* Serverless Framework
## やりたいこと
CloudWatch Eventの定期実行をステージングでは手動実行、本番では定期実行させたいということがあったので、備忘録として残しておきます。
## serverless.yml
至って簡単です。
“`yaml
service: hoge
provider:
name: aws
runtime: nodejs8.10
stage: ${opt:stage, self:custom.defaultStage}
region: ap-northeast-1custom:
defaultStage: dev
schedule_active:
dev: false
prod: true
default: falsefunctions:
hello:
handler: handler.hello
events:
– schedule:
rate: rate(30 minutes)
Node.jsでGlobal Secondary Indexを使用して特定条件のレコードを抽出する
## 環境
* Nodejs
* AWS Lambda
* AWS DynamoDB## はじめに
DynamoDBではパーティションキーもしくはレンジキーを使用してしか基本的には抽出が出来ないのですが、任意のキーを元に抽出を行いたいという時は、Global Secondary Index(以下GSI)を使用する事で任意のキーでレコードを抽出することが出来ます。
## 注意点
以下の点に気をつける必要があります。
* GSIは1テーブルにつき20件までしか作成出来ない
* GSIのキーに指定出来るカラムのデータ型は文字列、数値、バイナリのいずれかである必要があります
* Serverless Frameworkではまだそこまで自由なGSIは作成出来ないようなので、DynamoDBコンソールからGSIを作成する必要がある(ハッシュキー or レンジキー以外でのGSIの作成がうまくいかなかった)例えばboolean型のカラムをキーにGSIは作成出来ません(私がやろうとしていました…)
参考情報:
* [DynamoDB での制限](https://docs.aws.a
aws-sdkでAPIGatewayとLambdaの統合をセットアップする
# 概要
APIGatewayからLambdaを呼び出せるようにするまでの設定を`aws-sdk`を使って自動化したかったのでコードを書いてみました。
特に CORS の有効化の部分はなかなか資料がなく苦労しました。。。TypeScriptで書いているので型定義不要な方は適時読み替えてください。
上から順につなげれば動きます。# 実装コード
## REST API の作成
“`typescript
import AWS from “aws-sdk”;AWS.config.update({
region: “ap-northeast-1”,
accessKeyId: “XXXXXXXXXXXXXXXXXXX”,
secretAccessKey: “XXXXXXXXXXXXXXXXXXXXXX”,
});// APIGateway
const apiGateway = new AWS.APIGateway();/**
* REST APIを作成する
* @param apiName ステージ名
* @return REST APIのID
*/
AWS APIGateway + Lambda プロキシ統合 の利用でCORS設定にはまった話
#要約
AWSのAPIGatewayを利用してAPIを作ったが、CORSの設定がどうも上手くいかない、、、
という所にはまった話です。
(昔作ったAPIは動くのに、、、なんで!?( ゚д゚)ハッ! )
結論から言うと、
**「Lambda プロキシ統合」利用の場合、
CORSに関するレスポンスヘッダの設定は各自のプラグラム上でやれよ!:smirk:**
という事です。
GUI上で、CORSの有効化をしても、レスポンスヘッダの「Access-Control-Allow-Origin」は反映されません。
(統合リクエストのタイプがLambdaの場合に有効になります。)
CORSの有効化ボタンが押せちゃうので混乱しちゃいますよね;;AWS公式にも記載があります。
https://docs.aws.amazon.com/ja_jp/apigateway/latest/developerguide/how-to-cors.html
#1.過去のAPIGateway
AWS APIGatewayは以前からあるサ
Lambda + S3 + Transcribe で、日本語で自動音声吹き替え機能を作ろう!
こんにちは!
BeatFit エンジニアの飯塚です。
半年ぶりの投稿となります。エンジニアになって半年たち、今は、フロントエンドとバックエンドを主に担当しております。
が、そろそろ社内のインフラを Heroku から AWS へ完全移管する話が出たため、今年の6月頃から、AWSの勉強を開始しました。
先日、AWS ソリューションアーキテクトの資格をとりました。(1回落ちました。。)
が、実務では、まだまだ全然使いこなせていないので、これからも頑張っていきたいところです。今回、職場のコンテンツチーム(社長)より、動画の音声起こしができたら嬉しいと言う声が上がりました。
ちょうど、AWS Transcribe が 11/21に[日本語対応](https://tech.nikkeibp.co.jp/atcl/nxt/news/18/06528/?i_cid=nbpnxt_ranking)されたので、この機会に触ってみたいと思います。S3 アップロード → Lambda → Transcribe と言う流れで、実装します!
Lambda は全然詳しくないため、間違いや不適切な
[Lambda]割当メモリ一覧
メモとして残す。
[AWS Lambda の制限](https://docs.aws.amazon.com/ja_jp/lambda/latest/dg/limits.html)より
`128 MB から 3,008 MB まで、64 MB ごとに増加できます。`## 一覧
| メモリ(MB) |
|:————–:|
|128|
|192|
|256|
|320|
|384|
|448|
|512|
|576|
|640|
|704|
|768|
|832|
|896|
|960|
|1024|
|1088|
|1152|
|1216|
|1280|
|1344|
|1408|
|1472|
|1536|
|1600|
|1664|
|1728|
|1792|
|1856|
|1920|
|1984|
|2048|
|2112|
|2176|
|2240|
|2304|
|2368|
|2432|
|2496|
|2560|
|2624|
|2688|
|2752|
|2816|
|2880|
|2944|
|3008|
AWS LambdaでECSのRunTaskを実行する
## はじめに
ECSを用いたDockerでRailsのデータベース更新する場合、どうやってデータベース更新をすればいいのか悩むことになった。色々と調べた結果、ECSのRunTaskでデータベース更新を行う企業が多いと判明。
RunTaskをAWS Lambdaで実現するためにはどうすれば良いのかを纏める。## ECS RunTaskとは
ECSでDockerコンテナを動作させている。
これはDockerfileで指定したコマンドが動作している。Dockerコンテナに対して単発で実行できるのが特徴!
## 構成
– AWS Lambda(Python 3.8)
– Elastic Container Service (ECS)## 前提
ECSですでにDockerやEC2が立ち上がっている前提とする。### ECS情報
– クラスター名: `cluster-name`
– タスク定義: `task-definition-family`## RunTaskでbundle exec rails routesを実行する
“`python
import j
LambdaからBigQueryを実行する
# はじめに
LambdaからBigQueryのクエリを発行します。その調査記録です。
基本はAWSを使用していますが、定期的にGCPのBigQueryを参照する機会がありました。
簡単にLambdaで実行すると便利かと思いました。# 環境の概要
LambdaのPythonから、GCPのSDKを使用します。
GCPのSDKはレイヤーに保持します。
AWS側に、GCPの認証を設定する必要があります。SDKと言っているのは、Pythonのクライアントライブラリーのことです。
https://googleapis.dev/python/bigquery/latest/generated/google.cloud.bigquery.client.
Greengrass(v1.9.4)上でNode.js(v8.10)のLambdaのデプロイができない問題の解決法
※追記
Greengrass Nodejs SDKのGitHubに書いてますね。。
https://github.com/aws/aws-greengrass-core-sdk-js> Rename the file to nodejs8.10
> Make sure the file is not a symlink.シンボリックリンクもだめらしいです。
—
GreengrassにNode.js(v8.10)のLambdaをデプロイすると、エラーになります。
“`
Deployment xxxxx of type NewDeployment for group xxxxx failed error: worker with xxxxx failed to initialize
“`ログを確認すると、`nodejs8.10`というバイナリがないよと言っているようです。
“`console:/greengrass/ggc/var/log/system/runtime.log
[ERROR]-runtime execution error: unable to
【AWS】CloudFormation::Macroを使って多数のIPを接続許可する
初めての記事投稿です。
よろしくお願いします。# 使うもの
– CloudFormation
– Lambda(Python3)めんどくさいからソースと作り方だけくれって人向けにgithubに置いておきます。
コードは記事に書いてあるのと同じです。
https://github.com/nekotouma0114/CloudFormationMacroDemo# 事の始まり
僕「テスト環境の接続許可するIPって何があります?
お客さん「xxxとyyyとzzz….(数十個羅列※)お願いね!」
僕「あ、はい」※IPはばらばらでCIDRでまとめれないような状態
AWSのユーザガイド([AWS::EC2::SecurityGroup Ingres](https://docs.aws.amazon.com/ja_jp/AWSCloudFormation/latest/UserGuide/aws-properties-ec2-security-group-rule-1.html))を見る限りまとめてIPは指定できず、
CloudFormationにはループ構造が見当
LambdaからSystems Managerを実行してEC2のバックアップを取得する
## はじめに
EC2の定期バックアップを取得をするのに良い方法はないかと思っていたところ、SSMでスナップショットが取得できることを知ったので、Lambdaから実行してみました。
サーバーの作成は省略しますが、Systems Managerを使用するので、SSMエージェントがデフォルトインストールされているWindows Server 2019を使用しています。参考
[Windows インスタンスで SSM エージェント をインストールし設定する](https://docs.aws.amazon.com/ja_jp/systems-manager/latest/userguide/sysman-install-ssm-win.html)# やったこと
– Windowsサーバーの作成
– Systems Managerからバックアップ取得
– LambdaからSystems Manager ドキュメントの実行# Windowsサーバーの作成とIAMロール設定
バックアップを取得するため、EC2を1台作成します。
![image.png](https://qiita-im
Serverless Framework で 自身のAPIのURLを取得したい
### はじめに
Serverless FrameworkでAPI Gatewayを利用した際に
死活監視やなんらかの目的で
内部的にAPIを呼び出したい場合があるかと思います。ただ、デプロイされたあとにURLを確認し
Lambdaの環境変数に・・・などはちょっと面倒くさいので
serverless.yml内だけで設定できないかやってみました。### customにてURLを生成
本題部分です、API Gatewayで生成されるURLを文字連結します。
これでAPI GatewayのURLが生成できます。“` yml
custom:
region: ap-northeast-1
stage: ${opt:stage,”default”}
my_url:
{
“Fn::Join”:
[
“”,
[
“https://”,
{ “Ref”: “ApiGatewayRestApi” },
“.execute-api.
JenkinsからAWS Lambdaをデプロイする
# Jenkinsとは
初心者ですが、私の解釈としては自由度の高いCI/CDツールという位置付けです。
実行したい内容をJobという形で登録しておくことで自動で実行してくれます。
今回初めて触ってみたので、忘れないうちにメモしておきます。#手順
– コンソールから「新規ジョブ作成」を選択します。![スクリーンショット 2019-11-22 11.41.45.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/205918/98c74577-8b2c-b2ab-4737-49fcc347c22b.png)
– そのジョブの中に入り「新規アイテム作成」を選択。
基本的に一番上のフリースタイルでいいと思います。
![スクリーンショット 2019-11-22 11.47.00.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/205918/3afb99f4-5792-f3e4-6973-4354258ac4e4.png)–
LambdaからLightsail上のコンテナDB(MariaDB)へとアクセスする
初投稿の記事です。
私の環境ではEC2ではなくLightsailを使ってます。そして、その上にdocker-composeにてコンテナのDBを動かしています。この状況でLambdaからコンテナ上のDBへとアクセスする方法を探したのですが、ググった感じ日本語の記事など見つからず。
結論としてはVPCにLambdaを入れ、LightsailもVPC Peeringすれば普通にアクセスできました。分かってる人にしてみると、当たり前なのでわざわざ記事するほどでも無いんでしょうね…。###### 誰向け?
私と同じくAWSを始めたばかりや、初心者向けの内容だと思います。###### 前提
+ Lightsail上にdocker-composeによるDB(MaridaDB)がすでに立っている環境。
+ 恐らくこんな構成だと思います。
![aa.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/537256/1c1d45d2-d921-6459-6f31-7fdc1570d571.png)以下の手順で実施
IAMの既存ポリシーの名前に惑わされない
最近こういう事件がありました。
> AWS上のDynamoDBに対する権限を本来持っていないはずのエンジニアが、ローカルでDynamoDB localを試そうとして色々作業していたら、AWS上にテーブルを作成していた。やばい。
最初は「マジか。」となったんですが、幸いDynamoDBのテーブルをまったく作ったことのないAWSアカウント上だったので大事にいたりませんでした。
めでたしめでたし?
となるはずはもちろんないので、原因を探りました。
# IAMをよく見てみた
結論から言うと、`AWSLambdaFullAccess` という既存のポリシーをアタッチしたIAMユーザーのAccess Key IDとSecret Access Keyを設定したSDKでテーブルの作成を実行していたことが原因でした。
このポリシーの概要を確認すると
“`json
{
“Version”: “2012-10-17”,
“Statement”: [
{
“Effect”: “Allow”,
“Action”:
AWS Lambda を CloudFormation でサクッと作って awscli から実行する
# 概要
## 要旨
CloudFormation で Lambda を作って、Lambda を awsali から実行(invoke)する。## やりたいこと
– Lambda Function を CloudFormation で作成、削除したい
– CloudFormation のテンプレートに関数を埋め込んで一つのファイルだけで管理したい
– pros: テンプレートに埋め込むとs3へアップロードしておく等の事前準備が不要になる
– cons: 標準モジュール以外を使用する場合はテンプレート埋め込みの方法は使えない
– awscli から lambda を実行できれば十分
– HTTP公開は認証やDDoS対策が面倒
– HTTP公開やイベント登録はしない
– HTTP公開はAPIの設定が必要になる# 作業
## 前提
– awscliがインストールされており、認証もされている
– 以下のロールを持っている(もっと削れるかも)
– AWSLambdaBasicExecutionRole
– AWSLamb
LambdaでElasticsearch Serviceの手動スナップショットを取得する仕組みをCFnで一括デプロイ
Amazon Elasticsearch Service (AES) で手動スナップショット取得の仕組みをCloudformationで一気にデプロイします。かつCurator使って古いスナップショットは自動的に削除する設定になっています。スナップショット取るだけで意外に大変です。
PythonスクリプトはこちらのAWSのドキュメントにあるものベースにしてます。
https://docs.aws.amazon.com/ja_jp/elasticsearch-service/latest/developerguide/curator.html
# やりたいこと
これを作ります。スクリプトはAWSのドキュメントにあるものを、ほぼそのまま使っているので、読めばすぐわかるレベルだと思います。コメントも残ってます。![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/116068/fd25ed74-896a-60f6-77fb-fc1ebf2bd53f.png)
# 手動スナップショ
[AWS]インスタンス起動時にIPアドレスを自動でRoute53に登録する
# Elastic IP をケチりたい
たまにしか起動しないインスタンスに Elastic IP をアタッチするのはもったいない。といって、起動するたびにIPアドレスが変わるとホスト名でアクセスできなくて面倒くさい。
……というテーマで以前、[記事](https://qiita.com/keys/items/264a64c2841875d51cdd)を書きました。
今回はそれを推し進めて CloudWatch Event でインスタンスの起動を監視して、起動したら自動でIPアドレスを Route53 のAレコードに登録する、という Lambda を書きました。これでEIP(と無駄な支出)とはおさらばだ!
あと、余計かもしれないけどインスタンスを停止したときにレコードを削除するようにしてみました。意味あるかなぁ。
## 必要な権限
登録したい Route 53 のホストゾーンのレコード一覧を取得・変更するための権限:
– `route53:ChangeResourceRecordSets`
– `route53:ListResourceRecordSets`インスタンス