AWS関連のことを調べてみた2022年05月28日

AWS関連のことを調べてみた2022年05月28日
目次

SSMでリモートホストにPortForwardingする

# はじめに

下記アップデートにて、SSMのドキュメントでPortForwardingができるようになりました。
https://aws.amazon.com/jp/about-aws/whats-new/2022/05/aws-systems-manager-support-port-forwarding-remote-hosts-using-session-manager/

リンク先のドキュメントは何も書いてないに等しかったので、調査がてら試してみることにしました。
(尚、コンソールのセッションマネージャーやRunCommandからできたら楽だったのですが、現状はできない模様です)

# やりたいこと

今回はローカルPCからプライベートサブネット上のDocumentDBにログインしてみます。
“`
【接続経路】
ローカルPC(WSL2)→EC2(AmazonLinux2)→DocumentDB(Port:27017)
“`
※接続先がDocumentDBなのは今案件で使っていて試しやすかっただけで他意はないです(EC2やRDSでも可能です)
※そのせいでMongo-sh

元記事を表示

SQS、SNS、SNS+SQSからのイベントを比較してみた

## はじめに
業務でLambdaと組み合わせてSQSやSNSをよく使うのですが、イベントを正しくハンドリングする必要があります。
イベントの構造についてドキュメント等があるかもしれませんが、検証した方が早いと思い、自分で検証環境を作って確認してみました。

## 概要

以下によるイベントの構造をLambdaでログ出力して検証します。

– SQS
– SNS
– SNS + SQS

## 設定

### Lambda

以下のLambdaを作成し、イベントをログ出力します。
“`index.js
exports.handler = async (event) => {
console.log(`event: ${JSON.stringify(event)}`);
const response = {
statusCode: 200,
body: JSON.stringify(‘Hello from Lambda!’),
};
return response;
};
“`

### IAM
LambdaがSQSの

元記事を表示

Lambda boto3 の run-instances でEBSボリュームを暗号化した時の嵌り

Lambda 関数で boto3 を利用時、run-instances を使用して EC2 マシンを作成する際にEBSボリュームを暗号化する設定を入れると、インスタンス起動してすぐに Terminate されてしまいました。

“`
…(snip)…
response = client.run_instances(
BlockDeviceMappings=[
{
‘DeviceName’: ‘/dev/xvda’,
‘Ebs’: {
‘VolumeSize’: 20,
‘VolumeType’: ‘gp3’,
‘KmsKeyId’: ‘xxxx-xxxx-xxxx-xxxx-xxxx’,
‘Encrypted’: True

元記事を表示

Amazon Lambda デプロイ&アップデート用のスクリプト(PowerShell)のテンプレ作ってみた

“`json:trust-policy.json
{
“Version”: “2012-10-17”,
“Statement”: [
{
“Effect”: “Allow”,
“Principal”: {
“Service”: “lambda.amazonaws.com”
},
“Action”: “sts:AssumeRole”
}
]
}

“`

deploy.ps1
“`powershell:deploy.ps1
#メモリはデフォルト
#Layer不要の場合
$NAME = “LAMBDANAME”

#Deploy用
Write-Output “————————————————————-”
$TIMEOUT = 60
$REGION = “us-east-1”
$ROLENAME = “ROLLNAME”
$HANDLERPATH = “main.FU

元記事を表示

【AWS / Omniverse】 GPUインスタンスでOmniverse Createを動かす際GPUが認識されない

# TL;DR

AWSのGPUインスタンスでOmniverseを使うにはゲームドライバのインストールが必要でした。
手順はAWSにあるけど、Windows向けは英語しかないよ。

# やりたかったこと

