Upgrade to Pro
— share decks privately, control downloads, hide ads and more …
Speaker Deck
Features
Speaker Deck
PRO
Sign in
Sign up for free
Search
Search
AWS SDK for PHPによる AmazonECS構成管理
Search
Sponsored
·
Your Podcast. Everywhere. Effortlessly.
Share. Educate. Inspire. Entertain. You do you. We'll handle the rest.
→
fujitani sora
June 22, 2024
520
2
Share
Embed
Copy iframe code
Copy JS code
Copy link
Start on current slide
AWS SDK for PHPによる AmazonECS構成管理
fujitani sora
June 22, 2024
More Decks by fujitani sora
See All by fujitani sora
TypeScript * xx 一年目の振り返り
fujitanisroa0414
0
220
Terminal IDE の世界
fujitanisroa0414
1
300
RubyでNeoVim Pluginを作る技術
fujitanisroa0414
0
110
toridori DevRel 立ち上げ約半年の成果と今年の目標
fujitanisroa0414
0
320
NestJS GraphQL開発を支える 自作CodeGenerator
fujitanisroa0414
0
61
なぜtoridori開発部はDevRelに取り組むのか
fujitanisroa0414
1
120
ARR成長の為に開発者個人で出来る事
fujitanisroa0414
0
270
育成ゲームとしてのvim(桃太郎)
fujitanisroa0414
0
78
書籍紹介 「採算に乗る事業」の仕組みづくり
fujitanisroa0414
0
100
Featured
See All Featured
The Organizational Zoo: Understanding Human Behavior Agility Through Metaphoric Constructive Conversations (based on the works of Arthur Shelley, Ph.D)
kimpetersen
PRO
0
360
Game over? The fight for quality and originality in the time of robots
wayneb77
1
190
Put a Button on it: Removing Barriers to Going Fast.
kastner
60
4.3k
Test your architecture with Archunit
thirion
1
2.3k
Future Trends and Review - Lecture 12 - Web Technologies (1019888BNR)
signer
PRO
0
3.6k
<Decoding/> the Language of Devs - We Love SEO 2024
nikkihalliwell
1
240
Performance Is Good for Brains [We Love Speed 2024]
tammyeverts
12
1.7k
Taking LLMs out of the black box: A practical guide to human-in-the-loop distillation
inesmontani
PRO
3
2.3k
How to Talk to Developers About Accessibility
jct
2
230
Avoiding the “Bad Training, Faster” Trap in the Age of AI
tmiket
0
170
Six Lessons from altMBA
skipperchong
29
4.3k
Reflections from 52 weeks, 52 projects
jeffersonlam
356
21k
Transcript
AWS SDK for PHPによる AmazonECS構成管理 PHP Conference 2024 fujitani sora
@_fs041490
名前 • 藤谷 想楽(ふじたに そら) • 22歳 • @_fs0414 所属
• 株式会社toridori • プロダクト開発部 普段は、RubyとかRustの界隈にいます。 PHPコミュニティは初めて😎 自己紹介
2022 12月19日 東証グロース市場 に 上場 2016 2017 2019 10月 インフルエンサー広告
プラットフォームシステム アップロント を展開 株式会社 アップロント 設立 2020 8月 インフルエンサー マネジメント事務所 OTOZURE 設立 株式会社 コラボテクノ ロジー に社名変更 インフルエンサー広告 プラットフォームシステム コラボマーケ ティング & コラボベース をリリース 渋谷 オフィス に移転 株式会社 トリドリ に社名変更 各サービス toridori シリーズ へ名称変更 2021 7月 株式会社 GIVIN と事業統合 インフルエンサーブランド 立ち上げ支援 toridori made 始動 10月 10月 9月 6月 沿革 2023 12月 株式会社 OverFlow と事業統合
6つの事業を通して インフルエンサーマーケティング を展開しています ※グループ会社
企業がエンジニアを雇用する 企業がエンジ企業がエンジニアを雇用する ニアを雇用する 企業がエンジニアを雇用する 問題提起 PHP、なんかAWS相手に不遇じゃない? • CDKない • lambdaない
• 多分色々ない • 何もかもPHPで書きたいよね?多分、知らんけ ど ないなら作ってみよう PHPで擬似infrastructure as code
企業がエンジニアを雇用する 企業がエンジ企業がエンジニアを雇用する ニアを雇用する 企業がエンジニアを雇用する AWS SDK for PHPが提供するClassたち - AWS\S3\S3Client
- AWS\DynamoDb\DynamoDb Client - AWS\Sqs\SqsClient - AWS\Sns\SnsClient - AWS\Ecs\EcsClient - Aws\ElasticLoadBalancingV 2\ElasticLoadBalancingV2Cli ent - Aws\Iam\IamClient;
企業がエンジニアを雇用する 企業がエンジ企業がエンジニアを雇用する ニアを雇用する 企業がエンジニアを雇用する AWS SDK for PHPが提供するClassたち - AWS\S3\S3Client
- AWS\DynamoDb\DynamoDb Client - AWS\Sqs\SqsClient - AWS\Sns\SnsClient - AWS\Ecs\EcsClient - Aws\ElasticLoadBalancingV 2\ElasticLoadBalancingV2Cli ent - Aws\Iam\IamClient; よく使われるのはこの辺
企業がエンジニアを雇用する 企業がエンジ企業がエンジニアを雇用する ニアを雇用する 企業がエンジニアを雇用する AWS SDK for PHPが提供するClassたち - AWS\S3\S3Client
- AWS\DynamoDb\DynamoDb Client - AWS\Sqs\SqsClient - AWS\Sns\SnsClient - AWS\Ecs\EcsClient - Aws\ElasticLoadBalancingV 2\ElasticLoadBalancingV2Cli ent - Aws\Iam\IamClient; 今回出てくるのはこの辺
企業がエンジニアを雇用する 企業がエンジ企業がエンジニアを雇用する ニアを雇用する 企業がエンジニアを雇用する よくあるAWSインフラ構成 • VPC • IAM ◦
TaskRole ◦ TaskExecuteRole • ECS ◦ Fargate ◦ Cluster ◦ Serbive ◦ Task ◦ TaskDefinition ◦ ECR • AWS CDK ◦ Terraformとかでも
企業がエンジニアを雇用する 企業がエンジ企業がエンジニアを雇用する ニアを雇用する 企業がエンジニアを雇用する 今日は大体こんなAWSインフラ構成 • VPC • IAM ◦
TaskRole ◦ TaskExecuteRole • ECS ◦ Fargate ◦ Cluster ◦ Serbive ◦ Task ◦ TaskDefinition ◦ ECR • PHP ◦ AWS SDK FOR PHP
企業がエンジニアを雇用する 企業がエンジ企業がエンジニアを雇用する ニアを雇用する 企業がエンジニアを雇用する AWS SDK for PHP Iac 基礎
~ SdkDebugMode • AWS SDKのコードは、AWS APIに変換してRequestされる • SDK 初期化時にDebugModeをtrueにすることで、内部的に変換されるAWS APIのLogを可視化で きる • トレーサビリティUPの為に、DebugModeを使おう。 • AWS CLIの --debugに該当
企業がエンジニアを雇用する 企業がエンジ企業がエンジニアを雇用する ニアを雇用する 企業がエンジニアを雇用する AWS SDK for PHP Iac基礎 ~
SdkDebugMode • ECS Clusterを取得する例 ◦ Middleware, HandlerStackの初期化 ◦ ECS CLient のプロパティ 「debug」をtrueに設定 ◦ DebugModel trueで初期化した インスタンスでsdk処理実行
企業がエンジニアを雇用する 企業がエンジ企業がエンジニアを雇用する ニアを雇用する 企業がエンジニアを雇用する AWS SDK for PHP Iac基礎 ~
SdkDebugMode • Logを見てみる ◦ なんか映ると不味そうなのはカットしてます ← Cluster取得も成功
企業がエンジニアを雇用する 企業がエンジ企業がエンジニアを雇用する ニアを雇用する 企業がエンジニアを雇用する AWS SDK for PHP Iac 基礎
~ Document • ECSの情報、SDK for PHP Documentには乗っていない ◦ なら情報はどこに?
企業がエンジニアを雇用する 企業がエンジ企業がエンジニアを雇用する ニアを雇用する 企業がエンジニアを雇用する AWS SDK for PHP Iac 基礎
~ Document • SDKのDocumentには載ってた
企業がエンジニアを雇用する 企業がエンジ企業がエンジニアを雇用する ニアを雇用する 企業がエンジニアを雇用する AWS SDK for PHP Iac 基礎
~ Document • API ReferenceにもParameterは載ってる
企業がエンジニアを雇用する 企業がエンジ企業がエンジニアを雇用する ニアを雇用する 企業がエンジニアを雇用する AWS SDK for PHP Iac 基礎
~ 定数管理 • Component化されたファイル間で、定数名を共有する必要がある ◦ ARN, ID… • TerraformModule的なアレ ↓ • DockerComposeのENVで管理してどこでも呼べるようにした • 真面目にやるなら、ParameterStoreかSecretsManegerの方がいい
企業がエンジニアを雇用する 企業がエンジ企業がエンジニアを雇用する ニアを雇用する 企業がエンジニアを雇用する 実装編 → 多いのでぽんぽん行きます
企業がエンジニアを雇用する 企業がエンジ企業がエンジニアを雇用する ニアを雇用する 企業がエンジニアを雇用する AWS SDK for PHP Iac 実装
~ Network • Aws\Ec2\Ec2Client; ◦ createVpc ◦ createSubnet ◦ createInternetGateway ◦ attachInternetGateway ◦ createRouteTable ◦ associateRouteTable ◦ createSecurityGroup • Aws\ElasticLoadBalancingV2\ElasticLoadBalancingV2Client; ◦ createTargetGroup ◦ createLoadBalancer ◦ createListener VpcCreate.phpにnetworkリソース作成項目を記載し、 ファイル実行でAWS APIに必要なRequestを送信できる ようにする network.php
企業がエンジニアを雇用する 企業がエンジ企業がエンジニアを雇用する ニアを雇用する 企業がエンジニアを雇用する AWS SDK for PHP Iac 実装
~ Network • network.phpにtry catchを定義し、try分にこれから出てくるscriptを記述 ▪ 例外発生時はcatchでAWSExceptionをLogに表示
企業がエンジニアを雇用する 企業がエンジ企業がエンジニアを雇用する ニアを雇用する 企業がエンジニアを雇用する AWS SDK for PHP Iac 実装
~ Network • VPC実装 ◦ ResoueceType, Tagを指定 ◦ subnet作成プロセスで使用するので、 VpcIdを取得しておく
企業がエンジニアを雇用する 企業がエンジ企業がエンジニアを雇用する ニアを雇用する 企業がエンジニアを雇用する AWS SDK for PHP Iac 実装
~ Network • Subnet実装 ◦ LoadBalancerの為にAZ2つで作成
企業がエンジニアを雇用する 企業がエンジ企業がエンジニアを雇用する ニアを雇用する 企業がエンジニアを雇用する AWS SDK for PHP Iac 実装
~ Network • InternetGateway ◦ createInternetGatewayで作成 ◦ attachInternetGatewayでidを参照してVPCにattach
企業がエンジニアを雇用する 企業がエンジ企業がエンジニアを雇用する ニアを雇用する 企業がエンジニアを雇用する AWS SDK for PHP Iac 実装
~ Network • routeTable ◦ リソース作成してVpcにattach ▪ routeTable自体と、Internetとのgatewayになる InternetGateway(名前と機能がそのまま)をattach ▪ 最後に、サーバインスタンスを設置するsubnetに igwとの通信を開ける
企業がエンジニアを雇用する 企業がエンジ企業がエンジニアを雇用する ニアを雇用する 企業がエンジニアを雇用する AWS SDK for PHP Iac 実装
~ Network • SecurtyGroup ◦ createSecurityGroupで定義 ◦ inboundとoutboundの通信許可を定義 ◦ 今回は検証用の為、制限なし
企業がエンジニアを雇用する 企業がエンジ企業がエンジニアを雇用する ニアを雇用する 企業がエンジニアを雇用する AWS SDK for PHP Iac 実装
~ Network • TergetGroup ◦ ここからElasticLoadBalancingV2Client ◦ createTargetGroupで定義 ◦ ApplicationLoadBalancerの通信に関する詳細情報を定義 ◦ PortやProtocol、HealthChecknのpath等を定義
企業がエンジニアを雇用する 企業がエンジ企業がエンジニアを雇用する ニアを雇用する 企業がエンジニアを雇用する AWS SDK for PHP Iac 実装
~ Network • ApplicationLoadBalancer ◦ トラフィックを事前に定義した%等で複数台のインスタンスに振り分けてくれる(負荷分 散) ◦ 前に作った二つのsubnetやSecurtyGroupをattach ◦ createLoadBalancerで定義
企業がエンジニアを雇用する 企業がエンジ企業がエンジニアを雇用する ニアを雇用する 企業がエンジニアを雇用する AWS SDK for PHP Iac 実装
~ Network • ListenerRule ◦ createListenerで定義 ◦ TergetGrouptとAlbを関連付けて実際の通信経路を決めるやつ
企業がエンジニアを雇用する 企業がエンジ企業がエンジニアを雇用する ニアを雇用する 企業がエンジニアを雇用する AWS SDK for PHP Iac 実装
~ Network • ここまでのnetwork.phpを実行するとnetwork resourceが作成される • デプロイ成功
企業がエンジニアを雇用する 企業がエンジ企業がエンジニアを雇用する ニアを雇用する 企業がエンジニアを雇用する AWS SDK for PHP Iac 実装
~ IAM Role • この後作成するECSが、task起動時にECRのImageを取得する為のRoleを作成する • IamClientを使用する TaskExecuteRoleCreate.php
企業がエンジニアを雇用する 企業がエンジ企業がエンジニアを雇用する ニアを雇用する 企業がエンジニアを雇用する AWS SDK for PHP Iac 実装
~ IAM Role • createRoleとattachRolePolicyを使用 ◦ ECRのReadOnly専用Policyを取得し、$iamClient->createRolでTask実行Roleを作成 ◦ Policyは複数割り当てられるよう配列とforeachで定義 ◦ sts:AssumeRoleで一時的な許可を実装
企業がエンジニアを雇用する 企業がエンジ企業がエンジニアを雇用する ニアを雇用する 企業がエンジニアを雇用する AWS SDK for PHP Iac 実装
~ ECS • ECSClientを初期化 • Task実行role割り当ての為にこっちでもIamClientが必要 EcsScript.php
企業がエンジニアを雇用する 企業がエンジ企業がエンジニアを雇用する ニアを雇用する 企業がエンジニアを雇用する AWS SDK for PHP Iac 実装
~ ECS • ECRにアプリとして公開するDocker imageをpush ◦ この作業してる時、MacM2にしたが故の--platform=linux/amd64問題に苦しめられた ◦ (小声)Neovimはいいぞ
企業がエンジニアを雇用する 企業がエンジ企業がエンジニアを雇用する ニアを雇用する 企業がエンジニアを雇用する AWS SDK for PHP Iac 実装
~ ECS • ECS Cluster定義 ◦ createClusterで定義 ◦ コンテナ管理の一番大きな箱 ◦ 定義は簡単
企業がエンジニアを雇用する 企業がエンジ企業がエンジニアを雇用する ニアを雇用する 企業がエンジニアを雇用する AWS SDK for PHP Iac 実装
~ ECS • TaskDefinition定義 ◦ registerTaskDefinition ◦ imageで、ECR ImageをPull ◦ networkModeはawsvpcで定義 ▪ ipにすると別の設定が必要 ◦ 実行環境はFargateのECS Serviceを使う ◦ executionRoleArnで作成した実行ロール をattach ◦ memoryとcpuは最小 • TaskDefinitionをPHPで定義している、 珍しい例なのでは...
企業がエンジニアを雇用する 企業がエンジ企業がエンジニアを雇用する ニアを雇用する 企業がエンジニアを雇用する AWS SDK for PHP Iac 実装
~ ECS • ECS Service定義 ◦ createService ◦ 定義したtaskDefinitionをデプロイする コンテナに指定 ◦ networkの章で定義したSubnet, SecurtyGroup を指定 ◦ 実行環境にはFargeteを指定 ◦ desiredCountで起動task数を指定
企業がエンジニアを雇用する 企業がエンジ企業がエンジニアを雇用する ニアを雇用する 企業がエンジニアを雇用する AWS SDK for PHP Iac 実装
~ ECS • phpコマンドでデプロイを実行 ◦ php EcsScript.php ◦ ログで確認
企業がエンジニアを雇用する 企業がエンジ企業がエンジニアを雇用する ニアを雇用する 企業がエンジニアを雇用する AWS SDK for PHP Iac 実装
~ ECS PHPでECSコンテナをデプロイできた☺
企業がエンジニアを雇用する 企業がエンジ企業がエンジニアを雇用する ニアを雇用する 企業がエンジニアを雇用する AWS SDK for PHP Iac 実装
~ まとめ Iac専用ツールは偉大 AWS CDK, Terraform、ありがとう PHPも使いやすいね