在AWS EC2執行個體中以Docker執行ECR private repository的應用程式image。
事前要求
參考「AWS EC2 建立instance」建立EC2 instancce。範例instance的Public IP為18.181.95.194
。Instance的Security Group的inbound rules必須可接收來自任意HTTP和SSH IPv4的請求。
參考「AWS 建立Go ECR image」建立ECR image。
建立IAM role
這邊要建立讓EC2 instance可存取ECR image的IAM role。
在AWS IAM左側選單點選[Roles]
在[Role]頁面點選右上角的[Create role]。
在[Select trusted entity]頁面,
[Trusted entity type] - 選擇[AWS service],
[Use case]區塊的[Service or use case] - 輸入"EC2",然後在下方出現的[Use case]選擇[EC2]。
點選右下角的[Next]。
在[Add permissions]頁面,
[Permissions]搜尋欄位 - 輸入"AWSAppRunnerServicePolicyForECRAccess",
勾選[AWSAppRunnerServicePolicyForECRAccess]。
點選右下角的[Next]。
在[Name, review, and create]頁面,
[Role name]欄位 - 輸入role的名稱。
其餘維持預設。
點選右下角的[Create role]。
設定EC2 IAM role
前往EC2 instance,點選右上角[Action]選單,選擇[Security],選擇[Modify IAM role]。
在[Modify IAM role]頁面,
[IAM role]欄位 - 選擇剛建立的IAM role。
點選右下角的[Update IAM role]。
EC2安裝Docker
參考「AWS EC2 Mac使用SSH連線到EC2 instance」從本機SSH到EC2 instance。
參考「AWS EC2 Linux AMI(Amazon Linux 2023) 安裝Docker」在EC2安裝Docker
下載ECR image
例如ECR image所在的private repository的URI為123456789012.dkr.ecr.ap-northeast-1.amazonaws.com/ecr-1
。
在EC2 instance的命令列輸入aws ecr get-login-password --region ap-northeast-1 | docker login --username AWS --password-stdin 123456789012.dkr.ecr.ap-northeast-1.amazonaws.com
使Docker登入ECR repository。
[ec2-user@ip-172-31-36-18 ~]$ aws ecr get-login-password --region ap-northeast-1 | docker login --username AWS --password-stdin 123456789012.dkr.ecr.ap-northeast-1.amazonaws.com
WARNING! Your password will be stored unencrypted in /home/ec2-user/.docker/config.json.
Configure a credential helper to remove this warning. See
https://docs.docker.com/engine/reference/commandline/login/#credentials-store
Login Succeeded
輸入docker pull 123456789012.dkr.ecr.ap-northeast-1.amazonaws.com/ecr-1:latest
從ECR repository下載tag為latest
的ECR image。
[ec2-user@ip-172-31-36-18 ~]$ docker pull 123456789012.dkr.ecr.ap-northeast-1.amazonaws.com/ecr-1:latest
latest: Pulling from ecr-1
7264a8db6415: Pull complete
c4d48a809fc2: Pull complete
e2e938b61487: Pull complete
7896c2688058: Pull complete
43987829a3d7: Pull complete
3d7f07fc21d7: Pull complete
b7b6636b1d28: Pull complete
756a76ef6519: Pull complete
Digest: sha256:2e4e39a03be72ea67a317a6e7159e33431069852e57300e55a7b77707a0ec9b5
Status: Downloaded newer image for 123456789012.dkr.ecr.ap-northeast-1.amazonaws.com/ecr-1:latest
123456789012.dkr.ecr.ap-northeast-1.amazonaws.com/ecr-1:latest
運行ECR image
輸入docker run --name go-demo -d -it -p 8080:8080 123456789012.dkr.ecr.ap-northeast-1.amazonaws.com/ecr-1:latest
來運行ECR image為Docker container。
[ec2-user@ip-172-31-36-18 ~]$ docker run --name go-demo -d -it -p 8080:8080 478900741429.dkr.ecr.ap-northeast-1.amazonaws.com/ecr-1:latest
77a98bcb51774aef72cf18c4329bc39059ced443eb0d897542c307d4eae0264e
測試
在本機以curl輸入curl -X GET "http://18.181.95.194:8080/hello?name=john"
得到的回應如下。
~% curl -X GET "http://18.181.95.194:8080/hello?name=john"
hello, john
沒有留言:
張貼留言