<?xml version="1.0" encoding="UTF-8"?><rss version="2.0"
	xmlns:content="http://purl.org/rss/1.0/modules/content/"
	xmlns:wfw="http://wellformedweb.org/CommentAPI/"
	xmlns:dc="http://purl.org/dc/elements/1.1/"
	xmlns:atom="http://www.w3.org/2005/Atom"
	xmlns:sy="http://purl.org/rss/1.0/modules/syndication/"
	xmlns:slash="http://purl.org/rss/1.0/modules/slash/"
	>

<channel>
	<title>業務 &#8211; エンジニア見習い</title>
	<atom:link href="https://otonan-syusyoku.work/archives/category/jobs/feed" rel="self" type="application/rss+xml" />
	<link>https://otonan-syusyoku.work</link>
	<description>三流プログラマー</description>
	<lastBuildDate>Wed, 19 Nov 2025 05:42:32 +0000</lastBuildDate>
	<language>ja</language>
	<sy:updatePeriod>
	hourly	</sy:updatePeriod>
	<sy:updateFrequency>
	1	</sy:updateFrequency>
	<generator>https://wordpress.org/?v=6.9.4</generator>

<image>
	<url>https://otonan-syusyoku.work/wp-content/uploads/2023/10/cropped-名称未設定のデザイン-16-32x32.png</url>
	<title>業務 &#8211; エンジニア見習い</title>
	<link>https://otonan-syusyoku.work</link>
	<width>32</width>
	<height>32</height>
