proxy経由でssh/scp接続を行う

proxyが経由で、sshを行う場合、proxyの設定が必要となります。 指定方法は、以下の通りです。

  • sshのオプションとしてproxyを指定する場合

1 connect-proxyパッケージをインストールします。

$ sudo apt install connect-proxy

2 proxyをオプションとして指定して、ssh接続を行います。

$ ssh -o "ProxyCommand connect-proxy -H http_user@http_proxy.example.com:8080 %h %p" 接続先ユーザ@接続先IP  -i 秘密鍵ファイルのPath

AWSを利用する場合、IPは、IPアドレスではアクセスできず、Public DNSを指定することでアクセスできました。理由は不明。

  • scpのオプションとしてproxyを指定する場合
    1 connect-proxyパッケージをインストールします。
$ sudo apt install connect-proxy

2 proxyをオプションとして指定して、scp転送を行います。

$ scp -r  -i  秘密鍵ファイルのPath -o "ProxyCommand connect-proxy -H プロキシ %h %p" 接続先ユーザ@接続先IP:送信元ファイルのPath   .
  • リモートからローカルへのデータ受信
I.E
$ scp -r  -i  /home/secretKey -o "ProxyCommand connect-proxy -H http:proxy.example.com:8080 %h %p" ubuntu@192.168.1.1:/受信データ   .
  • ローカルからリモートへのデータ送信
I.E
$ scp -r  -i  /home/secretKey -o "ProxyCommand connect-proxy -H http://proxy.example.com:8080 %h %p"  [送信データ]  ubuntu@192.168.1.1:/home   

特定の文字列以降を抽出したい (awk)コマンド

特定の文字列以降を抽出したい

以下のように”abcd123ABCD=123ABCD”という文字列があったときに、"="以降の文字列を抽出する。

$echo "abcd123ABCD=123ABCD" |  awk '{print substr($0,index($0,"=") )}'
=123ABCD

"="からカウントして2文字だけを表示する場合は、以下のように記載すr。

$echo "abcd123ABCD=123ABCD" |  awk '{print substr($0,index($0,"=") ,2)}'
=1

"=”より前の文字列を表示したい場合は、以下のように記載する。

$echo "abcd123ABCD=123ABCD" |  awk '{print substr($0,1,index($0,"=") )}'
abcd123ABCD=

上記は、substrで$0列目の文字列の1文字目から検索を初めて、”=”がある箇所までを表示する意味となる。

indexに+1や-1の記載をすることで、表示する文字列の微調整が可能。 以下の場合-4しているので、4文字分表示する文字列が減る。

$ echo "abcd123ABCD=123ABCD" |  awk '{print substr($0,1,index($0,"=")-4 )}'
abcd123A

補足

Indexの使い方

対象文字列を先頭から検索し、検索文字列が検出された最初の位置を戻り値として返します。 index(対象文字列, 検索文字列) 例えば1フィールド(列)目の文字列を先頭から検索して、"="の文字列の検出位置を特定したい場合は下記のように書きます。

index( $1, "=" )

substrの使い方

第一引数は文字の列(x列目)、第二引数はスタートする位置、第三引数は文字列の長さです。第三引数は省略可能です。 以下の場合、1列目の、indexで検出する位置から2文字目まで、を表示します。

awk '{print substr($1,index($0,"=") ,2)}

AWS Solution Archetet

ネットワーク関連

Elastic Network Interface(ENI)

  • 仮想ネットワークカードのこと。
  • 2枚目移行のENIを任意にアタッチすることができる。

AWS Direct Connect

  • AWSに接続する専用線のこと。
  • 最大100Gbpsまで対応可能。

Internet GateWay (IGW)

AWS Site-to-Site VPN

  • AWSVPCとユーザ独自のネットワークを接続するVPN。(ここでは、AWSVPCとユーザのオンプレ環境を接続する)
  • ユーザの独自のネットワークには、カスタマーゲートウェイを、AWSVPCには仮想プライベートゲートウェイをアタッチすることで接続を行う。
  • Accelerated サイト間VPN
    • Global Acceleratorを利用して、可用性と高いパフォーマンスを維持したVPN通信を行うことができる。

