Submit Search
AWS CDKに魅入られた PHPer がオススメする
0 likes
940 views
Taichi Inaba
PHPカンファレンス2022登壇資料
Engineering
Read more
1 of 45
Download now
Download to read offline
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
More Related Content
PPTX
WayOfNoTrouble.pptx
Daisuke Yamazaki
PDF
イミュータブルデータモデル(入門編)
Yoshitaka Kawashima
PPTX
Docker friendlyPHP / Laravel
Kentarou Takeda
PDF
OpenAPI 3.0でmicroserviceのAPI定義を試みてハマった話
Daichi Koike
PDF
マルチテナント化で知っておきたいデータベースのこと
Amazon Web Services Japan
KEY
やはりお前らのMVCは間違っている
Koichi Tanaka
PDF
Laravelを用いたゲームサーバーのチューニング
NOW PRODUCTION
PDF
SQLアンチパターン - 開発者を待ち受ける25の落とし穴 (拡大版)
Takuto Wada
WayOfNoTrouble.pptx
Daisuke Yamazaki
イミュータブルデータモデル(入門編)
Yoshitaka Kawashima
Docker friendlyPHP / Laravel
Kentarou Takeda
OpenAPI 3.0でmicroserviceのAPI定義を試みてハマった話
Daichi Koike
マルチテナント化で知っておきたいデータベースのこと
Amazon Web Services Japan
やはりお前らのMVCは間違っている
Koichi Tanaka
Laravelを用いたゲームサーバーのチューニング
NOW PRODUCTION
SQLアンチパターン - 開発者を待ち受ける25の落とし穴 (拡大版)
Takuto Wada
What's hot
(20)
PDF
インフラエンジニアの綺麗で優しい手順書の書き方
Shohei Koyama
PPTX
データモデリング・テクニック
Hidekatsu Izuno
PDF
Where狙いのキー、order by狙いのキー
yoku0825
PDF
【BS4】時は来たれり。今こそ .NET 6 へ移行する時。
日本マイクロソフト株式会社
PDF
AWSのログ管理ベストプラクティス
Akihiro Kuwano
PDF
日本語テストメソッドについて
kumake
PPTX
さくっと理解するSpring bootの仕組み
Takeshi Ogawa
PDF
今からでも遅くないDBマイグレーション - Flyway と SchemaSpy の紹介 -
onozaty
PDF
導入から 10 年、PHP の trait は滅びるべきなのか その適切な使いどころと弱点、将来について
shinjiigarashi
PDF
マルチテナントのアプリケーション実装〜実践編〜
Yoshiki Nakagawa
PDF
Zabbix最新情報 ~Zabbix 6.0に向けて~ @OSC2021 Online/Fall
Atsushi Tanaka
PDF
Dockerfileを改善するためのBest Practice 2019年版
Masahito Zembutsu
PDF
ツール比較しながら語る O/RマッパーとDBマイグレーションの実際のところ
Y Watanabe
PDF
Docker Compose 徹底解説
Masahito Zembutsu
PPTX
初心者向けMongoDBのキホン!
Tetsutaro Watanabe
PDF
[Aurora事例祭り]Amazon Aurora を使いこなすためのベストプラクティス
Amazon Web Services Japan
PDF
Dockerの期待と現実~Docker都市伝説はなぜ生まれるのか~
Masahito Zembutsu
PDF
DatadogでAWS監視やってみた
tyamane
PPTX
Docker Tokyo
cyberblack28 Ichikawa
PDF
イミュータブルデータモデル(世代編)
Yoshitaka Kawashima
インフラエンジニアの綺麗で優しい手順書の書き方
Shohei Koyama
データモデリング・テクニック
Hidekatsu Izuno
Where狙いのキー、order by狙いのキー
yoku0825
【BS4】時は来たれり。今こそ .NET 6 へ移行する時。
日本マイクロソフト株式会社
AWSのログ管理ベストプラクティス
Akihiro Kuwano
日本語テストメソッドについて
kumake
さくっと理解するSpring bootの仕組み
Takeshi Ogawa
今からでも遅くないDBマイグレーション - Flyway と SchemaSpy の紹介 -
onozaty
導入から 10 年、PHP の trait は滅びるべきなのか その適切な使いどころと弱点、将来について
shinjiigarashi
マルチテナントのアプリケーション実装〜実践編〜
Yoshiki Nakagawa
Zabbix最新情報 ~Zabbix 6.0に向けて~ @OSC2021 Online/Fall
Atsushi Tanaka
Dockerfileを改善するためのBest Practice 2019年版
Masahito Zembutsu
ツール比較しながら語る O/RマッパーとDBマイグレーションの実際のところ
Y Watanabe
Docker Compose 徹底解説
Masahito Zembutsu
初心者向けMongoDBのキホン!
Tetsutaro Watanabe
[Aurora事例祭り]Amazon Aurora を使いこなすためのベストプラクティス
Amazon Web Services Japan
Dockerの期待と現実~Docker都市伝説はなぜ生まれるのか~
Masahito Zembutsu
DatadogでAWS監視やってみた
tyamane
Docker Tokyo
cyberblack28 Ichikawa
イミュータブルデータモデル(世代編)
Yoshitaka Kawashima
Ad
AWS CDKに魅入られた PHPer がオススメする
1.
@chatii - ちゃちい
- 2022-09-24 at PHPカンファレンス2022 AWS CDK に魅入られた PHPer が オススメする IaC から入る インフラの話
2.
やっとみんな会えたね
3.
やっとみんな会えたね
4.
• ちゃちい (@chatii) • PHPer (4.0くらい〜) •
フルスタックエンジニア • インフラ専門ではありません • ライスシャワー推しです • 自己紹介
5.
今日のお品書き • PHPer がインフラを理解する必要性 • AWS CDK でインフラとふれあおう 話さないこと •
AWS CDK の導入方法、ベストプラクティス • AWS アカウントの作り方など CDK の雰囲気を知りたい方は登壇後 声をかけていただければ
6.
インフラを理解する必要性
7.
インフラを理解する必要性 • 自分が扱う層には上も下もある • PHPを書いているならPHPが動く環境が下にある •
アプリケーションはアプリケーションだけでは動かない • フレームワークやライブラリがどう作られているのか? • PHPはなぜ動くのか? • PHPがなぜ動かないのか? • 原因を探るべく、我々はインフラの奥地へ…
8.
インフラを理解する必要性 • 自分の作ったアプリケーションが • どうやって動いているのか、どうやって動かすのか •
動かない場合 • どんなコトが発生している? • どんなトキに発生している? • どうやって対応する?
9.
インフラを理解する必要性 =インフラで困らないように =アプリケーションを安心して作れる
10.
インフラで困らないように • 「インフラ部隊が別にいるから」 • 「できる先輩がいるから」 •
「PHPのコード書くのも精一杯なのに」
11.
できる先輩は できるようになっただけの先輩
12.
分業化されているからこそ 能動的に知りに行く
13.
基礎を「手軽に」学ぶ・触れる
14.
AWS CDK で インフラとふれあう
15.
AWS CDK でインフラとふれあう AWS Cloud Development
Kit (AWS CDK) は、使い慣れたプログラミング 言語を使用してクラウドアプリケーションリソースを定義するためのオープ ンソースのソフトウェア開発フレームワークです。 引用元: https://aws.amazon.com/jp/cdk/ • Infrastructure as Code って? • インフラの構成をコードで表現する • 手作業(手順書)をコードにすることでメンテしやすく・構築しやすくする • クラウドに限らない、オンプレミスだって IaC でできる
16.
IaC, CDK がなぜインフラとふれあうことになるのか • オンプレミスは物理的にモノ(マシンやネットワーク機器)がないと触れない • ローカルに仮想マシン(VM)でいいじゃん、もそれはそう •
なのでそういう話を今こそ誰かして欲しい • 物理的なモノを高度に抽象化している • わかりやすいカタチになっている(はず) • 抽象化のモトは下の層になる • より知りたいとおもったら降りていけばよい
17.
なぜ他の IaC ではなく CDK なのか? • 「プログラミング言語で記述」できるから • TypeScript, Python, Java, .NET, Go
18.
えっ、PHPは? • https://github.com/aws/aws-cdk/issues/548 • 2018…あっ(察し •
世の中には Kotlin で動くように がんばった人もいます • https://github.com/Semantic-Configuration/AWS-CDK-Kotlin-DSL
19.
(やむなく) TypeScript で CDK (PHPer並感)
20.
CDK で構築してみる、なにを? 我々はPHPerなので • ゴールはPHPが動作する環境 • Hello, World してみよう •
そのために必要なインフラってなんだろう? • まずはサーバー…サーバーってなんだ?インターネット…??ナニモワカラナイ… • PHPをインストールする • 何に? • Windows とか macOS とか Linux とか? • OSが入ったコンピュータが必要!!
21.
コンピュータを用意する 物理の場合 一例(hpのオンラインストア) ピンキリ。ピンキリ。 https://h50146.www5.hpe.com/directplus_ent/server/?ref=dplustopcategory1
22.
コンピュータを用意する AWS の場合 • Amazon EC2 (Elastic Compute Cloud) • インスタンスを立てる が 1台のマシンに相当 •
OSも選べる https://aws.amazon.com/jp/ec2/
23.
え、コンテナは…?Fargateとかそういう… • 「実行環境」を抽象化したものなので、今回は登場しません • まずは EC2 インスタンスを動かせるようになろう
24.
EC2 インスタンスの作り方 import * as
cdk from 'aws-cdk-lib'; import {Construct} from 'constructs'; import {Instance, InstanceClass, InstanceSize, InstanceType, MachineImage} from aws-cdk-lib/ aws-ec2; export class CdkStack extends cdk.Stack { constructor(scope: Construct, id: string, props?: cdk.StackProps) { super(scope, id, props); // EC2 インスタンスを作る const ec2Instance = new Instance(this, 'EC2Instance', { instanceType: InstanceType.of( InstanceClass.T2, InstanceSize.MICRO ), // Preview版のAmazon Linux machineImage: MachineImage.fromSsmParameter('/aws/service/ami-amazon-linux-latest/ al2022-ami-kernel-5.15-x86_64'), vpc: undefined // これはなんぞや? }) } }
25.
マシンはネットワークに接続する • インターネットに公開するため
26.
マシンはネットワークに接続する 物理の場合 • LAN ポートからネットワークハブなど に接続し、ネットワーク(LAN)に 接続する
27.
マシンはネットワークに接続する AWSの場合 • EC2 インスタンスは VPC 上で起動する(仕様) • VPC = Virtual Private Cloud •
AWS上の「仮想ネットワーク」 • …つまりネットワークの知識が必要 https://aws.amazon.com/jp/vpc/
28.
VPC の作り方 export class CdkStack
extends cdk.Stack { constructor(scope: Construct, id: string, props?: cdk.StackProps) { super(scope, id, props); // VPC を作る const vpc = new Vpc(this, 'Vpc') // EC2 インスタンスを作る const ec2Instance = new Instance(this, 'EC2Instance', { instanceType: InstanceType.of( InstanceClass.T2, InstanceSize.MICRO ), machineImage: MachineImage.fromSsmParameter('/aws/service/ami-amazon-linux- latest/al2022-ami-kernel-5.15-x86_64'), vpc: vpc }) } }
29.
ネットワークはインターネットに接続する • ネットワーク≠インターネット • 世の中にはインターネットに接続されていないネットワークもある
30.
ネットワークはインターネットに接続する 物理の場合 • ご自宅にあるルーターがその役割 • いわゆる「ブロードバンドルータ」 •
キーワード: DHCP, ルートテーブル, デフォルトゲートウェイ, DNS
31.
ネットワークはインターネットに接続する AWS の場合 • 「インターネットゲートウェイ」 • VPC に用意する https://docs.aws.amazon.com/ja_jp/vpc/latest/userguide/VPC_Internet_Gateway.html
32.
VPC にインターネットゲートウェイを追加する(?) // VPC を作る const
vpc = new Vpc(this, 'Vpc') • 「なにも変わっていない?」 • 実はこれだけでインターネット ゲートウェイも追加される • デフォルトで用意される リソースが結構ある
33.
サーバーはインターネットからアクセスできる • インターネットゲートウェイは「内から外へ」の方向 • 逆方向「外から内へ」つまり公開するためには?
34.
サーバーはインターネットからアクセスできる 物理(?)の場合 • グローバルIPアドレス • プロバイダーのオプションで固定IPアドレスを契約するなど
35.
サーバーはインターネットからアクセスできる AWS の場合 • パブリック IPv4 アドレス • EC2インスタンスが「パブリックサブネット」に所属する必要がある •
ここまででの設定だと「プライベートサブネット」に所属している
36.
EC2インスタンスをパブリックサブネットへ // EC2 インスタンスを作る const
ec2Instance = new Instance(this, 'EC2Instance', { instanceType: InstanceType.of( InstanceClass.T2, InstanceSize.MICRO ), machineImage: MachineImage.fromSsmParameter('/aws/service/ami- amazon-linux-latest/al2022-ami-kernel-5.15-x86_64'), vpc: vpc, // 追記 vpcSubnets: vpc.selectSubnets({ subnetType: SubnetType.PUBLIC, }), })
37.
サーバーへアクセスできるポートを設定する • 今回は HTTP と SSH を許可する (80 および 22)
38.
サーバーへアクセスできるポートを設定する 物理の場合 • ルーターやOSの「ファイヤウォール」 • ご自宅の場合、ネットワーク内のマシンに直接グローバルIPアドレスを割り 当てることはあまりない(オススメしない) •
ルーターの機能(ポートフォワード等)でポート80はどのローカルIPに転送 する、という設定をする
39.
サーバーへアクセスできるポートを設定する AWS の場合 • 「セキュリティグループ」に「インバウンドのルール」を追加する • 外からくるので「インバウンド」 •
ちなみに逆は「アウトバウンドルール」
40.
セキュリティグループを作成し、EC2インスタンスに適用する const httpSecurityGroup =
new SecurityGroup(this, 'AllowHTTPSecurityGroup', { vpc: vpc, }) httpSecurityGroup.addIngressRule(Peer.anyIpv4(), Port.tcp(80)) httpSecurityGroup.addIngressRule(Peer.anyIpv6(), Port.tcp(80)) const sshSecurityGroup = new SecurityGroup(this, 'AllowSSHSecurityGroup', { vpc: vpc, }) sshSecurityGroup.addIngressRule(Peer.anyIpv4(), Port.tcp(22)) sshSecurityGroup.addIngressRule(Peer.anyIpv6(), Port.tcp(22)) ec2Instance.addSecurityGroup(httpSecurityGroup) ec2Instance.addSecurityGroup(sshSecurityGroup)
41.
おめでとう、インフラができた
42.
おめでとう、インフラができた • これでHTTPが公開されたEC2インスタンスが構築できた • あとはWebサーバーとPHPを導入するだけ! •
「それもインフラでは?」 • 時と場合と現場による
43.
SSH キーが無いけど EC2 Instance Connect を使えばOK • ブラウザ上で接続できる
44.
Apache と PHP を入れる AWSのチュートリアルを参考に https://docs.aws.amazon.com/ja_jp/AWSEC2/latest/UserGuide/ec2-lamp-amazon-linux-2022.html sudo yum install
-y httpd wget php-fpm php-mysqli php-json php php-devel sudo systemctl start httpd echo ?php echo 'Hello, World'; /var/www/html/test.php
45.
インフラとふれあえそうですか?
Download