[Omniverse](https://www.nvidia.com/ja-jp/omniverse/)を触ってみたかったのですが、GPU複数枚が刺さったマシンを買うのはお財布的に厳しい……
AWSのGPUインスタンスなら初期投資がなくてもお試しできる!と目論見を立てました。

# 実行環境

以下が一緒であれば再現すると思います。

– インスタンス: g4dn.xlarge
– GPU: Tesla T4
– OS: Windows Server 2022

# エラー内容

Omniverse Launcher、Createのインストールは問題なく完了したので、Createを起動しようとするとスプラッシュ画面だけ出て反応しない。。。
実行ディレクトリをたどって`omni.create.bat`を直接起動すると、以下のエラーが出ました。OmniverseからGPUが認識さ

元記事を表示

TerraformでCloud Storageのバケット名を変更する際の罠

最近よくデータ基盤構築の仕事をしているため、TerraformでGCPをいじったりしています。今回はCloud Storageのバケット名を変更する際に罠にはまりやすいところを紹介します。もちろん、Cloud Storageだけでなく、他のサービスやAWSなどにも活用できそうな箇所があるではないかと思います。

:::message
環境
“`
Terraform v1.1.2
on darwin_arm64
provider registry.terraform.io/hashicorp/google v4.15.0
“`
他の環境は正しく動作するかは未検証です。
:::

## 経緯

下記のバケットを作って検証環境に反映した後、PRを出しました。
“`tf
resource “google_storage_bucket” “my_bucket” {
name = “my-bucket”
storage_class = var.gcs_storage_class.coldline
proje

元記事を表示

S3トリガー(オブジェクト作成イベント)によるLambda実装の注意点

# 概要
Lambdaの開発時にS3トリガーとした実装を求められることもある。本記事は、S3トリガーを実装するときに注意すべき点を記載しておく。

# 実装イメージ
S3バケットのオブジェクトをトリガーにLambda関数が呼び出される
![s3_lambda.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/54819/a885b981-92a8-88f9-ebe7-b69e7ad06f94.png)

# S3トリガーによるイベントタイプ
– オブジェクトの作成イベント
– オブジェクトの削除イベント
– オブジェクトの復元イベント
– 低冗長化ストレージ (RRS) オブジェクトのイベントロスト
– レプリケーションイベント
– S3 ライフサイクルの有効期限イベント
– S3 ライフサイクルの移行イベント
– S3 Intelligent−Tiering 自動アーカイブイベント
– オブジェクトのタグ付けイベント
– オブジェクト ACL PUT イベント

馴染みのあるイベントはオブジェクトの作成イ

元記事を表示

AWS CloudFormationのテンプレートをLayer別に作成してクロススタック参照を作ってみた。その3 [ Application-Layer編 ]

## 前回のまでのおさらい
前回のSeculity-Layer編では通信のポートを制御するセキュリティグループを作成した。最後となる今回はEC2など主要な構成をテンプレートで構築していく。
– [その1 [ Network-Layer編 ]](https://qiita.com/ezakiglico0215/items/262c93ef781ac98ca5b9)
– [その2 [ Security-Layer編 ]](https://qiita.com/ezakiglico0215/items/272cf7bae52775e6a9f9)

## 概要
テンプレートと言われる構築環境をコード化させたファイルに記載し、スタックと呼ばれる作業を行うことでGUI上で作成した状況と同じ環境が自動的に作成される。1つのテンプレートに全ての環境を記載することも可能だが、AWSからは各レイヤー別に分けることがベストプラクティスと言われている。

:::note
今回は以下3つのLayerに分けて作成する。
– Network Layer  
– Security Layer
– **Applic

元記事を表示

AWS CloudFormationのテンプレートをLayer別に作成してクロススタック参照を作ってみた。その2 [ Security-Layer編 ]

## 前回のまでのおさらい
前回のNetwork編ではベースとなるVPC、Subnet,IGW、RouteTなどを作成した。今回は次のステップとして重要なセキュリティ構成をテンプレートで構築していく。
– [その1 [ Network-Layer編 ]](https://qiita.com/ezakiglico0215/items/262c93ef781ac98ca5b9)

## 概要
テンプレートと言われる構築環境をコード化させたファイルに記載し、スタックと呼ばれる作業を行うことでGUI上で作成した状況と同じ環境が自動的に作成される。1つのテンプレートに全ての環境を記載することも可能だが、AWSからは各レイヤー別に分けることがベストプラクティスと言われている。

:::note
今回は以下3つのLayerに分けて作成する。
– Network Layer  
– **Security Layer   今回はここ!**
– Application Layer
:::

## クロススタック参照
各レイヤー別にテンプレートを作成し1つの環境構築を行うためには、テンプレート間の

元記事を表示

AWS CloudFormationのテンプレートをLayer別に作成してクロススタック参照を作ってみた。その1 [ Network-Layer編 ]

## AWS CloudFormationとは
CloudFormationはYamlもしくはJSONを使用してAWSリソースを自動で構築するAWSサービスでAWS環境をコードでテンプレート化しておくことで、効率化、ミスの軽減、複製の簡易化などが可能になります。

## 概要
テンプレートと言われる構築環境をコード化させたファイルに記載し、スタックと呼ばれる作業を行うことでGUI上で作成した状況と同じ環境が自動的に作成される。1つのテンプレートに全ての環境を記載することも可能だが、AWSからは各レイヤー別に分けることがベストプラクティスと言われている。

:::note
今回は以下3つのLayerに分けて作成する。
– **Network Layer   ←今回はここ!**
– Security Layer
– Application Layer
:::

## クロススタック参照
各レイヤー別にテンプレートを作成し1つの環境構築を行うためには、テンプレート間の互換性が必要になる。そのためには`クロススタック参照`を使用して他レイヤーの値を参照できるようにコードに’組込関数’と呼ばれ

元記事を表示

AWS CloudShellのテーマを変更することでアカウントを見分ける

# 背景
本番アカウントと検証アカウントをスイッチロールして使い分けている場合に、
うっかり検証アカウントのつもりで本番アカウントで作業をしてしまうのを防ぐため、
CloudShellのテーマを変更することで、どちらの環境を使っているか気づけるようにする。

# 手順
以下のようにテーマを設定する
* 本番環境:Dark(デフォルト)
* 上記以外:Light

# ポイント
__本番=Dark__ というルールにしておけば、
何かの拍子に設定がクリアされてしまった際に「検証アカウントのつもりが本番アカウントでした!!」という事態を防ぐことができる。

# 注意
テーマのデフォルトをユーザー毎に切り替えることができるようになったり、デフォルト値が逆になるみたいな変更が行われないことを祈ること。

元記事を表示

【文字起こし】そこのDockerfile書いてるあなたちょっと待って、そのコンテナって安全ですか?(AWS Summit Online 2022 DEV-01セッション)

# 本セッションについて

## 想定視講者

* コンテナというテクノロジーやAWSのコンテナサービスについて理解がある方
* コンテナを使ったアプリケーションを作成している方/作成する予定があるが、コンテナイメージのセキュリティについて不安を持っている方

## ゴール

* より安全なコンテナイメージを作成するポイントを理解する


# 話すこと話さないこと

## 話すこと

* コンテナイメージ作成時の課題
* より安全なコンテナイメージ作成のためのポイント
* コンテナイメージ作成の補助ツール

## 話さないこと

* アプリケーションコードのセキュリティ
* ビルドのパフォーマンス改善(キャッシュの活用、BuildKit、BuildXなど)
* 言語やフレームワーク特有のDockerfileの最適化
* コンテナイメージ以外のスコープのセキュリティベストプラクティス


# システム構成図

* Amazon ECS on Fargateを中心としたWebサービス
* Java/Spring Bootを利用したWebアプリケーション


# Docke

元記事を表示

GitHubからの通知が来なくてもCodeBuildを動かしたい・・・・・・

## 概要

GitHub 障害時(例: [2022-05-27 JST](https://www.githubstatus.com/incidents/zhtplv7zd052))に、WebHook関連の通知が止まってしまい、関連する処理が停止してしまうことがあります。
ただ、 Gitリポジトリが生きていれば開発は進められるので、この時にCI/CDが動かないのは辛いです。

本記事では、GitHubの変更をトリガーに AWS CodeBuild を稼働させるような場合に、手動で Build を開始させる操作例を記載します。

### 参考

– [AWS CodeBuild | ビルドの実行 (コンソール)](https://docs.aws.amazon.com/ja_jp/codebuild/latest/userguide/how-to-run.html#how-to-run-console)

## 想定構成

GitHub -> [event] -> AWS CodeBuild

特定ブランチやgitタグのpushのGitHub管理のイベントをトリガーにCodeBuild

元記事を表示

AWS CDK Python の v1 to v2 へのアップグレード手順

# はじめに

AWS CDK を実行すると、 AWS CDK v1 の開発がメンテナンスモードになるというアナウンスが出るようになった。

“`
NOTICES

19836 AWS CDK v1 entering maintenance mode soon

Overview: AWS CDK v1 is entering maintenance mode on June 1, 2022.
Migrate to AWS CDK v2 to continue to get the latest features
and fixes!

Affected versions: framework: 1.*, cli: 1.*

More information at: https://github.com/aws/aws-cdk/issues/19836

If you don’t want to see a notice anymore, use “cdk acknowledge “. For example, “cdk a

元記事を表示

AWS IoTのトピックにJavaプロジェクトからMQTTをpublishした(aws-iot-device-sdk-java使用)

# はじめに
– 結論だけ(何が必要なのかだけ)知りたい人は準備と出来上がったソースたちを読んで下さい。(~~でもできれば私の格闘様子も読んでほしい~~)
– aws-iot-device-sdk-javaを使用したくても公式ドキュメント(英語)しかなくて本当に辛かったので、私みたいな人を救いたくて自分用に残してたメモをほぼそのまま載せることにしました。救えるかは知りません。
– AWSの構築手順などは割愛してます。あくまでJavaプロジェクト側の話のみです。
– aws-iot-device-sdk-javaはv2でなく**v1を使用してます**。v2はまた少し違いそうなのでご注意を。

– 全体の参考ドキュメント
[https://github.com/aws/aws-iot-device-sdk-java](https://github.com/aws/aws-iot-device-sdk-java)

– APIドキュメント
[http://aws-iot-device-sdk-java-docs.s3-website-us-east-1.amazonaws.com](http

元記事を表示

[cURL] PHPにてAWSから外部へPOSTする

CRMシステムのHubSpot導入にあたり社内システムで活用しているAWSから売上実績を定期的にHubSpotへAPIで投げる案件があり、Node.jsで仕組みを作った矢先、導入環境に合わず(?)phpで書くことに。phpでバックエンドと思ったものの案外すっきり出来たので、忘れないうちに~~メモ書き~~投稿。

# MySQLへの接続

mysqlに接続。そして取ってきたデータをAPI用の配列にプッシュ。HubSpotのAPIは10件/回の上限のため10件に達したらAPIで投げるようにする。

“`PHP:php
connect_error) {
echo $cn252->connect_error;
exit();
} else {
$cn252->set_charset(“utf8”);
}

$sql = “SE

元記事を表示

API GatewayのJWT検証にFirebase Authenticationを使う

こんにちは。

今、こんな感じのアーキテクチャでサービスを作ろうとしています(簡略化してます)

![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/256853/366ebcd4-1ef1-e018-10ef-6eabaeee1b71.png)

IDaaSとして過去の資産が使えるFirebase Authenticationを利用し、認証済みのユーザーのみAPI Gatewayから先のAPIにアクセスできるというアーキテクチャです。

API GatewayのJWT AuthorizerをGoとかPythonで作ってる記事はありましたが、Node.js & Typescriptでの日本語記事が無かったので、書いておきます。

#### Goの実装例
https://kaminashi-developer.hatenablog.jp/entry/2021/02/24/142735

#### Javascriptの実装例
https://qiita.com/kousaku-maron/it

元記事を表示

VPCフローログ調査Athena

* DATABASE作成
* TABLE作成
* PARTITION作成
後、以下

“`
SELECT
from_unixtime(starttime, 9, 0) AS starttime_jst,
from_unixtime(endtime, 9, 0) AS endtime_jst,
interfaceid,
sourceaddress,
destinationaddress,
sourceport,
destinationport,
protocol,
numpackets,
numbytes,
action,
logstatus,
sublocationtype
FROM .


WHERE
AND (sourceaddress = ‘‘ OR sourceaddress = ‘‘)
AND destinationaddress = ‘
AND from_unixtime(starttime, 9, 0) >= cast(‘2099-12-

AWS Lambda(Python)にインストールされているライブラリ一覧

# AWS Lambda(Python)にインストールされているライブラリ一覧

## 概要

AWS Lambdaはサーバーの管理を必要としないプログラム実行環境です。
API GatewayやCloudWatch Eventsなどをトリガーとして設定することで、非常に簡単かつ手軽にコードを動かすことが出来ます。
扱えるプログラミング言語としては、PythonやNode.js, Goなどメジャーな言語はだいたいサポートされていますが、ググって出てくる情報の多さからPythonが使われることが多い印象です。

そこで、Lambdaに用意されているPython実行環境にはじめからインストールされているライブラリとそのバージョンを調べたので、調べ方と合わせてまとめました。

## 調べ方

簡単です。
標準モジュールのpkg_resourcesを使うことで、その環境にインストールされているライブラリを一覧表示することができるので、これをLambada自体で実行するだけです。

“`python
import pkg_resources

def lambda_handler(

【AWS】VPC内のEC2インスタンスから外部FTPサーバへ通信したい時のポート設定

# はじめに
あるVPC内のPrivateサブネットにあるEC2インスタンスから同VPC内のPublicサブネットにあるNATゲートウェイを経由して外部FTPサーバへパッシブモードで通信させる際に行った、セキュリティグループやネットワークACLの設定を備忘として残しておきます。

# FTPについて
FTPでは2つのTCPコネクション「**コントロールコネクション(制御用)**」と、「**データコネクション(データ転送用)**」を使ってファイル転送を行っています。
また、FTPの通信には、サーバからクライアントに対して接続要求を行う「**アクティブモード**」と、クライアントからサーバに対して接続要求を行う「**パッシブモード**」の2パターンがあります。

FTPがアクティブモードの場合、 以下のポートが使用されます。(今回の設定では対象外)
>・コントロールコネクション(制御用):21番ポート
>・データコネクション(データ転送用):20番ポート

FTPがパッシブモードの場合、 以下のポートが使用されます。
>・コントロールコネクション(制御用):21番ポート
>・データコネクシ