Rotue53

  • DNSレコードと呼ばれる、IPとURLをマッピングするテーブルを参照して、ルーティングを行う。ルーティングのポリシーは、以下のようなものがある。

    • シンプルルーティング
      IPとURLの静的マッピングによりルーティングを行う。
    • 加重ルーティング
      複数のエンドポイントに重みを設定して、重みに応じてDNSクエリに応答するルーティングを行う。
    • フェールオーバールーティング
      登録されているサーバーに対してのヘルスチェックを行い。利用可能なサーバにルーティングを行う。
    • レイテンシールーティング
      リージョンのレイテンシーに応じて、ルーティングを行う。
    • 位置情報ルーティング
      ユーザーのIPにより、位置を特定して、地域ごとに異なるレコードを返すルーティング
    • 地理的近接ルーティング
      ユーザーとリソースの場所に基づいて地理的近接ルールを作成して、ルーティングを行う。
    • 複数回答ルーティング
      ランダムに選ばれた最大8つの別々のレコードにIPを設定し、複数の値を返答するルーティング。

    • レコードとして、以下のようなものがある。

      • IPv4の場合は、Aレコード。IPv6の場合は、AAAAレコードを利用する。
      • MXレコード:メールサーバを指定するレコード
      • CNAME:ドメイン名を別のドメイン名に紐付けるレコード。
      • エイリアスレコード
        • CloudFrontやELBなどのAWSリソースとドメインを紐付けるためのテーブル。
        • 用途は、静的Webサイトとして設定されたS3パケット。CloudFront。ELB。AWS Elastic Beanstalk環境。
  • ホストゾーン

    • パブリックホストゾーン インターネットに公開されたDNSドメインレコードを管理するコンテナ。インターネットのDNSドメインに対するトラフィックのルーティングを管理する。
    • プライベートホストゾーン VPCに閉じたプライベートネットワーク内のDNSドメインのレコードを管理する。
Route53とELBの違い
  • ELBは、同じリージョン内でロードバランスさせる。リージョンを跨いだロードバランシングはできない。
  • 他方、Route53は、リージョンを跨いだ、ロードバランシングができる。

AWS Global Accelerator

  • ALB,NLB,EC2などの前段に配置することで、可用性とパフォーマンスを改善してくれるサービス。
  • ユーザに地理的に近いエッジロケーションからAWSのネットワークにルーティングしてくれるため、レイテンシーの改善が見込める。

ELB (Elastic Load Balancer)

  • 以下のような機能を提供する。
    • ヘルスチェック EC2のステータスを確認し、利用するEC2の振り分けを実施する。
    • クロスゾーン負荷分散 EC2の負荷に応じて、複数のAZに跨るEC2インスタンスに均等に負荷分散を行う。
    • 暗号化通信 SSL/TSL証明書をELBに設定することで、HTTPSTLS通信を行う。
    • スティッキーセッション セッション中に同じユーザから来たリクエストを継続して、同じEC2に送信する。
    • Connection Draining インスタンスが登録解除されるか、異常が発生した場合に、そのバックエンドインスタンスへの新規リクエスト送信を中止する。
    • ログ取得 ELBのログ取得を有効化する。ログは、S3パケットに収集される。

VPCピアリング

  • VPC間のネットワークを接続する。リージョンを跨いだVPCであっても、接続可能。

VPCエンドポイント

  • VPC内のAWSリソースが、VPC外のAWSサービスへの接続を可能にする仕組み。

AWS Transit Gateway

  • 複数のVPCVPCピアリングをハブ&スポークス方式で接続することができるサービス

ネットワークACLとセキュリティグループ

  • ネットワークACL

    • VPC/サブネット単位で、トラフィックの制御を行う
    • インバウンド設定だけでは、アウトバウンドの設定はされない
  • セキュリティグループ

    • サーバ単位で、トラフィックの制御を行う
    • インバウンドの設定を行えば、アウトバウンドも許可される

Storage関連

