Lambda関連のことを調べてみた2023年01月11日

Lambda関連のことを調べてみた2023年01月11日
目次

AWS LambdaでSSM RunCommandを実行する(AWS SDK for JavaScript v3)

# 概要
LambdaからSSMのRunCommandを実行する処理の作成方法について記述します。言語は`JavaScript`でSDKのv3(バージョン3)で書いてあります。

v3では、サービスのインスタンスを作成して、非同期で`send`メソッドを呼び出すというのが全サービス共通の書き方になります。`send`メソッドはPromise型を返します。何のアクションを行うかは`send`メソッドの引数の型によって判断されます。

## 公式ドキュメント

https://docs.aws.amazon.com/AWSJavaScriptSDK/v3/latest/

# サンプルプログラム

## 処理の流れ

SSMClient生成 → SendCommandCommand生成 → send実行 → ListCommandsCommand生成 → send実行 (RunCommandが終了するまで繰り返し) → send実行 → send実行 → …

注意点としては、RunCommandを実行した後その処理がサーバーで正常終了したのか異常終了したのかすぐにわからない点です。R

元記事を表示

【iOS】【AWS】はじめての個人アプリ(iOS+AWS)で開発からリリースまでやった話(苦戦あり)

## 概要
 2023年1月1日に、はじめて個人アプリをリリースしたので
 開発からリリースまで苦労だらけだったので
 同じようなところに苦戦するような人がいたり、参考になれば嬉しいです。
 今回は全体感の話なので細かいところは別記事で追記していこうと思います。

## なぜ個人アプリを作ろうと思ったのか
 コロナで1週間何もせず寝込んでいた時に
 よく使っていたアプリ自体の更新が止まっていて不便な思いをしたので
 自分で新しいアプリを作ろうと思ったのがキッカケ

## どういうアプリを作りたかったのか
 FF14のまとめ記事と動画などを検索せずに見れるアプリ
 最新情報が探しづらいし情報が古かったりするから最新情報だけ欲しいアプリを目指す。
 ![アプリレビュー説明資料.001.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/215997/7cf71fe5-538b-1523-4a20-bf5b55a9ea05.png)

## バックエンド AWS開発編 (試しながら1〜2週間)
 バックエンドは

元記事を表示

Step Functions Distributed Mapで超高速な並列処理を実行してみた

## この記事で紹介していること

