Upgrade to Pro — share decks privately, control downloads, hide ads and more …

AWS SDK for PHPによる AmazonECS構成管理

fujitani sora
June 22, 2024
180

AWS SDK for PHPによる AmazonECS構成管理

fujitani sora

June 22, 2024
Tweet

Transcript

  1. 名前 • 藤谷 想楽(ふじたに そら) • 22歳 • @_fs0414 所属

    • 株式会社toridori • プロダクト開発部 普段は、RubyとかRustの界隈にいます。 PHPコミュニティは初めて😎 自己紹介
  2. 2022 12月19日 東証グロース市場 に 上場 2016 2017 2019 10月 インフルエンサー広告

    プラットフォームシステム アップロント を展開 株式会社 アップロント 設立 2020 8月 インフルエンサー マネジメント事務所 OTOZURE 設立 株式会社 コラボテクノ ロジー に社名変更 インフルエンサー広告 プラットフォームシステム コラボマーケ ティング & コラボベース をリリース 渋谷 オフィス に移転 株式会社 トリドリ に社名変更 各サービス toridori シリーズ へ名称変更 2021 7月 株式会社 GIVIN と事業統合 インフルエンサーブランド 立ち上げ支援 toridori made 始動 10月 10月 9月 6月 沿革 2023 12月 株式会社 OverFlow と事業統合
  3. 企業がエンジニアを雇用する 企業がエンジ企業がエンジニアを雇用する ニアを雇用する 企業がエンジニアを雇用する 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;
  4. 企業がエンジニアを雇用する 企業がエンジ企業がエンジニアを雇用する ニアを雇用する 企業がエンジニアを雇用する 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; よく使われるのはこの辺
  5. 企業がエンジニアを雇用する 企業がエンジ企業がエンジニアを雇用する ニアを雇用する 企業がエンジニアを雇用する 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; 今回出てくるのはこの辺
  6. 企業がエンジニアを雇用する 企業がエンジ企業がエンジニアを雇用する ニアを雇用する 企業がエンジニアを雇用する よくあるAWSインフラ構成 • VPC • IAM ◦

    TaskRole ◦ TaskExecuteRole • ECS ◦ Fargate ◦ Cluster ◦ Serbive ◦ Task ◦ TaskDefinition ◦ ECR • AWS CDK ◦ Terraformとかでも
  7. 企業がエンジニアを雇用する 企業がエンジ企業がエンジニアを雇用する ニアを雇用する 企業がエンジニアを雇用する AWS SDK for PHP Iac 基礎

    ~ SdkDebugMode • AWS SDKのコードは、AWS APIに変換してRequestされる • SDK 初期化時にDebugModeをtrueにすることで、内部的に変換されるAWS APIのLogを可視化で きる • トレーサビリティUPの為に、DebugModeを使おう。 • AWS CLIの --debugに該当
  8. 企業がエンジニアを雇用する 企業がエンジ企業がエンジニアを雇用する ニアを雇用する 企業がエンジニアを雇用する AWS SDK for PHP Iac基礎 ~

    SdkDebugMode • ECS Clusterを取得する例 ◦ Middleware, HandlerStackの初期化 ◦ ECS CLient のプロパティ 「debug」をtrueに設定 ◦ DebugModel trueで初期化した インスタンスでsdk処理実行
  9. 企業がエンジニアを雇用する 企業がエンジ企業がエンジニアを雇用する ニアを雇用する 企業がエンジニアを雇用する AWS SDK for PHP Iac基礎 ~

    SdkDebugMode • Logを見てみる ◦ なんか映ると不味そうなのはカットしてます ← Cluster取得も成功
  10. 企業がエンジニアを雇用する 企業がエンジ企業がエンジニアを雇用する ニアを雇用する 企業がエンジニアを雇用する AWS SDK for PHP Iac 基礎

    ~ 定数管理 • Component化されたファイル間で、定数名を共有する必要がある ◦ ARN, ID… • TerraformModule的なアレ ↓ • DockerComposeのENVで管理してどこでも呼べるようにした • 真面目にやるなら、ParameterStoreかSecretsManegerの方がいい
  11. 企業がエンジニアを雇用する 企業がエンジ企業がエンジニアを雇用する ニアを雇用する 企業がエンジニアを雇用する 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
  12. 企業がエンジニアを雇用する 企業がエンジ企業がエンジニアを雇用する ニアを雇用する 企業がエンジニアを雇用する AWS SDK for PHP Iac 実装

    ~ Network • network.phpにtry catchを定義し、try分にこれから出てくるscriptを記述 ▪ 例外発生時はcatchでAWSExceptionをLogに表示
  13. 企業がエンジニアを雇用する 企業がエンジ企業がエンジニアを雇用する ニアを雇用する 企業がエンジニアを雇用する AWS SDK for PHP Iac 実装

    ~ Network • VPC実装 ◦ ResoueceType, Tagを指定 ◦ subnet作成プロセスで使用するので、 VpcIdを取得しておく
  14. 企業がエンジニアを雇用する 企業がエンジ企業がエンジニアを雇用する ニアを雇用する 企業がエンジニアを雇用する AWS SDK for PHP Iac 実装

    ~ Network • InternetGateway ◦ createInternetGatewayで作成 ◦ attachInternetGatewayでidを参照してVPCにattach
  15. 企業がエンジニアを雇用する 企業がエンジ企業がエンジニアを雇用する ニアを雇用する 企業がエンジニアを雇用する AWS SDK for PHP Iac 実装

    ~ Network • routeTable ◦ リソース作成してVpcにattach ▪ routeTable自体と、Internetとのgatewayになる InternetGateway(名前と機能がそのまま)をattach ▪ 最後に、サーバインスタンスを設置するsubnetに igwとの通信を開ける
  16. 企業がエンジニアを雇用する 企業がエンジ企業がエンジニアを雇用する ニアを雇用する 企業がエンジニアを雇用する AWS SDK for PHP Iac 実装

    ~ Network • SecurtyGroup ◦ createSecurityGroupで定義 ◦ inboundとoutboundの通信許可を定義 ◦ 今回は検証用の為、制限なし
  17. 企業がエンジニアを雇用する 企業がエンジ企業がエンジニアを雇用する ニアを雇用する 企業がエンジニアを雇用する AWS SDK for PHP Iac 実装

    ~ Network • TergetGroup ◦ ここからElasticLoadBalancingV2Client ◦ createTargetGroupで定義 ◦ ApplicationLoadBalancerの通信に関する詳細情報を定義 ◦ PortやProtocol、HealthChecknのpath等を定義
  18. 企業がエンジニアを雇用する 企業がエンジ企業がエンジニアを雇用する ニアを雇用する 企業がエンジニアを雇用する AWS SDK for PHP Iac 実装

    ~ Network • ApplicationLoadBalancer ◦ トラフィックを事前に定義した%等で複数台のインスタンスに振り分けてくれる(負荷分 散) ◦ 前に作った二つのsubnetやSecurtyGroupをattach ◦ createLoadBalancerで定義
  19. 企業がエンジニアを雇用する 企業がエンジ企業がエンジニアを雇用する ニアを雇用する 企業がエンジニアを雇用する AWS SDK for PHP Iac 実装

    ~ Network • ListenerRule ◦ createListenerで定義 ◦ TergetGrouptとAlbを関連付けて実際の通信経路を決めるやつ
  20. 企業がエンジニアを雇用する 企業がエンジ企業がエンジニアを雇用する ニアを雇用する 企業がエンジニアを雇用する AWS SDK for PHP Iac 実装

    ~ IAM Role • この後作成するECSが、task起動時にECRのImageを取得する為のRoleを作成する • IamClientを使用する TaskExecuteRoleCreate.php
  21. 企業がエンジニアを雇用する 企業がエンジ企業がエンジニアを雇用する ニアを雇用する 企業がエンジニアを雇用する AWS SDK for PHP Iac 実装

    ~ IAM Role • createRoleとattachRolePolicyを使用 ◦ ECRのReadOnly専用Policyを取得し、$iamClient->createRolでTask実行Roleを作成 ◦ Policyは複数割り当てられるよう配列とforeachで定義 ◦ sts:AssumeRoleで一時的な許可を実装
  22. 企業がエンジニアを雇用する 企業がエンジ企業がエンジニアを雇用する ニアを雇用する 企業がエンジニアを雇用する AWS SDK for PHP Iac 実装

    ~ ECS • ECRにアプリとして公開するDocker imageをpush ◦ この作業してる時、MacM2にしたが故の--platform=linux/amd64問題に苦しめられた ◦ (小声)Neovimはいいぞ
  23. 企業がエンジニアを雇用する 企業がエンジ企業がエンジニアを雇用する ニアを雇用する 企業がエンジニアを雇用する AWS SDK for PHP Iac 実装

    ~ ECS • TaskDefinition定義 ◦ registerTaskDefinition ◦ imageで、ECR ImageをPull ◦ networkModeはawsvpcで定義 ▪ ipにすると別の設定が必要 ◦ 実行環境はFargateのECS Serviceを使う ◦ executionRoleArnで作成した実行ロール をattach ◦ memoryとcpuは最小 • TaskDefinitionをPHPで定義している、 珍しい例なのでは...
  24. 企業がエンジニアを雇用する 企業がエンジ企業がエンジニアを雇用する ニアを雇用する 企業がエンジニアを雇用する AWS SDK for PHP Iac 実装

    ~ ECS • ECS Service定義 ◦ createService ◦ 定義したtaskDefinitionをデプロイする コンテナに指定 ◦ networkの章で定義したSubnet, SecurtyGroup を指定 ◦ 実行環境にはFargeteを指定 ◦ desiredCountで起動task数を指定