AdSense

網頁

2023/9/25

AWS 在EC2中以Docker執行ECR image應用程式

在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

沒有留言:

AdSense