S3

  • 特徴
    • Http/Httpsでアクセス
    • ユニークな名称をもったパケットを作成し、オブジェクトを保存。
    • バージョニング可能
    • 最大5TBまでのアップロードが可能
    • 最低3箇所のAZ内に保存。
    • コスト
      • 容量/Request数に応じて課金
    • データ転送
    • 強い整合性モデルを採用しているので、データの同時更新が行われても、反映に誤差は生じない。
    • S3のデフォルト暗号化を利用すると、データの暗号化が行われる。暗号化キーの管理方法には以下のようなオプションがある。
      • S3が管理するキーによるサーバ側の暗号化(SSE-S3) S3に保存されるオブジェクトが、1意のキーで暗号化される。256 ビットの高度暗号化規格 (AES-256) GCM を使用してデータを暗号化する。キーの管理が不要。
      • AWS Key management Serviceに保存されているKMSキーによるサーバ側の暗号化(SSE-KMS) AWS KMSに設定した暗号化キーを利用した暗号化を実施。さらに監査機能を追加している。追加費用がかかる。
      • ユーザが指定下キーによるサーバ側の暗号化(SSE-C) ユーザーが指定したキーによるサーバ側の暗号化を行うことができる。
    • リージョン間をまたぐクロスリージョンレプリケーションの設定も可能。レプリケーションはオブジェクトの設定CRUD時に実施される。
    • S3インベント通知 S3内のイベントをトリガーとして、SNS/SQS/Lamdaに通知が可能。

S3 Glacier

  • 低価格で、大容量を保存可能
  • 取り出しに時間がかかる。

S3 Transfer Acceleration

  • 地理的に一番近いエッジロケーションを利用して、高速にデータをアップロードすることができる。

Amazon Athena(アテナ)

  • S3内のデータを標準SQLを利用して、分析を行うサーバレスサービス。S3 Selectよりも、高機能。

S3 Select

  • S3内のデータを、シンプルなSQLを利用してコンテンツのフィルタリングを行うことができる。

EBS (Elastic Block Storage)

  • 特徴
    • EC2のファイルシステムとして利用。
    • Ec2が停止しても、残る。
    • EC2とEBSは、1対多の関係。通常のファイルシステムのストレージと同様。
    • なお、Snapshotは、S3に保存される。
    • Raid1の状態。

EFS(Elalstic File Storage)

  • フルマネージド型共有File Storage
  • NFSで、Instance間で共有可能
  • 複数のAZ間で、レプリケーション
  • EFS Standard(通常向け)、EFS IA(Infrequent Access)低頻度向けがある。

Amazon FSx(Windows)

ストレージ性能

EC2

Amazon Data Lifecycle Manager(Amazon DLM)

  • EBSのスナップショットの作成、保存、削除の自動化が可能となる。

DATABASE

RDS (Relational DataBase Service)

Aurora

  • クラウド向けのRDBサービス
  • MySQL, PostgreSQLと互換あり。
  • 別リージョンに対して、リードレプリカを作成できる
  • AuroraのAuto Scaling
    • AuroraのAutoScalingは、CPU使用率やアクティブ接続数などをしきい値として、Auroraのレプリカの数を動的に変更させることができます。

DynamoDB

  • NoSQLのDB
  • コスト
  • 複数Regionにコピー可能。(マルチAZ構成はとれない。)
  • DynamoDB Auto Scalingを利用して、負荷が高いときにスケールアウトが可能。
  • 最大サイズは、400KB
  • DynamoDBのAutoScale
    • DynamoDBのAutoScalingは、DBのReadもしくは、Writeキャパシティを監視します。しきい値よりも、高い・低い場合にDynamoDBのテーブルのキャパシティを増加・減少させます。

DynamoDB Accelerator (DAX)

  • DynamoDB向けのキャッシュサービス。
  • 読み込み性能をマイクロ秒まで縮めたいときに利用。
  • DAXを利用して、リードレプリカをの作成が可能。

Amazon Redshift

  • フルマネージド型のデータウェアハウス。構造化、半構造化データの分析向けに利用する。
  • Redshift Spectrum
    • S3に保存されているデータをRedshiftにロードしたり、高度なクエリを実行することが可能。

WLM (Work Load Management)

  • Redshiftに対してのリクエストをQueueに詰め込み、制御することができる。
  • 分散検索・分析エンジン。 ログ分析、フフテキスト検索、ビジネス分析などで利用。

Amazon Neptune

  • フルマネージド型のグラフデータベースサービス。

キャッシュ関連

ElasticCache

