AWS

ShellScript で踏み台サーバ(EC2)経由で DB にアクセスして SQL を実行する方法

  • POST
ShellScript で踏み台サーバ(EC2)経由で DB にアクセスして SQL を実行する方法について調査した結果を備忘録として残しておく 環境 OS: MacOS DB: PostgreSQL フォルダ構成 ./ ├── sql/ │ └── execute.sql └── execute_sql.sh 実際のコード 環境変数(xxx 部分)は実際の環境に応じて書き換える #!/bin/sh # DEV EC2_HOST_DEV=xxx EC2_PEM_KEY_DEV=xxx DB_HOST_DEV=xxx DB_PORT_DEV=5432 DB_NAME_DEV=xxx DB_USER_DEV=xxx DB_PASSWORD_DEV=xxx # STG EC2_HOST_STG=xxx EC2_PEM_KEY_STG=xxx DB_HOST_STG=xxx DB_PORT_STG=5432 DB_NAME_STG=xxx DB_USER_STG=xxx DB_PASSWORD_STG=xxx # PRD EC2_HOST_PRD=xxx EC2_PEM_KEY_PRD=xxx DB_HOST_PRD=xxx DB_PORT_PRD=5432 DB_NAME_PRD=xxx DB_USER_PRD=xxx DB_PASSWORD_PRD=xxx # Shared SQL_DIR=sql SQL_FILE=${SQL_DIR}/execute.sql LOG_FILE=log/batch.log read -p "Which environment connect to? (dev/stg/prd): " input_environment # Convert to uppercase environment=$(echo "${input_environment}" | tr '[:lower:]' '[:upper:]') echo "【Start Processing】$(date "+%Y/%m/%d %H:%M:%S")" >> ${LOG_FILE} 2>&1 # Check the environment case "${input_environment}" in "dev" | "stg" | "prd") echo "Connecting to ${environment} environment..." >> ${LOG_FILE} 2>&1 EC2_HOST=$(eval "echo \${EC2_HOST_${environment}}") EC2_PEM_KEY=$(eval "echo \${EC2_PEM_KEY_${environment}}") DB_HOST=$(eval "echo \${DB_HOST_${environment}}") DB_PORT=$(eval "echo \${DB_PORT_${environment}}") DB_NAME=$(eval "echo \${DB_NAME_${environment}}") DB_USER=$(eval "echo \${DB_USER_${environment}}") DB_PASSWORD=$(eval "echo \${DB_PASSWORD_${environment}}");; *) echo "Please enter the correct environment." exit;; esac scp -i ${EC2_PEM_KEY} -r ${SQL_DIR} ${EC2_HOST}:~/ ssh -i ${EC2_PEM_KEY} -T ${EC2_HOST} <<EOF >> ${LOG_FILE} 2>&1 # Set DB Password export PGPASSWORD=${DB_PASSWORD} # Execute SQL psql -p ${DB_PORT} -h ${DB_HOST} -d ${DB_NAME} -U ${DB_USER} -f ${SQL_FILE} # Remove SQL rm -rf sql EOF

AWS Lambda の amplify-login で始まる関数の要否判断について

  • POST
