Open4

ecspressoでVPC Latticeサポートするメモ

fujiwarafujiwara

https://aws.amazon.com/jp/blogs/aws/streamline-container-application-networking-with-native-amazon-ecs-support-in-amazon-vpc-lattice/

aws-sdk-go-v2/service/ecs v1.50.0 で VPC Lattice のサポートが追加されたのでecspressoで対応するためのメモ

blogの通りマネコンからECSサービスでVPC Latticeを関連付けてみる

  • task definition で portMappings が最低一個定義されている必要がある
    • portMapping には Name が必須
      • ないとマネコンでECS ServiceにVPC Lattice target groupを追加するときに "port name" が選択できなくて作れない
      • でも作成された VPC Lattice target group には port name はない
      • ECSサービスの vpcLatticeConfigurations に portName があってそこと一致させる必要がある(マネコンでは隠蔽されている)
      • Infrastructure role には ポリシー AmazonECSInfrastructureRolePolicyForVpcLattice をattachする必要がある(はず)

ECSマネコンから作成された target group をCLIでみるとこう

$ aws vpc-lattice list-target-groups
{
    "items": [
        {
            "arn": "arn:aws:vpc-lattice:ap-northeast-1:123456789012:targetgroup/tg-009147df264a0bacb",
            "createdAt": "2024-11-19T02:24:47.736000+00:00",
            "id": "tg-009147df264a0bacb",
            "ipAddressType": "IPV4",
            "lastUpdatedAt": "2024-11-19T02:24:47.736000+00:00",
            "name": "nginx",
            "port": 80,
            "protocol": "HTTP",
            "serviceArns": [],
            "status": "ACTIVE",
            "type": "IP",
            "vpcIdentifier": "vpc-0bd402791d5028205"
        }
    ]
}
fujiwarafujiwara

マネコンから

  • VPC Lattice サービスを作成
    • name: ecspresso-test
    • 認証なし、リスナー http-80 から default action で作成したtarget groupに転送
    • サービスネットワークのと関連付けはここではskip
  • VPC Lattice サービスネットワークを作成
    • name: ecspresso-test
    • サービスの関連付けで作成したサービスを指定
    • VPCの関連付けで元々ECSがいるVPCを指定
    • セキュリティグループは default (ECSサービスにも付いているもの) を指定
fujiwarafujiwara

VPC内CloudShellから、VPC Lattice サービスのドメイン名を指定して curl でリクエストしたらECSサービスのnginxに繋がった

$ curl -v http://ecspresso-test-0607b74e99a732e9f.7d67968.vpc-lattice-svcs.ap-northeast-1.on.aws
* Host ecspresso-test-0607b74e99a732e9f.7d67968.vpc-lattice-svcs.ap-northeast-1.on.aws:80 was resolved.
* IPv6: fd00:ec2:80::a9fe:ab01
* IPv4: 169.254.171.1
*   Trying 169.254.171.1:80...
* Connected to ecspresso-test-0607b74e99a732e9f.7d67968.vpc-lattice-svcs.ap-northeast-1.on.aws (169.254.171.1) port 80
> GET / HTTP/1.1
> Host: ecspresso-test-0607b74e99a732e9f.7d67968.vpc-lattice-svcs.ap-northeast-1.on.aws
> User-Agent: curl/8.5.0
> Accept: */*
> 
< HTTP/1.1 200 OK
< server: nginx/1.27.2
< date: Tue, 19 Nov 2024 02:40:54 GMT
< content-type: text/html
< content-length: 615

nginxのログ

2024-11-19T11:42:16.778+09:00   nginx   169.254.171.195 - - [19/Nov/2024:02:42:16 +0000] "GET / HTTP/1.1" 200 615 "-" "curl/8.5.0" "10.3.3.107"
fujiwarafujiwara

VPC LatticeはECSサービスに関連づけられるが、SDK的には Service にはなく、Deployment のほうにある

deployment単位で設定される VolumeConfiguration などと同じ扱いなので、ecspresso.Service に vpcLatticeConfigurations []types.VpcLatticeConfiguration を定義して create / update service 時に Input struct に詰めてやる必要がある。describe 時には Deployment から引っ張って埋める commit