</image> 
	<item>
		<title>【CDKで構築】AWS ECS/RDSの監視・オートスケール基盤を自動構築しSlack通知する方法</title>
		<link>https://otonan-syusyoku.work/archives/2168</link>
					<comments>https://otonan-syusyoku.work/archives/2168#respond</comments>
		
		<dc:creator><![CDATA[hrokig2]]></dc:creator>
		<pubDate>Wed, 19 Nov 2025 04:44:12 +0000</pubDate>
				<category><![CDATA[インフラ]]></category>
		<category><![CDATA[業務]]></category>
		<category><![CDATA[AWS]]></category>
		<category><![CDATA[ECS]]></category>
		<category><![CDATA[RDS]]></category>
		<category><![CDATA[監視]]></category>
		<guid isPermaLink="false">https://otonan-syusyoku.work/?p=2168</guid>

					<description><![CDATA[ECS FargateとRDSでPHPアプリケーションを運用する際、リソースの異常検知や負荷に応じたスケール管理は必須です。 しかし、これらの仕組みを個別に手動で設定するのは手間がかかります。 本記事では、AWS CDK [&#8230;]]]></description>
										<content:encoded><![CDATA[<p><span class="">ECS FargateとRDSでPHPアプリケーションを運用する際、</span><span class="">リソースの異常検知や負荷に応じたスケール管理は必須です。<br />
</span><span class="">しかし、</span><span class="">これらの仕組みを個別に手動で設定するのは手間がかかります。</span></p>
<p><span class="">本記事では、</span><b class="">AWS CDK</b><span class="">（Cloud Development Kit）を用いて、</span><span class="">ECSとRDSの</span><b class="">監視アラーム</b><span class="">、</span><span class="">ECSの</span><b class="">オートスケーリング</b><span class="">、</span><span class="">そしてそのイベントを</span><b class="">Slack</b><span class="">に集約する通知基盤を<strong>IaC</strong>として一括で構築する方法を解説します。</span></p>
<p>&nbsp;</p>
<div id="rtoc-mokuji-wrapper" class="rtoc-mokuji-content frame4 preset3 animation-fade rtoc_open noto-sans" data-id="2168" data-theme="BlogArise">
			<div id="rtoc-mokuji-title" class=" rtoc_center">
			<button class="rtoc_open_close rtoc_open"></button>
			<span>Contents</span>
			</div><ol class="rtoc-mokuji decimal_ol level-1"><li class="rtoc-item"><a href="#rtoc-1">監視・通知アーキテクチャの全体像</a></li><li class="rtoc-item"><a href="#rtoc-2">事前準備: AWS ChatbotとSlackの連携</a><ul class="rtoc-mokuji mokuji_ul level-2"><li class="rtoc-item"><a href="#rtoc-3">1. 外部サービスとの認証（OAuthプロセス）が必要</a></li><li class="rtoc-item"><a href="#rtoc-4">2. AWS Chatbot Clientの事前設定が必要</a></li></ul></li><li class="rtoc-item"><a href="#rtoc-5">監視とオートスケール基盤の構築</a><ul class="rtoc-mokuji mokuji_ul level-2"><li class="rtoc-item"><a href="#rtoc-6">CDKスタックのセットアップ</a></li><li class="rtoc-item"><a href="#rtoc-7">通知用SNSトピックとChatbotの設定</a></li><li class="rtoc-item"><a href="#rtoc-8">ECSとRDSの監視アラーム設定</a></li><li class="rtoc-item"><a href="#rtoc-9">ECSサービスのオートスケーリング設定</a></li><li class="rtoc-item"><a href="#rtoc-10">オートスケールイベントのSlack通知設定</a></li></ul></li><li class="rtoc-item"><a href="#rtoc-11">まとめ</a></li></ol></div><h2 id="rtoc-1" >監視・通知アーキテクチャの全体像</h2>
<p>採用するアーキテクチャは以下の通りです。</p>
<div class="table-block-component"></div>
<div>
<table style="border-collapse: collapse; width: 100%;">
<tbody>
<tr style="background-color: #5aabe8;">
<td style="width: 33.3333%;"><span style="color: #ffffff;">機能</span></td>
<td style="width: 33.3333%;"><span style="color: #ffffff;">AWSサービス</span></td>
<td style="width: 33.3333%;"><span style="color: #ffffff;">役割</span></td>
</tr>
<tr>
<td style="width: 33.3333%;"><b>監視</b></td>
<td style="width: 33.3333%;">CloudWatch</td>
<td style="width: 33.3333%;">メトリクスを収集・アラーム発報</td>
</tr>
<tr>
<td style="width: 33.3333%;"><b>自動応答</b></td>
<td style="width: 33.3333%;">Application Auto Scaling</td>
<td style="width: 33.3333%;">ECSの負荷に応じてタスク数を自動調整</td>
</tr>
<tr>
<td style="width: 33.3333%;"><b>通知ルーティング</b></td>
<td style="width: 33.3333%;">Amazon SNS</td>
<td style="width: 33.3333%;">アラームやスケーリングイベントを中継</td>
</tr>
<tr>
<td style="width: 33.3333%;"><b>通知先</b></td>
<td style="width: 33.3333%;">AWS Chatbot <span class="math-inline" data-math="\rightarrow">$\rightarrow$</span> Slack</td>
<td style="width: 33.3333%;">SNSからの通知を整形しSlackへ送信</td>
</tr>
</tbody>
</table>
</div>
<div></div>
<h2 id="rtoc-2" >事前準備: AWS ChatbotとSlackの連携</h2>
<p>CDKデプロイの前に、AWSアカウントとSlackを連携させるための<b>AWS Chatbotクライアント</b>を作成しておく必要があります。</p>
<ol start="1">
<li>AWS Chatbotコンソールで、<b>Slackワークスペース</b>と<b>チャンネル</b>を連携させます。</li>
<li>この設定により、通知先の<b>SlackチャンネルID</b>と<b>ワークスペースID</b>が取得できます。これらはCDKコード内で使用します。</li>
</ol>
<div class="sc_toggle_box">
<div class="sc_toggle_title">CDKでAWS Chatbot連携が完結しない理由</div>
<div class="sc_toggle_content">
<h3 id="rtoc-3" >1. 外部サービスとの認証（OAuthプロセス）が必要</h3>
<p>AWS Chatbotは、AWSアカウントと外部サービス（SlackやMicrosoft Teams）の連携を提供します。この連携は、Slack側でAWS Chatbotアプリをインストールし、AWSアカウントへのアクセスを許可するOAuth認証プロセスをユーザー（管理者）がブラウザ上で行う必要があります。</p>
<p>CDKはAWSアカウント内のリソースをプログラマブルにデプロイしますが、Slackワークスペース側の認証フローをプログラムで自動実行することは、セキュリティ上の理由からできません。</p>
<h3 id="rtoc-4" >2. AWS Chatbot Clientの事前設定が必要</h3>
<p>CDKのaws-chatbotモジュールで定義できるのは、連携が完了したワークスペースを参照し、その上でチャンネル設定（どのSNSトピックの通知をどのSlackチャンネルに送るか）を行う部分のみです。</p>
<p>CDKでnew chatbot.SlackChannelConfiguration(&#8230;)を作成する前に、通知先のSlackワークスペースID (slackWorkspaceId) を特定する必要があります。このワークスペースIDは、手動でChatbotコンソールからSlackとの連携を完了させた際に初めてAWS側に登録される情報です。</p>
</div>
</div>
<p>&nbsp;</p>
<h2 id="rtoc-5" >監視とオートスケール基盤の構築</h2>
<p>今回は、ECSサービスとRDSインスタンスが既に存在することを前提に、その監視・スケール設定を定義するCDKスタックを作成します。</p>
<h3 id="rtoc-6" >CDKスタックのセットアップ</h3>
<p>必要なCDKライブラリをインポートし、スタックを定義します。</p>
<p>&nbsp;</p>
<div>
<pre class="line-numbers"><code class="language-js">// lib/monitoring-stack.ts

import * as cdk from 'aws-cdk-lib';
import { Construct } from 'constructs';
import * as sns from 'aws-cdk-lib/aws-sns';
import * as cloudwatch from 'aws-cdk-lib/aws-cloudwatch';
import * as actions from 'aws-cdk-lib/aws-cloudwatch-actions';
import * as events from 'aws-cdk-lib/aws-events';
import * as targets from 'aws-cdk-lib/aws-events-targets';
import * as autoscaling from 'aws-cdk-lib/aws-applicationautoscaling';
import * as ecs from 'aws-cdk-lib/aws-ecs';
import * as chatbot from 'aws-cdk-lib/aws-chatbot';

// 環境依存の定数を定義 (適宜置き換えてください)
const CLUSTER_NAME = 'your-ecs-cluster-name';
const SERVICE_NAME = 'your-ecs-service-name';
const RDS_IDENTIFIER = 'your-rds-instance-identifier';
const SLACK_CHANNEL_ID = 'C01234567'; // 取得したチャンネルID
const SLACK_WORKSPACE_ID = 'T01234567'; // 取得したワークスペースID

export class MonitoringStack extends cdk.Stack {
  constructor(scope: Construct, id: string, props?: cdk.StackProps) {
    super(scope, id, props);

    // 既存のECSサービスを参照
    const ecsService = ecs.FargateService.fromFargateServiceAttributes(this, 'ExistingEcsService', {
      serviceArn: cdk.Stack.of(this).formatArn({
        service: 'ecs',
        resource: 'service',
        resourceName: `${CLUSTER_NAME}/${SERVICE_NAME}`,
        sep: '/',
      }),
      cluster: ecs.Cluster.fromClusterAttributes(this, 'ExistingCluster', {
        clusterName: CLUSTER_NAME,
        vpc: ({} as any), // 参照のため空オブジェクト
        securityGroups: [],
      }),
    });
  }
}</code></pre>
<p>&nbsp;</p>
</div>
<h3 id="rtoc-7" >通知用SNSトピックとChatbotの設定</h3>
<p>アラームやイベントが通知を送るSNSトピックを作成し、それをAWS Chatbotに連携させます。</p>
<p><response-element class="" ng-version="0.0.0-PLACEHOLDER"><code-block _nghost-ng-c519592647="" class="ng-tns-c519592647-2197 ng-star-inserted"></code-block></response-element></p>
<div _ngcontent-ng-c519592647="" class="code-block ng-tns-c519592647-2197 ng-animate-disabled ng-trigger ng-trigger-codeBlockRevealAnimation" jslog="223238;track:impression,attention;BardVeMetadataKey:[[&quot;r_a2c461939f765a9a&quot;,&quot;c_86e1e1d55e25872e&quot;,null,&quot;rc_330331dc660dc0f2&quot;,null,null,&quot;ja&quot;,null,1,null,null,1,0]]">
<div _ngcontent-ng-c519592647="" class="code-block-decoration header-formatted gds-title-s ng-tns-c519592647-2197 ng-star-inserted"><span _ngcontent-ng-c519592647="" class="ng-tns-c519592647-2197"></span></div>
</div>
<pre class="line-numbers"><code class="language-js">// 1. 通知用SNSトピックの作成
    const alarmTopic = new sns.Topic(this, 'AlarmTopic', {
      displayName: 'System-Monitoring-Notifications',
    });

    // 2. AWS ChatbotとSNSトピックの連携 (Slackへのルーティング)
    new chatbot.SlackChannelConfiguration(this, 'ChatbotConfig', {
      slackChannelConfigurationName: 'EcsRdsMonitoring',
      slackWorkspaceId: SLACK_WORKSPACE_ID,
      slackChannelId: SLACK_CHANNEL_ID,
      notificationTopics: [alarmTopic], // このトピックへの通知がSlackに送られる
    });</code></pre>
<h3 id="rtoc-8" >ECSとRDSの監視アラーム設定</h3>
<p>主要なメトリクスに対してCloudWatchアラームを作成し、アクションとして上記SNSトピックを設定します。</p>
<pre class="line-numbers"><code class="language-js">// --- ECS Fargate アラーム ---
    // ECS CPU利用率が80%を超えた場合にアラーム
    const ecsCpuAlarm = new cloudwatch.Alarm(this, 'EcsCpuHighAlarm', {
      metric: cloudwatch.Metric.fromNamespaceAndName('AWS/ECS', 'CPUUtilization').with({
        dimensionsMap: { ClusterName: CLUSTER_NAME, ServiceName: SERVICE_NAME },
      }),
      threshold: 80, 
      evaluationPeriods: 2,
      comparisonOperator: cloudwatch.ComparisonOperator.GREATER_THAN_OR_EQUAL_TO_THRESHOLD,
      alarmDescription: 'ECS Service CPU utilization is too high.',
    });
    ecsCpuAlarm.addAlarmAction(new actions.SnsAction(alarmTopic));
    // ecsCpuAlarm.addOkAction(new actions.SnsAction(alarmTopic)); // 復旧時も通知したい場合は追加

    // --- RDS アラーム ---
    // RDS CPU利用率が70%を超えた場合にアラーム
    const rdsCpuAlarm = new cloudwatch.Alarm(this, 'RdsCpuHighAlarm', {
      metric: cloudwatch.Metric.fromNamespaceAndName('AWS/RDS', 'CPUUtilization').with({
        dimensionsMap: { DBInstanceIdentifier: RDS_IDENTIFIER },
      }),
      threshold: 70, 
      evaluationPeriods: 3,
      comparisonOperator: cloudwatch.ComparisonOperator.GREATER_THAN_OR_EQUAL_TO_THRESHOLD,
      alarmDescription: 'RDS CPU utilization is too high.',
    });
    rdsCpuAlarm.addAlarmAction(new actions.SnsAction(alarmTopic));</code></pre>
<h3 id="rtoc-9" >ECSサービスのオートスケーリング設定</h3>
<p>ECSサービスをCPU利用率$60%$を目標に自動スケーリングするように設定します。</p>
<p><response-element class="" ng-version="0.0.0-PLACEHOLDER"><code-block _nghost-ng-c519592647="" class="ng-tns-c519592647-2199 ng-star-inserted"></code-block></response-element></p>
<div _ngcontent-ng-c519592647="" class="code-block ng-tns-c519592647-2199 ng-animate-disabled ng-trigger ng-trigger-codeBlockRevealAnimation" jslog="223238;track:impression,attention;BardVeMetadataKey:[[&quot;r_a2c461939f765a9a&quot;,&quot;c_86e1e1d55e25872e&quot;,null,&quot;rc_330331dc660dc0f2&quot;,null,null,&quot;ja&quot;,null,1,null,null,1,0]]">
<div _ngcontent-ng-c519592647="" class="code-block-decoration header-formatted gds-title-s ng-tns-c519592647-2199 ng-star-inserted">
<pre class="line-numbers"><code class="language-js">// 3. ECSサービスのオートスケーリング設定
    // サービスのDesired Countをスケーリング対象にする
    const scalableTarget = autoscaling.ScalableTarget.forEcsService(this, 'EcsScalableTarget', {
      service: ecsService,
      minCapacity: 1, // 最小タスク数
      maxCapacity: 5, // 最大タスク数
    });

    // 目標CPU利用率 60% を維持するように調整するターゲット追跡スケーリングポリシー
    scalableTarget.scaleToTrackMetric('CpuScalingPolicy', {
      metric: ecsService.metricCpuUtilization(), 
      targetValue: 60,
      scaleOutCooldown: cdk.Duration.seconds(60),
      scaleInCooldown: cdk.Duration.seconds(300),
    });</code></pre>
</div>
<h3 id="rtoc-10" >オートスケールイベントのSlack通知設定</h3>
<p>スケーリング操作の成功イベントをEventBridgeで捕捉し、Slackに通知します。</p>
<p><response-element class="" ng-version="0.0.0-PLACEHOLDER"><code-block _nghost-ng-c519592647="" class="ng-tns-c519592647-2200 ng-star-inserted"></code-block></response-element></p>
<div _ngcontent-ng-c519592647="" class="code-block ng-tns-c519592647-2200 ng-animate-disabled ng-trigger ng-trigger-codeBlockRevealAnimation" jslog="223238;track:impression,attention;BardVeMetadataKey:[[&quot;r_a2c461939f765a9a&quot;,&quot;c_86e1e1d55e25872e&quot;,null,&quot;rc_330331dc660dc0f2&quot;,null,null,&quot;ja&quot;,null,1,null,null,1,0]]">
<div _ngcontent-ng-c519592647="" class="code-block-decoration header-formatted gds-title-s ng-tns-c519592647-2200 ng-star-inserted">
<pre class="line-numbers"><code class="language-js">// 4. オートスケールイベントを捕捉しSNSトピックへルーティング
    new events.Rule(this, 'AutoScalingNotificationRule', {
      description: 'Notify Slack on successful ECS Auto Scaling events.',
      eventPattern: {
        source: ['aws.application-autoscaling'],
        detailType: ['Application Auto Scaling Policy Execution'],
        detail: {
          // 成功したスケーリング操作のみを通知
          statusCode: ['Successful'], 
        },
      },
      // ターゲットは既存のSNSトピック
      targets: [new targets.SnsTopic(alarmTopic)],
    });</code></pre>
</div>
<h2 id="rtoc-11" >まとめ</h2>
<p>CDKを使うことで、<b>TypeScriptコード</b>で以下の堅牢な運用基盤を構築できました。</p>
<ol start="1">
<li>ECS/RDSの重要なメトリクス監視</li>
<li>CloudWatch AlarmsとChatbotによるSlackへの即時通知</li>
<li>ECSサービスの負荷に応じた自動スケーリング（スケールイン/アウト）</li>
<li>スケーリング操作完了時の通知</li>
</ol>
<p>インフラをコード化することで、再現性、バージョン管理、レビューが可能になり、システムの信頼性が大きく向上します。</p>
<div _ngcontent-ng-c519592647="" class="code-block-decoration header-formatted gds-title-s ng-tns-c519592647-2200 ng-star-inserted"></div>
</div>
</div>
<p>&nbsp;</p>
<div></div>
]]></content:encoded>
					
					<wfw:commentRss>https://otonan-syusyoku.work/archives/2168/feed</wfw:commentRss>
			<slash:comments>0</slash:comments>
		
		
			</item>
		<item>
		<title>EC2のSSHのセキュリティを高めたい</title>
		<link>https://otonan-syusyoku.work/archives/1978</link>
					<comments>https://otonan-syusyoku.work/archives/1978#respond</comments>
		
		<dc:creator><![CDATA[hrokig2]]></dc:creator>
		<pubDate>Mon, 28 Oct 2024 13:42:29 +0000</pubDate>
				<category><![CDATA[インフラ]]></category>
		<category><![CDATA[業務]]></category>
		<category><![CDATA[生涯独学]]></category>
		<category><![CDATA[AWS]]></category>
		<category><![CDATA[EC2]]></category>
		<category><![CDATA[三流プログラマー]]></category>
		<guid isPermaLink="false">https://otonan-syusyoku.work/?p=1978</guid>

					<description><![CDATA[EC2のセキュリティがガバガバに穴が空いている状態の皆さん息してますかー？ &#160; すみません。いきなり煽りから入ってしまいました。 最近、サーバー構築作業をしている中でセキュリティ担保の方法を学ぶことがあったので [&#8230;]]]></description>
										<content:encoded><![CDATA[<p>EC2のセキュリティがガバガバに穴が空いている状態の皆さん息してますかー？</p>
<p>&nbsp;</p>
<p>すみません。いきなり煽りから入ってしまいました。</p>
<p>最近、サーバー構築作業をしている中でセキュリティ担保の方法を学ぶことがあったので、皆さんに共有したいなーと思い記事を書いています！</p>
<p>&nbsp;</p>
<p>EC2へSSH接続を行い、サーバーでの作業を行っているバックエンド側の人の幸せにつながってくれたら嬉しいです〜</p>
<p>&nbsp;</p>
<div id="rtoc-mokuji-wrapper" class="rtoc-mokuji-content frame4 preset3 animation-fade rtoc_open noto-sans" data-id="1978" data-theme="BlogArise">
			<div id="rtoc-mokuji-title" class=" rtoc_center">
			<button class="rtoc_open_close rtoc_open"></button>
			<span>Contents</span>
			</div><ol class="rtoc-mokuji decimal_ol level-1"><li class="rtoc-item"><a href="#rtoc-1">EC2のSSH鍵の扱いどうしている？</a></li><li class="rtoc-item"><a href="#rtoc-2">ECS Instance Connect で解決しましょう</a></li><li class="rtoc-item"><a href="#rtoc-3">一応セキュリティグループも絞っておこう</a></li><li class="rtoc-item"><a href="#rtoc-4">幸せになりたい</a></li></ol></div><h2 id="rtoc-1" >EC2のSSH鍵の扱いどうしている？</h2>
<p><a href="https://otonan-syusyoku.work/archives/1661/dmarc%e3%82%92%e8%a8%ad%e5%ae%9a%e3%81%97%e3%81%aa%e3%81%8f%e3%81%a1%e3%82%83-1" rel="attachment wp-att-1665"><img fetchpriority="high" decoding="async" src="https://otonan-syusyoku.work/wp-content/uploads/2024/02/DMARCを設定しなくちゃ-1.png" alt="What&#96;s up" width="1000" height="500" class="aligncenter size-full wp-image-1665" srcset="https://otonan-syusyoku.work/wp-content/uploads/2024/02/DMARCを設定しなくちゃ-1.png 1000w, https://otonan-syusyoku.work/wp-content/uploads/2024/02/DMARCを設定しなくちゃ-1-300x150.png 300w, https://otonan-syusyoku.work/wp-content/uploads/2024/02/DMARCを設定しなくちゃ-1-768x384.png 768w" sizes="(max-width: 1000px) 100vw, 1000px" /></a></p>
<p>複数人でプロジェクトを組んでいる場合、サーバーで作業をする人が複数出てくると思います。</p>
<p>そうなってくると以下の作業を <code>作業者の人数分 × サーバーの台数分</code> 実施しなければいけなくなります。</p>
<ol>
<li>作業者Aのユーザーを登録</li>
<li>各作業者のローカルでSSH鍵の生成 &amp;&amp; サーバー上で公開鍵の登録</li>
</ol>
<p>この時点で億劫ですね。</p>
<p>また、上記の作業に加えて 鍵の定期的なローテーション、チームの入退場が発生した時のユーザー管理が発生してしまいます。</p>
<p>&nbsp;</p>
<p><strong><span style="font-size: 18pt;">死ぬほど面倒くさい！！！！！！！！</span></strong></p>
<p>更にセキュリティに興味が無いメンバーが存在すると、鍵のローテーションはやらなくていいじゃんとか抜かすんですよ。。あー、面倒くさい。</p>
<h2 id="rtoc-2" >ECS Instance Connect で解決しましょう</h2>
<p><a href="https://otonan-syusyoku.work/archives/1674/lets-go" rel="attachment wp-att-1680"><img decoding="async" src="https://otonan-syusyoku.work/wp-content/uploads/2024/02/Lets-GO.png" alt="Let&#96;s GO" width="1000" height="500" class="aligncenter size-full wp-image-1680" srcset="https://otonan-syusyoku.work/wp-content/uploads/2024/02/Lets-GO.png 1000w, https://otonan-syusyoku.work/wp-content/uploads/2024/02/Lets-GO-300x150.png 300w, https://otonan-syusyoku.work/wp-content/uploads/2024/02/Lets-GO-768x384.png 768w" sizes="(max-width: 1000px) 100vw, 1000px" /></a></p>
<p>鍵のローテーションも面倒くさい作業も全てやらなくて済む方法が一つだけ存在するのです。</p>
<p>それが、AWSのコンソールパネルから該当EC2にSSH接続を行うことができる <code>EC2 Instance Connect</code> という機能です。</p>
<p>&nbsp;</p>
<p>この機能は<code>~/.ssh/authorized_keys</code> に一時的なキーを付与するという特徴があります。</p>
<p>そのため、<span class="sc_marker blue"><strong>僕達ユーザーが</strong></span><span class="sc_marker blue"><strong>鍵の管理をする必要がなくなるので、運用の手間をかなり減らすことができます。</strong></span><br />
（サーバー運用やったことにしか伝わらないと思いますが、<strong>管理するものを減らすという事は運用において絶大に効果があるのです！！！！</strong></p>
<p>&nbsp;</p>
<p>しかもこの機能、API と CLI にも対応しているのでちょっとした作業時にも効果があるのですよぉぉぉぉ！！！</p>
<p>基本的に権限さえ付与してしまえば使える機能ですので、皆さん使ってみて下さい！</p>
<div class="sc_frame_wrap inline black">
<div class="sc_frame_title">使いづらいという意見が出てきたときのTips</div>
<div class="sc_frame shadow">
<p>AWSのコンパネでは、コマンド操作やりづらいよ〜 とクレーム言ってくる輩は絶対出てくると思います。<br />
こちらの作業量を減らすためにも死守しなければいけないので、ぜひ以下のような提案を行って下さい</p>
<ul>
<li>Tmux 使おうぜ！
<ul>
<li>画面分割</li>
<li>セッション保持</li>
</ul>
</li>
<li>bash-completion &#x1f51c;
<ul>
<li>補完効くぜ〜</li>
</ul>
</li>
<li>thefuck
<ul>
<li>本当にいい感じにやってくれるぜ〜</li>
</ul>
</li>
</ul>
</div>
</div>
<div class="sc_frame_wrap inline blue"></div>
<div class="sc_frame_wrap inline orange">
<div class="sc_frame_title">参考記事</div>
<div class="sc_frame">
<ul>
<li><a href="https://docs.aws.amazon.com/ja_jp/AWSEC2/latest/UserGuide/ec2-instance-connect-methods.html">https://docs.aws.amazon.com/ja_jp/AWSEC2/latest/UserGuide/ec2-instance-connect-methods.html</a></li>
</ul>
</div>
</div>
<p>&nbsp;</p>
<h2 id="rtoc-3" >一応セキュリティグループも絞っておこう</h2>
<p>EC2 Instance Connect を使う際には、セキュリティグループで SSHのポート <code>22</code> を開放して置く必要があります。</p>
<p>22番ポートを開けるのは多少なりとも気が引けますよね〜</p>
<p>&nbsp;</p>
<p>最低限のセキュリティ担保として、 <span class="sc_marker blue"><strong>EC2 が所属する Region のみからアクセスできるようにIP指定をすることができます。</strong></span></p>
<p>下記のサイトにリージョン単位かつサービス単位でIP範囲をまとめてくれています。</p>
<p><a href="https://ip-ranges.amazonaws.com/ip-ranges.json">https://ip-ranges.amazonaws.com/ip-ranges.json</a></p>
<p>&nbsp;</p>
<p>今回の例でいうと <code>ap-northeast-1</code> に所属するEC2のSSH接続を制限する場合は、 <code>3.112.23.0/29</code> を セキュリティグループのIP範囲に指定してあげると良いです。</p>
<p><span class="sc_marker blue"><strong>これで、IAMで認証されたユーザーかつ東京リージョンからのSSH接続に制限することができます。</strong></span></p>
<pre class="line-numbers"><code class="language-other">    {
      "ip_prefix": "3.112.23.0/29",
      "region": "ap-northeast-1",
      "service": "EC2_INSTANCE_CONNECT",
      "network_border_group": "ap-northeast-1"
    },
</code></pre>
<p>&nbsp;</p>
<h2 id="rtoc-4" >幸せになりたい</h2>
<p>運用負荷が下がると幸せになれます。</p>
<p>幸せになろう。</p>
]]></content:encoded>
					
					<wfw:commentRss>https://otonan-syusyoku.work/archives/1978/feed</wfw:commentRss>
			<slash:comments>0</slash:comments>
		
		
			</item>
		<item>
		<title>【プログラマーに捧ぐ】インフラに興味を持ちましょう</title>
		<link>https://otonan-syusyoku.work/archives/1794</link>
					<comments>https://otonan-syusyoku.work/archives/1794#respond</comments>
		
		<dc:creator><![CDATA[hrokig2]]></dc:creator>
		<pubDate>Sat, 27 Jul 2024 01:44:26 +0000</pubDate>
				<category><![CDATA[仕事の独り言]]></category>
		<category><![CDATA[業務]]></category>
		<category><![CDATA[AWS]]></category>
		<category><![CDATA[インフラ]]></category>
		<category><![CDATA[脱3流プログラマー]]></category>
		<guid isPermaLink="false">https://otonan-syusyoku.work/?p=1794</guid>

					<description><![CDATA[こんにちは、プログラマーの皆さん。 今回は、ソフトウェア開発の一環として非常に重要なインフラストラクチャ（以下、インフラ）についてお話ししたいと思います。 多くのプログラマーがコードを書くことに夢中になる一方で、インフラ [&#8230;]]]></description>
										<content:encoded><![CDATA[<p>こんにちは、プログラマーの皆さん。</p>
<p>今回は、ソフトウェア開発の一環として非常に重要なインフラストラクチャ（以下、インフラ）についてお話ししたいと思います。</p>
<p>多くのプログラマーがコードを書くことに夢中になる一方で、インフラについてはあまり関心を持たないことがあります。<br />
しかし、インフラに興味を持つことは、より強力でスケーラブルなアプリケーションを作成するために不可欠です。</p>
<div id="rtoc-mokuji-wrapper" class="rtoc-mokuji-content frame4 preset3 animation-fade rtoc_open noto-sans" data-id="1794" data-theme="BlogArise">
			<div id="rtoc-mokuji-title" class=" rtoc_center">
			<button class="rtoc_open_close rtoc_open"></button>
			<span>Contents</span>
			</div><ol class="rtoc-mokuji decimal_ol level-1"><li class="rtoc-item"><a href="#rtoc-1">インフラとは？</a></li><li class="rtoc-item"><a href="#rtoc-2">なぜインフラに興味を持つべきか？</a></li><li class="rtoc-item"><a href="#rtoc-3">具体的に考えてみよう</a><ul class="rtoc-mokuji mokuji_ul level-2"><li class="rtoc-item"><a href="#rtoc-4">サーバーのスケールアップ</a></li><li class="rtoc-item"><a href="#rtoc-5">ロードバランシングの導入</a></li><li class="rtoc-item"><a href="#rtoc-6">サーバーレスの選択</a></li><li class="rtoc-item"><a href="#rtoc-7">キャッシュ戦略</a></li><li class="rtoc-item"><a href="#rtoc-8">ネットワーク設定の最適化</a></li></ul></li><li class="rtoc-item"><a href="#rtoc-9">具体的に何を学ぶべきか？</a></li><li class="rtoc-item"><a href="#rtoc-10">最後に</a></li></ol></div><h2 id="rtoc-1" >インフラとは？</h2>
<p>インフラとは、ソフトウェアが動作するための基盤となるハードウェア、ネットワーク、ストレージ、クラウドサービスなどを指します。これには、サーバーの設定、ネットワークの構築、データベースの管理、スケーリングのためのクラウドサービスの利用などが含まれます。</p>
<h2 id="rtoc-2" >なぜインフラに興味を持つべきか？</h2>
<ol>
<li><strong>パフォーマンスの最適化</strong>: インフラの知識があると、アプリケーションのパフォーマンスを最適化するための適切なリソースを選択し、設定することができます。</li>
<li><strong>信頼性の向上</strong>: 適切なインフラの設計は、アプリケーションのダウンタイムを最小限に抑え、信頼性を向上させるのに役立ちます。</li>
<li><strong>スケーラビリティ</strong>: インフラを理解していると、トラフィックの増加に対応できるスケーラブルなアーキテクチャを設計することが可能です。</li>
<li><strong>セキュリティの強化</strong>: インフラのセキュリティを強化することで、アプリケーションを攻撃から守ることができます。</li>
<li><strong>多角的な課題解決</strong>: プログラム以外の手段として、インフラの変更や最適化を考慮することで、課題解決の選択肢が増えます。例えば、コードの最適化だけでなく、サーバーのスケールアップやネットワーク設定の見直しも有効な解決策となります。</li>
</ol>
<h2 id="rtoc-3" >具体的に考えてみよう</h2>
<p>例えば、あるウェブアプリケーションのパフォーマンスが悪く、ユーザーからのクレームが増えている状況を考えてみましょう。</p>
<p>この場合、<strong>最初に考えるのはコードの最適化</strong>かもしれません。<br />
効率的なアルゴリズムを使用したり、データベースクエリを最適化することが効果的です。</p>
<p>しかし、これだけが解決策ではありません。</p>
<p>インフラ観点で考えてみましょう。</p>
<h3 id="rtoc-4" >サーバーのスケールアップ</h3>
<p>現在のサーバーがトラフィックに対応しきれていない場合、サーバーのスケールアップ（より強力なサーバーにアップグレード）を検討できます。</p>
<p>これにより、リソース不足によるパフォーマンス低下を防ぐことができます。</p>
<p>例えば、EC2インスタンスのサイズをt3.smallからt3.largeに変更することで、CPUとメモリリソースが増加し、パフォーマンスが向上する可能性があります。</p>
<h3 id="rtoc-5" >ロードバランシングの導入</h3>
<p>トラフィックが特定のサーバーに集中している場合、ロードバランサーを導入することで、トラフィックを複数のサーバーに分散させることができます。これにより、各サーバーの負荷が軽減され、全体のパフォーマンスが向上します。</p>
<p>AWS Application Load Balancer（ALB）を使用して、複数のEC2インスタンス間でトラフィックを分散することで、スケーラビリティと信頼性を向上させることができます。</p>
<p>&nbsp;</p>
<p>また、ALBではパスルーティングを設定することが可能なため、重たい処理専用のサーバーで処理をするといったことも考えることができます。</p>
<p>その際にはログイン情報を引き継ぐといったことも考える必要が出てくるため、Redisなどのミドルウェアも視野に入れる必要があります。</p>
<p><a href="https://otonan-syusyoku.work/archives/1794/alb" rel="attachment wp-att-1806"><img decoding="async" src="https://otonan-syusyoku.work/wp-content/uploads/2024/07/alb.png" alt="alb" width="1091" height="681" class="aligncenter size-full wp-image-1806" srcset="https://otonan-syusyoku.work/wp-content/uploads/2024/07/alb.png 1091w, https://otonan-syusyoku.work/wp-content/uploads/2024/07/alb-300x187.png 300w, https://otonan-syusyoku.work/wp-content/uploads/2024/07/alb-1024x639.png 1024w, https://otonan-syusyoku.work/wp-content/uploads/2024/07/alb-768x479.png 768w" sizes="(max-width: 1091px) 100vw, 1091px" /></a></p>
<h3 id="rtoc-6" >サーバーレスの選択</h3>
<p>AWS Lambda といったサーバーレスアーキテクチャを選択することも視野に入れると良いです。</p>
<p>サーバーレスを利用することで、サーバーの管理が不要になり、スケーリングも自動で行われます。</p>
<p>（Lambdaには制約があるので注意。この<a href="https://qiita.com/shibadai/items/fd483ccd2ad8c8d89c1a">記事</a>わかりやすいよ</p>
<p><a href="https://otonan-syusyoku.work/archives/1794/lambfa" rel="attachment wp-att-1808"><img decoding="async" src="https://otonan-syusyoku.work/wp-content/uploads/2024/07/lambfa.png" alt="lambda" width="1091" height="641" class="aligncenter size-full wp-image-1808" srcset="https://otonan-syusyoku.work/wp-content/uploads/2024/07/lambfa.png 1091w, https://otonan-syusyoku.work/wp-content/uploads/2024/07/lambfa-300x176.png 300w, https://otonan-syusyoku.work/wp-content/uploads/2024/07/lambfa-1024x602.png 1024w, https://otonan-syusyoku.work/wp-content/uploads/2024/07/lambfa-768x451.png 768w" sizes="(max-width: 1091px) 100vw, 1091px" /></a></p>
<h3 id="rtoc-7" >キャッシュ戦略</h3>
<p>結果をキャッシュサーバーに格納していこうぜぇぇぇ</p>
<p><a href="https://otonan-syusyoku.work/archives/1794/elastic-2" rel="attachment wp-att-1809"><img decoding="async" src="https://otonan-syusyoku.work/wp-content/uploads/2024/07/elastic-1.png" alt="elastic" width="1091" height="641" class="aligncenter size-full wp-image-1809" srcset="https://otonan-syusyoku.work/wp-content/uploads/2024/07/elastic-1.png 1091w, https://otonan-syusyoku.work/wp-content/uploads/2024/07/elastic-1-300x176.png 300w, https://otonan-syusyoku.work/wp-content/uploads/2024/07/elastic-1-1024x602.png 1024w, https://otonan-syusyoku.work/wp-content/uploads/2024/07/elastic-1-768x451.png 768w" sizes="(max-width: 1091px) 100vw, 1091px" /></a></p>
<p>&nbsp;</p>
<h3 id="rtoc-8" >ネットワーク設定の最適化</h3>
<p>ネットワークの設定を見直し、遅延を最小限に抑えるための最適化を行うことも重要です。</p>
<p>例えば、コンテンツデリバリネットワーク（CDN）を使用して、静的コンテンツをユーザーに近い場所から提供することで、応答時間を短縮できます。</p>
<p>CloudFrontを利用して、画像やJavaScriptファイルなどの静的リソースをキャッシュし、グローバルに分散されたエッジロケーションから提供することで、ユーザー体験を向上させることができます。</p>
<h2 id="rtoc-9" >具体的に何を学ぶべきか？</h2>
<ol>
<li><strong>サーバー管理</strong>: Linuxの基本的なコマンド、サーバーのセットアップ、SSHの使用方法を学びましょう。</li>
<li><strong>クラウドサービス</strong>: AWS、Azure、Google Cloudなどの主要なクラウドプロバイダーのサービスについて理解し、使いこなせるようにしましょう。</li>
<li><strong>コンテナ技術</strong>: DockerやKubernetesなどのコンテナ技術を学ぶことで、アプリケーションのデプロイメントが効率的になります。</li>
<li><strong>ネットワークの基礎</strong>: IPアドレス、サブネット、DNS、ロードバランシングなどの基本的なネットワーク概念を理解しましょう。</li>
<li><strong>インフラストラクチャー・アズ・コード（IaC）</strong>: TerraformやCloudFormationを使用して、コードでインフラを管理する方法を学びましょう。</li>
</ol>
<h2 id="rtoc-10" >最後に</h2>
<p>インフラの知識は、プログラマーにとって非常に有益です。</p>
<p>コードを書くことだけでなく、そのコードが動作する環境について理解することで、より優れたソフトウェアを作成することができます。<br />
さらに、プログラム以外の手段としてインフラを活用することで、課題解決の幅が広がります。ぜひ、インフラに興味を持ち、自身のスキルセットを拡充していきましょう。</p>
<p>このブログが皆さんのインフラへの関心を高めるきっかけとなれば幸いです。次回もお楽しみに！</p>
]]></content:encoded>
					
					<wfw:commentRss>https://otonan-syusyoku.work/archives/1794/feed</wfw:commentRss>
			<slash:comments>0</slash:comments>
		
		
			</item>
		<item>
		<title>Zabbixを触ってみてOSSに感動した話</title>
		<link>https://otonan-syusyoku.work/archives/1403</link>
					<comments>https://otonan-syusyoku.work/archives/1403#respond</comments>
		
		<dc:creator><![CDATA[hrokig2]]></dc:creator>
		<pubDate>Mon, 15 Apr 2024 14:24:59 +0000</pubDate>
				<category><![CDATA[インフラ]]></category>
		<category><![CDATA[業務]]></category>
		<category><![CDATA[生涯独学]]></category>
		<guid isPermaLink="false">https://otonan-syusyoku.work/?p=1403</guid>

					<description><![CDATA[皆さん、OSS（オープンソースソフトウェア）に関わっていますか？今日は、特にZabbixというOSSを取り上げ、その魅力についてお話ししたいと思います。 Contents Zabbixとは？Zabbixの良いところ1.  [&#8230;]]]></description>
										<content:encoded><![CDATA[<p>皆さん、OSS（オープンソースソフトウェア）に関わっていますか？今日は、特にZabbixというOSSを取り上げ、その魅力についてお話ししたいと思います。</p>
<div id="rtoc-mokuji-wrapper" class="rtoc-mokuji-content frame4 preset3 animation-fade rtoc_open noto-sans" data-id="1403" data-theme="BlogArise">
			<div id="rtoc-mokuji-title" class=" rtoc_center">
			<button class="rtoc_open_close rtoc_open"></button>
			<span>Contents</span>
			</div><ol class="rtoc-mokuji decimal_ol level-1"><li class="rtoc-item"><a href="#rtoc-1">Zabbixとは？</a></li><li class="rtoc-item"><a href="#rtoc-2">Zabbixの良いところ</a><ul class="rtoc-mokuji mokuji_ul level-2"><li class="rtoc-item"><a href="#rtoc-3">1. コスト効率</a></li><li class="rtoc-item"><a href="#rtoc-4">2. 柔軟性とカスタマイズ性</a></li><li class="rtoc-item"><a href="#rtoc-5">3. スケーラビリティ</a></li></ul></li><li class="rtoc-item"><a href="#rtoc-6">OSSの素晴らしさ</a><ul class="rtoc-mokuji mokuji_ul level-2"><li class="rtoc-item"><a href="#rtoc-7">コミュニティとの協力</a></li><li class="rtoc-item"><a href="#rtoc-8">透明性</a></li><li class="rtoc-item"><a href="#rtoc-9">教育的価値</a></li></ul></li><li class="rtoc-item"><a href="#rtoc-10">先人は偉大だ</a></li></ol></div><h2 id="rtoc-1" >Zabbixとは？</h2>
<p>Zabbixはエンタープライズクラスのオープンソース監視ソリューションであり、ネットワーク、サーバー、仮想マシン、およびクラウドサービスの監視に使用されます。このツールは、複雑なITインフラストラクチャの状態をリアルタイムで監視し、運用の効率を大幅に向上させることができます。</p>
<h2 id="rtoc-2" >Zabbixの良いところ</h2>
<h3 id="rtoc-3" >1. コスト効率</h3>
<p>Zabbixはオープンソースであり、ライセンス料が不要です。これにより、企業はコストを大幅に削減しながら、包括的な監視ソリューションを実装することが可能です。</p>
<p>そのかわりめっちゃ設定難しいです。書籍が出るくらいなので、すごく難しいです。</p>
<p>[getpost title=&#8221;Za&#8221; id=&#8221;1243&#8243; cat_name=&#8221;1&#8243; date=&#8221;0&#8243;]</p>
<p style="text-align: center;"><a href="//af.moshimo.com/af/c/click?a_id=2019667&amp;p_id=170&amp;pc_id=185&amp;pl_id=4062&amp;url=https%3A%2F%2Fwww.amazon.co.jp%2Fdp%2FB00IXD2UQ8" rel="nofollow" referrerpolicy="no-referrer-when-downgrade"><img decoding="async" src="https://images-fe.ssl-images-amazon.com/images/I/51HD8POkqGL._SL75_.jpg" alt="" style="border: none;" /><br />
Zabbix統合監視徹底活用──複雑化・大規模化するインフラの一元管理 Software Design plus</a><img decoding="async" src="//i.moshimo.com/af/i/impression?a_id=2019667&amp;p_id=170&amp;pc_id=185&amp;pl_id=4062" alt="" width="1" height="1" style="border: none;" /></p>
<h3 id="rtoc-4" >2. 柔軟性とカスタマイズ性</h3>
<p>ユーザーは自由にカスタマイズして、自社のニーズに合わせた監視を設定することができます。これにより、特定の監視要件に対応するためのプラグインや追加機能を独自に開発することが可能です。</p>
<h3 id="rtoc-5" >3. スケーラビリティ</h3>
<p>大規模なネットワーク環境でも、Zabbixは高いスケーラビリティを持ち、数千台のサーバーを同時に監視することができます。</p>
<h2 id="rtoc-6" >OSSの素晴らしさ</h2>
<p><img decoding="async" src="https://otonan-syusyoku.work/wp-content/uploads/2024/02/DMARCを設定しなくちゃ-1.png" alt="What&#96;s up" width="1000" height="500" class="aligncenter size-full wp-image-1665" srcset="https://otonan-syusyoku.work/wp-content/uploads/2024/02/DMARCを設定しなくちゃ-1.png 1000w, https://otonan-syusyoku.work/wp-content/uploads/2024/02/DMARCを設定しなくちゃ-1-300x150.png 300w, https://otonan-syusyoku.work/wp-content/uploads/2024/02/DMARCを設定しなくちゃ-1-768x384.png 768w" sizes="(max-width: 1000px) 100vw, 1000px" /></p>
<h3 id="rtoc-7" >コミュニティとの協力</h3>
<p>OSSは世界中の開発者が協力して作成・改善されるため、多様なアイディアや技術が組み込まれ、より速く、より安全なソフトウェアが生まれます。</p>
<h3 id="rtoc-8" >透明性</h3>
<p>ソースコードが公開されているため、誰でもコードを閲覧し、潜在的な問題を特定して修正することができます。これは、セキュリティの面で大きな利点です。</p>
<h3 id="rtoc-9" >教育的価値</h3>
<p>OSSを使うことで、技術者はより深い理解を得ることができ、キャリアの発展に役立つ知識とスキルを習得する機会を持つことができます。</p>
<h2 id="rtoc-10" >先人は偉大だ</h2>
<p>OSSの世界には無数の先駆者がおり、彼らの努力により、今日我々が享受している高度なテクノロジーが存在します。彼らのオープンな精神は、知識を共有し、全ての人が技術を利用できるようにすることで、ITの世界を豊かにしています。</p>
<p>OSSとしてのZabbix、またオープンソースの精神がいかにしてIT業界に革新をもたらしているのか、この記事が皆さんの理解の一助となれば幸いです。是非、この力強いコミュニティの一員として、OSSに参加し、貢献してみてはいかがでしょうか。</p>
]]></content:encoded>
					
					<wfw:commentRss>https://otonan-syusyoku.work/archives/1403/feed</wfw:commentRss>
			<slash:comments>0</slash:comments>
		
		
			</item>
		<item>
		<title>【AWS】ワイだけのポケットリファレンス</title>
		<link>https://otonan-syusyoku.work/archives/1710</link>
					<comments>https://otonan-syusyoku.work/archives/1710#respond</comments>
		
		<dc:creator><![CDATA[hrokig2]]></dc:creator>
		<pubDate>Mon, 15 Apr 2024 00:21:45 +0000</pubDate>
				<category><![CDATA[インフラ]]></category>
		<category><![CDATA[業務]]></category>
		<category><![CDATA[生涯独学]]></category>
		<category><![CDATA[AWS]]></category>
		<category><![CDATA[EC2]]></category>
		<category><![CDATA[RDS]]></category>
		<guid isPermaLink="false">https://otonan-syusyoku.work/?p=1710</guid>

					<description><![CDATA[未来の自分が幸せになることを願ってAWSの各作業をここに記します。 &#160; Contents RDSRDSの自動起動対策AuroraBlue/Greenデプロイインスタンスタイプのサポート期日は守ろうパラメータグル [&#8230;]]]></description>
										<content:encoded><![CDATA[<p>未来の自分が幸せになることを願ってAWSの各作業をここに記します。</p>
<p>&nbsp;</p>
<div id="rtoc-mokuji-wrapper" class="rtoc-mokuji-content frame4 preset3 animation-fade rtoc_open noto-sans" data-id="1710" data-theme="BlogArise">
			<div id="rtoc-mokuji-title" class=" rtoc_center">
			<button class="rtoc_open_close rtoc_open"></button>
			<span>Contents</span>
			</div><ol class="rtoc-mokuji decimal_ol level-1"><li class="rtoc-item"><a href="#rtoc-1">RDS</a><ul class="rtoc-mokuji mokuji_ul level-2"><li class="rtoc-item"><a href="#rtoc-2">RDSの自動起動対策</a></li><li class="rtoc-item"><a href="#rtoc-3">Aurora</a></li><li class="rtoc-item"><a href="#rtoc-4">Blue/Greenデプロイ</a></li><li class="rtoc-item"><a href="#rtoc-5">インスタンスタイプのサポート期日は守ろう</a></li><li class="rtoc-item"><a href="#rtoc-6">パラメータグループはデフォルトを使うな</a></li></ul></li><li class="rtoc-item"><a href="#rtoc-7">EC2</a><ul class="rtoc-mokuji mokuji_ul level-2"><li class="rtoc-item"><a href="#rtoc-8">Amazon Linux2023 は remiリポジトリが使えないぞ</a></li><li class="rtoc-item"><a href="#rtoc-9">OSのメンテナンスは定期的に</a></li></ul></li><li class="rtoc-item"><a href="#rtoc-10">ALB</a><ul class="rtoc-mokuji mokuji_ul level-2"><li class="rtoc-item"><a href="#rtoc-11">リスナールールのデフォルトルールは503返したほうが無難</a></li></ul></li></ol></div><h2 id="rtoc-1" >RDS</h2>
<h3 id="rtoc-2" >RDSの自動起動対策</h3>
<p>RDSは<strong>7日間の停止後に自動で起動してしまう仕様</strong>が存在する。</p>
<p>稼働していないシステムで使用しているRDSは止めておきたいという要望が上がってきた。</p>
<p>7日間ごとに停止を手動で行うのは面倒くさすぎるし、ヒューマンエラーが発生する可能性がある。</p>
<p>そんな時に EventManeger にてRDSの自動停止を達成する事ができた。</p>
<p>やったこととしては、以下の通り。</p>
<ul>
<li>RDSの自動停止/起動 のスクリプトをLambda で定義</li>
<li>Lambdaスクリプトを EventManeger にて7日周期で実行するように定義
<ul>
<li><span class="sc_marker blue"><strong>起動 → 停止 の順番で実行するようにしないと、RDS本体の再起動とLambdaスクリプトの停止処理が同時刻に実行されてしまい、自動停止が出来ないよ</strong></span></li>
</ul>
</li>
</ul>
<div class="sc_frame_wrap inline orange">
<div class="sc_frame_title">参考記事</div>
<div class="sc_frame">
<p><a href="https://repost.aws/ja/knowledge-center/rds-stop-seven-days">https://repost.aws/ja/knowledge-center/rds-stop-seven-days</a></p>
</div>
</div>
<h3 id="rtoc-3" >Aurora</h3>
<p>クラスターとインスタンスという概念がある。</p>
<h3 id="rtoc-4" >Blue/Greenデプロイ</h3>
<p><strong>ダウンタイムを限りなく減らすデプロイ手法</strong>のこと。（2系統の環境を作成し、ユーザーが使用しているシステムに影響を少なくする）</p>
<p>当手法では、<strong>エンドポイントの切り替えを行う必要がない</strong>ため、プログラマー目線だとかなり作業が楽。（インフラ担当の作業範囲で収まるため）</p>
<p>&nbsp;</p>
<p>実際に経験したユースケースは以下の通り。</p>
<ul>
<li>RDS for MySQL の5系から8系へのアップグレード</li>
<li>インスタンスサイズの変更</li>
</ul>
<p>&nbsp;</p>
<p>上記対応を行った際の<strong>ダウンタイムは2 ~ 3分程度で切り替え</strong>が行われた。これはかなり凄いことだと思う。<br />
以前までの対応だと、以下の対応があると思われるが、当手法ではコンパネから手軽に実施することができる。</p>
<ul>
<li>本番環境とは別にMySQLサーバーを構築し、各種テストを実施後に現環境と旧環境の切り替え<br />
切り替え後はエンドポイントの切り替えを行う必要がある。</li>
<li>システムメンテナンス期間を設け、現環境の変更を行う。</li>
</ul>
<p>&nbsp;</p>
<p>Blue/Greenデプロイは素晴らしい。。。</p>
<h3 id="rtoc-5" >インスタンスタイプのサポート期日は守ろう</h3>
<p>とあるタスクにて、<strong>RDSの インスタンスタイプのアップグレード &amp; MySQLのバージョンアップ </strong>の作業があった。</p>
<p>その際の作業方法として、ダウンタイムを可能な限り削減するべくBlue/Greenデプロイを想定していたが、T2系インスタンスのサポートが終了していたため、Blue/Greenの作成が出来なかった。</p>
<p>本来であれば Blue/Green を作成後にGreen環境でインスタンスタイプのアップグレードとMySQLのバージョンアップを考えていたが、こうも上手くいかないとは思わなかった。</p>
<p>代替手段として、<span class="sc_marker blue"><strong>RDSのスナップショットからサポートされているインスタンスタイプで新規インスタンスを起動し、アプリケーションのエンドポイントを切り替える方法</strong></span>を考えたが、エンジニアが関与していないシステム（Redash等が上がっていたが、複数のサービスが連携していると報告が上がってきた）があるため、この手法は取れなかった。</p>
<p>&nbsp;</p>
<p>そのため、エンドユーザーにダウンタイムを許容してもらう形で現行環境のRDSをインプレースで対応することになった。</p>
<p>エンジニアのプライドとして許せなかったが、前任の構築者が既にいなかったことやI/Oの遅さからユーザーからのクレームがあり早急に対応する必要があったので仕方がない結果となった。<br />
（このタスクは他チームのインフラを面倒みることになっていたので余計に情報が絡み合ってめんどくさかった）</p>
<p>&nbsp;</p>
<p>最終的には深夜作業で対応することになり、なんとか目的を達成することが出来た。</p>
<p>&nbsp;</p>
<p>今後の教訓としては、インスタンスタイプのサポート期限は守ろう。</p>
<h3 id="rtoc-6" >パラメータグループはデフォルトを使うな</h3>
<p>時間がないからと言って、AWSが用意しているパラメータグループを使うな。</p>
<p>以下の問題が起きる</p>
<ul>
<li>Slow Query の出力がない</li>
<li>クエリの実行時間の制限がない</li>
</ul>
<p>問題の発生に気付けないのは大きな問題だ。</p>
<p>[getpost id=&#8221;1829&#8243; cat_name=&#8221;1&#8243; date=&#8221;0&#8243;]</p>
<h2 id="rtoc-7" >EC2</h2>
<h3 id="rtoc-8" >Amazon Linux2023 は remiリポジトリが使えないぞ</h3>
<p>Amazonlinux2023 はAWSさんが独自で管理しているOSらしいので、remi リポジトリがサポートされていない。</p>
<p>epel も使えない。</p>
<blockquote><p>Q: AL2023 は AL2 のような Amazon-Linux-Extras を搭載していますか?</p>
<p>A: いいえ。AL2023 には extras はありません。言語ランタイムなどの高レベルのソフトウェアパッケージの場合、四半期ごとのリリースを使用して、リポジトリで提供されるデフォルトパッケージに加えて、個別の名前空間化されたパッケージとしてメジャー/マイナー更新をパッケージに追加します。 例えば、Amazon Linux 2023 のデフォルトの Python バージョンは 3.8 である可能性がありますが、Python 3.9 (python39) が利用可能になると、別の名前空間化されたパッケージとして追加されます。これらの追加パッケージは、アップストリームリリース頻度とサポートモデルに厳密に従います。また、それらのサポートポリシーは、コンプライアンスとセキュリティのユースケースのために、パッケージマネージャーによってアクセスされることがあります。デフォルトパッケージは、AL2023 の存続期間を通じてサポート対象であり続けます。</p></blockquote>
<p>&nbsp;</p>
<p>サポート切れの PHP7.4 を使いたいという要件を達成するため、PHPの公式サイトからソースをビルドする事を考えたが、 php-fpm の導入及び関連する拡張機能の有効化の方法が分からなかったため、当手法は断念。</p>
<p>代わりに <strong>Rocky Linux</strong> を選択し、remi リポジトリからPHP7.4のインストールを行った。</p>
<p>（そもそもサポートの切れている言語Version 使うなよというお話でした</p>
<p>&nbsp;</p>
<h3 id="rtoc-9" >OSのメンテナンスは定期的に</h3>
<p><span class="sc_marker blue"><strong>10年近く稼働している一度もOSの再起動を行ったことのない EC2 のメンテナンス作業を行うタスクがあった。<br />
</strong></span>（何で誰も手つけて来なかったの？馬鹿じゃないの？</p>
<p>&nbsp;</p>
<p>構築した人は既におらず、インスタンスの中身がどうなっているかわからない状況だったため、作業前に以下の対応を行った。</p>
<ul>
<li>EBS バックアップ取得</li>
<li>AMI バックアップ取得</li>
<li>インスタンスの中で使用しているプログラムについての調査
<ul>
<li>各種言語のバージョン(拡張機能</li>
<li>cron</li>
<li>シェル</li>
</ul>
</li>
<li>VPCの構成</li>
</ul>
<p>&nbsp;</p>
<p>とりあえず結果からいうとデータの損失等が発生せず作業を終了することができた。</p>
<p>（やったこととしては、<strong>インスタンスサイズのアップグレード </strong>と <strong>ストレージのアップグレード</strong>。</p>
<p>&nbsp;</p>
<p>若者に伝えたいのが定期的にメンテナンスを行うことと運用がしやすいように設計書なり構成図なりを残すこと。<br />
（まじで何でも良いので、データとして残すことをオススメします。分かる人が見たら多少ズレのある設計書でもなんとなく予想がつくため。</p>
<h2 id="rtoc-10" >ALB</h2>
<h3 id="rtoc-11" >リスナールールのデフォルトルールは503返したほうが無難</h3>
<p>ALB は2つ以上のパブリックサブネットを設定する必要があります。</p>
<p>Route53 の Aレコード にALBのエイリアスを設定している場合は、ALBのパブリックIPが返ってくるようになる。</p>
<pre class="line-numbers"><code class="language-other">nslookup xxxx.com</code></pre>
<p>返却されるIPにアクセスするとALBで設定されているリスナールールに従った、ルーティングが行われる。</p>
<p>そのため、リスナールールのデフォルトルールが APPサーバーへのルーティングを行うターゲットグループを指定すると ALB のパブリックIP でアクセスすることができるようになってしまう。</p>
<p>これの怖いところが、EC2のセキュリティグループでは弾くことが不可能なため、意図しないルーティングが行われてしまう可能性があることです。</p>
<p>直近、 us-west-2 から大量のアクセスが来てしまい、アプリケーションサーバーが落ちるといった事業が発生してしまった。<br />
リスナールールの設定は適切に。。。</p>
<p>[getpost id=&#8221;2083&#8243; cat_name=&#8221;1&#8243; date=&#8221;0&#8243;]</p>
<p>&nbsp;</p>
<p>&nbsp;</p>
]]></content:encoded>
					
					<wfw:commentRss>https://otonan-syusyoku.work/archives/1710/feed</wfw:commentRss>
			<slash:comments>0</slash:comments>
		
		
			</item>
		<item>
		<title>炎上案件を経験して死にに行くという姿勢を持てば良かったという話</title>
		<link>https://otonan-syusyoku.work/archives/1482</link>
					<comments>https://otonan-syusyoku.work/archives/1482#respond</comments>
		
		<dc:creator><![CDATA[hrokig2]]></dc:creator>
		<pubDate>Thu, 08 Feb 2024 12:08:08 +0000</pubDate>
				<category><![CDATA[仕事の独り言]]></category>
		<category><![CDATA[業務]]></category>
		<category><![CDATA[ポエム]]></category>
		<category><![CDATA[実務]]></category>
		<category><![CDATA[本当にあった話]]></category>
		<category><![CDATA[脱3流プログラマー]]></category>
		<guid isPermaLink="false">https://otonan-syusyoku.work/?p=1482</guid>

					<description><![CDATA[プログラマーやエンジニアをやっている人なら分かると思うのですが、「炎上案件」という言葉には一種のドキドキがあるかと思います。 僕は炎上案件という言葉を聞くだけでドキドキが止まりません。 今回の記事では、受託企業でバチバチ [&#8230;]]]></description>
										<content:encoded><![CDATA[<p>プログラマーやエンジニアをやっている人なら分かると思うのですが、「炎上案件」という言葉には一種のドキドキがあるかと思います。<br />
僕は炎上案件という言葉を聞くだけでドキドキが止まりません。<br />
今回の記事では、受託企業でバチバチな炎上案件を経験してきた3流プログラマーが炎上案件の思い出を語らせていただければと思います。</p>
<div id="rtoc-mokuji-wrapper" class="rtoc-mokuji-content frame4 preset3 animation-fade rtoc_open noto-sans" data-id="1482" data-theme="BlogArise">
			<div id="rtoc-mokuji-title" class=" rtoc_center">
			<button class="rtoc_open_close rtoc_open"></button>
			<span>Contents</span>
			</div><ol class="rtoc-mokuji decimal_ol level-1"><li class="rtoc-item"><a href="#rtoc-1">炎上案件とは？</a></li><li class="rtoc-item"><a href="#rtoc-2">炎上するとどんな事が起きるのか</a><ul class="rtoc-mokuji mokuji_ul level-2"><li class="rtoc-item"><a href="#rtoc-3">お客さんに詰められる</a></li><li class="rtoc-item"><a href="#rtoc-4">上長から詰められる</a></li><li class="rtoc-item"><a href="#rtoc-5">メンバーから不満が出る</a></li></ul></li><li class="rtoc-item"><a href="#rtoc-6">炎上したときには死ににいく姿勢が大事</a></li><li class="rtoc-item"><a href="#rtoc-7">炎上案件は悪いことばかりではない</a></li></ol></div><h2 id="rtoc-1" >炎上案件とは？</h2>
<p>何らかの理由でとにかく燃えている案件のことです。</p>
<ul>
<li>シンプルな短納期（多分炎上の理由1位）</li>
<li> チーム内における重要人物のプロジェクトからの離脱</li>
<li>神様（クソ客）による土壇場での仕様変更</li>
<li>イキり営業による全てできますスタイルによる契約</li>
</ul>
<p>プロジェクトに関わるすべての人が何かしらに追われている状況になるため、関係者各位で揉め事が起こっています。<br />
ステークホルダー &gt; 営業 &gt; PL &gt; SE &gt; プログラマー</p>
<p>僕が経験した炎上案件では、<span class="sc_marker blue"><strong>短納期 + 急な仕様変更（馬鹿な営業のせい） により開発と営業の間で戦争が勃発しプロジェクトが崩壊しかけた</strong></span>事があります。<br />
最終的には<strong>客先への調整（謝罪） + 営業と開発の戦争に部長が仲裁する形</strong> で終着することでギリギリのところで丸く収まりました。</p>
<p>しかし一度崩壊しかけたプロジェクトなのでチーム内でのいざこざは残ったまま開発を続けていくことになりストレスの掛かるプロジェクトでした。</p>
<p>このように<strong>炎上案件は誰も幸せになりません。</strong></p>
<p>今回は炎上案件について僕の実体験を簡潔にお話したのですが、一口に炎上案件と言っても様々な理由があることを覚えていただければ幸いです。</p>
<h2 id="rtoc-2" >炎上するとどんな事が起きるのか</h2>
<h3 id="rtoc-3" >お客さんに詰められる</h3>
<p><span class="sc_marker blue"><strong>受託企業における一番恐ろしいタイミングがお客様から詰められる時</strong></span>です。<br />
当たり前の話ですが、身銭を切ってシステム開発を依頼されているので、全力で詰めてきます。</p>
<p>お客さんが詰めるときはだいたい以下の理由かと思います。</p>
<ul>
<li>納期に間に合わない</li>
<li>契約時に想定していた要件を満たせていない</li>
</ul>
<p>これらの理由で怒られるのが本当に本当にストレスでした。(契約不履行と言われたときにはゾッとします。</p>
<h3 id="rtoc-4" >上長から詰められる</h3>
<p><span class="sc_marker blue"><strong>お客様から詰められるということは必然的に上司からも詰められます。</strong></span></p>
<p>お客さんからの評価が悪いと次回の契約や会社の評判が下がるといった悪影響が発生する可能性が高くなるため、上司もピリピリします。</p>
<p>炎上は炎上を生むだけです。</p>
<div class="sc_frame_wrap inline orange">
<div class="sc_frame_title">これはただの文句</div>
<div class="sc_frame">
<p>僕が居た受託企業の上司はIT畑の人ではなかったため、お客さんからの評価が第一になります。そのため、お客さんからどんなに理不尽な要求が来たとしても必ず達成することを譲りません。</p>
<p>そんなやり方では必ず大事故が起きるよという開発側の意見には聞く耳を持ちません。</p>
<p><strong>歪な形で進行した結果で起きている炎上には目をつぶる</strong> → <strong>結果さらに燃える</strong> というサイクルを発生させる上司でした。</p>
</div>
</div>
<h3 id="rtoc-5" >メンバーから不満が出る</h3>
<p>他方から詰められるとチーム内からも悲惨な声が聞こえてきます。</p>
<p>「後少しでリリースできるから一緒に頑張りましょう。」という声がけしかできません。</p>
<p>世知辛いです。</p>
<h2 id="rtoc-6" >炎上したときには死ににいく姿勢が大事</h2>
<p>ようやく本題です。</p>
<p>炎上案件に参画すると全員が「この案件から抜け出したい」と願っている事は目に見えるのですが、そういった願いは儚く散っていきます。どうにか納品することが唯一の地獄からの脱出する道です。</p>
<p>全員がギリギリのところで踏ん張っているタイミングでは<span class="sc_marker blue"><strong>率先して死にに行く姿勢がメンバーを勇気づけると考えています。</strong></span></p>
<p>一度プロジェクトを崩壊させた目線から思うことが<span class="sc_marker blue"><strong>誰かがアクセルを踏んで頑張ることが誰かの活力につながる</strong></span>ことを強くお伝えしたいです。</p>
<p>今炎上案件に参画している人はぜひ、死にに行く姿勢を持ってほしいなと思います。（限界だったら逃げてください。本当に逃げてください。）</p>
<h2 id="rtoc-7" >炎上案件は悪いことばかりではない</h2>
<p>精神的にしんどい事が多い炎上案件ですが、悪いことばかりではありません。</p>
<p>サイヤ人の理論と一緒でギリギリのところで生き抜くと確実に成長します。成長するのは技術力かもしれませんし、人間力かもしれません。</p>
<p><span class="sc_marker blue"><strong>とにかくあなたの何かが確実に成長します。</strong></span></p>
<p>また、炎上案件の凄いところが<span class="sc_marker blue"><strong>普通に過ごした期間と炎上案件に関わった期間の成長の度合いに大きな差があります。</strong></span></p>
<p>それだけ炎上案件には人を成長させるパワーがあります。</p>
<p>一度経験しておくのをオススメしますよ。</p>
<p>[getpost id=&#8221;1204&#8243; target=&#8221;_blank&#8221; cat_name=&#8221;1&#8243; date=&#8221;0&#8243;]</p>
<p>&nbsp;</p>
<p>&nbsp;</p>
]]></content:encoded>
					
					<wfw:commentRss>https://otonan-syusyoku.work/archives/1482/feed</wfw:commentRss>
			<slash:comments>0</slash:comments>
		
		
			</item>
		<item>
		<title>【SES→受託→自社】エンジニア歴3年で形態の異なる会社で働いて思ったこと</title>
		<link>https://otonan-syusyoku.work/archives/1392</link>
					<comments>https://otonan-syusyoku.work/archives/1392#respond</comments>
		
		<dc:creator><![CDATA[hrokig2]]></dc:creator>
		<pubDate>Thu, 02 Nov 2023 14:21:32 +0000</pubDate>
				<category><![CDATA[仕事の独り言]]></category>
		<category><![CDATA[業務]]></category>
		<category><![CDATA[ポエム]]></category>
		<category><![CDATA[実務]]></category>
		<category><![CDATA[未経験エンジニア]]></category>
		<guid isPermaLink="false">https://otonan-syusyoku.work/?p=1392</guid>

					<description><![CDATA[巷で噂のエンジニアはどのような会社で働くべきか論争を見かけたのでSES → 受託 → 自社 と働く会社を移してきた僕から解説させてください。 エンジニア歴は短いのですが、これまでに以下の形態の会社で働いてきました。 SE [&#8230;]]]></description>
										<content:encoded><![CDATA[<p>巷で噂の<strong>エンジニアはどのような会社で働くべきか論争</strong>を見かけたのでSES → 受託 → 自社 と働く会社を移してきた僕から解説させてください。</p>
<p>エンジニア歴は短いのですが、これまでに以下の形態の会社で働いてきました。</p>
<ul>
<li>SES</li>
<li>受託</li>
<li>自社</li>
</ul>
<p>そんな僕からエンジニアとして働くべき会社を解説します。笑</p>
<div id="rtoc-mokuji-wrapper" class="rtoc-mokuji-content frame4 preset3 animation-fade rtoc_open noto-sans" data-id="1392" data-theme="BlogArise">
			<div id="rtoc-mokuji-title" class=" rtoc_center">
			<button class="rtoc_open_close rtoc_open"></button>
			<span>Contents</span>
			</div><ol class="rtoc-mokuji decimal_ol level-1"><li class="rtoc-item"><a href="#rtoc-1">SES 時代</a><ul class="rtoc-mokuji mokuji_ul level-2"><li class="rtoc-item"><a href="#rtoc-2">入社した経緯</a></li><li class="rtoc-item"><a href="#rtoc-3">業務内容</a></li><li class="rtoc-item"><a href="#rtoc-4">良かったこと</a></li><li class="rtoc-item"><a href="#rtoc-5">悪かったこと</a></li><li class="rtoc-item"><a href="#rtoc-6">SES をやめようと思った理由</a></li></ul></li><li class="rtoc-item"><a href="#rtoc-7">受託会社時代</a><ul class="rtoc-mokuji mokuji_ul level-2"><li class="rtoc-item"><a href="#rtoc-8">入社した経緯</a></li><li class="rtoc-item"><a href="#rtoc-9">良かったこと</a></li><li class="rtoc-item"><a href="#rtoc-10">悪かったこと</a></li></ul></li><li class="rtoc-item"><a href="#rtoc-11">自社開発時代</a><ul class="rtoc-mokuji mokuji_ul level-2"><li class="rtoc-item"><a href="#rtoc-12">入社した経緯</a></li><li class="rtoc-item"><a href="#rtoc-13">良かったこと</a></li><li class="rtoc-item"><a href="#rtoc-14">悪かったこと</a></li></ul></li><li class="rtoc-item"><a href="#rtoc-15">所属会社の形態によって変わること</a><ul class="rtoc-mokuji mokuji_ul level-2"><li class="rtoc-item"><a href="#rtoc-16">SES を悪く言うつもりはない</a></li><li class="rtoc-item"><a href="#rtoc-17">エンジニアスキル</a></li><li class="rtoc-item"><a href="#rtoc-18">ビジネススキル</a></li></ul></li><li class="rtoc-item"><a href="#rtoc-19">所属会社の形態によって変わらないこと</a></li><li class="rtoc-item"><a href="#rtoc-20">所属会社の形態に関わらず大切にしないといけないこと</a></li><li class="rtoc-item"><a href="#rtoc-21">最後に</a></li></ol></div><h2 id="rtoc-1" >SES 時代</h2>
<h3 id="rtoc-2" >入社した経緯</h3>
<p>まずは SES 時代です。</p>
<p>当時の僕は異業種からの IT 業界への転職を目指していたこともあり、IT 業界に対する知識が全くない状態でした。</p>
<div class="voice left">
<div class="icon">
<p><img decoding="async" src="https://otonan-syusyoku.work/wp-content/uploads/2023/10/名称未設定のデザイン-16.png" /></p>
<div class="name">当時のアホな僕</div>
</div>
<div class="text sc-inner-content think_balloon left blue">
<p>SES ？<br />
なにそれ？（鼻くそホジホジ）</p>
</div>
</div>
<p>&nbsp;</p>
<p>そのため手当たり次第に面接を受けまくっていた記憶があります。（今考えるとかなりアホですね。笑）</p>
<p>&nbsp;</p>
<p>当時の世界情勢的にはコロナが大流行していた時期ということもあり、求人数はかなり狭めらていた状況でした。<br />
そのような中、転職活動を進めていくにあたり戦略として以下の対策を講じました。</p>
<ul>
<li>自作のウェブアプリケーションを作る</li>
<li>資格を取得する</li>
<li>技術記事を書く</li>
</ul>
<p>[getpost id=&#8221;606&#8243; cat_name=&#8221;1&#8243; date=&#8221;0&#8243;][getpost id=&#8221;590&#8243; cat_name=&#8221;1&#8243; date=&#8221;0&#8243;]</p>
<p>&nbsp;</p>
<p>転職活動という大航海を戦うには心細い能力値の低い武器を揃えて旅に出ていたため、条件の悪い求人にしか出会うことが出来ませんでした。</p>
<div class="sc_frame_wrap inline orange">
<div class="sc_frame_title"><span class="sc_frame_icon"><i class="fa fa-arrow-circle-down" aria-hidden="true"><span>fa-arrow-circle-down</span></i></span>条件の悪い求人の代表例</div>
<div class="sc_frame">
<ul>
<li>家電量販店で勤務後、自己学習を行う。上長の技術的了承を得られたらシステム開発の現場に入れる</li>
<li>コールセンターで勤務（資格取得やITに関する知識を取り入れる事が目的らしい。</li>
</ul>
</div>
</div>
<p>&nbsp;</p>
<p>そんな中、あるSES会社と出会い入社をしました。</p>
<ul>
<li>僕の揃えた武器に対して「君は努力のできる人だと思う」と評価</li>
<li>先輩のアセットとしてシステム開発の現場に入れてもらえる</li>
</ul>
<p>中々良い出会いが無い未経験からの転職活動だったので、このSES会社に出会えた事はとても嬉しかったです。</p>
<h3 id="rtoc-3" >業務内容</h3>
<p>本当に末端の作業員だという内容の業務をこなしました。（未経験で入社したのでそれは仕方がない）</p>
<p>具体的には以下のような内容です。</p>
<ul>
<li>テスト仕様書に沿ってテストを実施する
<ul style="list-style-type: circle;">
<li>エビデンスをスクショし、 Excel に貼り付ける</li>
</ul>
</li>
<li>HTML で書かれているページを Excel におこす
<ul style="list-style-type: circle;">
<li>現在の画面を仕様書に残すため</li>
<li>Git 使えや。クソが。</li>
</ul>
</li>
<li>データ移行（DB移行）
<ul style="list-style-type: circle;">
<li>これは勉強になった</li>
</ul>
</li>
</ul>
<h3 id="rtoc-4" >良かったこと</h3>
<p>未経験からの IT業界への初参入ということだったので、全てが学びになったという自負があります。</p>
<p>質問の仕方や会話の仕方など他の業界とは異なっている事を知れたのはエンジニアとしての学びでした（特に質問の仕方は何度もご指導いただきました。笑）</p>
<p>また、システム開発の概要を知れたのはかなり大きかったです。<br />
<span class="sc_marker blue"><strong>多くの人がそれぞれの役割をこなし、納期や予算と戦いながらゴールに向かった進んでいく姿勢はプログラムを書くだけが仕事ではないという事を学ぶことが出来ました。</strong></span></p>
<p>その他にも何かしらの病気を抱えている率が高いこと(生活習慣病、精神疾患)や小汚いおじさんに見える人が実はかなり稼いでいる事など業界 の知見が増えたのは人生の経験という観点からもすごく勉強になりました。</p>
<h3 id="rtoc-5" >悪かったこと</h3>
<p>悪いことを上げればキリがないのですが、特に印象深かったものを紹介します。</p>
<ol>
<li>先輩社員に意識を高く持っている人がいない（自社の先輩）</li>
<li>商流が深すぎて末端の作業</li>
<li>三次受けだが二次受けとして入場</li>
</ol>
<p>特に1番の意識の高い人がいなかったという事は <strong>エンジニアとして終わっている </strong>と思います。</p>
<p>当時の僕もそうですが、経験のない人はその現場が IT業界 の全てだと思ってしまいます。</p>
<p>そのためそれがデフォルトとなってしまうため、害悪以外の何物でもありません。（当時は分からなかったのですが、今となってははっきり言えます）</p>
<p>技術力が低くても高い志は持つべきというのが僕の信念です。</p>
<h3 id="rtoc-6" >SES をやめようと思った理由</h3>
<p>未経験からIT業界を目指した理由である「システムを作ってみたい」という目標にたどり着くのに時間がかかってしまうと考えたため、転職しました。</p>
<p>未経験から拾ってもらったこの会社には恩しかないのですが、なんのために頑張っているかを考えた結果、次のステップに行く決意をしました。</p>
<p>今となっては当時の決断と行動は良かったと思っています。</p>
<h2 id="rtoc-7" >受託会社時代</h2>
<h3 id="rtoc-8" >入社した経緯</h3>
<p>当時は<span class="sc_marker blue"><strong>とにかく開発がしたい</strong></span>という気持ちがかなり強く、プログラムを書けるお仕事に就く事を目的に仕事を探していました。</p>
<p>当時のスキルセットというか僕の経歴上、なかなか僕自身が目指していた仕事に就くことは難しい状況でした。<br />
その当時のスキルセットは以下になります。（未経験の実務経験1年に仕事があるはずがない</p>
<table style="border-collapse: collapse; width: 100%;">
<tbody>
<tr>
<td style="width: 41.7838%; background-color: #aee3f5;">実務経験</td>
<td style="width: 58.2162%;">1年</td>
</tr>
<tr>
<td style="width: 41.7838%; background-color: #aee3f5;">スキルセット</td>
<td style="width: 58.2162%;">
<ul>
<li>PHP 1年（独学）</li>
<li>MySQL 1年（独学）</li>
<li>PL/SQL 1年</li>
<li>Oracle 1年</li>
<li>Java 6ヶ月</li>
</ul>
</td>
</tr>
</tbody>
</table>
<p>&nbsp;</p>
<p>またスキルセットが薄い上に経歴もかなり汚れていたため、ハードルはかなり高い状況です。笑</p>
<p><strong>これ以上経歴を汚さない</strong> + <strong>目標にしていた業務内容（開発業務）</strong>の両方を達成するためには普通のやり方だと絶対上手くいかない事が目に見えていたので、<span class="sc_marker blue"><strong>派遣としてやっていこう</strong></span>と作戦を練りました。</p>
<p>派遣なら現場を転々としても履歴書には「202x年 x月 〇〇 入社」という形で書くことになるので、経歴が汚くなることを防ぐ事ができます。</p>
<p>また、開発業務に携わるのが難しいと判断したら次の現場に向かうのも正社員と比較して容易です。</p>
<div class="sc_frame_wrap inline blue">
<div class="sc_frame_title">スキル無いやつには派遣は結構おすすめ</div>
<div class="sc_frame shadow">
<p><span class="sc_marker blue"><strong>実力がない人に限ってはフリーランスやSESより派遣は結構強くおすすめします。</strong></span></p>
<ul>
<li>環境が悪い現場から逃げ出しやすい（経歴を汚さないで済む）</li>
<li>運とタイミング次第では自分が求めている環境に飛び込める</li>
<li>契約満了時は失業保険すぐ受け取れる（会社都合で申請できるため）</li>
</ul>
<p>ちゃんとデメリットは存在しますが、メリットのほうが大きいと思いますよーん</p>
</div>
</div>
<p>上記の考えから以下の派遣会社に登録し、いくつかの面談を受けました。</p>
<p>作戦はズバリ的中し、受託開発を行っている企業にプログラマーとして派遣されることが決まりました。<br />
この受託開発企業では3ヶ月の派遣期間が終了と同時に派遣元から引き抜きという形で正社員として入社させてくれたので何だかんだ運がよかったかもしれません。（かなりブラックでしたが笑）</p>
<h3 id="rtoc-9" >良かったこと</h3>
<p>本当に信じられないくらいの様々な経験をすることができました。</p>
<ul>
<li>顧客との打ち合わせ</li>
<li>要件定義</li>
<li>インフラ構築</li>
<li>開発</li>
<li>テスト</li>
<li>運用</li>
</ul>
<p>経験のない人間に上記のフェーズ全てを任せるのは企業としてはどうかと思うのですが、僕個人にはメリットしかない期間でした。</p>
<p>この企業で大きな学びとなったのは以下2点です。</p>
<ol>
<li><span class="sc_marker blue"><strong>各フェーズにおける苦労</strong></span></li>
<li><span class="sc_marker blue"><strong>セキュリティ</strong></span></li>
<li><span class="sc_marker blue"><strong>システムはお金を稼ぐ手段でしかない</strong></span></li>
</ol>
<p>特に3のシステムはお金を稼ぐ手段でしかないはという考えは<strong>一生の宝物</strong>だと考えています。</p>
<p>顧客にとって必要なものは最新の技術を使ったシステムやおしゃれなUIで仕上げられた中身のないシステムではなく<span class="sc_marker blue"><strong>今、目の前にある課題を解決するシステムが必要</strong></span>であるということです。</p>
<p>この点をあまり理解していないエンジニアは肌感として多いと感じています。</p>
<p>「誰のため」や「何のため」を意識していかないと自己満で業務をこなすエンジニアになってしまうので皆さんもご注意を。笑</p>
<h3 id="rtoc-10" >悪かったこと</h3>
<p>とにかく色々な案件を掛け持っていたので労働時間がかなり長かったです。（詳細は以下の記事を。笑）</p>
<p>[getpost id=&#8221;1204&#8243; target=&#8221;_blank&#8221; cat_name=&#8221;1&#8243; date=&#8221;1&#8243;]</p>
<p>労働時間の問題さえなければ勉強になる状態ではあったので続けたかったのが本音になります。</p>
<p>たくさん勉強できたので個人的には満足な期間でした。</p>
<h2 id="rtoc-11" >自社開発時代</h2>
<h3 id="rtoc-12" >入社した経緯</h3>
<p>受託企業では短期間で様々な経験をすることができたのですが、<span class="sc_marker blue"><strong>基礎をすっ飛ばして目の前の案件を納期までに何とか動く状態にする事を目的に開発業務を行っていました。</strong></span></p>
<p>簡単に言うと「<span class="sc_marker blue"><strong>保守性</strong></span>」「<span class="sc_marker blue"><strong>拡張性</strong></span>」「<span class="sc_marker blue"><strong>セキュリティ強度</strong></span>」が低い状態のシステムを作っていました。</p>
<p>エンジニアとしての能力値がかなり低い状態でしたので、次の現場では<span class="sc_marker blue"><strong>ちゃんとしたシステム開発を行っている企業に入社することを目標</strong></span>に転職活動を行いました。</p>
<p>ここでいうちゃんとしたシステム開発というのは以下のことを指します。</p>
<ul>
<li>セキュリティ意識が強いか</li>
<li>会社内でエンジニアの人権はあるか<br />
→人権ないと環境が整わないのでいい加減なシステム開発になりがち</li>
<li>強強エンジニアは在籍しているか<br />
→知見を元に良いシステムが何なのかを考えてくれるセーフティーライン</li>
</ul>
<p>&nbsp;</p>
<p>転職活動時は受託と自社に絞って求人を探していました。</p>
<p><strong>Green</strong> と <a href="https://px.a8.net/svt/ejp?a8mat=3HBU7V+NTDQY+2OTA+HY06A" rel="nofollow"><strong>転職ドラフト</strong></a>, <a href="https://px.a8.net/svt/ejp?a8mat=3N5XSA+1CTL5M+3SWM+HVFKY" rel="nofollow"><strong>TechClips ME（テックミー）</strong></a><img decoding="async" border="0" width="1" height="1" src="https://www16.a8.net/0.gif?a8mat=3N5XSA+1CTL5M+3SWM+HVFKY" alt="" />を使って本当にたくさんの求人を精査しました。</p>
<ul>
<li>前回の受託企業のような詰め込み型の令和の時代にそぐわない企業を避けるため。</li>
<li>どちらもエンジニア向けのサービスであり、経歴書を充実させることで企業からのオファーが来るので結構おすすめです。</li>
</ul>
<p>結果的に<a href="https://px.a8.net/svt/ejp?a8mat=3HBU7V+NTDQY+2OTA+HY06A" rel="nofollow">転職ドラフト</a>経由で出会った自社開発企業の面接官が以下の事を言ってくれたので転職することを決めました。</p>
<ul>
<li>君はまだまだ技術力が低い</li>
<li>まだまだ知るべき事はたくさんある</li>
<li>私達の会社で勉強しながら成長しないかい？</li>
</ul>
<h3 id="rtoc-13" >良かったこと</h3>
<p>いいものを作るというマインドが高い人に出会えた事が何よりも得難いものでした。</p>
<p>いいものを作るというマインドは過程の中では<strong>正しいプログラムの書き方</strong>や<strong>システムとしてあるべき姿</strong>を目指すことになるので、<strong>確かな技術力の向上</strong>が感じられました。<br />
（これが当たり前と言われればそうですが…</p>
<p>&nbsp;</p>
<p>また技術力の向上と合わせて<strong>組織の作り方</strong> も勉強になっています。</p>
<p>企業自体の従業員数は2000名ほどの人数を抱えているのですが、開発部は20名弱の組織体系です。</p>
<p>そのため正にこれからの組織という感じで、本当に価値のあるものを届けるために色々なアプローチを試しています。<br />
優秀な先輩たちが「<span class="sc_marker blue"><strong>これを達成したい</strong></span>」と目標を定めて取り組む姿は、過程も含めて勉強になっています。（エンジニアである前に人間ですからね。笑）</p>
<p>&nbsp;</p>
<h3 id="rtoc-14" >悪かったこと</h3>
<p>実際のところ、自社サービスを展開しているのですが毎月赤字という状況です。</p>
<p>どうにかこの状況を打開するために営業と開発が肩を組みながら頑張っている状況ですが、赤字という状況は肩身を狭くします。</p>
<p>現在、各数値が改善してきているので近いうちに黒字になってくれるはずでしょう。（希望的観測！）</p>
<p>&nbsp;</p>
<h2 id="rtoc-15" >所属会社の形態によって変わること</h2>
<table style="border-collapse: collapse; width: 100%; height: 145px;">
<tbody>
<tr style="background-color: #6fa4ed;">
<td style="width: 10.9003%; height: 45px;"></td>
<td style="width: 26.0788%; height: 45px;"><span style="color: #ffffff;">特徴</span></td>
<td style="width: 31.5104%; height: 45px;"><span style="color: #ffffff;">エンジニアスキル</span></td>
<td style="width: 31.5104%; height: 45px;"><span style="color: #ffffff;">ビジネススキル</span></td>
</tr>
<tr style="height: 10px;">
<td style="width: 10.9003%; height: 10px;">SES</td>
<td style="width: 26.0788%; height: 10px;">契約切られなければ何しても</td>
<td style="width: 31.5104%; height: 10px;">☆</td>
<td style="width: 31.5104%; height: 10px;">☆</td>
</tr>
<tr style="height: 45px;">
<td style="width: 10.9003%; height: 45px;">受託</td>
<td style="width: 26.0788%; height: 45px;">納期と太客が絶対</td>
<td style="width: 31.5104%; height: 45px;">☆☆</td>
<td style="width: 31.5104%; height: 45px;">☆☆☆</td>
</tr>
<tr style="height: 45px;">
<td style="width: 10.9003%; height: 45px;">自社</td>
<td style="width: 26.0788%; height: 45px;">いいものを作る</td>
<td style="width: 31.5104%; height: 45px;">☆☆☆</td>
<td style="width: 31.5104%; height: 45px;">☆☆</td>
</tr>
</tbody>
</table>
<h3 id="rtoc-16" >SES を悪く言うつもりはない</h3>
<p>上記の表で SES の評価が高くないのは、僕が所属していた SES企業 があまり良くないところだったからです。</p>
<p>友達が所属している SES 企業の話を聞く限り、結構条件は整っているなぁという印象があります。</p>
<ul>
<li>自社プレゼン会（自分で作ってきたものがプロダクトになる可能性）</li>
<li>案件選択性</li>
<li>以外にも平均勤続年数が高い</li>
</ul>
<p>本当にピンキリです。</p>
<p>&nbsp;</p>
<h3 id="rtoc-17" >エンジニアスキル</h3>
<p>エンジニアスキルは圧倒的に自社サービスが身につきます。</p>
<p>自社サービスに入社してよかったことにも記載したのですが、<span class="sc_marker blue"><strong>いいものを作るというマインドはかなり大きい</strong></span>です。</p>
<p>いいものを作ったところで売上が上がるとは限らないのですが、自分たちのサービスで下手なものを作るという事は絶対にしてはいけないことです。（わざわざ負債を抱える必要はない）</p>
<p>いいものを作るためには技術力が必要ですから、圧倒的に自社サービスが完勝です。</p>
<p>&nbsp;</p>
<h3 id="rtoc-18" >ビジネススキル</h3>
<p>ビジネススキルは圧倒的に受託開発が身につきます。</p>
<p>理由は<span class="sc_marker blue"><strong>お客様は神様という構図が成り立つ</strong></span>からですあり、<span class="sc_marker blue"><strong>お客さんとの調整をミスれば炎上してしまうという恐ろしい現実</strong></span>が待っているからです。</p>
<p>受託金額が高ければ高いほど無茶な要求をしてくるというのが肌感覚としてあったり、納期もなんやかんやで短く設定してきたりします。</p>
<p>また、ギスギスした社内であれば社内調整も必要のため、エンジニア業務以外の時間でかなりの労力が必要です。</p>
<p>顧客調整と社内調整の両方の観点からビジネススキルは受託企業の完勝です。</p>
<p>&nbsp;</p>
<h2 id="rtoc-19" >所属会社の形態によって変わらないこと</h2>
<p>エンジニアである限り不変なことです。</p>
<p><span class="sc_marker-animation y"><strong>技術力があり、所属先で価値を出せていること</strong></span></p>
<p>上記が達成できている人は<span class="sc_marker blue">どの現場に行こうがどの形態で働こうが最強のエンジニア</span>です。</p>
<h2 id="rtoc-20" >所属会社の形態に関わらず大切にしないといけないこと</h2>
<p>会社の形態によって特徴が違うのですが、学ぶべき点はどの形態の会社に行っても必ずあります。</p>
<p>そのため、1エンジニアとして最大限学ぶためには<span class="sc_marker blue"><strong>プロジェクトの中心にいることが大切</strong></span>になってきます。</p>
<ul>
<li>テックリード</li>
<li>スクラムマスター</li>
<li>上流担当</li>
</ul>
<p>「自社サービスで末端の作業員をやっています！」という人よりも「SES で俺がプロジェクト回しているぜ」っていう人の方が圧倒的に市場価値は高いです。</p>
<p>どの形態で働こうがこの考えは大切にするべきです。</p>
<p>&nbsp;</p>
<h2 id="rtoc-21" >最後に</h2>
<p>どの形態の会社で働くにせよ、自身の技術力を向上させ、プロジェクトで中心的な役割を果たすことを大事にしてください。</p>
<p>自分自身が何を考え、何を大事にするかで選択は変わってくると思います。</p>
<p>経験を通して学び、スキルを向上させ、満足の行くキャリアを歩めるように祈っています。お互いに頑張りましょう。</p>
<p>&nbsp;</p>
]]></content:encoded>
					
					<wfw:commentRss>https://otonan-syusyoku.work/archives/1392/feed</wfw:commentRss>
			<slash:comments>0</slash:comments>
		
		
			</item>
		<item>
		<title>僕が考えるRDSを激推する理由</title>
		<link>https://otonan-syusyoku.work/archives/1426</link>
					<comments>https://otonan-syusyoku.work/archives/1426#respond</comments>
		
		<dc:creator><![CDATA[hrokig2]]></dc:creator>
		<pubDate>Thu, 21 Sep 2023 14:42:53 +0000</pubDate>
				<category><![CDATA[インフラ]]></category>
		<category><![CDATA[業務]]></category>
		<category><![CDATA[AWS]]></category>
		<category><![CDATA[MySQL]]></category>
		<category><![CDATA[RDS]]></category>
		<category><![CDATA[フェイルオーバー]]></category>
		<guid isPermaLink="false">https://otonan-syusyoku.work/?p=1426</guid>

					<description><![CDATA[Contents 僕が考えるRDS を激推する理由バックアップが楽ちん死活監視が楽ちんフェイルオーバーが楽ちんまとめ僕が考えるRDS を激推する理由 バックアップが楽ちん RDS を推したい理由の上位にくるのがバックアッ [&#8230;]]]></description>
										<content:encoded><![CDATA[<div id="rtoc-mokuji-wrapper" class="rtoc-mokuji-content frame4 preset3 animation-fade rtoc_open noto-sans" data-id="1426" data-theme="BlogArise">
			<div id="rtoc-mokuji-title" class=" rtoc_center">
			<button class="rtoc_open_close rtoc_open"></button>
			<span>Contents</span>
			</div><ol class="rtoc-mokuji decimal_ol level-1"><li class="rtoc-item"><a href="#rtoc-1">僕が考えるRDS を激推する理由</a><ul class="rtoc-mokuji mokuji_ul level-2"><li class="rtoc-item"><a href="#rtoc-2">バックアップが楽ちん</a></li><li class="rtoc-item"><a href="#rtoc-3">死活監視が楽ちん</a></li><li class="rtoc-item"><a href="#rtoc-4">フェイルオーバーが楽ちん</a></li></ul></li><li class="rtoc-item"><a href="#rtoc-5">まとめ</a></li></ol></div><h2 id="rtoc-1" >僕が考えるRDS を激推する理由</h2>
<h3 id="rtoc-2" >バックアップが楽ちん</h3>
<p>RDS を推したい理由の上位にくるのが<strong>バックアップの手軽さ</strong>です。</p>
<p>AWS の公式にも記載がある通り、バックアップを自動で取ってくれます。</p>
<p>過去に クラウドサーバー 上にインストールした MySQL のバックアップ手法として、<strong>cron にて AWS SDK for PHP を用いて S3にダンプファイルを保管</strong>する手法を取っていた自分からすると RDS のバックアップはかなり楽ちんです。<br />
だって、以下の設定が不要になりますからね。笑</p>
<ol>
<li>AWS SDK for PHP のインストール</li>
<li>cron にて日次の実行処理を記述</li>
<li>S3 に送信処理を記述</li>
</ol>
<blockquote><p>デフォルトで有効になっている Amazon RDS の自動バックアップ機能により、データベースとトランザクションログがバックアップされます。Amazon RDS では DB インスタンスのストレージボリュームのスナップショットを自動的に作成し、個々のデータベースだけではなく、その DB インスタンス全体をバックアップします。</p>
<p>このバックアップは、バックアップウィンドウと呼ばれるユーザーが設定可能な 30 分間隔の時間に 1 日 1 回行われます。自動バックアップは、お客様が設定した日数の間、保持されます (バックアップ保持期間と呼ばれます)。自動バックアップの保持期間は、最大 35 日間まで設定できます。</p>
<p><cite class="blockquote_ref"> <a href="https://aws.amazon.com/jp/rds/features/backup/#%E8%87%AA%E5%8B%95%E3%83%90%E3%83%83%E3%82%AF%E3%82%A2%E3%83%83%E3%83%97" target="_blank" rel="noopener noreferrer">Amazon RDS のバックアップと復元</a> </cite></p></blockquote>
<p>&nbsp;</p>
<p>また、 RDS には自動バックアップに加えてポイントインタイムリカバリという機能があり、特定の時点に戻すことができます。（5分毎にデータベースの変更ログのアーカイブが自動で実行されます）</p>
<p>これは、データの損失を最小限に抑えることのできる機能となっており、ポカしやすい人には必需品と言えるほどの機能となっています。</p>
<p>先程申し上げた日次のバックアップだけでは不足しているバックアップ分を補填しているので、個人的にはすごく好きです。</p>
<blockquote><p>DB インスタンスを特定の時点に復元し、新しい DB インスタンスを作成できます。</p>
<p><cite class="blockquote_ref"> <a href="https://docs.aws.amazon.com/ja_jp/AmazonRDS/latest/UserGuide/USER_PIT.html" target="_blank" rel="noopener noreferrer">DB インスタンスを特定の時点に復元し、新しい DB インスタンスを作成できます。</a> </cite></p></blockquote>
<h3 id="rtoc-3" >死活監視が楽ちん</h3>
<p>RDS はデフォルトでメトリクスデータを1分間隔で CloudWatch に送信してくれます。<br />
（CloudWatch はメトリクスの収集、アラームの設定、ログの収集と監視などを対応してくれるサービスです）</p>
<p>&nbsp;</p>
<p>これも自分ごとではありますが、死活監視をするために以下のようなインフラを構築しました。</p>
<table style="border-collapse: collapse; width: 100%; height: 519px;">
<tbody>
<tr style="height: 45px;">
<td style="width: 50%; text-align: center; height: 45px;">イメージ</td>
<td style="width: 50%; text-align: center; height: 45px;">設定手順</td>
</tr>
<tr style="height: 474px;">
<td style="width: 50%; height: 474px;"><img decoding="async" src="https://otonan-syusyoku.work/wp-content/uploads/2023/09/アプリケーションを監視するサーバーを監視するサーバー.png" alt="監視構成" width="1000" height="500" class="aligncenter size-full wp-image-1443" srcset="https://otonan-syusyoku.work/wp-content/uploads/2023/09/アプリケーションを監視するサーバーを監視するサーバー.png 1000w, https://otonan-syusyoku.work/wp-content/uploads/2023/09/アプリケーションを監視するサーバーを監視するサーバー-300x150.png 300w, https://otonan-syusyoku.work/wp-content/uploads/2023/09/アプリケーションを監視するサーバーを監視するサーバー-768x384.png 768w" sizes="(max-width: 1000px) 100vw, 1000px" /></td>
<td style="width: 50%; height: 474px;">
<ol>
<li>アプリケーションサーバー構築</li>
<li>アプリケーションサーバーを監視するサーバー（監視サーバー A）を構築
<ol>
<li>Zabbix をインストール</li>
<li>アプリケーションサーバーに 監視サーバーA のエージェントをインストール</li>
</ol>
</li>
<li>監視サーバーA にて監視設定</li>
<li>監視サーバーAを監視する監視サーバーBを構築
<ol>
<li>Zabbix をインストール</li>
<li>監視サーバーAに監視サーバーBのエージェントをインストール</li>
</ol>
</li>
<li>監視サーバーBにて監視設定</li>
</ol>
</td>
</tr>
</tbody>
</table>
<p>[getpost id=&#8221;1243&#8243; cat_name=&#8221;1&#8243; date=&#8221;0&#8243;][getpost id=&#8221;1220&#8243; cat_name=&#8221;1&#8243; date=&#8221;0&#8243;]</p>
<p>&nbsp;</p>
<p>手順書いてみたんですけど、すっげー面倒くさいですね。。。</p>
<p>その反面、 RDS では上記のような面倒くさい事をしなくても死活監視が簡単にできてしまうんです。</p>
<p>下記のあたりを見てれば DBが生きているかどうかを判別することができるので、すごく楽です。</p>
<ul>
<li>データベースの稼働状況</li>
<li>CPU使用率</li>
<li>メモリ使用率</li>
<li>ディスクストレージ</li>
<li>データベースのクエリおよびスロークエリ</li>
</ul>
<p>これらに対して閾値を設定して異常状態を感知できるようにすれば、僕が構築したよく分からない事はしなくても済むなんて素敵すぎる！！！！</p>
<h3 id="rtoc-4" >フェイルオーバーが楽ちん</h3>
<p>フェイルオーバー の構成を取っていると何らかの障害が起きた際に被害を最小限に止めることができます。</p>
<p>実際に手動で組み込んだことはないのですが、天下の Oracle 様の解説記事を読んでみるとごちゃごちゃと設定が必要そうで、適切な冗長構成を取るのが難しそうな印象を受けました。</p>
<p>&nbsp;</p>
<p>対して RDS は以下の条件を満たせば、冗長構成を取ることが可能となっています。</p>
<ul>
<li>マルチアベイラビリティーゾーン</li>
<li>ホットスタンバイオプションの有効化</li>
</ul>
<p>実際の手法を確認したい方はこちらの記事をご確認ください。</p>
<p>[getpost id=&#8221;1448&#8243; cat_name=&#8221;1&#8243; date=&#8221;0&#8243;]</p>
<h2 id="rtoc-5" >まとめ</h2>
<p>単純なDBを構築したい場合、<strong>RDS を使うことで楽に安全に構築することができます</strong>。</p>
<p>過去の自分に戒めを込めて、 RDS 使うと幸せになれることを胸張って伝えていきたいです。笑</p>
<p>&nbsp;</p>
]]></content:encoded>
					
					<wfw:commentRss>https://otonan-syusyoku.work/archives/1426/feed</wfw:commentRss>
			<slash:comments>0</slash:comments>
		
		
			</item>
		<item>
		<title>【PHPエンジニア】WEB系受託企業で月300時間稼働を10ヶ月続けた感想</title>
		<link>https://otonan-syusyoku.work/archives/1204</link>
					<comments>https://otonan-syusyoku.work/archives/1204#respond</comments>
		
		<dc:creator><![CDATA[hrokig2]]></dc:creator>
		<pubDate>Fri, 17 Feb 2023 02:30:46 +0000</pubDate>
				<category><![CDATA[仕事の独り言]]></category>
		<category><![CDATA[業務]]></category>
		<category><![CDATA[PHP]]></category>
		<category><![CDATA[ポエム]]></category>
		<category><![CDATA[実務]]></category>
		<guid isPermaLink="false">https://otonan-syusyoku.work/?p=1204</guid>

					<description><![CDATA[昨今、「自由に働ける」「高収入」といった話題が上がりやすいIT業界なのですが、WEB系受託企業で300時間/月稼働した感想を書きたいと思います。 &#160; この記事はジュニアエンジニアやミドルエンジニアを想定している [&#8230;]]]></description>
										<content:encoded><![CDATA[<p>昨今、「自由に働ける」「高収入」といった話題が上がりやすいIT業界なのですが、WEB系受託企業で300時間/月稼働した感想を書きたいと思います。</p>
<p>&nbsp;</p>
<p>この記事はジュニアエンジニアやミドルエンジニアを想定している記事です。</p>
<p>同じ様な働き方やIT業界の働きづらさに怯えている方の参考になれば幸いです。</p>
<div id="rtoc-mokuji-wrapper" class="rtoc-mokuji-content frame4 preset3 animation-fade rtoc_open noto-sans" data-id="1204" data-theme="BlogArise">
			<div id="rtoc-mokuji-title" class=" rtoc_center">
			<button class="rtoc_open_close rtoc_open"></button>
			<span>Contents</span>
			</div><ol class="rtoc-mokuji decimal_ol level-1"><li class="rtoc-item"><a href="#rtoc-1">前提</a></li><li class="rtoc-item"><a href="#rtoc-2">なぜ300時間を耐えたのか</a></li><li class="rtoc-item"><a href="#rtoc-3">300時間働いて良かったこと</a><ul class="rtoc-mokuji mokuji_ul level-2"><li class="rtoc-item"><a href="#rtoc-4">1→10までやらせて貰えた</a></li><li class="rtoc-item"><a href="#rtoc-5">受託先企業の内部を見ることができた</a></li><li class="rtoc-item"><a href="#rtoc-6">技術に対するお金の考え方が身についた</a></li></ul></li><li class="rtoc-item"><a href="#rtoc-7">300時間働いてダメだったこと</a><ul class="rtoc-mokuji mokuji_ul level-2"><li class="rtoc-item"><a href="#rtoc-8">体に異変</a></li><li class="rtoc-item"><a href="#rtoc-9">社内を変えることができなかった</a></li></ul></li><li class="rtoc-item"><a href="#rtoc-10">最後に伝えたいこと</a></li></ol></div><h2 id="rtoc-1" >前提</h2>
<p>所属先の簡単な概要です。</p>
<p>厳しい社内リソースと案件数だったため、高稼働の状態でした。</p>
<p>またタイトルで受託企業と謳っているのですが、元々は紙を扱った業種の会社だった為、古い体制が残り続けている会社となっています。<br />
そのため、システムを構築する期間を度外視した案件のとり方をしてきた結果が悲惨な状態を作り上げていきました。</p>
<table style="border-collapse: collapse; width: 100%;">
<tbody>
<tr>
<td style="width: 27.6786%;">種別</td>
<td style="width: 72.3214%;">受託</td>
</tr>
<tr>
<td style="width: 27.6786%;">チームメンバー</td>
<td style="width: 72.3214%;">7ヶ月間は2人。最後の3ヶ月は4人。</td>
</tr>
<tr>
<td style="width: 27.6786%;">案件数</td>
<td style="width: 72.3214%;">12</td>
</tr>
<tr>
<td style="width: 27.6786%;">案件概要</td>
<td style="width: 72.3214%;">
<ul>
<li>予約システム</li>
<li>申請システム</li>
<li>営業管理システム</li>
<li>加入者情報閲覧システム</li>
</ul>
<p>&#8230;etc</td>
</tr>
</tbody>
</table>
<p>&nbsp;</p>
<h2 id="rtoc-2" >なぜ300時間を耐えたのか</h2>
<p>結果的に退職することになったのですが、まずは何故300時間の働き方を耐えてきたのかをお伝えしたいと思います。</p>
<p>&nbsp;</p>
<p>一般的に「1日8時間×月20日+残業(5〜20h)=180〜200h」の働き方が普通だと思います。</p>
<p>そんな普通の働き方と比較して過酷な300時間の働き方を10ヶ月間も耐えたかというと自分の技術を伸ばしたいという目標があったからです。</p>
<p>&nbsp;</p>
<p>前職はエンジニアの人手不足、社内の技術ストックもない状態でしたので<span class="sc_marker blue">自分自身で目の前の案件を乗り切るしか</span>方法がありませんでした。</p>
<p>そのような状況下で働き続けたので肉体と精神を削って確かな技術を得ることができました。<br />
前職に入社するまでは、末端作業員レベルだったものが炎上案件を複数こなしたことで、1エンジニアとして市場に出れるレベルになったと思います。</p>
<p>まだまだ足りない技術のほうが圧倒的に多いのですが、エンジニアとして名乗れるラインには立つことができたので目標達成です。</p>
<h2 id="rtoc-3" >300時間働いて良かったこと</h2>
<h3 id="rtoc-4" >1→10までやらせて貰えた</h3>
<p>要件定義からテストまでの工程を自分が主軸となって経験できたのが何より得難いものでした。</p>
<p>各工程を経験したことによって、<span class="sc_marker blue">どのくらいの期間でどのレベルまで仕上げるのか</span>が少し想像することができるようになりました。<br />
小規模案件が多かったのでまだレベルは低いのですが、工程ごとに躓きやすい部分や作業者の負担について考える良い経験をもらいました。</p>
<p>&nbsp;</p>
<p>また、1→10の中で特に経験できて良かったことを挙げます。</p>
<ul>
<li>要件定義</li>
</ul>
<p style="padding-left: 40px;"><span class="sc_marker blue">本当に必要な機能なのかを含めて顧客が求めているものは何なのか</span>、<span class="sc_marker blue">顧客が求めているものは予算と納期にマッチしているものなのか</span>を考え、話すことができました。<br />
※ITについて知識が浅い顧客も中には存在していたので、技術可否や機能の不必要の判断を見誤ると案件が火を吹きます。(1つの案件で火吹いちゃいました。)</p>
<ul>
<li>設計</li>
</ul>
<p style="padding-left: 40px;">システム設計から始まり、外部設計,内部設計,DB設計などたくさんのことを考慮して、全体設計を考えていきました。<br />
設計って経験が必要ですね。。。</p>
<ul>
<li>技術選定</li>
</ul>
<p style="padding-left: 40px;">何を使ってシステムを構築するのか、ある機能を実装するために必要なパッケージの導入など。</p>
<h3 id="rtoc-5" >受託先企業の内部を見ることができた</h3>
<p>エンジニアならゲロを吐きそうになるデータの持ち方をしている企業さんやエンジニアなら何でも叶えてくれるという考え方を持った人に出会いました。</p>
<p>世間ではDXやIT化の推進などが叫ばれていますが、それらを達成するためには時間が必要なことを実感できました。</p>
<h3 id="rtoc-6" >技術に対するお金の考え方が身についた</h3>
<p>1エンジニアが個人単位で売れるものは技術ですが、会社単位で見るとお金になっているのは作り上げたシステムがもたらすITによる恩恵です。</p>
<p>受託企業では「複数の言語を書くことができます！」といった技術よりも、ITによる恩恵が重要だと思います。</p>
<p><span class="sc_marker blue">何ができるかよりも何を達成することができるのか。</span></p>
<p>&nbsp;</p>
<p>ただし、エンジニアである以上、技術にこだわる必要は絶対にあるはずです。</p>
<p>お金と技術が必ずしも比例していくわけではないので、ここは引き続き悩み続けていきたいですね。</p>
<h2 id="rtoc-7" >300時間働いてダメだったこと</h2>
<h3 id="rtoc-8" >体に異変</h3>
<p>特に感じていたのが以下の2つです。</p>
<ul>
<li>体重-7キロ</li>
<li>些細なことでカッとなる</li>
</ul>
<p>300時間働くということは何かを削る必要が出てきます。<br />
自分の場合は「睡眠」と「食事」でした。</p>
<p>フルリモートということもあり<span class="sc_marker blue">1日1食、6時間睡眠がデフォルト</span>となっていました。</p>
<p>&nbsp;</p>
<p>その結果、上記の異変が体に起きてしまいました。</p>
<p>得た経験が多かった反面、体への負担もかなり多かったと思います。笑</p>
<h3 id="rtoc-9" >社内を変えることができなかった</h3>
<p>退社する時には僕を含めて4名のチームでした。(先輩エンジニアも300時間)</p>
<p>月300時間働くということは人数に見合わない案件数や納期の短さ、部長がITに精通していないなどが挙げられるのですが、問題となっている原因を変えることができないまま退職することになりました。</p>
<p>解決できなかった問題を社内に残る人たちに押し付ける事は辛いもんですね。。</p>
<h2 id="rtoc-10" >最後に伝えたいこと</h2>
<p>目標があり、その目標を達成できる仕事ができるのであれば無茶な働き方をするべきだと思います。<br />
技術がほしい、お金がほしいなど目標がある方であれば多少の無茶をしてでもご自身の目標を掴み取ってほしいものです。</p>
<p>反対に目標がない(楽できれば良い)、目標に沿わない仕事しかできないのであれば、僕のような無茶な働き方はしないで欲しいです。</p>
<p>炎上も悪くないものですが、ご自身で考えて決定して行動していってほしいです。</p>
<p>&nbsp;</p>
]]></content:encoded>
					
					<wfw:commentRss>https://otonan-syusyoku.work/archives/1204/feed</wfw:commentRss>
			<slash:comments>0</slash:comments>
		
		
			</item>
		<item>
		<title>【備忘録】SimpleSAMLPHPによるSSO構築</title>
		<link>https://otonan-syusyoku.work/archives/1191</link>
					<comments>https://otonan-syusyoku.work/archives/1191#respond</comments>
		
		<dc:creator><![CDATA[hrokig2]]></dc:creator>
		<pubDate>Fri, 17 Feb 2023 02:30:20 +0000</pubDate>
				<category><![CDATA[PHP]]></category>
		<category><![CDATA[業務]]></category>
		<category><![CDATA[LAMP]]></category>
		<category><![CDATA[サーバー]]></category>
		<category><![CDATA[実務]]></category>
		<guid isPermaLink="false">https://otonan-syusyoku.work/?p=1191</guid>

					<description><![CDATA[Contents SSOとは認証方式構成要素SimpleSAMLPHPの実装方法Apacheのエイリアス設定SP登録(新規)SPにIDPメタデータを登録確認SSOとは SSOとはSingleSignONの略称です。 1回 [&#8230;]]]></description>
										<content:encoded><![CDATA[<div id="rtoc-mokuji-wrapper" class="rtoc-mokuji-content frame4 preset3 animation-fade rtoc_open noto-sans" data-id="1191" data-theme="BlogArise">
			<div id="rtoc-mokuji-title" class=" rtoc_center">
			<button class="rtoc_open_close rtoc_open"></button>
			<span>Contents</span>
			</div><ol class="rtoc-mokuji decimal_ol level-1"><li class="rtoc-item"><a href="#rtoc-1">SSOとは</a><ul class="rtoc-mokuji mokuji_ul level-2"><li class="rtoc-item"><a href="#rtoc-2">認証方式</a></li><li class="rtoc-item"><a href="#rtoc-3">構成要素</a></li></ul></li><li class="rtoc-item"><a href="#rtoc-4">SimpleSAMLPHPの実装方法</a><ul class="rtoc-mokuji mokuji_ul level-2"><li class="rtoc-item"><a href="#rtoc-5">Apacheのエイリアス設定</a></li><li class="rtoc-item"><a href="#rtoc-6">SP登録(新規)</a></li><li class="rtoc-item"><a href="#rtoc-7">SPにIDPメタデータを登録</a></li><li class="rtoc-item"><a href="#rtoc-8">確認</a></li></ul></li></ol></div><h2 id="rtoc-1" >SSOとは</h2>
<p>SSOとはSingleSignONの略称です。</p>
<p>1回のログインで複数のシステムにログインできる機能を指します。</p>
<p>身近な例ですと、GoogleやTwitterとは関係のないシステムにGoogleアカウントやTwitterアカウントでログインできるシステムを思い出してほしいです。。</p>
<h3 id="rtoc-2" >認証方式</h3>
<p>以下のような認証方法がある。</p>
<ul>
<li>代行認証方式</li>
<li>リバースプロ式方式</li>
<li>エージェント方式</li>
<li>SAML認証方式</li>
</ul>
<p>今回はSimpleSAMLPHPを使用するため、SAML認証方式となる。</p>
<h3 id="rtoc-3" >構成要素</h3>
<p>SAML認証はIDPとSPという2つのシステムで構成されいる。</p>
<table style="border-collapse: collapse; width: 100%;">
<tbody>
<tr>
<td style="width: 28.4598%;">IDP</td>
<td style="width: 71.5402%;">大元のシステムに組み込む。<br />
ログイン認証するユーザーの情報やSPのメタデータを保持する。</td>
</tr>
<tr>
<td style="width: 28.4598%;">SP</td>
<td style="width: 71.5402%;">各システムに組み込む。<br />
IDPのメタデータを保持する。</td>
</tr>
</tbody>
</table>
<p>上記2つのシステム間でアサーションという証明書をやり取りし、SSOを実現している。</p>
<p>アサーションがログインの証跡〜。</p>
<p><img decoding="async" src="https://otonan-syusyoku.work/wp-content/uploads/2023/01/IDP.png" alt="SAMLイメージ" width="1000" height="500" class="aligncenter size-full wp-image-1229" srcset="https://otonan-syusyoku.work/wp-content/uploads/2023/01/IDP.png 1000w, https://otonan-syusyoku.work/wp-content/uploads/2023/01/IDP-300x150.png 300w, https://otonan-syusyoku.work/wp-content/uploads/2023/01/IDP-768x384.png 768w" sizes="(max-width: 1000px) 100vw, 1000px" /></p>
<h2 id="rtoc-4" >SimpleSAMLPHPの実装方法</h2>
<h3 id="rtoc-5" >Apacheのエイリアス設定</h3>
<p>/etc/apache2/sites-available/ドメイン名.conf<br />
→SSL設定時に生成したファイル</p>
<p>下記設定が完了したらSIMPLESAMLPHPのコンパネへアクセスする。<br />
コンパネではメタデータの確認やSimpleSAMLPHPの設定ができる。</p>
<pre class="line-numbers"><code class="language-other">・・・略・・・
Alias /simplesaml /var/www/simplesamlphp/www
       &lt;Directory /var/www/simplesamlphp/www&gt;
           Require all granted
       &lt;/Directory&gt;
・・・略・・・</code></pre>
<h4>セキュリティ観点</h4>
<p>上記エイリアスの設定でSimpleSAMLPHPのコンパネがウェブ上に公開されることになるが、基本的にIDPとSP両方にメタデータが存在していないと成立しない認証方式のため最悪メタデータが流出しても問題ないと考える。(SimpleSAMLPHP側でログインIDとPW設定できる。)</p>
<p><span class="sc_marker blue"><strong>ただし、システム的には不必要なデータを開示する意味は全く無いので、コンパネには開発者のみのIPアクセス制限を入れるなどしたほうが良い。</strong></span></p>
<h4>パスワード変更</h4>
<p>simplesamlphp/config/config.phpの中で「&#8217;auth.adminpassword&#8217;」の値を複雑な値に変更しておいてください。</p>
<p>上記の設定とサーバー自体にDOS対策を入れておけば、一応は安全です。</p>
<h3 id="rtoc-6" >SP登録(新規)</h3>
<p>config/authsources.phpからdefault-spの値をコピーして、新規SP(任意名称)として登録。</p>
<pre class="line-numbers"><code class="language-php">test-sp' =&gt; [			//←任意で変更 (SP名指定)
        'saml:SP',			
			
        // The entity ID of this SP.			
        // Can be NULL/unset, in which case an entity ID is generated based on the metadata &gt;			
        'entityID' =&gt; null,			
			
        // The entity ID of the IdP this SP should contact.			
        // Can be NULL/unset, in which case the user will be shown a list of available IdPs.			
        'idp' =&gt; 'https://test.com/simplesaml/saml2/idp/metadata.php',		/<span style="color: #ff0000;"><strong>/←任意で変更 (IDPエンドポイント指定)	</strong></span>
			
        // The URL to the discovery service.			
        // Can be NULL/unset, in which case a builtin discovery service will be used.			
        'discoURL' =&gt; null,			
			
        /*			
         * The attributes parameter must contain an array of desired attributes by the SP.			
         * The attributes can be expressed as an array of names or as an associative array			
         * in the form of 'friendlyName' =&gt; 'name'. This feature requires 'name' to be set.			
         * The metadata will then be created as follows:			
         * &lt;md:RequestedAttribute FriendlyName="friendlyName" Name="name" /&gt;			
         */			
        /*			
        'name' =&gt; [			
            'en' =&gt; 'A service',			
            'no' =&gt; 'En tjeneste',			
        ],			
			
        'attributes' =&gt; [			
            'attrname' =&gt; 'urn:oid:x.x.x.x',			
        ],			
        'attributes.required' =&gt; [			
            'urn:oid:x.x.x.x',			
        ],			
        */			
    ],			</code></pre>
<p>上記で作成したSPメタデータをコンパネからダウンロードする。(XML形式)</p>
<p>IDPがあるサーバーは基本的にSPと異なるため、IDP側サーバーに今回ダウンロードしたSPメタデータを登録する。</p>
<h3 id="rtoc-7" >SPにIDPメタデータを登録</h3>
<p>https://test.com/simplesaml/module.php/core/frontpage_federation.php<br />
上記からSPのメタデータを取得(パース済みの奴)<br />
※管理画面に入るとツールがあるためXMLをPHP値に変換することができる。</p>
<p>メタデータをmetadata/saml20-idp-remote.phpに貼り付け</p>
<pre class="line-numbers"><code class="language-php">$metadata['https://test.com/simplesaml/module.php/saml/sp/metadata.php/test-sp'] = [
    'SingleLogoutService' =&gt; [
        [
            'Binding' =&gt; 'urn:oasis:names:tc:SAML:2.0:bindings:HTTP-Redirect',
            'Location' =&gt; 'https://test.com/simplesaml/module.php/saml/sp/saml2-logout.php/test-sp',
        ],
    ],
    'AssertionConsumerService' =&gt; [
        [
            'index' =&gt; 0,
            'Binding' =&gt; 'urn:oasis:names:tc:SAML:2.0:bindings:HTTP-POST',
            'Location' =&gt; 'https://test.com/simplesaml/module.php/saml/sp/saml2-acs.php/test-sp',
        ],
        [
            'index' =&gt; 1,
            'Binding' =&gt; 'urn:oasis:names:tc:SAML:1.0:profiles:browser-post',
            'Location' =&gt; 'https://test.com/simplesaml/module.php/saml/sp/saml1-acs.php/test-sp',
        ],
        [
            'index' =&gt; 2,
            'Binding' =&gt; 'urn:oasis:names:tc:SAML:2.0:bindings:HTTP-Artifact',
            'Location' =&gt; 'https://test.com/simplesaml/module.php/saml/sp/saml2-acs.php/test-sp',
        ],
        [
            'index' =&gt; 3,
            'Binding' =&gt; 'urn:oasis:names:tc:SAML:1.0:profiles:artifact-01',
            'Location' =&gt; 'https://test.com/simplesaml/module.php/saml/sp/saml1-acs.php/test-sp/artifact',
        ],
    ],
    'contacts' =&gt; [
        [
            'emailAddress' =&gt; 'test@gmail.com', //管理者用メールアドレス
            'contactType' =&gt; '', //管理者用
            'givenName' =&gt; 'admin',
        ],
    ],
];</code></pre>
<p>&nbsp;</p>
<p><a href="https://px.a8.net/svt/ejp?a8mat=3TH8NX+DD2ACA+33T0+ZRALD" rel="nofollow"><br />
<img decoding="async" border="0" width="300" height="250" alt="" src="https://www21.a8.net/svt/bgt?aid=230911773808&amp;wid=002&amp;eno=01&amp;mid=s00000014490006006000&amp;mc=1" class="aligncenter" /></a><br />
<img decoding="async" border="0" width="1" height="1" src="https://www15.a8.net/0.gif?a8mat=3TH8NX+DD2ACA+33T0+ZRALD" alt="" class="aligncenter" /></p>
<h3 id="rtoc-8" >確認</h3>
<p>任意のphpファイルを作成し、ソース内でSimpleSAMLPHPを呼び出す。</p>
<p>開発者ツールのネットワークタブを開いた状態で下記ソースが記述されているファイルにアクセスすると、IDPサーバーとSPサーバーにてリダイレクトが発生する様子が伺える。</p>
<p>最終的にアサーションの取得が成功するとブラウザ上にはデバッグ出力している$attributesの値が表示されているはずです。</p>
<pre class="line-numbers"><code class="language-php">&lt;?php
require_once('./../../../simplesamlphp/lib/_autoload.php');
 
$auth = new SimpleSAML_Auth_Simple('test-sp');
$auth-&gt;requireAuth();
$attributes = $auth-&gt;getAttributes();

var_dump($attributes);
?&gt;</code></pre>
<p>&nbsp;</p>
<p>&nbsp;</p>
<p>&nbsp;</p>
]]></content:encoded>
					
					<wfw:commentRss>https://otonan-syusyoku.work/archives/1191/feed</wfw:commentRss>
			<slash:comments>0</slash:comments>
		
		
			</item>
	</channel>
</rss>