以前、投稿した[Lambda×Stepfunctions の繰り返し処理](https://qiita.com/yuken/items/36ca91c345919752fa4d)を環境へ展開した矢先、
re:invent2022で**Step Functions Distributed Map**が発表されました。(あと少し早ければ、、、)
この記事では、噂の新機能に関して紹介します!

– Distributed Mapとは?
– どんな処理が向いている?
– やってみた体験レポート

![Untitled (8).png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/2956558/0d9b63fa-3dca-cb15-15f8-e29c8ca9db0b.png)

## Distributed Mapとは?

Mapフローは以前からStep Functions にありました。
これまでのMapとの違いについてはAWS公式ドキュメントがわかりやすくまとめてくれています。

元記事を表示

【AWS】動的Webサイト構築の備忘録

## はじめに

初心者の入門編として、AWSを用いて、動的Webサイトを構築する。

https://aws.amazon.com/jp/cdp/midscale-webservice/

## システム概略
システムダイアグラムは以下の通りである。

![Frontend3.jpg](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/483556/c73ad07c-0dd5-362e-22be-17441cfbde05.jpeg)

使用したサービスは以下の通りです。
– フロントエンド
– AWS EC2
– AWS Route 53
– AWS Elastic IP
– [Let’s Encrpyt](https://letsencrypt.org/ja/)(無料のSSL認証書発行局)
– [お名前.com](https://www.onamae.com/)(日本最大級のドメインレジストラ、ドメイン取得サービスサイト)
ICANN(ドメイン、IP、ポートの

元記事を表示

【AWS】基本的なWebアプリケーションをクイック開発する

下記公式サイトのチュートリアルを参考に基本的なWebアプリケーションを一時間で構築してみる。

https://aws.amazon.com/jp/getting-started/hands-on/build-web-app-s3-lambda-api-gateway-dynamodb/

〇 今回構築したWebアプリケーションの構成図
![We_applivcation_basic.jpg](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/483556/cbc9c613-991d-66a3-c5b9-84c94b19e96f.jpeg)

## 開発手順

### 1. AWS AmplifyでWebアプリケーションの静的リソースをデプロイする

1. ローカルPCに下記のindex.htmlを用意し、ZIP形式で圧縮する
“`html:index.html



元記事を表示

EC2インスタンスの自動起動停止を、より柔軟にしてみた(Lambda)

# はじめに
こんにちは、はやぴー(@HayaP)です。
皆さん、サーバーの節約対策していますか?

クラウドを使うのであれば、なるべくサーバーを
効率的に使いたいものです。

そこで、今回は
EC2インスタンスの自動起動を、より柔軟に実装した
経験を記したいと思います。

## 対象読者
– サーバー代を節約したい。
– サーバー毎に起動、停止時間を柔軟にしたい。

この記事が、クライドネイティブな運用の参考になれればと願っています。

# 概要
## 実現方法
AWS公式記事や、技術ブログを見ていると
複数のやり方がありますが、主に下記だと思います。

– [インスタンススケジューラー(AWS ソリューションライブラリー)](https://aws.amazon.com/jp/solutions/implementations/instance-scheduler-on-aws/)
– System Managerを用いた方法
– Lambdaを用いた方法

今回は、Lambdaを用いて
より柔軟なサーバーの自動起動停止を実現したいと思います。

## 要件
タイトルにもありますが

元記事を表示

ロググループに保存されているログを定期的にS3にエクスポートしてみた。

# はじめに
こんにちは、山田です。
現在携わっている案件で、CloudWatchロググループに保存されているログを一定期間経過後に長期保管用に作成したS3バケットにエクスポートするコードを作成したので以下に記載していきます。
よろしくお願いいたします。
# 全体概要図
全体概要図は以下の通りです。
![](https://storage.googleapis.com/zenn-user-upload/e34fe2b9e3ac-20230107.png)
**①:ロググループ一覧とS3フォルダ一覧を比較します。
②:比較した結果S3フォルダに名前がないもの似関しては、新規でS3フォルダを作成します。
![](https://storage.googleapis.com/zenn-user-upload/f3cc42e21f43-20230107.png)
③:ロググループに保存されているログをS3にエクスポートします。**
# コード
以下が今回作成したコードは以下になります。
“`python
import boto3
import datetime
import time

de

元記事を表示

DynamoDBで1:nのデータ構造を表現する

こんにちは太郎です。
最近、DynamoDBを触る機会があり1:nのデータ構造を表現しようとしました。
しかし、DynamoDB特有の設計方法に戸惑ったのでメモを残します。

## 前提条件
この先は例を挙げながら進めます。
ひとつのチームに複数の選手が所属しているという想定です。
チームの一覧を表示する画面と属する選手の一覧を表示する画面があります。
DynamoDBではRDBとは違い、どのようにデータにアクセスするのか次第で構造がかなり変わるため、最初にユースケースをリストアップすることが重要になってきます。

### テーブル設計
RDBで設計するなら2つテーブルを作って、一方が片方を参照しているという設計が一般的かと思います。
しかし、DynamoDBではテーブルの数は極力減らすという方針があります。
それぞれの一覧が取得できるように以下のような設計にしました。

| ID(PK) | dataType(GSI) | teamName | memberName | teamID |
| – | – | – | – | – |
| 1 | team | teamA |
| 2 |

元記事を表示

ELB(ALB,NLB,CLB)アクセスログを、CloudWatch Logsに出力させてみた(Lambda)

# はじめに
こんにちは、はやぴー(@HayaP)です。
日々のログ監視、皆さんはどうされていますか?

– とりあえず、ログをS3に出力している
– CloudWatchで見たいな、、と思いつつ諦めている

なんて人は、少なくないはずです。

そこで、今回は
ELBアクセスログを、CloudWatch Logsに出力した
経験を記したいと思います。

## 対象読者
– ログ監視設計者
– CloudWatch Logsに、ログを集めたい
– 毎回S3に、ログを見に行くのがしんどい

この記事が、クライドネイティブな運用の参考になれればと願っています。

# 概要
## ELB(ALB,NLB,CLB)アクセスログとは
ロードバランサーに送信されるリクエストの、詳細情報が記されているログです。

– リクエストを受け取った時刻
– クライアントの IP アドレス
– サーバーレスポンス
などの情報が含まれます。

https://docs.aws.amazon.com/ja_jp/elasticloadbalancing/latest/application/load-balance

元記事を表示

AWS SAMでJavaScript v3のLambdaをデプロイする(Node16以下)

この記事は Lambda の Runtime が Node16 以下で`SDK for JavaScript v3`を AWS SAM でデプロイする方法について記述しています。

:::note info
Node18以降はv3に対応しているので、v3で書かれたソースだけをデプロイしても動きます。代わりに、Node18以降でv2で書いている場合はv2のSDKをソースに含めてデプロイする必要があります。
:::

プロジェクトを`sam init`で作成した場合、ルートパスでデプロイすると`template.yaml`や`__tests__`などのファイルもアップロードされてしまい見た目が悪いです。そのため`template.yaml`で`CodeUri`を指定すると思います。

“`yaml:template.yaml
SampleFanction:
Type: AWS::Serverless::Function
CodeUri: src/
“`

このようにすると、v3のSDKが`sam build`の対象に含まれなってしまいます。この場合は`package

元記事を表示

re:Invent 2022 サーバーレス関連の新サービス、アップデートまとめ

# re:Invent 2022で発表されたサーバーレス関連のアップデートをまとめました
## AWS Lambda SnapStart
https://aws.amazon.com/jp/blogs/news/new-accelerate-your-lambda-functions-with-lambda-snapstart/
– Lambda ファンクションのコールドスタート時のレイテンシを大幅に短縮する新機能
– Corretto ( ランタイムのファンクションをサポートし、最大 90% のレイテンシを削減
– Firecracker のスナップショット機能と、その他いくつかの機能改善によって実現。実行環境
の初期化終了時点のスナップショットを使うことで、初期化時間を削減
– 東京を始めはじめ 9 リージョンで一般利用開始に

### 試してみました
上記のブログの通り、[springboot2のサンプルアプリケーション](https://github.com/awslabs/aws-serverless-java-container/tree/main/samples

元記事を表示

CloudWatchとAWS Lambdaを用いてAmazon EFSのスループットモード変更を自動化してみた

# はじめに

業務で使用している`Amazon EFS`の`BurstCreditBalance`が2週間程度で枯渇するため、これまではその都度手動でスループットモードを変更するという対応を取っていたのですが、`CloudWatch`と`AWS Lambda`を用いて対応を自動化してみましたのでその際に設定した内容を記します。

## 注意事項
– この記事の内容は執筆時点のものであるため、最新の設定方法とは異なっている可能性があります。
– 入力が任意の設定項目については記載を割愛している場合があります。
– 自身の備忘録も兼ねて記載しているので内容の誤りや、より効率的に実現する方法がある可能性があります。気になる点などがありましたらお気軽にコメントいただけますと幸いです。。。!

# やったこと

1. Amazon SNS – トピック作成
1. CloudWatch – アラーム作成
1. AWS Lambda – 関数作成
1. IAM – 許可ポリシー追加

## Amazon SNS

Lambda関数を実行させるトリガとしてトピックを2つ作成しました。

| トピック

元記事を表示

Lambda ローカルでサンプルアプリを動かす

前回の記事でLambdaのローカル開発環境を構築したので、今回はAWSチュートリアルのサンプルをビルドして動かしてみる。

AWSのチュートリアルは下記を参考にする。

https://docs.aws.amazon.com/ja_jp/serverless-application-model/latest/developerguide/serverless-getting-started-hello-world.html

前回執筆した記事は下記の通り。

https://qiita.com/nobumichi/items/e876a448b7be21e7e51a

# 作業環境
– Windows11 Pro 22H2
– Windows Terminal
– PowerShell 7.3.1
– Python 3.9.13
– aws-cli 2.9.11
– sam-cli 1.67.0
– git 2.39.0.windows.2

# サンプルアプリ用の作業ディレクトリを作成する
任意の作業ディレクトリを作成する。私は`Documents`配下に`lambda`ディレク

元記事を表示

Dialogflow(GCP) + Lambda + Line Messaging API でLine Bot作ってみた

### 背景

母のお仕事の手助けとして、簡単なファスティング計算サイトを学生時代作っていたのですが、Herokuの無料公開プランが終了し閲覧不可になっていました。
これを機に、母に一番馴染みがあるLineで同じようなことをできないかと思い作ってみました。

#### Dialogflow

GCPのチャットボットが簡単に作成できるサービス。
AWSでいうAmazon Lexのようなもの。
https://wk-partners.co.jp/homepage/blog/webservices/dialogflow/

今回のようなLine等サービスとの連携や、Webhook設定も比較的簡単に行えました。
また、料金もテキスト認識であれば**無料**!!(1分あたり180リクエストまで)
Amazon Lexはお金かかっちゃうので、無料というところに惹かれました。

#### Line Messaging API

LineBotを作成し、応答メッセージの送受信を行うことができる。
応答のパターンもユーザーの反応や流

元記事を表示

Visual Studio のテンプレートを使ってAWSにWebAPIを作成する

# はじめに

AWS上にWebAPIを作成するときは、VisualStudioのテンプレートを使ってAWSにデプロイすると手早く環境を構築することができます。そのやり方について色々教える機会が増えてきたのでアウトプットしました。

# 前提条件

– Visual Studio 2022 をインストール済み。
– AWS Toolkit for Visual Studio 2022 をインストール、Credentialsを設定済み。

# 作成手順

## プロジェクトの作成

Visual Studio 2022を起動し、「新しいプロジェクトの作成」をクリックします。
新しいプロジェクトの作成画面で、右上のテンプレートの検索から「C#」「AWS」を条件として選択します。
すると以下のように4つ程候補が表示されるので、今回は「AWS Serverless Application with Tests (.NET Core -C#)」を選択します。
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.co

元記事を表示

S3に保存されているCSVファイルをjsonレスポンスで受け取る

## 概要
この記事では、S3上に保存されたCSVファイルをLambdaで取り出し、jsonで返す方法を紹介します。
HTTP通信の窓口にはAPIGatewayを使用しています。
APIGatewayのイベントをトリガーにLambdaからS3へアクセスします。

この記事では、S3のポリシー設定、Lambdaのロール設定、LambdaとAPIGatewayの設定は割愛し、Lambdaの実装にフォーカスします。

## 前提条件
CSVファイルは以下のものを使用しました。
全体のソースコードは下に載せます。
またAWSサービスの認証はそれぞれの環境でお願いします。

“`csvs:hoge.csv
“name”,”age”
“fuga”,”22″
“hoge”,”20″

“`

## `Lambda`の実装
実装には`Go`を用います。
大まかに以下の流れです。
1. s3にアクセスするためのクライアントを作成
2. s3からオブジェクトを取得する
3. オブジェクトを構造体にマーシャルする
4. 全ての処理が成功したらレスポンスを返す

以下で詳しく説明していきます。

###

元記事を表示

2022年にpythonとAWS Lambdaで作ったもの

# 1. まえがき
去年作ったプログラムのまとめ記事となります。

# 2. 競馬関係のTwitter BOT
2022年の初めに、[「AWSではじめるインフラ構築入門」](https://amzn.asia/d/9bYYI0P)の本を購入し、アプリを作成
自分でも作成して見ようと、興味がある競馬関連のTwitterのBOTを4つ作成

・1号機(今日のハクサン地方競馬出走情報Bot)

・2号機(明日のメイショウ冠名馬中央競馬出走情報と今日の競走結果情報BOT)

– 3号機(マカオ競馬の日本人騎手レース結果Bot)

https://twitter.com/macau_keiba/status/16094690722778972

元記事を表示

API Gateway経由でLambdaを呼び出す

## 概要
API Gatewayを自身で構築したことがなかったので、簡単なものを構築してみた。
/test(GET)でLambdaを呼び出せるようにする。

## 手順
1. Lambda関数を作成
2. API GatewayでREST APIを作成
3. APIをデプロイする
4. APIにアクセス

## Lambda関数を作成
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/255243/22611345-9295-9f9e-80ec-393dec386d6b.png)
コードは初期のまま
“`
export const handler = async(event) => {
// TODO implement
const response = {
statusCode: 200,
body: JSON.stringify(‘Hello from Lambda!’),
};
return response;
};

元記事を表示

Lambdaローカル開発環境構築手順

下記ブログを参考に、Lambdaのローカル開発環境構築手順をまとめる。

ローカルでLambda開発環境の構築手順紹介

# 本記事執筆時の作業環境
– Windows11 Pro 22H2
– Windows Terminal
– PowerShell 7.3.1

# Pythonインストール
下記を参考にPythonをインストールする。

~~https://blog.pyq.jp/entry/python_install_221102_win~~

https://starter-guide.od.pythonic-exam.com/ja/latest/python-setup/install-py39-win.html

2023/01/02追記:LambdaランタイムのPythonのサポートが3.9までだったため、
参考記事を差し替えた。

https://docs.aws.amazon.com/ja_jp/lambda/latest/dg/lambda-runtimes.html

下記コマンドでPythonのインストールを

元記事を表示

Lambdaから直接Parameter Storeの値を取得する

今まではboto3を使ってParameter Storeから値を取得していました。
“`python
import boto3

ssm = boto3.client(‘ssm’)
response = ssm.get_parameters(
Names=[Parameter Store Key],
WithDecryption=True
)
“`
が、以下のアップデートにより、直接Parameter Storeなどから値を取得できるようになったので、実際に試してみた際のメモです。

https://aws.amazon.com/jp/about-aws/whats-new/2022/10/aws-parameters-secrets-lambda-extension/

# 必要な権限
SDKを使って実装していたときと同様に、Lambdaの実行ロールに以下の権限を渡す必要がある。
* `ssm:GetParameter`
* `kms:DecryptSecureString` (SecureStringを取得する場合に必要)

# 必要なレイヤーの追加
## AW

元記事を表示

OTHERカテゴリの最新記事