CloudFront

  • Amazonコンテンツ配信ネットワークCDN)
  • AWSのエッジロケーションに配置される。
  • 機能
    • SSLをCloudFrontで終端できる。CloudFrontで暗号解除可能。
    • ユーザ入力(PUT,POSTが可能)
    • 静的コンテンツや動画を置くことができる。
    • フェールオーバ-オプションが提供されており、オリジンサーバに、プライマリーとセカンダリ-を設定できる

メッセージ・キューイングサービス SQS ・SNSAmazon MQ

SQS(Simple Queue Service)

* マネージドのキューイングサービス。標準キューとFIFOキュがある。
   * 標準キューは、最低1回配信される。複数回配信される可能性がある。また、配信順序の保証はされない。
   * FIFOキューは、必ず1回配信される。配信順序が保証される。
  • データの受け取り手は、SQSに対してポーリングを行い、データの有無を確認する。ポーリングには、ショートポーリングとロングポーリングがある。
  • メッセ時保持期間を定義でき、保持期間を超えてキューに残っているメッセ時は削除される。デフォルトでは、4日。

SNS(Simple Notification Service)

  • マネージドのメッセージサービス
  • プッシュしたメッセージは、さまざまなプロトコルで、受け手側に受信可能(HTTP,HTTPS,メール,SQS,モバイルプッシュ)
  • SNSが受け手に対して、メッセージをプッシュする。
  • SNS FIFOトピックを導入することで、順序付や重複を排除したメッセージ配信を提供できる。

Amazon MQ

  • Apache ActiveMQ、およびRabbitMQとよばれる、オープンソースのメッセージキューイングソフトをベースに構築されたサービス
  • OSSのMQと互換性があるので、AWSへの移行のさいに使いやすい。

Amazon SES (Simple Email Service)

  • 任意のアプリケーションで、メールを送信できる。メール配信サービス。

AWS DataPipeline

  • AWSデータベース、ストレージ間のデータの移動と変換を自動化するサービス。

コンテナサービス

AWS ECS

  • マネージドのコンテナサービス。

    ECR (Elastic Container Registory)

  • プライベートのDockerHub

    AWS Fargate

  • フルマネージドのコンテナサービス
  • コンテナ単位での管理ができる。
  • コンテナが動作するEC2インスタンスの管理が不要。
  • AWS Fargate とAWS ECSの違いに関して
    • ECSはコンテナのサービスに対して、Fargateはコンテナのオーケストレーターサービス。 ECSを起動する際に、EC2インスタンスとFargateのどちらで起動するかを選択することができる。

Lamda(ラムダ)

  • イベントに応じて、関数を起動させる。
  • 1msごとの課金
  • Auto Scaling
    • ターゲット追跡スケーリングポリシーとスケジュールされたスケーリングを使用して、AWS Lambda プロビジョニングされた同時実行数をスケールできます。

      Amazon API Gateway

  • WebAPIの作成が可能。
  • よくある使われ方としては、Web APIとLamdaを組み合わせて使う。

    AWS Step Functions

  • LamdaとLamdaの連携、順序の制御などが可能。並列分岐も記述可能。サーバーレスのワークフロー。

モニタリング・履歴

CloudWatch

  • 使用状況のモニタリングサービス。以下のようなリソースが監視相性
    • メトリクス(システムのパフォーマンス情報) CPU、ディスクI/O、メモリの使用量など。
    • ログ
    • イベント
    • アラーム しきい値を設定して、AutoscalingやSNSに通知する。
  • 詳細ログを収集する場合は、CloudWathエージェントをサーバにInstallし、CloudWatch Logでログを収集する。
CloudTrail
  • APIコールやユーザのアクティ日地履歴を保存。ログはS3に保存。銀行などの監査で利用するログを収集。
VPCフローログ
  • VPC(EC2)の通信ログをCloudWatch、または、S3に配信する。

