- 1. Rustに入門してみる〜1日目 SAMを使ってAWS Lambda上で動作させる〜
- 2. 【AWS10分間チュートリアル】Hello, World!をサーバーレスで実行する(Lambda)
- 3. SSMパラメータストアから10件以上のデータを取得する
- 4. AWS SAMにハンズオンで入門してみた
- 5. AWS API Gateway+EC2でセキュアなREST APIを構築する
- 6. AWS Lambdaに外部モジュール(numpy,scipy,requests等)をデプロイする
- 7. 【備忘録】AWS Lambda関数でLambda関数を呼ぶ invoke
- 8. AWS Lambda関数でNode.js レイヤーを作る
- 9. 【AWS CDK】AWS CloudWatch AlarmsからのメッセージをGoogle Hangouts Chatに自動通知する構成を速攻で作る
- 10. AWSのCICDの練習(CodePipeline/ECS/Lambda)
- 11. APIGatewayでWebSocketを利用した場合のOpen時の認証処理
- 12. DynamoDBとStepFunctionsで初めてサーバーレスバッチ処理をつくってみた
- 13. lambda で heic 形式の画像を扱うためにやったこと
- 14. Lambda関数をBlue/GreenデプロイメントするCodePipelineをCloudFormationで自動構築する
- 15. AWSのサーバレスサービス試してみた (Lambda・DynamoDB・APIGateway)
- 16. あのボタンを押したらM5Stackに今何してるを表示させる
- 17. AWS lambda(Node.js)でオレオレ証明書(self-signed)を一時的に信頼してSSL通信を行う方法
- 18. SlackのSlashCommandをAWS LambdaのPythonで実装したときにタイムアウトで困っている場合
- 19. 【AWS】CodeStarでPython Lambda環境を作ってHelloWorldする
- 20. AWS lambdaで setTimeout を待つ(await, callback2つの手法)
Rustに入門してみる〜1日目 SAMを使ってAWS Lambda上で動作させる〜
# 初めに
今年の正月くらいにRustの公式の入門みたいなページを読んだはいいけど何も作らず今日まで来てしまったので、
いい加減何か作ろうと思ったらちょうどいい題材があったのでそれで入門しようという感じ。
家のサーバで動かしてもいいですが `AWS Lambda` がコスト的にも管理的にも楽なのでこれでやります。
アプリはあんま作らないので割と初心気味最終的に作るものですが、
このコロナのご時世で会社全体でリモートとなり、今まで雑にやってきたけどSlackのステータスはしっかり変更しようね!
…とはなったけどめんどくさいとか忘れてたとなるのでその辺りをいい感じにしてくれるものを作ろうと思います。# 方針
ステータスの方針についてはまだ決まってないのもあるのでとりあえずですが、
1日一回業務開始時間に実行させ、
今日が土日か自分の終日予定に休み系のワードがあればステータスを休暇に変え、なければステータスなしに変更するものを作ります。
もしくは業務終了時間に固定で業務終了に切り替えるもの。まず ` AWS Lambda` でRustで動かします。
# 公式のサンプル
【AWS10分間チュートリアル】Hello, World!をサーバーレスで実行する(Lambda)
# 概要
社内でAWSを使ったシステム設計を任される予定があり、AWSのサービスを勉強中です。
チュートリアルと画面が異なるため、記事にしています。以下もご覧いただけると幸いです。
[【AWS10分間チュートリアル】Docker コンテナのデプロイ](https://qiita.com/tyariponzu614/items/573231bf72115034eca2)
[【AWS10分間チュートリアル】ReactJSアプリをデプロイしてホストしてみた(CI/CD)](https://qiita.com/tyariponzu614/items/0b3b9c4c47bf4542d308)
[【AWS10分間チュートリアル】Lightsail でWordPressインスタンスにアクセスする](https://qiita.com/tyariponzu614/items/c1fb2cee1ace2d5f25b2)# 教材
10分間チュートリアル
https://aws.amazon.com/jp/getting-started/tutorials/「Hello, World!」をサー
SSMパラメータストアから10件以上のデータを取得する
SSMパラメータストアから複数のパラメータを一括で取得したい!というときには`get_parameters`や`get_parameters_by_path`を使うといい感じに取れる。
ただ、これ知らなかったが一度に10件までしか取得できないようで、それ以降取得するには返却されるトークンを使ってリトライしないといけないらしい。
SSMパラメータストアの`/HOGE/`以下のパスに11件のパラメータを作っておきlambda(python3.8)で実験。
“`python:lambda
import json
import boto3ssm = boto3.client(“ssm”)
def lambda_handler(event, context):
params = dict()
responseSSM = ssm.get_parameters_by_path(
Path = “/HOGE”,
WithDecryption = False
)
for param in responseSSM[“Parame
AWS SAMにハンズオンで入門してみた
#はじめに
4月22日に行われたAWS主催の「さぁ!サーバーレスを始めよう!サーバーレスハンズオンもくもく会」に参加し、その際に行ったハンズオン「[サーバーレス環境 構築自動化 編](go.aws/2vuWHuy)」の備忘録となります。#目的
**AWSは触らないと忘れる!だから触る!!**#ハンズオンの内容
>AWS Hands-on for Beginners – Serverless #2 では、前回の Serverless #1 で構築した翻訳 Web API を AWS Serverless Application Model (AWS SAM) を用いてテンプレートから構築します。前回のハンズオンでは全ての工程を手作業で(マネージメントコンソール上で)構築していきました。今回のハンズオンではこの構築作業をテンプレート化し、作成したテンプレートから AWS リソースを構築していきます。テンプレート化することで、そのテンプレートをバージョン管理できるようになる、チーム内でレビューがしやすくなる、といった利点があり、プロダクト開発をより効率的に進めることができます。す
AWS API Gateway+EC2でセキュアなREST APIを構築する
# 背景
「AWSを使ってAPIを構築したい」という要望は山程あると思います。
その場合、API GatewayとLambdaを用いてサーバレスに構築することがほとんどです。
しかし、Lambdaにはメモリ・実行時間の制限があったり、Lambdaベースでコーディングしなければならなかったりといった不自由な点も存在します。
もしかしたらこれらの条件が理由でLambdaではなくEC2上にサーバを構築したいということがあるかもしれません。AWSに不慣れな場合、この方が手っ取り早い場合もあります。そこで、今回はAPI Gatewayを通してEC2内に立てた任意のポートにリクエストを送る手順をご紹介します。
# 設計
API Gateway+EC2といいましたが、間にLambdaを噛ませています。
LambdaからこのEC2サーバにHTTP経由でリクエストを送信します。
通常、Lambdaはネットワーク接続不可能に設定されていますが、private subnet内に設置することによって同VPC内へのアクセスを実現しています。![Screen Shot 2020-04-22 at 1
AWS Lambdaに外部モジュール(numpy,scipy,requests等)をデプロイする
AWS Lambda(以下、Lambda)に外部モジュールをデプロイする方法を見ていきたいと思います。ここではPythonを例に見ていきます。
実行順序
1. Amazon Linux 2(Lambdaの実行環境)を準備する
2. ソースファイルとともにLambdaにデプロイ
2. Lambda Layerを使う方法*2はどちらを選んでも構いません。
## 1. Amazon Linux 2(Lambdaの実行環境)を準備する
requestsモジュール等、内部でC言語などを使わず、Pure Pythonで書かれたモジュールの場合、このステップは不要です。
***しかし、numpyやscipyといった、C言語に依存するモジュールの場合、Lambdaの実行環境と同じ環境で開発するのが開発しやすくなります。 windowsやMacでインストールしたnumpyをzipで固めてデプロイしてもエラーとなります。***ここでは、Amazon Linux 2の環境として、公に公開されているDockerイメージ、***lambci/lambda:build-python3.7*** を使い
【備忘録】AWS Lambda関数でLambda関数を呼ぶ invoke
###Lambda関数から別のLambhda関数を呼びに行きたい時ってありますよね!
そんな時に使える方法を備忘録として残します。[公式ドキュメント該当ページ](https://docs.aws.amazon.com/ja_jp/lambda/latest/dg/invocation-sync.html)
呼び出す側のLambda関数 main
“`index.js
const AWS = require(‘aws-sdk’)
const lambda = new AWS.Lambda()let params = {
FunctionName: `invoked`,
InvocationType: ‘Event’,
Payload: JSON.stringify({
id: “xxxxxxxxxx”,
message: “xxxx”
})
}
con
AWS Lambda関数でNode.js レイヤーを作る
#対象者
AWSでLamdbaを使っている人/どんなことができるのか調べている人
LINEBotをサーバーレスで作りたい人
Lambdaのレイヤーという機能を知らない人/興味ある人
#下準備
とりあえずデスクトップに移動
`$ cd Desktop`
ディレクトリ作る
`$ mkdir nodejs`
nodejsディレクトリに移動
`$ cd nodejs`
初期化
`$ npm init -y `
レイヤーにしたいパッケージをインストール
`$ npm i xxxxx`
ex)LINEBotのSDKをインストールする場合
`$ npm i @line/bot-sdk`
nodejsディレクトリ自体をzipファイルに圧縮して下準備完了#AWSコンソール
ログイン→Lambda→レイヤー→レイヤーの作成
【AWS CDK】AWS CloudWatch AlarmsからのメッセージをGoogle Hangouts Chatに自動通知する構成を速攻で作るAWS CloudWatch AlarmsからのメッセージをGoogle Hangouts Chatに通知したいことがあるかと思います。
今回はその構成をCDKで作成してみました。## 環境
CDK CLI: 1.32.0
ローカルのNode: 11.15.0## 構成
今回は、`trigger-chat-cdk`というLambda関数を監視対象とし、「1分間に2回以上、関数が呼び出されたらエラーを挙げる」という条件を設定します。
以下は手順になりますが、[このリポジトリ](https://github.com/nomi3/cdk-alarm-to-hungout-chat)をcloneすれば、手順の3,4は省略できるので、より速攻で
AWSのCICDの練習(CodePipeline/ECS/Lambda)
AWSでCICD、FargateのBlueGreenDeployの練習を行う。
# 使用サービス
– CodeCommit/Build/Deploy/Pipeline
– CloudWatch Events
– Fargate
– Lambda作業で使用する資材は以下となる。
“`shell
.
├── 01-codecommit-ecr.yaml
├── 02-codebuild-pipeline-events.yaml
├── 03-ecs-alb.yaml
├── 04-codebuild-pipeline-events-update.yaml
└── httpd-repo
├── appspec.yaml
├── buildspec.yml
├── Dockerfile
├── fargate-task.json
└── index.html
“`資材のGithubの[リンク](https://github.com/udtren/aws-cicd-pipeline-ecs-customlambda)
# 作業内容
##
APIGatewayでWebSocketを利用した場合のOpen時の認証処理
# はじめに
AWSのAPI GatewayがWebSocket対応しています。
この接続を認証したもののみでOpenするのにどうするか?の話です。
wscatなどでコマンドで叩かれると接続だけはできちゃったりするので、そのあたりをどう防止できるかというものです。
今回は別のシステムなりで認証後に発行されたIDがDynamoDBにあり、ブラウザ側へ送信されてるのを前提とします。
$connect時にそのIDがついてる時だけconnectionIdをDynamoDBに格納したい時にどのように出来るかの話となります。# $connect時のみGetパラメータが取れる
もう結論出てるんですが、API Gatewayで設定したものはブラウザ上でnew WebSocket()などでOpenした時に、URLについたGetパラメータがいつも通りにLambda側で取得できます。ブラウザ側
“`
const socket = new WebSocket(“wss://xxxxxxx.execute-api.ap-northeast-1.amazonaws.com/prod?id=xyz”)
DynamoDBとStepFunctionsで初めてサーバーレスバッチ処理をつくってみた
# AWSでサーバーレスなバッチ
2つのAWSアカウント間(VPC Peering済み)で、一方のデータベースからデータ加工してもう一方のデータベースへ、のようなバッチをつくります。![qiita1.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/86958/b7864d8e-aab0-eac5-7906-a253e09f7425.png)
勉強も兼ねてAWSのサービスを積極的に使っていこうということで、
まずは間に [DynamoDB](https://docs.aws.amazon.com/ja_jp/amazondynamodb/latest/developerguide/Introduction.html) を挟み、分割した [Lambda](https://docs.aws.amazon.com/ja_jp/lambda/latest/dg/welcome.html) function で処理する形にしました。![qiita2.png](https://qiita-image-stor
lambda で heic 形式の画像を扱うためにやったこと
## 背景
iphone のカメラで保存された画像はデフォで heic という形式になっており、web ブラウザは現状解釈してくれない。そのため、他のjpgなどの画像と同じように扱うためにはサーバ側で加工する必要がある。[^1] 今回は、サーバ側でどうにかする手段をやってみたので残しとこうと思う。
## 内容
### 結論
lambda に imagemagick を仕込んだ lambda layer を連携させて、imagemagick を叩けばok
### 実装方法
lambda の runtime は node v12
lambda の管理には serverless framework
lambda layer はこの[リポジトリ](https://github.com/serverlesspub/imagemagick-aws-lambda-2)のものを使う。ただ、 heic を扱うためのライブラリが入っていないので同リポジトリに上がっていたPRからビルド手段を持ってきました。imagemagick のビルドフラグで heic を追加したり、必要なモジュールである、
Lambda関数をBlue/GreenデプロイメントするCodePipelineをCloudFormationで自動構築する
# 前提条件
以下の記事で手動構築していたCodePipelineのCI/CDパイプラインをCloudFormationで自動構築してみる記事。なので、構成やアプリケーションの内容は読んで把握しておくことが望ましい。[Amazon API Gateway/ALBのバックエンドで動くLambda関数をJava(Eclipse+maven)で実装する](https://qiita.com/neruneruo/items/8673af2a3ae0f8076627)
[ALBのバックエンドで動作するJava実装のLambda関数をBlue/GreenデプロイメントするCodePipelineを作る](https://qiita.com/neruneruo/items/73906cdc3c2aa699644f)最終的に目指すCI/CDパイプラインの構成イメージは以下。Lambda関数のフロントにALBがいる想定だが、このパイプラインでは触らない(厳密には、リスナーとターゲットグループは触る)ので割愛する。
![LambdaCFn.png](https://qiita-image-stor
AWSのサーバレスサービス試してみた (Lambda・DynamoDB・APIGateway)
AWSの花形と言えばサーバレスのサービスだろうと思ったので
awsのサーバレスサービス(Lamda)を中心に簡単な設計概念を解説してから
lamdaのハンズオン出来るように記事として書き起こしてみる。###参照:これだけでOK:awsアソシエイト
https://www.udemy.com/course/aws-associate/learn/lecture/13595998##このハンズオンで実施する内容
1.Lambdaと連携するDynamoDBの構築
2.Lambdaの構築
3.API GatewayによりAPIを構築する##今回構築するアーキテクチャ
apiを介してlambdaを呼び出して、lambdaがdynamodbからデータを取得するという関数を実行してその関数の実行結果に基づいてapiにdynamodbの取得した結果がapi側で取得されるという流れを作る。
![WS000001.JPG](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/99495/faa7be8c-9a96-632
あのボタンを押したらM5Stackに今何してるを表示させる
COVID-19の影響でリモートワークな人です。
—
今回は、**あのボタンを押したらM5Stackのディスプレイに今何してるか表示させる**
っていうのをやってみました。
## きっかけ
きっかけはソラコム小熊さんが投稿されてた
[M5stack で作る ON AIR サインで手に入れる平穏な在宅勤務環境](https://blog.soracom.jp/blog/2020/04/02/on-air-sign-on-m5stack/)
です。
ボタン使ってできるんじゃないかなーって思って、誰か(ソラコム某エバンジェリスト)が作るんじゃないかなーとちょっとボールを投げたら、
見事に投げ返されたので、まあ、面白いからやってみぜよと。
まあ、事実としては、居間でテレワークしている人がいるので、会議中に居間行きたくないので、それがわかるようにも使えそうだしってこともありまして。。。
技術力の問題で時間かかってしまいました。。。## できました。
### 構成
AWS lambda(Node.js)でオレオレ証明書(self-signed)を一時的に信頼してSSL通信を行う方法# はじめに
AWS lambdaのNode.js(https標準モジュール)で実装した、WEBサイトへhttpsのリクエストを投げる処理で、以下の2つのエラーが発生した際の対応についての記事です。
※急いでいる方、ソースコードだけ見たい方は[ここから見ればOK](#3オレオレ証明書self-signedを一時的に信頼する)です
SlackのSlashCommandをAWS LambdaのPythonで実装したときにタイムアウトで困っている場合こんな風にすればレスポンスを即時で返して2度めの呼び出しで後続処理をできるのでタイムアウトが出づらくなる。
呼び出し回数は倍になるけど。“`python
def lambda_handler(event, context):if “hoge” not in event:
event[“hoge”] = “fuga”
boto3.client(“lambda”).invoke(
FunctionName=context.function_name,
InvocationType=”Event”,
Payload=json.dumps(event),
)return {}
# 以下本当にやりたい処理
“`Pythonのは探しても見つからなかったので書いとく
LambdaからLambda呼ぶアクセス権限は別途設定する必要がある
【AWS】CodeStarでPython Lambda環境を作ってHelloWorldする
## はじめに
### 概要
このところ [AWS CodeStar](https://aws.amazon.com/jp/codestar/) を使った開発を行っています。
CodeStarはざっくりいうとCI/CDサービスとダッシュボードをまとめたサービスという理解でいます。
CI/CDツールもパッケージ化して作成してくれるので書いたコードがすぐに反映されるのでちゃちゃっと試したいときに便利なものではあります。
ただ作り込んでいくと(AWS初心者の私は)権限周りで躓くことが結構ありました。
今後S3アクセスやLambdaのVPC配置、EC2プロジェクトについても随時更新していく予定です。まずはローカルのテキストエディタでコードを編集・Pushして変更を確認するところまで。
### 前提
– 作業日時:2020/4/11
– ローカル環境
– PC:Mac
– OS:Catalina
– インストール済みコマンド:Git CLI, AWS CLI
– AWS環境
– ユーザー:root
– AWSリージョン:東京(ap-northeast-1
AWS lambdaで setTimeout を待つ(await, callback2つの手法)
`lambda` で、 `setTimeout` を利用する場合、何も意識しない場合 `lambda` の実行が終わってしまいます。
それを待つには、 `await` を使う方法がパッと思いつきますが、 `callback` を使っても待つことが出来ます。
## await を利用するパターン
`Promise` を使って書きます。
“`
exports.handler = async (event, context, callback) => {
await new Promise(resolve => {
setTimeout(() => {
console.log(‘waited!!!!!!!!!!!!’)
resolve();
}, 2000);
});
};
“`## callback を利用するパターン
`callback` メソッドは、実行前に `node` のイベントループが空になるまで待つようになっているので、 `setTimeout` が終わるまで待ち