AWS Lambda の amplify-login で始まる関数の要否判断について調査した結果を備忘録として残しておく 調査に至った事象 AWS より以下のメールが配信されていた 対象の Lambda 関数を確認すると掲題のものが指摘を受けていたが、作成した記憶はなく要否の判断がつかなかったため、調査を行なった [アクションが必要です] AWS Lambda での Node.js 16 のサポート終了について | [Action Required] AWS Lambda end of support for Node.js 16 English follows Japanese | 英語のメッセージは日本語の後にございます いつもお世話になっております。 [Amazon Health Dashboard はこのコミュニケーションに関するリマインダー通知を定期的にトリガーする場合があります] お客様の AWS アカウントに現在、Node.js 16 ランタイムを使用する AWS Lambda 関数が 1 つ以上あることが判明したため、ご連絡いたしております。 Lambda での Node.js 16 のサポートは 2024 年 6 月 12 日に終了します。これは、2023 年 9 月 11 日に Node.js 16 がサポート終了 (EOL) したことに続くものです [1]。 Lambda ランタイムサポートポリシー [2] で説明されているように、Lambda の言語ランタイムのサポートはいくつかの段階で終了します。2024 年 6 月 12 日以降、Lambda は Lambda 関数で使用される Node.js 16 ランタイムにセキュリティパッチやその他の更新を適用しなくなり、Node.js 16 を使用する関数はテクニカルサポートの対象ではなくなります。また、Node.js 16 は AWS コンソールで使用できなくなりますが、AWS CloudFormation、AWS CLI、AWS SAM、またはその他のツールを使用して、Node.js 16 を使用する関数を作成および更新することはできます。2025 年 2 月 28 日以降、Node.js 16 ランタイムを使用する新しい Lambda 関数を作成することはできなくなります。2025 年 3 月 31 日以降、Node.js 16 ランタイムを使用する既存の関数を更新することはできなくなります。 2024 年 6 月 12 日までに、既存の Node.js 16 の関数を利用可能な最新の Node.js ランタイムにアップグレードすることをお勧めします。Node.js 16 の関数のリストは、AWS ヘルスダッシュボードの [影響を受けるリソース](Affected resources) タブにあります。 サポートの終了は関数の実行には影響しません。関数は引き続き実行されます。ただし、これらはサポートされていないランタイムで実行されるため、AWS Lambda チームによるメンテナンスやパッチの適用は行われません。 この通知は、$LATEST 関数バージョンに Node.js 16 ランタイムを使用する関数に対して生成されました。次のコマンドは、AWS CLI [3] を使用して、Node.js 16 を使用して特定のリージョンのすべての関数 (公開されている関数バージョンを含む) を一覧表示する方法を示しています。アカウントでこのような関数をすべて見つけるには、各リージョンで次のコマンドを繰り返します。 aws lambda list-functions --region us-west-2 --output text --query "Functions[?Runtime=='nodejs16.x'].FunctionArn" 廃止予定の 180 日前から、Trusted Advisor を使用して、公開されている関数バージョン [4] を含め、Node.js 16 ランタイムを使用するすべての関数を識別することもできます。 ご不明な点やサポートが必要な場合は、AWS サポート [5] までお問い合わせ下さい。 ・・・ amplify-login で始まる Lambda 関数とは? Amplify Studioを有効化した際に自動的に作成される関数

AWS EC2 Instance Connect で接続する方法

  • POST
AWS EC2 Instance Connect で接続する際にエラーが発生したため、接続できるように調査した内容を備忘録として残しておく 前提 AWS EC2 Instance Connect をインストールしておく 手順 Amazon EC2 コンソール を開く ナビゲーションペインで、[インスタンス] を選択する インスタンスを選択し、[接続] を選択する [EC2 Instance Connect] を選択する ユーザー名を検証し、[Connect (接続)] を選択してターミナルウィンドウを開く 以下のエラーが発生 インスタンス接続の設定中に問題が発生し、ログインに失敗しました。このインスタンスが開始したばかりの場合は、1~2 分後にもう一度試してください 公式のトラブルシューティングを確認 => セキュリティグループに、EC2 Instance Connect サービス IP がホワイトリストにされていないのが原因だった 以下のコマンドを実行して EC2 Instance Connect サービス IP を確認する curl -s https://ip-ranges.amazonaws.com/ip-ranges.json| jq -r '.prefixes[] | select(.region=="<<対象リージョン>>") | select(.service=="EC2_INSTANCE_CONNECT") | .ip_prefix' セキュリティグループのインバウンドルールを更新して、手順 6 で確認した IP 範囲から TCP ポート 22 にアクセスできるようにルールを更新する 再度、EC2 Instance Connect に接続する