AutoScaling

  • 最小インスタンス〜最大インスタンスの間で自動的にキープする。条件に王子て、ScaleOut/In可能。
  • スケールポリシ 以下のようなスケールのポリシ−がある。

    • Simple Scaling 増減の上限、下限となるしきい値を1つだけ設定可能。 I.E CPU使用率が50%を超えたら、EC2を1つ追加。
    • Step Scaling 増減の上限、下限となるしきい値を複数設定可能。
  • ELBと連携した場合、ヘルスチェクを行うことで、スケールの設定ができる。ヘルスチェックには、EC2タイプのヘルスチェックとELBタイプの2つがある。

    • EC2タイプのヘルスチェック EC2のステータスがRunning以外、もしくは、システムステータスがimpairedの場合に異常と判断される。
    • ELBタイプのヘルスチェック インスタンスのsテータすチェックとELBのヘルスチェクから状態を判断する。

Security

AWS Shield

DDoS攻撃を防ぐ。

AWS Firewall Manager

WS WAF、AWS Shield Advanced、Amazon VPC セキュリティグループ、AWS Network FirewallAmazon Route 53などの設定を一元的に管理するサービス。

AWS WAF (Web application firewall)

Amazon CloudFront 配信、Amazon API Gateway REST API、Application Load Balancer、または AWS AppSync GraphQL API に転送される HTTP および HTTPS リクエストをモニタリングするためのウェブアプリケーションファイアウォールです。 * EC2には利用できない。

Amazon CloudHSM(Hardware Security Module)
  • クラウドベースのハードウェアセキュリティモジュール。暗号化キーを簡単に生成し、HSMで管理する。
  • FIPS 140-2 レベル 3 認証済

ACM(Amazon Certificate Manager)

  • AWSサービスとユーザ間で利用するSSL証明書nお作成、管理ができるサービス。

SCPs(サービスコトロールポリシー)

  • 複数のAWSアカウントに対する権限の制御ができる。AWSアカウントまたは組織単位(OU)内のアカウントのグループに対してAWSサービスへの権限境界を設定できる。

アカウント・認証・認可

AWS Organizations

  • 複数のAWSアカウントの統合管理を可能にするサービス。

Cognito

  • アプリケーションにユーザー認証機能を付与することができるサービス。

AD Connector

  • オンプレのActive DirectoryとIAMを統合管理可能。

S

自動化・デプロイ

CloudFormation

  • クラウド環境内のインフラストラクチャリソースを記述して、プロビジョニングするためのテンプレート化されたサービス。

    OpsWorks

  • ChefやPupetのマネージド型インスタンスのサーバ設定、デプロイ、管理を自動化するための設定管理サービス

    Elastic Beanstalk

  • Webアプリケーションやサービスを使い慣れたサーバ(Nginx, Apacheなど)にデプロイするサービス。インフラレイヤー構成はできない。

AWS SAM(Serverless Application Model)

  • サーバレスアプリケーション構築用のデプロイツール。lamda,DBなど。CloudFormationと連携して、デプロイを行う。

AWS SWF (Simple Work Flow)

  • デベロッパーが並行したステップ、または、連続したステップがあるバックグラウンドジョブを構築、実行スケールするワークフロー。 AWS Step Functionsは、サーバ-レスのワークフローに対して、SWFは、EC2などのサーバベースのワークフロー。

マイグレーション

AWS DMS (Database Migration Service)

AWS SMS (Server Migration Service)・AWS MGN(Application Migration Service)

  • VmwareやHyperVなどの仮想サーバを、オンプレからAWSマイグレーションするサービス。
  • SMSは廃止されているので、MGNを利用すること。

AWS DataSync

  • オンプレストレージとEFSやFSxなどのファイルシステム間で、データを転送するサービス。

AWS Application Discovery Service

  • オンプレミスデータセンター内のサーバーにエージェントをインストールすることで、データセンター内の利用状況を収集することができる。

Amazon EMR(Elastic MapReduce)

AWS IoT Core

  • バイスからデータを集め、AWS上のサービスにルーティングする。

Java Remote Debug(リモートデバッグ)

Java IntellJ リモートデバッグ

IntellJを利用したリモートデバッグの方法です。 リモートホスト上で、Tomcatが起動している想定です。

1.IntellJのリモートデバッグのオプションを設定します。
 Run/Debug Configuration -> Template -> Remoteから設定します。
 設定ポイントは、HostとPortが必須です。
ここで設定したポートは、解放しておいてください。 f:id:lucky0523:20220413175907p:plain

