Github actions - 传递秘密变量来渲染 ECS 任务定义操作

Ben*_*67b 4 amazon-web-services amazon-ecs github-actions

为了将新任务部署到 ECS,我使用amazon-ecs-render-task-definition GitHub 操作。此操作接收 task-definition.json 作为参数。这个 JSON 包含我不想推送的秘密,有没有办法向这个 JSON 注入一些参数?也许来自 aws Secret Manager?

例如 -任务定义.json

{
 "containerDefinitions": [
  {
   "name": "wordpress",
   "links": [
     "mysql"
   ],
  "image": "wordpress",
  "essential": true,
  "portMappings": [
    {
      "containerPort": 80,
      "hostPort": 80
    }
  ],
  "memory": 500,
  "cpu": 10
},
{
  "environment": [
    {
      "name": "MYSQL_ROOT_PASSWORD",
      "value": ****"password"**** // ITS A SECRET!
    }
  ],
  "name": "mysql",
  "image": "mysql",
  "cpu": 10,
  "memory": 500,
  "essential": true
}], 
 "family": "hello_world" }
Run Code Online (Sandbox Code Playgroud)

Ben*_*67b 5

显然有一个使用 aws-scrent-manager 机密的内置解决方案:

"secrets": [
    {
      "name": "DATABASE_PASSWORD",
      "valueFrom": "arn:aws:ssm:us-east-1:awsExampleAccountID:parameter/awsExampleParameter"
    }
  ]
Run Code Online (Sandbox Code Playgroud)

https://aws.amazon.com/premiumsupport/knowledge-center/ecs-data-security-container-task/


Aid*_*wen 5

另一个解决方案是使用sed插入你的秘密

所以你的工作流程变得像 -

jobs:
  build:
    runs-on: ubuntu-latest
    steps:
      - uses: actions/checkout@v2
      - name: Add secrets to Task Definition
        run: |
          sed -i "s/<jwt_secret>/$JWT_SECRET/g" task.json 
          sed -i "s/<mongo_password>/$MONGO_PASSWORD/g" task.json 
        env:
          JWT_SECRET: ${{secrets.JWT_SECRET}}
          MONGO_PASSWORD: ${{secrets.MONGO_PASSWORD}}
Run Code Online (Sandbox Code Playgroud)

然后编辑 task.json 以包含 sed 将用于替换的占位符

{
  "ipcMode": null,
  "executionRoleArn": null,
  "containerDefinitions": [
    {
      ...
      "environment": [
        {
          "name": "JWT_SECRET",
          "value": "<jwt_secret>"
        },
        {
          "name": "MONGO_PASSWORD",
          "value": "<mongo_password>"
        },
      ]
      ...
   }
  ]
}
Run Code Online (Sandbox Code Playgroud)

  • 嗯,在运行部分下的第一行,我得到 'sed: -e expression #1, char 64:unknown option to 's'。知道为什么吗?格式完全一样 (2认同)