2.リモートホスト側のjavaのオプションで、LocalのIntellJからのデバッグを受け入れるような設定を行います。    以下のオプションはIntellJの設定により異なります。
IntellJのEdit Configuration -> Template -> Remoteに記載すべきオプションが、書かれているので、そちらを参考にします。

-agentlib:jdwp=transport=dt_socket,server=y,suspend=n,address=*:5005  

記述する場所は、tomcatのsetenv.shスクリプトないです.以下のように設定します。

export JAVA_OPTS="$JAVA_OPTS -agentlib:jdwp=transport=dt_socket,server=y,suspend=n,address=*:5005"

TomcatのInstallディレクトリ/bin 配下に、setenv.shがなければ、新規に追加します。catalina.sh起動時に呼ばれます。

3.リモートデバッグを選択した、intellJとRemote側のJavaアプリを接続します。 f:id:lucky0523:20220413175938p:plain

4.Connected to the target VM, address: '10.165.8.68:5005', transport: 'socket' というメッセージが接続されれば、成功です。

Java Dabtabase

datasource

 概要

DBを利用するには、コネクションを張る必要があります。 datasourceは、データベースとの接続オブジェクトであり、Connectionオブジェクト のファクトリということもできます。

datasourceを利用することで、Connectionオブジェクトのライフサイクルをdatasource に任せることができます。

f:id:lucky0523:20220228100334p:plain
データソースイメージ

datasource利用
  1. まず、datasourceをBean定義ファイル等を利用して、Bean化する。  DBへのアクセス情報などのプロパティ情報は、別ファイルに準備してもよい。
    2.そして、利用したい箇所で、インジェクションする。

ORM (Object Relational Mapping)

ORMは、Objectと、DBのテーブルをマッピングするツールです。

Hibernate

*XML形式のマッピングファイルに「オブジェクトの各項目」と「対応するレコード項目の定義」を記述することにより一元管理が可能となり、 オブジェクトの呼び出しや保存を行うための雛型となるコードを自動生成します。 * Hibernateは、SQLライクなクエリ言語「HQL(Hibernate Query Language)」を使用します。

MyBatis

MyBatisは、ORMツールの1つです。 一般的なO/Rマッパーのようにデータベースのテーブル構造とオブジェクトをマッピングするのではなく、 SQL文とオブジェクトをマッピングします。

  • SQLを利用します。SQLを利用できる開発者であれば、学習コストは低いです。

k8s Service

Nats nodeportのYaml

Natsのnodeportタイプに関してのYaml 外部のサーバからアクセスできるようになる。 外部からアクセスするためのPort(targetport) を指定していないので、ランダムなポートが割り当てられる。 また、外部からのアクセス先のPodに関しては、selectorで対象pod/deploymentのlabelを指定する。 deploymentのlabelを指定したところ、外部から通信できないので、対象のPodのlabelを指定する必要があるかも?

以下の場合selecotで”app: samlepod”が指定されているので、こちらのpodに紐づけれる。

apiVersion: v1
kind: Service
metadata:
  labels:
    app: bioservice
  name: bioservice
spec:
  ports:
  - name: "8888"
    port: 8888
    protocol: TCP
  type: NodePort
  selector:
    app : samplepod

JUnit

JUnitは、Javaで開発されたプログラムにおいてユニットテスト単体テスト)の自動化を行うためのフレームワークです。

Junitの基本

ディレクトリ構造

テストコードは、ソースコードディレクトリとは、分けます。 f:id:lucky0523:20210902112408p:plain

 基本のコード

テストコードのメソッドには、@Test アノテーションをつけることで、テストコードと認識されます。 以下の例では、Sum1クラスの加算するメソッドtasuを評価しています。

public class MathUtilTest {

    @Test
    public void test1Plus2Equal3() {
        Sum1 sum = new Sum1();   //テストしたいメソッドをInstance化します。
        int expected = 3;       //期待値を定義しています。
        int actual = sum.tasu(1, 2);   //実際の値を定義します。
        assertEquals(expected,actual); //assertEquals(期待値、実際の値) となっており、期待値と実際の値の等しいとき、テストをパスします。
    }

    @Test
    public void test11Plus2Equal13() {
        Sum1 sum = new Sum1();
        int expected = 13;
        int actual = sum.tasu(11, 2);
        assertEquals(expected,actual);
    }
}